aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/crypto/hisilicon/sec2/sec_main.c
diff options
context:
space:
mode:
authorWeili Qian <qianweili@huawei.com>2021-05-15 18:44:39 +0800
committerHerbert Xu <herbert@gondor.apana.org.au>2021-05-23 08:52:41 +0800
commit3b9c24dec891d418e26032709d6f01fe3757a4a6 (patch)
tree7ed93093448d064200a9876f9aad2ff4eb883153 /drivers/crypto/hisilicon/sec2/sec_main.c
parentcrypto: hisilicon/qm - modify 'QM_RESETTING' clearing error (diff)
downloadlinux-dev-3b9c24dec891d418e26032709d6f01fe3757a4a6.tar.xz
linux-dev-3b9c24dec891d418e26032709d6f01fe3757a4a6.zip
crypto: hisilicon/qm - adjust order of device error configuration
In order to avoid reporting an exception but the error type is not configured, the driver needs to configure the error type first, and then enable the error interrupt. Before executing the task, hardware error initialization is needed so that the hardware can detect the error in time. Signed-off-by: Weili Qian <qianweili@huawei.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers/crypto/hisilicon/sec2/sec_main.c')
-rw-r--r--drivers/crypto/hisilicon/sec2/sec_main.c24
1 files changed, 10 insertions, 14 deletions
diff --git a/drivers/crypto/hisilicon/sec2/sec_main.c b/drivers/crypto/hisilicon/sec2/sec_main.c
index 6f0062d4408c..e57167da6be0 100644
--- a/drivers/crypto/hisilicon/sec2/sec_main.c
+++ b/drivers/crypto/hisilicon/sec2/sec_main.c
@@ -440,43 +440,39 @@ static void sec_hw_error_enable(struct hisi_qm *qm)
return;
}
- val = readl(qm->io_base + SEC_CONTROL_REG);
-
/* clear SEC hw error source if having */
writel(SEC_CORE_INT_CLEAR, qm->io_base + SEC_CORE_INT_SOURCE);
- /* enable SEC hw error interrupts */
- writel(SEC_CORE_INT_ENABLE, qm->io_base + SEC_CORE_INT_MASK);
-
/* enable RAS int */
writel(SEC_RAS_CE_ENB_MSK, qm->io_base + SEC_RAS_CE_REG);
writel(SEC_RAS_FE_ENB_MSK, qm->io_base + SEC_RAS_FE_REG);
writel(SEC_RAS_NFE_ENB_MSK, qm->io_base + SEC_RAS_NFE_REG);
/* enable SEC block master OOO when m-bit error occur */
+ val = readl(qm->io_base + SEC_CONTROL_REG);
val = val | SEC_AXI_SHUTDOWN_ENABLE;
-
writel(val, qm->io_base + SEC_CONTROL_REG);
+
+ /* enable SEC hw error interrupts */
+ writel(SEC_CORE_INT_ENABLE, qm->io_base + SEC_CORE_INT_MASK);
}
static void sec_hw_error_disable(struct hisi_qm *qm)
{
u32 val;
- val = readl(qm->io_base + SEC_CONTROL_REG);
-
- /* disable RAS int */
- writel(SEC_RAS_DISABLE, qm->io_base + SEC_RAS_CE_REG);
- writel(SEC_RAS_DISABLE, qm->io_base + SEC_RAS_FE_REG);
- writel(SEC_RAS_DISABLE, qm->io_base + SEC_RAS_NFE_REG);
-
/* disable SEC hw error interrupts */
writel(SEC_CORE_INT_DISABLE, qm->io_base + SEC_CORE_INT_MASK);
/* disable SEC block master OOO when m-bit error occur */
+ val = readl(qm->io_base + SEC_CONTROL_REG);
val = val & SEC_AXI_SHUTDOWN_DISABLE;
-
writel(val, qm->io_base + SEC_CONTROL_REG);
+
+ /* disable RAS int */
+ writel(SEC_RAS_DISABLE, qm->io_base + SEC_RAS_CE_REG);
+ writel(SEC_RAS_DISABLE, qm->io_base + SEC_RAS_FE_REG);
+ writel(SEC_RAS_DISABLE, qm->io_base + SEC_RAS_NFE_REG);
}
static u32 sec_clear_enable_read(struct sec_debug_file *file)