crypto: hisilicon/qm - increase device doorbell timeout
authorWeili Qian <qianweili@huawei.com>
Fri, 14 Jul 2023 11:41:37 +0000 (19:41 +0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Sat, 22 Jul 2023 01:59:39 +0000 (13:59 +1200)
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>
drivers/crypto/hisilicon/qm.c

index fdff87c..a99fd58 100644 (file)
@@ -88,6 +88,8 @@
 #define QM_DB_PRIORITY_SHIFT_V1                48
 #define QM_PAGE_SIZE                   0x0034
 #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_INIT_DONE               0x100044
@@ -5381,6 +5383,8 @@ int hisi_qm_init(struct hisi_qm *qm)
                goto err_pci_init;
 
        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);
                ret = qm_dev_mem_reset(qm);
                if (ret) {
@@ -5548,6 +5552,8 @@ static int qm_rebuild_for_resume(struct hisi_qm *qm)
 
        qm_cmd_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);
        ret = qm_dev_mem_reset(qm);
        if (ret)