summaryrefslogtreecommitdiff
path: root/drivers/crypto/qat/qat_common/adf_init.c
diff options
context:
space:
mode:
authorWojciech Ziemba <wojciech.ziemba@intel.com>2022-02-10 13:38:27 +0000
committerHerbert Xu <herbert@gondor.apana.org.au>2022-02-18 16:21:09 +1100
commite5745f34113b758b45d134dec04a7df94dc67131 (patch)
treec803611502a5f435a0aa2cd913715a9899b94b46 /drivers/crypto/qat/qat_common/adf_init.c
parentf734409c77d7e422bc759c53ad234e6af9b56938 (diff)
downloadlinux-e5745f34113b758b45d134dec04a7df94dc67131.tar.gz
linux-e5745f34113b758b45d134dec04a7df94dc67131.tar.bz2
linux-e5745f34113b758b45d134dec04a7df94dc67131.zip
crypto: qat - enable power management for QAT GEN4
Add support for HW QAT Power Management (PM) feature. This feature is enabled at init time (1) by sending an admin message to the firmware, targeting the admin AE, that sets the idle time before the device changes state and (2) by unmasking the PM source of interrupt in ERRMSK2. The interrupt handler is extended to handle a PM interrupt which is triggered by HW when a PM transition occurs. In this case, the driver responds acknowledging the transaction using the HOST_MSG mailbox. Signed-off-by: Wojciech Ziemba <wojciech.ziemba@intel.com> Co-developed-by: Marcinx Malinowski <marcinx.malinowski@intel.com> Signed-off-by: Marcinx Malinowski <marcinx.malinowski@intel.com> Reviewed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com> Reviewed-by: Marco Chiappero <marco.chiappero@intel.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers/crypto/qat/qat_common/adf_init.c')
-rw-r--r--drivers/crypto/qat/qat_common/adf_init.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/crypto/qat/qat_common/adf_init.c b/drivers/crypto/qat/qat_common/adf_init.c
index 2edc63c6b6ca..c2c718f1b489 100644
--- a/drivers/crypto/qat/qat_common/adf_init.c
+++ b/drivers/crypto/qat/qat_common/adf_init.c
@@ -181,6 +181,12 @@ int adf_dev_start(struct adf_accel_dev *accel_dev)
if (hw_data->set_ssm_wdtimer)
hw_data->set_ssm_wdtimer(accel_dev);
+ /* Enable Power Management */
+ if (hw_data->enable_pm && hw_data->enable_pm(accel_dev)) {
+ dev_err(&GET_DEV(accel_dev), "Failed to configure Power Management\n");
+ return -EFAULT;
+ }
+
list_for_each(list_itr, &service_table) {
service = list_entry(list_itr, struct service_hndl, list);
if (service->event_hld(accel_dev, ADF_EVENT_START)) {