Torsten Duwe 371ac9
From 27c0f3a14f9fd16eed4e0167cf58225ca28ab4f8 Mon Sep 17 00:00:00 2001
Torsten Duwe 371ac9
From: Marco Chiappero <marco.chiappero@intel.com>
Torsten Duwe 371ac9
Date: Thu, 7 Apr 2022 17:54:48 +0100
Torsten Duwe 371ac9
Subject: [PATCH] crypto: qat - test PFVF registers for spurious interrupts on
Torsten Duwe 371ac9
 GEN4
Torsten Duwe 371ac9
Git-commit: 27c0f3a14f9fd16eed4e0167cf58225ca28ab4f8
Torsten Duwe 371ac9
Patch-mainline: v5.19-rc1
Torsten Duwe 371ac9
References: jsc#PED-1073
Torsten Duwe 371ac9
Torsten Duwe 371ac9
Spurious PFVF interrupts can happen when either the ISR is invoked
Torsten Duwe 371ac9
without a valid source being set or, otherwise, when no interrupt bit
Torsten Duwe 371ac9
is set in the PFVF register containing the message.
Torsten Duwe 371ac9
Torsten Duwe 371ac9
The latter test was present for GEN2 devices but missing for GEN4, this
Torsten Duwe 371ac9
patch fills the gap.
Torsten Duwe 371ac9
Torsten Duwe 371ac9
Signed-off-by: Marco Chiappero <marco.chiappero@intel.com>
Torsten Duwe 371ac9
Reviewed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Torsten Duwe 371ac9
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Torsten Duwe 371ac9
Signed-off-by: Torsten Duwe <duwe@suse.de>
Torsten Duwe 371ac9
Torsten Duwe 371ac9
---
Torsten Duwe 371ac9
 drivers/crypto/qat/qat_common/adf_gen4_pfvf.c | 6 ++++++
Torsten Duwe 371ac9
 1 file changed, 6 insertions(+)
Torsten Duwe 371ac9
Torsten Duwe 371ac9
diff --git a/drivers/crypto/qat/qat_common/adf_gen4_pfvf.c b/drivers/crypto/qat/qat_common/adf_gen4_pfvf.c
Torsten Duwe 371ac9
index d80d493a77568..f7860bf612da9 100644
Torsten Duwe 371ac9
--- a/drivers/crypto/qat/qat_common/adf_gen4_pfvf.c
Torsten Duwe 371ac9
+++ b/drivers/crypto/qat/qat_common/adf_gen4_pfvf.c
Torsten Duwe 371ac9
@@ -96,10 +96,16 @@ static struct pfvf_message adf_gen4_pfvf_recv(struct adf_accel_dev *accel_dev,
Torsten Duwe 371ac9
 					      u32 pfvf_offset, u8 compat_ver)
Torsten Duwe 371ac9
 {
Torsten Duwe 371ac9
 	void __iomem *pmisc_addr = adf_get_pmisc_base(accel_dev);
Torsten Duwe 371ac9
+	struct pfvf_message msg = { 0 };
Torsten Duwe 371ac9
 	u32 csr_val;
Torsten Duwe 371ac9
 
Torsten Duwe 371ac9
 	/* Read message from the CSR */
Torsten Duwe 371ac9
 	csr_val = ADF_CSR_RD(pmisc_addr, pfvf_offset);
Torsten Duwe 371ac9
+	if (!(csr_val & ADF_PFVF_INT)) {
Torsten Duwe 371ac9
+		dev_info(&GET_DEV(accel_dev),
Torsten Duwe 371ac9
+			 "Spurious PFVF interrupt, msg 0x%.8x. Ignored\n", csr_val);
Torsten Duwe 371ac9
+		return msg;
Torsten Duwe 371ac9
+	}
Torsten Duwe 371ac9
 
Torsten Duwe 371ac9
 	/* We can now acknowledge the message reception by clearing the
Torsten Duwe 371ac9
 	 * interrupt bit
Torsten Duwe 371ac9
-- 
Torsten Duwe 371ac9
2.35.3
Torsten Duwe 371ac9