|
Torsten Duwe |
93ce56 |
From 0bba03ce9739be004d7e7060a1a127418fd0055c Mon Sep 17 00:00:00 2001
|
|
Torsten Duwe |
93ce56 |
From: Marco Chiappero <marco.chiappero@intel.com>
|
|
Torsten Duwe |
93ce56 |
Date: Thu, 16 Dec 2021 09:13:32 +0000
|
|
Torsten Duwe |
93ce56 |
Subject: [PATCH] crypto: qat - add PFVF support to enable the reset of ring
|
|
Torsten Duwe |
93ce56 |
pairs
|
|
Torsten Duwe |
93ce56 |
Git-commit: 0bba03ce9739be004d7e7060a1a127418fd0055c
|
|
Torsten Duwe |
93ce56 |
Patch-mainline: v5.17-rc1
|
|
Torsten Duwe |
93ce56 |
References: jsc#PED-1073
|
|
Torsten Duwe |
93ce56 |
|
|
Torsten Duwe |
93ce56 |
Extend support for resetting ring pairs on the device to VFs. Such
|
|
Torsten Duwe |
93ce56 |
reset happens by sending a request to the PF over the PFVF protocol.
|
|
Torsten Duwe |
93ce56 |
|
|
Torsten Duwe |
93ce56 |
This patch defines two new PFVF messages and adds the PFVF logic for
|
|
Torsten Duwe |
93ce56 |
handling the request on PF, triggering the reset, and VFs, accepting the
|
|
Torsten Duwe |
93ce56 |
'success'/'error' response.
|
|
Torsten Duwe |
93ce56 |
|
|
Torsten Duwe |
93ce56 |
This feature is GEN4 specific.
|
|
Torsten Duwe |
93ce56 |
|
|
Torsten Duwe |
93ce56 |
This patch is based on earlier work done by Zelin Deng.
|
|
Torsten Duwe |
93ce56 |
|
|
Torsten Duwe |
93ce56 |
Signed-off-by: Marco Chiappero <marco.chiappero@intel.com>
|
|
Torsten Duwe |
93ce56 |
Reviewed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
|
|
Torsten Duwe |
93ce56 |
Reviewed-by: Fiona Trahe <fiona.trahe@intel.com>
|
|
Torsten Duwe |
93ce56 |
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
|
Torsten Duwe |
93ce56 |
Signed-off-by: Torsten Duwe <duwe@suse.de>
|
|
Torsten Duwe |
93ce56 |
|
|
Torsten Duwe |
93ce56 |
---
|
|
Torsten Duwe |
93ce56 |
drivers/crypto/qat/qat_common/adf_pfvf_msg.h | 14 +++++
|
|
Torsten Duwe |
93ce56 |
.../crypto/qat/qat_common/adf_pfvf_pf_proto.c | 52 +++++++++++++++++++
|
|
Torsten Duwe |
93ce56 |
.../crypto/qat/qat_common/adf_pfvf_vf_proto.c | 1 +
|
|
Torsten Duwe |
93ce56 |
3 files changed, 67 insertions(+)
|
|
Torsten Duwe |
93ce56 |
|
|
Torsten Duwe |
93ce56 |
diff --git a/drivers/crypto/qat/qat_common/adf_pfvf_msg.h b/drivers/crypto/qat/qat_common/adf_pfvf_msg.h
|
|
Torsten Duwe |
93ce56 |
index f00e9e2c585b4..86b0e7baa4d3e 100644
|
|
Torsten Duwe |
93ce56 |
--- a/drivers/crypto/qat/qat_common/adf_pfvf_msg.h
|
|
Torsten Duwe |
93ce56 |
+++ b/drivers/crypto/qat/qat_common/adf_pfvf_msg.h
|
|
Torsten Duwe |
93ce56 |
@@ -99,6 +99,8 @@ enum pf2vf_msgtype {
|
|
Torsten Duwe |
93ce56 |
ADF_PF2VF_MSGTYPE_RESTARTING = 0x01,
|
|
Torsten Duwe |
93ce56 |
ADF_PF2VF_MSGTYPE_VERSION_RESP = 0x02,
|
|
Torsten Duwe |
93ce56 |
ADF_PF2VF_MSGTYPE_BLKMSG_RESP = 0x03,
|
|
Torsten Duwe |
93ce56 |
+/* Values from 0x10 are Gen4 specific, message type is only 4 bits in Gen2 devices. */
|
|
Torsten Duwe |
93ce56 |
+ ADF_PF2VF_MSGTYPE_RP_RESET_RESP = 0x10,
|
|
Torsten Duwe |
93ce56 |
};
|
|
Torsten Duwe |
93ce56 |
|
|
Torsten Duwe |
93ce56 |
/* VF->PF messages */
|
|
Torsten Duwe |
93ce56 |
@@ -110,6 +112,8 @@ enum vf2pf_msgtype {
|
|
Torsten Duwe |
93ce56 |
ADF_VF2PF_MSGTYPE_LARGE_BLOCK_REQ = 0x07,
|
|
Torsten Duwe |
93ce56 |
ADF_VF2PF_MSGTYPE_MEDIUM_BLOCK_REQ = 0x08,
|
|
Torsten Duwe |
93ce56 |
ADF_VF2PF_MSGTYPE_SMALL_BLOCK_REQ = 0x09,
|
|
Torsten Duwe |
93ce56 |
+/* Values from 0x10 are Gen4 specific, message type is only 4 bits in Gen2 devices. */
|
|
Torsten Duwe |
93ce56 |
+ ADF_VF2PF_MSGTYPE_RP_RESET = 0x10,
|
|
Torsten Duwe |
93ce56 |
};
|
|
Torsten Duwe |
93ce56 |
|
|
Torsten Duwe |
93ce56 |
/* VF/PF compatibility version. */
|
|
Torsten Duwe |
93ce56 |
@@ -134,6 +138,16 @@ enum pf2vf_compat_response {
|
|
Torsten Duwe |
93ce56 |
ADF_PF2VF_VF_COMPAT_UNKNOWN = 0x03,
|
|
Torsten Duwe |
93ce56 |
};
|
|
Torsten Duwe |
93ce56 |
|
|
Torsten Duwe |
93ce56 |
+enum ring_reset_result {
|
|
Torsten Duwe |
93ce56 |
+ RPRESET_SUCCESS = 0x01,
|
|
Torsten Duwe |
93ce56 |
+ RPRESET_NOT_SUPPORTED = 0x02,
|
|
Torsten Duwe |
93ce56 |
+ RPRESET_INVAL_BANK = 0x03,
|
|
Torsten Duwe |
93ce56 |
+ RPRESET_TIMEOUT = 0x04,
|
|
Torsten Duwe |
93ce56 |
+};
|
|
Torsten Duwe |
93ce56 |
+
|
|
Torsten Duwe |
93ce56 |
+#define ADF_VF2PF_RNG_RESET_RP_MASK GENMASK(1, 0)
|
|
Torsten Duwe |
93ce56 |
+#define ADF_VF2PF_RNG_RESET_RSVD_MASK GENMASK(25, 2)
|
|
Torsten Duwe |
93ce56 |
+
|
|
Torsten Duwe |
93ce56 |
/* PF->VF Block Responses */
|
|
Torsten Duwe |
93ce56 |
#define ADF_PF2VF_BLKMSG_RESP_TYPE_MASK GENMASK(1, 0)
|
|
Torsten Duwe |
93ce56 |
#define ADF_PF2VF_BLKMSG_RESP_DATA_MASK GENMASK(9, 2)
|
|
Torsten Duwe |
93ce56 |
diff --git a/drivers/crypto/qat/qat_common/adf_pfvf_pf_proto.c b/drivers/crypto/qat/qat_common/adf_pfvf_pf_proto.c
|
|
Torsten Duwe |
93ce56 |
index 84230aac67e69..588352de1ef0e 100644
|
|
Torsten Duwe |
93ce56 |
--- a/drivers/crypto/qat/qat_common/adf_pfvf_pf_proto.c
|
|
Torsten Duwe |
93ce56 |
+++ b/drivers/crypto/qat/qat_common/adf_pfvf_pf_proto.c
|
|
Torsten Duwe |
93ce56 |
@@ -178,6 +178,55 @@ static struct pfvf_message handle_blkmsg_req(struct adf_accel_vf_info *vf_info,
|
|
Torsten Duwe |
93ce56 |
return resp;
|
|
Torsten Duwe |
93ce56 |
}
|
|
Torsten Duwe |
93ce56 |
|
|
Torsten Duwe |
93ce56 |
+static struct pfvf_message handle_rp_reset_req(struct adf_accel_dev *accel_dev, u8 vf_nr,
|
|
Torsten Duwe |
93ce56 |
+ struct pfvf_message req)
|
|
Torsten Duwe |
93ce56 |
+{
|
|
Torsten Duwe |
93ce56 |
+ struct adf_hw_device_data *hw_data = accel_dev->hw_device;
|
|
Torsten Duwe |
93ce56 |
+ struct pfvf_message resp = {
|
|
Torsten Duwe |
93ce56 |
+ .type = ADF_PF2VF_MSGTYPE_RP_RESET_RESP,
|
|
Torsten Duwe |
93ce56 |
+ .data = RPRESET_SUCCESS
|
|
Torsten Duwe |
93ce56 |
+ };
|
|
Torsten Duwe |
93ce56 |
+ u32 bank_number;
|
|
Torsten Duwe |
93ce56 |
+ u32 rsvd_field;
|
|
Torsten Duwe |
93ce56 |
+
|
|
Torsten Duwe |
93ce56 |
+ bank_number = FIELD_GET(ADF_VF2PF_RNG_RESET_RP_MASK, req.data);
|
|
Torsten Duwe |
93ce56 |
+ rsvd_field = FIELD_GET(ADF_VF2PF_RNG_RESET_RSVD_MASK, req.data);
|
|
Torsten Duwe |
93ce56 |
+
|
|
Torsten Duwe |
93ce56 |
+ dev_dbg(&GET_DEV(accel_dev),
|
|
Torsten Duwe |
93ce56 |
+ "Ring Pair Reset Message received from VF%d for bank 0x%x\n",
|
|
Torsten Duwe |
93ce56 |
+ vf_nr, bank_number);
|
|
Torsten Duwe |
93ce56 |
+
|
|
Torsten Duwe |
93ce56 |
+ if (!hw_data->ring_pair_reset || rsvd_field) {
|
|
Torsten Duwe |
93ce56 |
+ dev_dbg(&GET_DEV(accel_dev),
|
|
Torsten Duwe |
93ce56 |
+ "Ring Pair Reset for VF%d is not supported\n", vf_nr);
|
|
Torsten Duwe |
93ce56 |
+ resp.data = RPRESET_NOT_SUPPORTED;
|
|
Torsten Duwe |
93ce56 |
+ goto out;
|
|
Torsten Duwe |
93ce56 |
+ }
|
|
Torsten Duwe |
93ce56 |
+
|
|
Torsten Duwe |
93ce56 |
+ if (bank_number >= hw_data->num_banks_per_vf) {
|
|
Torsten Duwe |
93ce56 |
+ dev_err(&GET_DEV(accel_dev),
|
|
Torsten Duwe |
93ce56 |
+ "Invalid bank number (0x%x) from VF%d for Ring Reset\n",
|
|
Torsten Duwe |
93ce56 |
+ bank_number, vf_nr);
|
|
Torsten Duwe |
93ce56 |
+ resp.data = RPRESET_INVAL_BANK;
|
|
Torsten Duwe |
93ce56 |
+ goto out;
|
|
Torsten Duwe |
93ce56 |
+ }
|
|
Torsten Duwe |
93ce56 |
+
|
|
Torsten Duwe |
93ce56 |
+ /* Convert the VF provided value to PF bank number */
|
|
Torsten Duwe |
93ce56 |
+ bank_number = vf_nr * hw_data->num_banks_per_vf + bank_number;
|
|
Torsten Duwe |
93ce56 |
+ if (hw_data->ring_pair_reset(accel_dev, bank_number)) {
|
|
Torsten Duwe |
93ce56 |
+ dev_dbg(&GET_DEV(accel_dev),
|
|
Torsten Duwe |
93ce56 |
+ "Ring pair reset for VF%d failure\n", vf_nr);
|
|
Torsten Duwe |
93ce56 |
+ resp.data = RPRESET_TIMEOUT;
|
|
Torsten Duwe |
93ce56 |
+ goto out;
|
|
Torsten Duwe |
93ce56 |
+ }
|
|
Torsten Duwe |
93ce56 |
+
|
|
Torsten Duwe |
93ce56 |
+ dev_dbg(&GET_DEV(accel_dev),
|
|
Torsten Duwe |
93ce56 |
+ "Ring pair reset for VF%d successfully\n", vf_nr);
|
|
Torsten Duwe |
93ce56 |
+
|
|
Torsten Duwe |
93ce56 |
+out:
|
|
Torsten Duwe |
93ce56 |
+ return resp;
|
|
Torsten Duwe |
93ce56 |
+}
|
|
Torsten Duwe |
93ce56 |
+
|
|
Torsten Duwe |
93ce56 |
static int adf_handle_vf2pf_msg(struct adf_accel_dev *accel_dev, u8 vf_nr,
|
|
Torsten Duwe |
93ce56 |
struct pfvf_message msg, struct pfvf_message *resp)
|
|
Torsten Duwe |
93ce56 |
{
|
|
Torsten Duwe |
93ce56 |
@@ -245,6 +294,9 @@ static int adf_handle_vf2pf_msg(struct adf_accel_dev *accel_dev, u8 vf_nr,
|
|
Torsten Duwe |
93ce56 |
case ADF_VF2PF_MSGTYPE_SMALL_BLOCK_REQ:
|
|
Torsten Duwe |
93ce56 |
*resp = handle_blkmsg_req(vf_info, msg);
|
|
Torsten Duwe |
93ce56 |
break;
|
|
Torsten Duwe |
93ce56 |
+ case ADF_VF2PF_MSGTYPE_RP_RESET:
|
|
Torsten Duwe |
93ce56 |
+ *resp = handle_rp_reset_req(accel_dev, vf_nr, msg);
|
|
Torsten Duwe |
93ce56 |
+ break;
|
|
Torsten Duwe |
93ce56 |
default:
|
|
Torsten Duwe |
93ce56 |
dev_dbg(&GET_DEV(accel_dev),
|
|
Torsten Duwe |
93ce56 |
"Unknown message from VF%d (type 0x%.4x, data: 0x%.4x)\n",
|
|
Torsten Duwe |
93ce56 |
diff --git a/drivers/crypto/qat/qat_common/adf_pfvf_vf_proto.c b/drivers/crypto/qat/qat_common/adf_pfvf_vf_proto.c
|
|
Torsten Duwe |
93ce56 |
index 0e4b8397cbe34..1015155b63749 100644
|
|
Torsten Duwe |
93ce56 |
--- a/drivers/crypto/qat/qat_common/adf_pfvf_vf_proto.c
|
|
Torsten Duwe |
93ce56 |
+++ b/drivers/crypto/qat/qat_common/adf_pfvf_vf_proto.c
|
|
Torsten Duwe |
93ce56 |
@@ -310,6 +310,7 @@ static bool adf_handle_pf2vf_msg(struct adf_accel_dev *accel_dev,
|
|
Torsten Duwe |
93ce56 |
return false;
|
|
Torsten Duwe |
93ce56 |
case ADF_PF2VF_MSGTYPE_VERSION_RESP:
|
|
Torsten Duwe |
93ce56 |
case ADF_PF2VF_MSGTYPE_BLKMSG_RESP:
|
|
Torsten Duwe |
93ce56 |
+ case ADF_PF2VF_MSGTYPE_RP_RESET_RESP:
|
|
Torsten Duwe |
93ce56 |
dev_dbg(&GET_DEV(accel_dev),
|
|
Torsten Duwe |
93ce56 |
"Response Message received from PF (type 0x%.4x, data 0x%.4x)\n",
|
|
Torsten Duwe |
93ce56 |
msg.type, msg.data);
|
|
Torsten Duwe |
93ce56 |
--
|
|
Torsten Duwe |
93ce56 |
2.35.3
|
|
Torsten Duwe |
93ce56 |
|