Skip to content

Commit 80736a9

Browse files
Weili Qianherbertx
authored andcommitted
crypto: hisilicon - enable error reporting again
When an error occurs on the device, an interrupt is reported. When the firmware forwards the interrupt to the driver and masks the error. If the driver does not enable error reporting when an error does not need to be reset, the device does not report the error to the driver when the error occurs again. Therefore, after the driver obtains the information, the error reporting needs to be enabled again. Signed-off-by: Weili Qian <qianweili@huawei.com> Signed-off-by: Chenghai Huang <huangchenghai2@huawei.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
1 parent 3d716c5 commit 80736a9

4 files changed

Lines changed: 41 additions & 0 deletions

File tree

drivers/crypto/hisilicon/hpre/hpre_main.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1399,6 +1399,15 @@ static void hpre_disable_error_report(struct hisi_qm *qm, u32 err_type)
13991399
writel(nfe_mask & (~err_type), qm->io_base + HPRE_RAS_NFE_ENB);
14001400
}
14011401

1402+
static void hpre_enable_error_report(struct hisi_qm *qm)
1403+
{
1404+
u32 nfe_mask = qm->err_info.dev_err.nfe;
1405+
u32 ce_mask = qm->err_info.dev_err.ce;
1406+
1407+
writel(nfe_mask, qm->io_base + HPRE_RAS_NFE_ENB);
1408+
writel(ce_mask, qm->io_base + HPRE_RAS_CE_ENB);
1409+
}
1410+
14021411
static void hpre_open_axi_master_ooo(struct hisi_qm *qm)
14031412
{
14041413
u32 value;
@@ -1426,6 +1435,8 @@ static enum acc_err_result hpre_get_err_result(struct hisi_qm *qm)
14261435
return ACC_ERR_NEED_RESET;
14271436
}
14281437
hpre_clear_hw_err_status(qm, err_status);
1438+
/* Avoid firmware disable error report, re-enable. */
1439+
hpre_enable_error_report(qm);
14291440
}
14301441

14311442
return ACC_ERR_RECOVERED;

drivers/crypto/hisilicon/sec2/sec_main.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1112,6 +1112,15 @@ static void sec_disable_error_report(struct hisi_qm *qm, u32 err_type)
11121112
writel(nfe_mask & (~err_type), qm->io_base + SEC_RAS_NFE_REG);
11131113
}
11141114

1115+
static void sec_enable_error_report(struct hisi_qm *qm)
1116+
{
1117+
u32 nfe_mask = qm->err_info.dev_err.nfe;
1118+
u32 ce_mask = qm->err_info.dev_err.ce;
1119+
1120+
writel(nfe_mask, qm->io_base + SEC_RAS_NFE_REG);
1121+
writel(ce_mask, qm->io_base + SEC_RAS_CE_REG);
1122+
}
1123+
11151124
static void sec_open_axi_master_ooo(struct hisi_qm *qm)
11161125
{
11171126
u32 val;
@@ -1137,6 +1146,8 @@ static enum acc_err_result sec_get_err_result(struct hisi_qm *qm)
11371146
return ACC_ERR_NEED_RESET;
11381147
}
11391148
sec_clear_hw_err_status(qm, err_status);
1149+
/* Avoid firmware disable error report, re-enable. */
1150+
sec_enable_error_report(qm);
11401151
}
11411152

11421153
return ACC_ERR_RECOVERED;

drivers/crypto/hisilicon/zip/dae_main.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,12 @@ static void hisi_dae_disable_error_report(struct hisi_qm *qm, u32 err_type)
175175
writel(DAE_ERR_NFE_MASK & (~err_type), qm->io_base + DAE_ERR_NFE_OFFSET);
176176
}
177177

178+
static void hisi_dae_enable_error_report(struct hisi_qm *qm)
179+
{
180+
writel(DAE_ERR_CE_MASK, qm->io_base + DAE_ERR_CE_OFFSET);
181+
writel(DAE_ERR_NFE_MASK, qm->io_base + DAE_ERR_NFE_OFFSET);
182+
}
183+
178184
static void hisi_dae_log_hw_error(struct hisi_qm *qm, u32 err_type)
179185
{
180186
const struct hisi_dae_hw_error *err = dae_hw_error;
@@ -216,6 +222,8 @@ enum acc_err_result hisi_dae_get_err_result(struct hisi_qm *qm)
216222
return ACC_ERR_NEED_RESET;
217223
}
218224
hisi_dae_clear_hw_err_status(qm, err_status);
225+
/* Avoid firmware disable error report, re-enable. */
226+
hisi_dae_enable_error_report(qm);
219227

220228
return ACC_ERR_RECOVERED;
221229
}

drivers/crypto/hisilicon/zip/zip_main.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1188,6 +1188,15 @@ static void hisi_zip_disable_error_report(struct hisi_qm *qm, u32 err_type)
11881188
writel(nfe_mask & (~err_type), qm->io_base + HZIP_CORE_INT_RAS_NFE_ENB);
11891189
}
11901190

1191+
static void hisi_zip_enable_error_report(struct hisi_qm *qm)
1192+
{
1193+
u32 nfe_mask = qm->err_info.dev_err.nfe;
1194+
u32 ce_mask = qm->err_info.dev_err.ce;
1195+
1196+
writel(nfe_mask, qm->io_base + HZIP_CORE_INT_RAS_NFE_ENB);
1197+
writel(ce_mask, qm->io_base + HZIP_CORE_INT_RAS_CE_ENB);
1198+
}
1199+
11911200
static void hisi_zip_open_axi_master_ooo(struct hisi_qm *qm)
11921201
{
11931202
u32 val;
@@ -1236,6 +1245,8 @@ static enum acc_err_result hisi_zip_get_err_result(struct hisi_qm *qm)
12361245
zip_result = ACC_ERR_NEED_RESET;
12371246
} else {
12381247
hisi_zip_clear_hw_err_status(qm, err_status);
1248+
/* Avoid firmware disable error report, re-enable. */
1249+
hisi_zip_enable_error_report(qm);
12391250
}
12401251
}
12411252

0 commit comments

Comments
 (0)