2020-06-11 21:23:53

by Cabiddu, Giovanni

[permalink] [raw]
Subject: [PATCH 0/3] crypto: qat - update admin interface

Refactor and update the admin interface in the qat driver.

These changes are on top of "crypto: qat - remove packed attribute
in etr structs" (https://patchwork.kernel.org/patch/11586063/)

Wojciech Ziemba (3):
crypto: qat - update fw init admin msg
crypto: qat - send admin messages to set of AEs
crypto: qat - update timeout logic in put admin msg

drivers/crypto/qat/qat_common/adf_admin.c | 96 ++++++++++++-------
.../qat/qat_common/icp_qat_fw_init_admin.h | 75 ++++++++++-----
2 files changed, 114 insertions(+), 57 deletions(-)

--
2.26.2


2020-06-11 21:24:15

by Cabiddu, Giovanni

[permalink] [raw]
Subject: [PATCH 2/3] crypto: qat - send admin messages to set of AEs

From: Wojciech Ziemba <[email protected]>

Update the logic that sends admin messages to be able to target a subset
of Acceleration Engines (AEs) in the device.
In future not all admin messages need to be sent to all the AEs.

Signed-off-by: Wojciech Ziemba <[email protected]>
Signed-off-by: Giovanni Cabiddu <[email protected]>
---
drivers/crypto/qat/qat_common/adf_admin.c | 64 ++++++++++++++++-------
1 file changed, 46 insertions(+), 18 deletions(-)

diff --git a/drivers/crypto/qat/qat_common/adf_admin.c b/drivers/crypto/qat/qat_common/adf_admin.c
index a51ba0039cff..aa610f80296d 100644
--- a/drivers/crypto/qat/qat_common/adf_admin.c
+++ b/drivers/crypto/qat/qat_common/adf_admin.c
@@ -16,6 +16,7 @@
#define ADF_DH895XCC_MAILBOX_BASE_OFFSET 0x20970
#define ADF_DH895XCC_MAILBOX_STRIDE 0x1000
#define ADF_ADMINMSG_LEN 32
+#define ADF_CONST_TABLE_SIZE 1024

static const u8 const_tab[1024] __aligned(1024) = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -114,6 +115,7 @@ static int adf_put_admin_msg_sync(struct adf_accel_dev *accel_dev, u32 ae,
int offset = ae * ADF_ADMINMSG_LEN * 2;
void __iomem *mailbox = admin->mailbox_addr;
int mb_offset = ae * ADF_DH895XCC_MAILBOX_STRIDE;
+ struct icp_qat_fw_init_admin_req *request = in;
int times, received;

mutex_lock(&admin->lock);
@@ -138,33 +140,57 @@ static int adf_put_admin_msg_sync(struct adf_accel_dev *accel_dev, u32 ae,
ADF_ADMINMSG_LEN, ADF_ADMINMSG_LEN);
else
dev_err(&GET_DEV(accel_dev),
- "Failed to send admin msg to accelerator\n");
+ "Failed to send admin msg %d to accelerator %d\n",
+ request->cmd_id, ae);

mutex_unlock(&admin->lock);
return received ? 0 : -EFAULT;
}

-static int adf_send_admin_cmd(struct adf_accel_dev *accel_dev, int cmd)
+static int adf_send_admin(struct adf_accel_dev *accel_dev,
+ struct icp_qat_fw_init_admin_req *req,
+ struct icp_qat_fw_init_admin_resp *resp,
+ const unsigned long ae_mask)
{
+ u32 ae;
+
+ for_each_set_bit(ae, &ae_mask, ICP_QAT_HW_AE_DELIMITER)
+ if (adf_put_admin_msg_sync(accel_dev, ae, req, resp) ||
+ resp->status)
+ return -EFAULT;
+
+ return 0;
+}
+
+static int adf_init_me(struct adf_accel_dev *accel_dev)
+{
+ struct icp_qat_fw_init_admin_req req;
+ struct icp_qat_fw_init_admin_resp resp;
struct adf_hw_device_data *hw_device = accel_dev->hw_device;
+ u32 ae_mask = hw_device->ae_mask;
+
+ memset(&req, 0, sizeof(req));
+ memset(&resp, 0, sizeof(resp));
+ req.cmd_id = ICP_QAT_FW_INIT_ME;
+
+ return adf_send_admin(accel_dev, &req, &resp, ae_mask);
+}
+
+static int adf_set_fw_constants(struct adf_accel_dev *accel_dev)
+{
struct icp_qat_fw_init_admin_req req;
struct icp_qat_fw_init_admin_resp resp;
- int i;
+ struct adf_hw_device_data *hw_device = accel_dev->hw_device;
+ u32 ae_mask = hw_device->ae_mask;

- memset(&req, 0, sizeof(struct icp_qat_fw_init_admin_req));
- req.cmd_id = cmd;
+ memset(&req, 0, sizeof(req));
+ memset(&resp, 0, sizeof(resp));
+ req.cmd_id = ICP_QAT_FW_CONSTANTS_CFG;

- if (cmd == ICP_QAT_FW_CONSTANTS_CFG) {
- req.init_cfg_sz = 1024;
- req.init_cfg_ptr = accel_dev->admin->const_tbl_addr;
- }
- for (i = 0; i < hw_device->get_num_aes(hw_device); i++) {
- memset(&resp, 0, sizeof(struct icp_qat_fw_init_admin_resp));
- if (adf_put_admin_msg_sync(accel_dev, i, &req, &resp) ||
- resp.status)
- return -EFAULT;
- }
- return 0;
+ req.init_cfg_sz = ADF_CONST_TABLE_SIZE;
+ req.init_cfg_ptr = accel_dev->admin->const_tbl_addr;
+
+ return adf_send_admin(accel_dev, &req, &resp, ae_mask);
}

/**
@@ -177,11 +203,13 @@ static int adf_send_admin_cmd(struct adf_accel_dev *accel_dev, int cmd)
*/
int adf_send_admin_init(struct adf_accel_dev *accel_dev)
{
- int ret = adf_send_admin_cmd(accel_dev, ICP_QAT_FW_INIT_ME);
+ int ret;

+ ret = adf_init_me(accel_dev);
if (ret)
return ret;
- return adf_send_admin_cmd(accel_dev, ICP_QAT_FW_CONSTANTS_CFG);
+
+ return adf_set_fw_constants(accel_dev);
}
EXPORT_SYMBOL_GPL(adf_send_admin_init);

--
2.26.2

2020-06-18 07:59:59

by Herbert Xu

[permalink] [raw]
Subject: Re: [PATCH 0/3] crypto: qat - update admin interface

On Thu, Jun 11, 2020 at 10:14:46PM +0100, Giovanni Cabiddu wrote:
> Refactor and update the admin interface in the qat driver.
>
> These changes are on top of "crypto: qat - remove packed attribute
> in etr structs" (https://patchwork.kernel.org/patch/11586063/)
>
> Wojciech Ziemba (3):
> crypto: qat - update fw init admin msg
> crypto: qat - send admin messages to set of AEs
> crypto: qat - update timeout logic in put admin msg
>
> drivers/crypto/qat/qat_common/adf_admin.c | 96 ++++++++++++-------
> .../qat/qat_common/icp_qat_fw_init_admin.h | 75 ++++++++++-----
> 2 files changed, 114 insertions(+), 57 deletions(-)

All applied. Thanks.
--
Email: Herbert Xu <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt