OSDN Git Service

crypto: qat - refactor pfvf version request messages
authorMarco Chiappero <marco.chiappero@intel.com>
Wed, 17 Nov 2021 14:30:55 +0000 (14:30 +0000)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 26 Nov 2021 05:20:48 +0000 (16:20 +1100)
Refactor version handling logic for ADF_VF2PF_MSGTYPE_COMPAT_VER_REQ
and ADF_VF2PF_MSGTYPE_VERSION_REQ on the PF.
Response messages are now filled only after fully parsing the request,
in a consisted way with the rest of the PFVF codebase.

This patch also fixes a harmless double setting for VERSION in the
response for ADF_VF2PF_MSGTYPE_VERSION_REQ.

Signed-off-by: Marco Chiappero <marco.chiappero@intel.com>
Co-developed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Signed-off-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/qat/qat_common/adf_pfvf_pf_proto.c

index ac6a54c..c0844fb 100644 (file)
@@ -47,12 +47,7 @@ static int adf_handle_vf2pf_msg(struct adf_accel_dev *accel_dev, u32 vf_nr,
        case ADF_VF2PF_MSGTYPE_COMPAT_VER_REQ:
                {
                u8 vf_compat_ver = msg >> ADF_VF2PF_COMPAT_VER_REQ_SHIFT;
-
-               resp = (ADF_PF2VF_MSGORIGIN_SYSTEM |
-                        (ADF_PF2VF_MSGTYPE_VERSION_RESP <<
-                         ADF_PF2VF_MSGTYPE_SHIFT) |
-                        (ADF_PFVF_COMPAT_THIS_VERSION <<
-                         ADF_PF2VF_VERSION_RESP_VERS_SHIFT));
+               u8 compat;
 
                dev_dbg(&GET_DEV(accel_dev),
                        "Compatibility Version Request from VF%d vers=%u\n",
@@ -62,37 +57,46 @@ static int adf_handle_vf2pf_msg(struct adf_accel_dev *accel_dev, u32 vf_nr,
                        dev_err(&GET_DEV(accel_dev),
                                "VF (vers %d) incompatible with PF (vers %d)\n",
                                vf_compat_ver, ADF_PFVF_COMPAT_THIS_VERSION);
-                       resp |= ADF_PF2VF_VF_INCOMPATIBLE <<
-                               ADF_PF2VF_VERSION_RESP_RESULT_SHIFT;
+                       compat = ADF_PF2VF_VF_INCOMPATIBLE;
                } else if (vf_compat_ver > ADF_PFVF_COMPAT_THIS_VERSION) {
                        dev_err(&GET_DEV(accel_dev),
                                "VF (vers %d) compat with PF (vers %d) unkn.\n",
                                vf_compat_ver, ADF_PFVF_COMPAT_THIS_VERSION);
-                       resp |= ADF_PF2VF_VF_COMPAT_UNKNOWN <<
-                               ADF_PF2VF_VERSION_RESP_RESULT_SHIFT;
+                       compat = ADF_PF2VF_VF_COMPAT_UNKNOWN;
                } else {
                        dev_dbg(&GET_DEV(accel_dev),
                                "VF (vers %d) compatible with PF (vers %d)\n",
                                vf_compat_ver, ADF_PFVF_COMPAT_THIS_VERSION);
-                       resp |= ADF_PF2VF_VF_COMPATIBLE <<
-                               ADF_PF2VF_VERSION_RESP_RESULT_SHIFT;
+                       compat = ADF_PF2VF_VF_COMPATIBLE;
                }
+
+               resp =  ADF_PF2VF_MSGORIGIN_SYSTEM;
+               resp |= ADF_PF2VF_MSGTYPE_VERSION_RESP <<
+                       ADF_PF2VF_MSGTYPE_SHIFT;
+               resp |= ADF_PFVF_COMPAT_THIS_VERSION <<
+                       ADF_PF2VF_VERSION_RESP_VERS_SHIFT;
+               resp |= compat << ADF_PF2VF_VERSION_RESP_RESULT_SHIFT;
                }
                break;
        case ADF_VF2PF_MSGTYPE_VERSION_REQ:
+               {
+               u8 compat;
+
                dev_dbg(&GET_DEV(accel_dev),
                        "Legacy VersionRequest received from VF%d 0x%x\n",
                        vf_nr + 1, msg);
-               resp = (ADF_PF2VF_MSGORIGIN_SYSTEM |
-                        (ADF_PF2VF_MSGTYPE_VERSION_RESP <<
-                         ADF_PF2VF_MSGTYPE_SHIFT) |
-                        (ADF_PFVF_COMPAT_THIS_VERSION <<
-                         ADF_PF2VF_VERSION_RESP_VERS_SHIFT));
-               resp |= ADF_PF2VF_VF_COMPATIBLE <<
-                       ADF_PF2VF_VERSION_RESP_RESULT_SHIFT;
+
+               /* PF always newer than legacy VF */
+               compat = ADF_PF2VF_VF_COMPATIBLE;
+
+               resp = ADF_PF2VF_MSGORIGIN_SYSTEM;
+               resp |= ADF_PF2VF_MSGTYPE_VERSION_RESP <<
+                       ADF_PF2VF_MSGTYPE_SHIFT;
                /* Set legacy major and minor version num */
                resp |= 1 << ADF_PF2VF_MAJORVERSION_SHIFT |
                        1 << ADF_PF2VF_MINORVERSION_SHIFT;
+               resp |= compat << ADF_PF2VF_VERSION_RESP_RESULT_SHIFT;
+               }
                break;
        case ADF_VF2PF_MSGTYPE_INIT:
                {