mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
crypto: qat - fix error source for QAT GEN6 transmit interface faults
TI_CD_PAR_STS faults were being decoded under ERRSOU1, which is
incorrect for QAT GEN6 devices. They are actually raised on ERRSOU3.
Move the handling of TI_CD_PAR_STS faults as part of the ERRSOU3 logic
and split the status bits by their actual source:
- Bits 0-18 (TI_INT_ERR_DEVHALT) handled when a DEVHALT is signalled
and are counted once as ADF_RAS_FATAL.
- Bit 19 (TIMISCSTS) handled separately and counted as ADF_RAS_UNCORR.
Previously, a TI_INT_ERR_DEVHALT fault also incremented ADF_RAS_UNCORR
in addition to ADF_RAS_FATAL. Since a DEVHALT is already fatal, remove
the redundant increment.
Bits 20-25 of TI_CD_PAR_STS are unused/reserved on QAT GEN6. Remove them
from the mask.
Cc: stable@vger.kernel.org
Fixes: 7f3401d0a5 ("crypto: qat - enable RAS support for GEN6 devices")
Signed-off-by: Suman Kumar Chakraborty <suman.kumar.chakraborty@intel.com>
Reviewed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Reviewed-by: Ahsan Atta <ahsan.atta@intel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
b7e0a9bd80
commit
eeaf1ccd4c
|
|
@ -323,14 +323,26 @@ static void adf_handle_ti_cd_par_sts(struct adf_accel_dev *accel_dev, void __iom
|
|||
u32 ti_cd_par_sts;
|
||||
|
||||
ti_cd_par_sts = ADF_CSR_RD(csr, ADF_GEN6_TI_CD_PAR_STS);
|
||||
ti_cd_par_sts &= ADF_GEN6_TI_CD_PAR_STS_MASK;
|
||||
ti_cd_par_sts &= ADF_GEN6_TI_CD_PAR_STS_TI_INT_ERR_DEVHALT_MASK;
|
||||
if (ti_cd_par_sts) {
|
||||
dev_err(&GET_DEV(accel_dev), "TI CD parity error: %#x\n", ti_cd_par_sts);
|
||||
ADF_RAS_ERR_CTR_INC(accel_dev->ras_errors, ADF_RAS_UNCORR);
|
||||
ADF_CSR_WR(csr, ADF_GEN6_TI_CD_PAR_STS, ti_cd_par_sts);
|
||||
}
|
||||
}
|
||||
|
||||
static void adf_handle_ti_misc_cd_par_sts(struct adf_accel_dev *accel_dev, void __iomem *csr)
|
||||
{
|
||||
u32 ti_misc_cd_par_sts;
|
||||
|
||||
ti_misc_cd_par_sts = ADF_CSR_RD(csr, ADF_GEN6_TI_CD_PAR_STS);
|
||||
ti_misc_cd_par_sts &= ADF_GEN6_TI_CD_PAR_STS_TI_MISC_MASK;
|
||||
if (ti_misc_cd_par_sts) {
|
||||
dev_err(&GET_DEV(accel_dev), "TI MISC CD parity error: %#x\n", ti_misc_cd_par_sts);
|
||||
ADF_RAS_ERR_CTR_INC(accel_dev->ras_errors, ADF_RAS_UNCORR);
|
||||
ADF_CSR_WR(csr, ADF_GEN6_TI_CD_PAR_STS, ti_misc_cd_par_sts);
|
||||
}
|
||||
}
|
||||
|
||||
static void adf_handle_ti_trnsb_par_sts(struct adf_accel_dev *accel_dev, void __iomem *csr)
|
||||
{
|
||||
u32 ti_trnsb_par_sts;
|
||||
|
|
@ -367,7 +379,6 @@ static void adf_handle_ti_err(struct adf_accel_dev *accel_dev, void __iomem *csr
|
|||
adf_handle_ti_ci_par_sts(accel_dev, csr);
|
||||
adf_handle_ti_pullfub_par_sts(accel_dev, csr);
|
||||
adf_handle_ti_pushfub_par_sts(accel_dev, csr);
|
||||
adf_handle_ti_cd_par_sts(accel_dev, csr);
|
||||
adf_handle_ti_trnsb_par_sts(accel_dev, csr);
|
||||
adf_handle_iosfp_cmd_parerr(accel_dev, csr);
|
||||
}
|
||||
|
|
@ -591,6 +602,8 @@ static void adf_handle_timiscsts(struct adf_accel_dev *accel_dev, void __iomem *
|
|||
if (!(errsou & ADF_GEN6_ERRSOU3_TIMISCSTS_BIT))
|
||||
return;
|
||||
|
||||
adf_handle_ti_misc_cd_par_sts(accel_dev, csr);
|
||||
|
||||
timiscsts = ADF_CSR_RD(csr, ADF_GEN6_TIMISCSTS);
|
||||
if (timiscsts) {
|
||||
dev_err(&GET_DEV(accel_dev), "Fatal error in transmit interface: %#x\n",
|
||||
|
|
@ -730,6 +743,7 @@ static void adf_handle_ti_int_err_devhalt(struct adf_accel_dev *accel_dev, void
|
|||
if (!(errsou & ADF_GEN6_ERRSOU3_TI_INT_ERR_DEVHALT_BIT))
|
||||
return;
|
||||
|
||||
adf_handle_ti_cd_par_sts(accel_dev, csr);
|
||||
dev_err(&GET_DEV(accel_dev), "DEVHALT due to a TI internal memory error\n");
|
||||
ADF_RAS_ERR_CTR_INC(accel_dev->ras_errors, ADF_RAS_FATAL);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -170,23 +170,25 @@ struct adf_ras_ops;
|
|||
#define ADF_GEN6_TI_CD_PAR_ERR_MASK 0x500638
|
||||
|
||||
/*
|
||||
* TI CD parity status mask
|
||||
* TI CD parity status mask - TI_INT_ERR_DEVHALT bits
|
||||
* BIT(0) - BIT(15) - CtxMdRam[0:15]_sts parity status
|
||||
* BIT(16) - Leaf2ClusterRam_sts parity status
|
||||
* BIT(17) - BIT(18) - Ring2LeafRam[0:1]_sts parity status
|
||||
* BIT(19) - VirtualQ_sts parity status
|
||||
* BIT(20) - DtRdQ_sts parity status
|
||||
* BIT(21) - DtWrQ_sts parity status
|
||||
* BIT(22) - RiCmdQ_sts parity status
|
||||
* BIT(23) - BypassQ_sts parity status
|
||||
* BIT(24) - DtRdQ_sc_sts parity status
|
||||
* BIT(25) - DtWrQ_sc_sts parity status
|
||||
*/
|
||||
#define ADF_GEN6_TI_CD_PAR_STS_MASK \
|
||||
#define ADF_GEN6_TI_CD_PAR_STS_TI_INT_ERR_DEVHALT_MASK \
|
||||
(BIT(0) | BIT(1) | BIT(2) | BIT(3) | BIT(4) | BIT(5) | BIT(6) | \
|
||||
BIT(7) | BIT(8) | BIT(9) | BIT(10) | BIT(11) | BIT(12) | BIT(13) | \
|
||||
BIT(14) | BIT(15) | BIT(16) | BIT(17) | BIT(18) | BIT(19) | BIT(20) | \
|
||||
BIT(21) | BIT(22) | BIT(23) | BIT(24) | BIT(25))
|
||||
BIT(14) | BIT(15) | BIT(16) | BIT(17) | BIT(18))
|
||||
|
||||
/*
|
||||
* TI CD parity status mask - TIMISCSTS bit
|
||||
* BIT(19) - VirtualQ_sts parity status
|
||||
*/
|
||||
#define ADF_GEN6_TI_CD_PAR_STS_TI_MISC_MASK BIT(19)
|
||||
|
||||
#define ADF_GEN6_TI_CD_PAR_STS_MASK \
|
||||
(ADF_GEN6_TI_CD_PAR_STS_TI_INT_ERR_DEVHALT_MASK | \
|
||||
ADF_GEN6_TI_CD_PAR_STS_TI_MISC_MASK)
|
||||
|
||||
/* TI TRNSB parity status */
|
||||
#define ADF_GEN6_TI_TRNSB_PAR_STS 0x500648
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user