crypto: hisilicon/qm - increase device doorbell timeout

When both the accelerator device and SMMU are busy,
the processing time of the doorbell may be prolonged.
As a result, the doorbell may timeout, especially in the sva
scenario. Therefore, the doorbell timeout is increased.

Signed-off-by: Weili Qian <qianweili@huawei.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
Weili Qian 2023-07-14 19:41:37 +08:00 committed by Herbert Xu
parent 4b3ee3ff2d
commit b925a0cc87
1 changed files with 6 additions and 0 deletions

View File

@ -88,6 +88,8 @@
#define QM_DB_PRIORITY_SHIFT_V1 48 #define QM_DB_PRIORITY_SHIFT_V1 48
#define QM_PAGE_SIZE 0x0034 #define QM_PAGE_SIZE 0x0034
#define QM_QP_DB_INTERVAL 0x10000 #define QM_QP_DB_INTERVAL 0x10000
#define QM_DB_TIMEOUT_CFG 0x100074
#define QM_DB_TIMEOUT_SET 0x1fffff
#define QM_MEM_START_INIT 0x100040 #define QM_MEM_START_INIT 0x100040
#define QM_MEM_INIT_DONE 0x100044 #define QM_MEM_INIT_DONE 0x100044
@ -5381,6 +5383,8 @@ int hisi_qm_init(struct hisi_qm *qm)
goto err_pci_init; goto err_pci_init;
if (qm->fun_type == QM_HW_PF) { if (qm->fun_type == QM_HW_PF) {
/* Set the doorbell timeout to QM_DB_TIMEOUT_CFG ns. */
writel(QM_DB_TIMEOUT_SET, qm->io_base + QM_DB_TIMEOUT_CFG);
qm_disable_clock_gate(qm); qm_disable_clock_gate(qm);
ret = qm_dev_mem_reset(qm); ret = qm_dev_mem_reset(qm);
if (ret) { if (ret) {
@ -5548,6 +5552,8 @@ static int qm_rebuild_for_resume(struct hisi_qm *qm)
qm_cmd_init(qm); qm_cmd_init(qm);
hisi_qm_dev_err_init(qm); hisi_qm_dev_err_init(qm);
/* Set the doorbell timeout to QM_DB_TIMEOUT_CFG ns. */
writel(QM_DB_TIMEOUT_SET, qm->io_base + QM_DB_TIMEOUT_CFG);
qm_disable_clock_gate(qm); qm_disable_clock_gate(qm);
ret = qm_dev_mem_reset(qm); ret = qm_dev_mem_reset(qm);
if (ret) if (ret)