scsi: hisi_sas: Change DMA setup lock timeout to 2.5s
authorXingui Yang <yangxingui@huawei.com>
Mon, 15 May 2023 02:41:20 +0000 (10:41 +0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 17 May 2023 01:36:40 +0000 (21:36 -0400)
DMA setup lock timeout protection is added when DMA setup frames are
received. It's a function outside the protocol and used to prevent SATA
disk I/Os from being delivered for a long time. The default value is 100ms,
it's too strict and easily triggered timeout when the disk is overloaded or
faulty. Based on the average I/O latency of 300 disks, we adjust the value
to 2.5s.

Signed-off-by: Xingui Yang <yangxingui@huawei.com>
Signed-off-by: Yihang Li <liyihang9@huawei.com>
Signed-off-by: Xiang Chen <chenxiang66@hisilicon.com>
Link: https://lore.kernel.org/r/1684118481-95908-3-git-send-email-chenxiang66@hisilicon.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c

index e279c9c0a7c4a2259ae173e149085d7f452647de..3d1869c4cb10b3fc09855a767215e9e5ce7c9355 100644 (file)
@@ -30,6 +30,7 @@
 #define SATA_INITI_D2H_STORE_ADDR_LO   0x60
 #define SATA_INITI_D2H_STORE_ADDR_HI   0x64
 #define CFG_MAX_TAG                    0x68
+#define TRANS_LOCK_ICT_TIME            0X70
 #define HGC_SAS_TX_OPEN_FAIL_RETRY_CTRL        0x84
 #define HGC_SAS_TXFAIL_RETRY_CTRL      0x88
 #define HGC_GET_ITV_TIME               0x90
@@ -634,6 +635,8 @@ static void init_reg_v3_hw(struct hisi_hba *hisi_hba)
        hisi_sas_write32(hisi_hba, DLVRY_QUEUE_ENABLE,
                         (u32)((1ULL << hisi_hba->queue_count) - 1));
        hisi_sas_write32(hisi_hba, CFG_MAX_TAG, 0xfff0400);
+       /* time / CLK_AHB = 2.5s / 2ns = 0x4A817C80 */
+       hisi_sas_write32(hisi_hba, TRANS_LOCK_ICT_TIME, 0x4A817C80);
        hisi_sas_write32(hisi_hba, HGC_SAS_TXFAIL_RETRY_CTRL, 0x108);
        hisi_sas_write32(hisi_hba, CFG_AGING_TIME, 0x1);
        hisi_sas_write32(hisi_hba, INT_COAL_EN, 0x1);
@@ -3006,6 +3009,7 @@ static const struct hisi_sas_debugfs_reg_lu debugfs_global_reg_lu[] = {
        HISI_SAS_DEBUGFS_REG(SATA_INITI_D2H_STORE_ADDR_LO),
        HISI_SAS_DEBUGFS_REG(SATA_INITI_D2H_STORE_ADDR_HI),
        HISI_SAS_DEBUGFS_REG(CFG_MAX_TAG),
+       HISI_SAS_DEBUGFS_REG(TRANS_LOCK_ICT_TIME),
        HISI_SAS_DEBUGFS_REG(HGC_SAS_TX_OPEN_FAIL_RETRY_CTRL),
        HISI_SAS_DEBUGFS_REG(HGC_SAS_TXFAIL_RETRY_CTRL),
        HISI_SAS_DEBUGFS_REG(HGC_GET_ITV_TIME),