|
Matthias Brugger |
1949a1 |
From: Shukun Tan <tanshukun1@huawei.com>
|
|
Matthias Brugger |
1949a1 |
Date: Sat, 9 May 2020 17:44:03 +0800
|
|
Matthias Brugger |
1949a1 |
Subject: crypto: hisilicon - remove codes of directly report device errors
|
|
Matthias Brugger |
1949a1 |
through MSI
|
|
Matthias Brugger |
1949a1 |
Git-commit: 3176637ac10eddffdc3bd75281fa354a0d5a0c1e
|
|
Matthias Brugger |
1949a1 |
Patch-mainline: v5.8-rc1
|
|
Matthias Brugger |
1949a1 |
References: jsc#SLE-16507 jsc#SLE-15835
|
|
Matthias Brugger |
1949a1 |
|
|
Matthias Brugger |
1949a1 |
The hardware device can be configured to report directly through MSI, but
|
|
Matthias Brugger |
1949a1 |
this method will not go through RAS, configure all hardware errors that
|
|
Matthias Brugger |
1949a1 |
should be processed by driver to NFE.
|
|
Matthias Brugger |
1949a1 |
|
|
Matthias Brugger |
1949a1 |
Signed-off-by: Shukun Tan <tanshukun1@huawei.com>
|
|
Matthias Brugger |
1949a1 |
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
|
Matthias Brugger |
1949a1 |
Signed-off-by: Matthias Brugger <mbrugger@suse.com>
|
|
Matthias Brugger |
1949a1 |
---
|
|
Matthias Brugger |
1949a1 |
drivers/crypto/hisilicon/hpre/hpre_main.c | 1 -
|
|
Matthias Brugger |
1949a1 |
drivers/crypto/hisilicon/qm.c | 54 +++++------------------
|
|
Matthias Brugger |
1949a1 |
drivers/crypto/hisilicon/qm.h | 4 +-
|
|
Matthias Brugger |
1949a1 |
drivers/crypto/hisilicon/sec2/sec_main.c | 1 -
|
|
Matthias Brugger |
1949a1 |
drivers/crypto/hisilicon/zip/zip_main.c | 1 -
|
|
Matthias Brugger |
1949a1 |
5 files changed, 13 insertions(+), 48 deletions(-)
|
|
Matthias Brugger |
1949a1 |
|
|
Matthias Brugger |
1949a1 |
diff --git a/drivers/crypto/hisilicon/hpre/hpre_main.c b/drivers/crypto/hisilicon/hpre/hpre_main.c
|
|
Matthias Brugger |
1949a1 |
index bfae7fb23e4c..c5ddd3a8ec85 100644
|
|
Matthias Brugger |
1949a1 |
--- a/drivers/crypto/hisilicon/hpre/hpre_main.c
|
|
Matthias Brugger |
1949a1 |
+++ b/drivers/crypto/hisilicon/hpre/hpre_main.c
|
|
Matthias Brugger |
1949a1 |
@@ -730,7 +730,6 @@ static const struct hisi_qm_err_ini hpre_err_ini = {
|
|
Matthias Brugger |
1949a1 |
.ce = QM_BASE_CE,
|
|
Matthias Brugger |
1949a1 |
.nfe = QM_BASE_NFE | QM_ACC_DO_TASK_TIMEOUT,
|
|
Matthias Brugger |
1949a1 |
.fe = 0,
|
|
Matthias Brugger |
1949a1 |
- .msi = QM_DB_RANDOM_INVALID,
|
|
Matthias Brugger |
1949a1 |
.ecc_2bits_mask = HPRE_CORE_ECC_2BIT_ERR |
|
|
Matthias Brugger |
1949a1 |
HPRE_OOO_ECC_2BIT_ERR,
|
|
Matthias Brugger |
1949a1 |
.msi_wr_port = HPRE_WR_MSI_PORT,
|
|
Matthias Brugger |
1949a1 |
diff --git a/drivers/crypto/hisilicon/qm.c b/drivers/crypto/hisilicon/qm.c
|
|
Matthias Brugger |
1949a1 |
index e988124e732a..80935d661ed3 100644
|
|
Matthias Brugger |
1949a1 |
--- a/drivers/crypto/hisilicon/qm.c
|
|
Matthias Brugger |
1949a1 |
+++ b/drivers/crypto/hisilicon/qm.c
|
|
Matthias Brugger |
1949a1 |
@@ -313,8 +313,7 @@ struct hisi_qm_hw_ops {
|
|
Matthias Brugger |
1949a1 |
u8 cmd, u16 index, u8 priority);
|
|
Matthias Brugger |
1949a1 |
u32 (*get_irq_num)(struct hisi_qm *qm);
|
|
Matthias Brugger |
1949a1 |
int (*debug_init)(struct hisi_qm *qm);
|
|
Matthias Brugger |
1949a1 |
- void (*hw_error_init)(struct hisi_qm *qm, u32 ce, u32 nfe, u32 fe,
|
|
Matthias Brugger |
1949a1 |
- u32 msi);
|
|
Matthias Brugger |
1949a1 |
+ void (*hw_error_init)(struct hisi_qm *qm, u32 ce, u32 nfe, u32 fe);
|
|
Matthias Brugger |
1949a1 |
void (*hw_error_uninit)(struct hisi_qm *qm);
|
|
Matthias Brugger |
1949a1 |
pci_ers_result_t (*hw_error_handle)(struct hisi_qm *qm);
|
|
Matthias Brugger |
1949a1 |
};
|
|
Matthias Brugger |
1949a1 |
@@ -707,26 +706,6 @@ static irqreturn_t qm_aeq_irq(int irq, void *data)
|
|
Matthias Brugger |
1949a1 |
|
|
Matthias Brugger |
1949a1 |
static irqreturn_t qm_abnormal_irq(int irq, void *data)
|
|
Matthias Brugger |
1949a1 |
{
|
|
Matthias Brugger |
1949a1 |
- const struct hisi_qm_hw_error *err = qm_hw_error;
|
|
Matthias Brugger |
1949a1 |
- struct hisi_qm *qm = data;
|
|
Matthias Brugger |
1949a1 |
- struct device *dev = &qm->pdev->dev;
|
|
Matthias Brugger |
1949a1 |
- u32 error_status, tmp;
|
|
Matthias Brugger |
1949a1 |
-
|
|
Matthias Brugger |
1949a1 |
- /* read err sts */
|
|
Matthias Brugger |
1949a1 |
- tmp = readl(qm->io_base + QM_ABNORMAL_INT_STATUS);
|
|
Matthias Brugger |
1949a1 |
- error_status = qm->msi_mask & tmp;
|
|
Matthias Brugger |
1949a1 |
-
|
|
Matthias Brugger |
1949a1 |
- while (err->msg) {
|
|
Matthias Brugger |
1949a1 |
- if (err->int_msk & error_status)
|
|
Matthias Brugger |
1949a1 |
- dev_err(dev, "%s [error status=0x%x] found\n",
|
|
Matthias Brugger |
1949a1 |
- err->msg, err->int_msk);
|
|
Matthias Brugger |
1949a1 |
-
|
|
Matthias Brugger |
1949a1 |
- err++;
|
|
Matthias Brugger |
1949a1 |
- }
|
|
Matthias Brugger |
1949a1 |
-
|
|
Matthias Brugger |
1949a1 |
- /* clear err sts */
|
|
Matthias Brugger |
1949a1 |
- writel(error_status, qm->io_base + QM_ABNORMAL_INT_SOURCE);
|
|
Matthias Brugger |
1949a1 |
-
|
|
Matthias Brugger |
1949a1 |
return IRQ_HANDLED;
|
|
Matthias Brugger |
1949a1 |
}
|
|
Matthias Brugger |
1949a1 |
|
|
Matthias Brugger |
1949a1 |
@@ -1116,28 +1095,21 @@ static int qm_create_debugfs_file(struct hisi_qm *qm, enum qm_debug_file index)
|
|
Matthias Brugger |
1949a1 |
return 0;
|
|
Matthias Brugger |
1949a1 |
}
|
|
Matthias Brugger |
1949a1 |
|
|
Matthias Brugger |
1949a1 |
-static void qm_hw_error_init_v1(struct hisi_qm *qm, u32 ce, u32 nfe, u32 fe,
|
|
Matthias Brugger |
1949a1 |
- u32 msi)
|
|
Matthias Brugger |
1949a1 |
+static void qm_hw_error_init_v1(struct hisi_qm *qm, u32 ce, u32 nfe, u32 fe)
|
|
Matthias Brugger |
1949a1 |
{
|
|
Matthias Brugger |
1949a1 |
writel(QM_ABNORMAL_INT_MASK_VALUE, qm->io_base + QM_ABNORMAL_INT_MASK);
|
|
Matthias Brugger |
1949a1 |
}
|
|
Matthias Brugger |
1949a1 |
|
|
Matthias Brugger |
1949a1 |
-static void qm_hw_error_init_v2(struct hisi_qm *qm, u32 ce, u32 nfe, u32 fe,
|
|
Matthias Brugger |
1949a1 |
- u32 msi)
|
|
Matthias Brugger |
1949a1 |
+static void qm_hw_error_init_v2(struct hisi_qm *qm, u32 ce, u32 nfe, u32 fe)
|
|
Matthias Brugger |
1949a1 |
{
|
|
Matthias Brugger |
1949a1 |
- u32 irq_enable = ce | nfe | fe | msi;
|
|
Matthias Brugger |
1949a1 |
+ u32 irq_enable = ce | nfe | fe;
|
|
Matthias Brugger |
1949a1 |
u32 irq_unmask = ~irq_enable;
|
|
Matthias Brugger |
1949a1 |
- u32 error_status;
|
|
Matthias Brugger |
1949a1 |
|
|
Matthias Brugger |
1949a1 |
qm->error_mask = ce | nfe | fe;
|
|
Matthias Brugger |
1949a1 |
- qm->msi_mask = msi;
|
|
Matthias Brugger |
1949a1 |
|
|
Matthias Brugger |
1949a1 |
/* clear QM hw residual error source */
|
|
Matthias Brugger |
1949a1 |
- error_status = readl(qm->io_base + QM_ABNORMAL_INT_STATUS);
|
|
Matthias Brugger |
1949a1 |
- if (error_status) {
|
|
Matthias Brugger |
1949a1 |
- error_status &= qm->error_mask;
|
|
Matthias Brugger |
1949a1 |
- writel(error_status, qm->io_base + QM_ABNORMAL_INT_SOURCE);
|
|
Matthias Brugger |
1949a1 |
- }
|
|
Matthias Brugger |
1949a1 |
+ writel(QM_ABNORMAL_INT_SOURCE_CLR,
|
|
Matthias Brugger |
1949a1 |
+ qm->io_base + QM_ABNORMAL_INT_SOURCE);
|
|
Matthias Brugger |
1949a1 |
|
|
Matthias Brugger |
1949a1 |
/* configure error type */
|
|
Matthias Brugger |
1949a1 |
writel(ce, qm->io_base + QM_RAS_CE_ENABLE);
|
|
Matthias Brugger |
1949a1 |
@@ -1145,9 +1117,6 @@ static void qm_hw_error_init_v2(struct hisi_qm *qm, u32 ce, u32 nfe, u32 fe,
|
|
Matthias Brugger |
1949a1 |
writel(nfe, qm->io_base + QM_RAS_NFE_ENABLE);
|
|
Matthias Brugger |
1949a1 |
writel(fe, qm->io_base + QM_RAS_FE_ENABLE);
|
|
Matthias Brugger |
1949a1 |
|
|
Matthias Brugger |
1949a1 |
- /* use RAS irq default, so only set QM_RAS_MSI_INT_SEL for MSI */
|
|
Matthias Brugger |
1949a1 |
- writel(msi, qm->io_base + QM_RAS_MSI_INT_SEL);
|
|
Matthias Brugger |
1949a1 |
-
|
|
Matthias Brugger |
1949a1 |
irq_unmask &= readl(qm->io_base + QM_ABNORMAL_INT_MASK);
|
|
Matthias Brugger |
1949a1 |
writel(irq_unmask, qm->io_base + QM_ABNORMAL_INT_MASK);
|
|
Matthias Brugger |
1949a1 |
}
|
|
Matthias Brugger |
1949a1 |
@@ -1207,9 +1176,11 @@ static pci_ers_result_t qm_hw_error_handle_v2(struct hisi_qm *qm)
|
|
Matthias Brugger |
1949a1 |
qm->err_status.is_qm_ecc_mbit = true;
|
|
Matthias Brugger |
1949a1 |
|
|
Matthias Brugger |
1949a1 |
qm_log_hw_error(qm, error_status);
|
|
Matthias Brugger |
1949a1 |
-
|
|
Matthias Brugger |
1949a1 |
- /* clear err sts */
|
|
Matthias Brugger |
1949a1 |
- writel(error_status, qm->io_base + QM_ABNORMAL_INT_SOURCE);
|
|
Matthias Brugger |
1949a1 |
+ if (error_status == QM_DB_RANDOM_INVALID) {
|
|
Matthias Brugger |
1949a1 |
+ writel(error_status, qm->io_base +
|
|
Matthias Brugger |
1949a1 |
+ QM_ABNORMAL_INT_SOURCE);
|
|
Matthias Brugger |
1949a1 |
+ return PCI_ERS_RESULT_RECOVERED;
|
|
Matthias Brugger |
1949a1 |
+ }
|
|
Matthias Brugger |
1949a1 |
|
|
Matthias Brugger |
1949a1 |
return PCI_ERS_RESULT_NEED_RESET;
|
|
Matthias Brugger |
1949a1 |
}
|
|
Matthias Brugger |
1949a1 |
@@ -2476,8 +2447,7 @@ static void qm_hw_error_init(struct hisi_qm *qm)
|
|
Matthias Brugger |
1949a1 |
return;
|
|
Matthias Brugger |
1949a1 |
}
|
|
Matthias Brugger |
1949a1 |
|
|
Matthias Brugger |
1949a1 |
- qm->ops->hw_error_init(qm, err_info->ce, err_info->nfe,
|
|
Matthias Brugger |
1949a1 |
- err_info->fe, err_info->msi);
|
|
Matthias Brugger |
1949a1 |
+ qm->ops->hw_error_init(qm, err_info->ce, err_info->nfe, err_info->fe);
|
|
Matthias Brugger |
1949a1 |
}
|
|
Matthias Brugger |
1949a1 |
|
|
Matthias Brugger |
1949a1 |
static void qm_hw_error_uninit(struct hisi_qm *qm)
|
|
Matthias Brugger |
1949a1 |
diff --git a/drivers/crypto/hisilicon/qm.h b/drivers/crypto/hisilicon/qm.h
|
|
Matthias Brugger |
1949a1 |
index 80b9746dfe19..fc5e96a02399 100644
|
|
Matthias Brugger |
1949a1 |
--- a/drivers/crypto/hisilicon/qm.h
|
|
Matthias Brugger |
1949a1 |
+++ b/drivers/crypto/hisilicon/qm.h
|
|
Matthias Brugger |
1949a1 |
@@ -74,7 +74,7 @@
|
|
Matthias Brugger |
1949a1 |
|
|
Matthias Brugger |
1949a1 |
#define QM_BASE_NFE (QM_AXI_RRESP | QM_AXI_BRESP | QM_ECC_MBIT | \
|
|
Matthias Brugger |
1949a1 |
QM_ACC_GET_TASK_TIMEOUT | QM_DB_TIMEOUT | \
|
|
Matthias Brugger |
1949a1 |
- QM_OF_FIFO_OF)
|
|
Matthias Brugger |
1949a1 |
+ QM_OF_FIFO_OF | QM_DB_RANDOM_INVALID)
|
|
Matthias Brugger |
1949a1 |
#define QM_BASE_CE QM_ECC_1BIT
|
|
Matthias Brugger |
1949a1 |
|
|
Matthias Brugger |
1949a1 |
#define QM_Q_DEPTH 1024
|
|
Matthias Brugger |
1949a1 |
@@ -158,7 +158,6 @@ struct hisi_qm_err_info {
|
|
Matthias Brugger |
1949a1 |
u32 ce;
|
|
Matthias Brugger |
1949a1 |
u32 nfe;
|
|
Matthias Brugger |
1949a1 |
u32 fe;
|
|
Matthias Brugger |
1949a1 |
- u32 msi;
|
|
Matthias Brugger |
1949a1 |
};
|
|
Matthias Brugger |
1949a1 |
|
|
Matthias Brugger |
1949a1 |
struct hisi_qm_err_status {
|
|
Matthias Brugger |
1949a1 |
@@ -224,7 +223,6 @@ struct hisi_qm {
|
|
Matthias Brugger |
1949a1 |
struct qm_debug debug;
|
|
Matthias Brugger |
1949a1 |
|
|
Matthias Brugger |
1949a1 |
u32 error_mask;
|
|
Matthias Brugger |
1949a1 |
- u32 msi_mask;
|
|
Matthias Brugger |
1949a1 |
|
|
Matthias Brugger |
1949a1 |
struct workqueue_struct *wq;
|
|
Matthias Brugger |
1949a1 |
struct work_struct work;
|
|
Matthias Brugger |
1949a1 |
diff --git a/drivers/crypto/hisilicon/sec2/sec_main.c b/drivers/crypto/hisilicon/sec2/sec_main.c
|
|
Matthias Brugger |
1949a1 |
index 74e806fd9ff9..c3381f253d55 100644
|
|
Matthias Brugger |
1949a1 |
--- a/drivers/crypto/hisilicon/sec2/sec_main.c
|
|
Matthias Brugger |
1949a1 |
+++ b/drivers/crypto/hisilicon/sec2/sec_main.c
|
|
Matthias Brugger |
1949a1 |
@@ -682,7 +682,6 @@ static const struct hisi_qm_err_ini sec_err_ini = {
|
|
Matthias Brugger |
1949a1 |
.nfe = QM_BASE_NFE | QM_ACC_DO_TASK_TIMEOUT |
|
|
Matthias Brugger |
1949a1 |
QM_ACC_WB_NOT_READY_TIMEOUT,
|
|
Matthias Brugger |
1949a1 |
.fe = 0,
|
|
Matthias Brugger |
1949a1 |
- .msi = QM_DB_RANDOM_INVALID,
|
|
Matthias Brugger |
1949a1 |
.ecc_2bits_mask = SEC_CORE_INT_STATUS_M_ECC,
|
|
Matthias Brugger |
1949a1 |
.msi_wr_port = BIT(0),
|
|
Matthias Brugger |
1949a1 |
.acpi_rst = "SRST",
|
|
Matthias Brugger |
1949a1 |
diff --git a/drivers/crypto/hisilicon/zip/zip_main.c b/drivers/crypto/hisilicon/zip/zip_main.c
|
|
Matthias Brugger |
1949a1 |
index 0ddd56a0a075..6161b1025b7f 100644
|
|
Matthias Brugger |
1949a1 |
--- a/drivers/crypto/hisilicon/zip/zip_main.c
|
|
Matthias Brugger |
1949a1 |
+++ b/drivers/crypto/hisilicon/zip/zip_main.c
|
|
Matthias Brugger |
1949a1 |
@@ -643,7 +643,6 @@ static const struct hisi_qm_err_ini hisi_zip_err_ini = {
|
|
Matthias Brugger |
1949a1 |
.nfe = QM_BASE_NFE |
|
|
Matthias Brugger |
1949a1 |
QM_ACC_WB_NOT_READY_TIMEOUT,
|
|
Matthias Brugger |
1949a1 |
.fe = 0,
|
|
Matthias Brugger |
1949a1 |
- .msi = QM_DB_RANDOM_INVALID,
|
|
Matthias Brugger |
1949a1 |
.ecc_2bits_mask = HZIP_CORE_INT_STATUS_M_ECC,
|
|
Matthias Brugger |
1949a1 |
.msi_wr_port = HZIP_WR_PORT,
|
|
Matthias Brugger |
1949a1 |
.acpi_rst = "ZRST",
|
|
Matthias Brugger |
1949a1 |
--
|
|
Matthias Brugger |
1949a1 |
2.29.2
|
|
Matthias Brugger |
1949a1 |
|