crypto: qat - refactor AE start

Change the API and the behaviour of the qat_hal_start() function.
With this change, the function starts under the hood all acceleration
engines (AEs) and there is no longer need to call it for each engine.

Signed-off-by: Jack Xu <jack.xu@intel.com>
Co-developed-by: Wojciech Ziemba <wojciech.ziemba@intel.com>
Signed-off-by: Wojciech Ziemba <wojciech.ziemba@intel.com>
Reviewed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
Jack Xu 2020-11-06 19:27:49 +08:00 committed by Herbert Xu
parent 82b3230658
commit 10fb050cae
3 changed files with 18 additions and 18 deletions

View File

@ -74,17 +74,12 @@ int adf_ae_start(struct adf_accel_dev *accel_dev)
{ {
struct adf_fw_loader_data *loader_data = accel_dev->fw_loader; struct adf_fw_loader_data *loader_data = accel_dev->fw_loader;
struct adf_hw_device_data *hw_data = accel_dev->hw_device; struct adf_hw_device_data *hw_data = accel_dev->hw_device;
u32 ae_ctr, ae, max_aes = GET_MAX_ACCELENGINES(accel_dev); u32 ae_ctr;
if (!hw_data->fw_name) if (!hw_data->fw_name)
return 0; return 0;
for (ae = 0, ae_ctr = 0; ae < max_aes; ae++) { ae_ctr = qat_hal_start(loader_data->fw_loader);
if (hw_data->ae_mask & (1 << ae)) {
qat_hal_start(loader_data->fw_loader, ae, 0xFF);
ae_ctr++;
}
}
dev_info(&GET_DEV(accel_dev), dev_info(&GET_DEV(accel_dev),
"qat_dev%d started %d acceleration engines\n", "qat_dev%d started %d acceleration engines\n",
accel_dev->accel_id, ae_ctr); accel_dev->accel_id, ae_ctr);

View File

@ -133,8 +133,7 @@ void adf_vf_isr_resource_free(struct adf_accel_dev *accel_dev);
int qat_hal_init(struct adf_accel_dev *accel_dev); int qat_hal_init(struct adf_accel_dev *accel_dev);
void qat_hal_deinit(struct icp_qat_fw_loader_handle *handle); void qat_hal_deinit(struct icp_qat_fw_loader_handle *handle);
void qat_hal_start(struct icp_qat_fw_loader_handle *handle, unsigned char ae, int qat_hal_start(struct icp_qat_fw_loader_handle *handle);
unsigned int ctx_mask);
void qat_hal_stop(struct icp_qat_fw_loader_handle *handle, unsigned char ae, void qat_hal_stop(struct icp_qat_fw_loader_handle *handle, unsigned char ae,
unsigned int ctx_mask); unsigned int ctx_mask);
void qat_hal_reset(struct icp_qat_fw_loader_handle *handle); void qat_hal_reset(struct icp_qat_fw_loader_handle *handle);

View File

@ -742,26 +742,32 @@ void qat_hal_deinit(struct icp_qat_fw_loader_handle *handle)
kfree(handle); kfree(handle);
} }
void qat_hal_start(struct icp_qat_fw_loader_handle *handle, unsigned char ae, int qat_hal_start(struct icp_qat_fw_loader_handle *handle)
unsigned int ctx_mask)
{ {
unsigned long ae_mask = handle->hal_handle->ae_mask;
unsigned int fcu_sts;
unsigned char ae;
u32 ae_ctr = 0;
int retry = 0; int retry = 0;
unsigned int fcu_sts = 0;
if (handle->fw_auth) { if (handle->fw_auth) {
ae_ctr = hweight32(ae_mask);
SET_CAP_CSR(handle, FCU_CONTROL, FCU_CTRL_CMD_START); SET_CAP_CSR(handle, FCU_CONTROL, FCU_CTRL_CMD_START);
do { do {
msleep(FW_AUTH_WAIT_PERIOD); msleep(FW_AUTH_WAIT_PERIOD);
fcu_sts = GET_CAP_CSR(handle, FCU_STATUS); fcu_sts = GET_CAP_CSR(handle, FCU_STATUS);
if (((fcu_sts >> FCU_STS_DONE_POS) & 0x1)) if (((fcu_sts >> FCU_STS_DONE_POS) & 0x1))
return; return ae_ctr;
} while (retry++ < FW_AUTH_MAX_RETRY); } while (retry++ < FW_AUTH_MAX_RETRY);
pr_err("QAT: start error (AE 0x%x FCU_STS = 0x%x)\n", ae, pr_err("QAT: start error (FCU_STS = 0x%x)\n", fcu_sts);
fcu_sts); return 0;
} else { } else {
qat_hal_put_wakeup_event(handle, ae, (~ctx_mask) & for_each_set_bit(ae, &ae_mask, handle->hal_handle->ae_max_num) {
ICP_QAT_UCLO_AE_ALL_CTX, 0x10000); qat_hal_put_wakeup_event(handle, ae, 0, 0x10000);
qat_hal_enable_ctx(handle, ae, ctx_mask); qat_hal_enable_ctx(handle, ae, ICP_QAT_UCLO_AE_ALL_CTX);
ae_ctr++;
}
return ae_ctr;
} }
} }