|
Torsten Duwe |
588782 |
From 642a7d49c249f04007e68c124a148847471dd476 Mon Sep 17 00:00:00 2001
|
|
Torsten Duwe |
588782 |
From: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
|
|
Torsten Duwe |
588782 |
Date: Tue, 18 Jan 2022 10:35:15 +0000
|
|
Torsten Duwe |
588782 |
Subject: [PATCH] crypto: qat - fix access to PFVF interrupt registers for GEN4
|
|
Torsten Duwe |
588782 |
Git-commit: 642a7d49c249f04007e68c124a148847471dd476
|
|
Torsten Duwe |
588782 |
Patch-mainline: v5.18-rc1
|
|
Torsten Duwe |
588782 |
References: jsc#PED-1073
|
|
Torsten Duwe |
588782 |
|
|
Torsten Duwe |
588782 |
The logic that detects, enables and disables pfvf interrupts was
|
|
Torsten Duwe |
588782 |
expecting a single CSR per VF. Instead, the source and mask register are
|
|
Torsten Duwe |
588782 |
two registers with a bit per VF.
|
|
Torsten Duwe |
588782 |
Due to this, the driver is reading and setting reserved CSRs and not
|
|
Torsten Duwe |
588782 |
masking the correct source of interrupts.
|
|
Torsten Duwe |
588782 |
|
|
Torsten Duwe |
588782 |
Fix the access to the source and mask register for QAT GEN4 devices by
|
|
Torsten Duwe |
588782 |
removing the outer loop in adf_gen4_get_vf2pf_sources(),
|
|
Torsten Duwe |
588782 |
adf_gen4_enable_vf2pf_interrupts() and
|
|
Torsten Duwe |
588782 |
adf_gen4_disable_vf2pf_interrupts() and changing the helper macros
|
|
Torsten Duwe |
588782 |
ADF_4XXX_VM2PF_SOU and ADF_4XXX_VM2PF_MSK.
|
|
Torsten Duwe |
588782 |
|
|
Torsten Duwe |
588782 |
Fixes: a9dc0d966605 ("crypto: qat - add PFVF support to the GEN4 host driver")
|
|
Torsten Duwe |
588782 |
Signed-off-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
|
|
Torsten Duwe |
588782 |
Co-developed-by: Siming Wan <siming.wan@intel.com>
|
|
Torsten Duwe |
588782 |
Signed-off-by: Siming Wan <siming.wan@intel.com>
|
|
Torsten Duwe |
588782 |
Reviewed-by: Xin Zeng <xin.zeng@intel.com>
|
|
Torsten Duwe |
588782 |
Reviewed-by: Wojciech Ziemba <wojciech.ziemba@intel.com>
|
|
Torsten Duwe |
588782 |
Reviewed-by: Marco Chiappero <marco.chiappero@intel.com>
|
|
Torsten Duwe |
588782 |
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
|
Torsten Duwe |
588782 |
Signed-off-by: Torsten Duwe <duwe@suse.de>
|
|
Torsten Duwe |
588782 |
|
|
Torsten Duwe |
588782 |
---
|
|
Torsten Duwe |
588782 |
drivers/crypto/qat/qat_common/adf_gen4_pfvf.c | 42 ++++---------------
|
|
Torsten Duwe |
588782 |
1 file changed, 9 insertions(+), 33 deletions(-)
|
|
Torsten Duwe |
588782 |
|
|
Torsten Duwe |
588782 |
diff --git a/drivers/crypto/qat/qat_common/adf_gen4_pfvf.c b/drivers/crypto/qat/qat_common/adf_gen4_pfvf.c
|
|
Torsten Duwe |
588782 |
index 8efbedf63bc80..3b3ea849c5e53 100644
|
|
Torsten Duwe |
588782 |
--- a/drivers/crypto/qat/qat_common/adf_gen4_pfvf.c
|
|
Torsten Duwe |
588782 |
+++ b/drivers/crypto/qat/qat_common/adf_gen4_pfvf.c
|
|
Torsten Duwe |
588782 |
@@ -9,15 +9,12 @@
|
|
Torsten Duwe |
588782 |
#include "adf_pfvf_pf_proto.h"
|
|
Torsten Duwe |
588782 |
#include "adf_pfvf_utils.h"
|
|
Torsten Duwe |
588782 |
|
|
Torsten Duwe |
588782 |
-#define ADF_4XXX_MAX_NUM_VFS 16
|
|
Torsten Duwe |
588782 |
-
|
|
Torsten Duwe |
588782 |
#define ADF_4XXX_PF2VM_OFFSET(i) (0x40B010 + ((i) * 0x20))
|
|
Torsten Duwe |
588782 |
#define ADF_4XXX_VM2PF_OFFSET(i) (0x40B014 + ((i) * 0x20))
|
|
Torsten Duwe |
588782 |
|
|
Torsten Duwe |
588782 |
/* VF2PF interrupt source registers */
|
|
Torsten Duwe |
588782 |
-#define ADF_4XXX_VM2PF_SOU(i) (0x41A180 + ((i) * 4))
|
|
Torsten Duwe |
588782 |
-#define ADF_4XXX_VM2PF_MSK(i) (0x41A1C0 + ((i) * 4))
|
|
Torsten Duwe |
588782 |
-#define ADF_4XXX_VM2PF_INT_EN_MSK BIT(0)
|
|
Torsten Duwe |
588782 |
+#define ADF_4XXX_VM2PF_SOU 0x41A180
|
|
Torsten Duwe |
588782 |
+#define ADF_4XXX_VM2PF_MSK 0x41A1C0
|
|
Torsten Duwe |
588782 |
|
|
Torsten Duwe |
588782 |
#define ADF_PFVF_GEN4_MSGTYPE_SHIFT 2
|
|
Torsten Duwe |
588782 |
#define ADF_PFVF_GEN4_MSGTYPE_MASK 0x3F
|
|
Torsten Duwe |
588782 |
@@ -41,51 +38,30 @@ static u32 adf_gen4_pf_get_vf2pf_offset(u32 i)
|
|
Torsten Duwe |
588782 |
|
|
Torsten Duwe |
588782 |
static u32 adf_gen4_get_vf2pf_sources(void __iomem *pmisc_addr)
|
|
Torsten Duwe |
588782 |
{
|
|
Torsten Duwe |
588782 |
- int i;
|
|
Torsten Duwe |
588782 |
u32 sou, mask;
|
|
Torsten Duwe |
588782 |
- int num_csrs = ADF_4XXX_MAX_NUM_VFS;
|
|
Torsten Duwe |
588782 |
- u32 vf_mask = 0;
|
|
Torsten Duwe |
588782 |
|
|
Torsten Duwe |
588782 |
- for (i = 0; i < num_csrs; i++) {
|
|
Torsten Duwe |
588782 |
- sou = ADF_CSR_RD(pmisc_addr, ADF_4XXX_VM2PF_SOU(i));
|
|
Torsten Duwe |
588782 |
- mask = ADF_CSR_RD(pmisc_addr, ADF_4XXX_VM2PF_MSK(i));
|
|
Torsten Duwe |
588782 |
- sou &= ~mask;
|
|
Torsten Duwe |
588782 |
- vf_mask |= sou << i;
|
|
Torsten Duwe |
588782 |
- }
|
|
Torsten Duwe |
588782 |
+ sou = ADF_CSR_RD(pmisc_addr, ADF_4XXX_VM2PF_SOU);
|
|
Torsten Duwe |
588782 |
+ mask = ADF_CSR_RD(pmisc_addr, ADF_4XXX_VM2PF_MSK);
|
|
Torsten Duwe |
588782 |
|
|
Torsten Duwe |
588782 |
- return vf_mask;
|
|
Torsten Duwe |
588782 |
+ return sou &= ~mask;
|
|
Torsten Duwe |
588782 |
}
|
|
Torsten Duwe |
588782 |
|
|
Torsten Duwe |
588782 |
static void adf_gen4_enable_vf2pf_interrupts(void __iomem *pmisc_addr,
|
|
Torsten Duwe |
588782 |
u32 vf_mask)
|
|
Torsten Duwe |
588782 |
{
|
|
Torsten Duwe |
588782 |
- int num_csrs = ADF_4XXX_MAX_NUM_VFS;
|
|
Torsten Duwe |
588782 |
- unsigned long mask = vf_mask;
|
|
Torsten Duwe |
588782 |
unsigned int val;
|
|
Torsten Duwe |
588782 |
- int i;
|
|
Torsten Duwe |
588782 |
-
|
|
Torsten Duwe |
588782 |
- for_each_set_bit(i, &mask, num_csrs) {
|
|
Torsten Duwe |
588782 |
- unsigned int offset = ADF_4XXX_VM2PF_MSK(i);
|
|
Torsten Duwe |
588782 |
|
|
Torsten Duwe |
588782 |
- val = ADF_CSR_RD(pmisc_addr, offset) & ~ADF_4XXX_VM2PF_INT_EN_MSK;
|
|
Torsten Duwe |
588782 |
- ADF_CSR_WR(pmisc_addr, offset, val);
|
|
Torsten Duwe |
588782 |
- }
|
|
Torsten Duwe |
588782 |
+ val = ADF_CSR_RD(pmisc_addr, ADF_4XXX_VM2PF_MSK) & ~vf_mask;
|
|
Torsten Duwe |
588782 |
+ ADF_CSR_WR(pmisc_addr, ADF_4XXX_VM2PF_MSK, val);
|
|
Torsten Duwe |
588782 |
}
|
|
Torsten Duwe |
588782 |
|
|
Torsten Duwe |
588782 |
static void adf_gen4_disable_vf2pf_interrupts(void __iomem *pmisc_addr,
|
|
Torsten Duwe |
588782 |
u32 vf_mask)
|
|
Torsten Duwe |
588782 |
{
|
|
Torsten Duwe |
588782 |
- int num_csrs = ADF_4XXX_MAX_NUM_VFS;
|
|
Torsten Duwe |
588782 |
- unsigned long mask = vf_mask;
|
|
Torsten Duwe |
588782 |
unsigned int val;
|
|
Torsten Duwe |
588782 |
- int i;
|
|
Torsten Duwe |
588782 |
-
|
|
Torsten Duwe |
588782 |
- for_each_set_bit(i, &mask, num_csrs) {
|
|
Torsten Duwe |
588782 |
- unsigned int offset = ADF_4XXX_VM2PF_MSK(i);
|
|
Torsten Duwe |
588782 |
|
|
Torsten Duwe |
588782 |
- val = ADF_CSR_RD(pmisc_addr, offset) | ADF_4XXX_VM2PF_INT_EN_MSK;
|
|
Torsten Duwe |
588782 |
- ADF_CSR_WR(pmisc_addr, offset, val);
|
|
Torsten Duwe |
588782 |
- }
|
|
Torsten Duwe |
588782 |
+ val = ADF_CSR_RD(pmisc_addr, ADF_4XXX_VM2PF_MSK) | vf_mask;
|
|
Torsten Duwe |
588782 |
+ ADF_CSR_WR(pmisc_addr, ADF_4XXX_VM2PF_MSK, val);
|
|
Torsten Duwe |
588782 |
}
|
|
Torsten Duwe |
588782 |
|
|
Torsten Duwe |
588782 |
static int adf_gen4_pfvf_send(struct adf_accel_dev *accel_dev,
|
|
Torsten Duwe |
588782 |
--
|
|
Torsten Duwe |
588782 |
2.35.3
|
|
Torsten Duwe |
588782 |
|