scsi: pm80xx: Do not busy wait in MPI init check
authorakshatzen <akshatzen@google.com>
Sat, 9 Jan 2021 12:38:42 +0000 (18:08 +0530)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 13 Jan 2021 05:02:01 +0000 (00:02 -0500)
We do not need to busy wait during mpi_init_check() since it is not being
invoked in atomic context. mpi_init_check() is being called from
pm8001_pci_resume(), pm8001_pci_probe(). Hence we are replacing udelay with
msleep.

Link: https://lore.kernel.org/r/20210109123849.17098-2-Viswas.G@microchip.com
Acked-by: Jack Wang <jinpu.wang@cloud.ionos.com>
Signed-off-by: akshatzen <akshatzen@google.com>
Signed-off-by: Viswas G <Viswas.G@microchip.com>
Signed-off-by: Ruksar Devadi <Ruksar.devadi@microchip.com>
Signed-off-by: Radha Ramachandran <radha@google.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/pm8001/pm80xx_hwi.c
drivers/scsi/pm8001/pm80xx_hwi.h

index 6772b09..9c4b8b3 100644 (file)
@@ -997,7 +997,7 @@ static int mpi_init_check(struct pm8001_hba_info *pm8001_ha)
                max_wait_count = SPC_DOORBELL_CLEAR_TIMEOUT;
        }
        do {
-               udelay(1);
+               msleep(FW_READY_INTERVAL);
                value = pm8001_cr32(pm8001_ha, 0, MSGU_IBDB_SET);
                value &= SPCv_MSGU_CFG_TABLE_UPDATE;
        } while ((value != 0) && (--max_wait_count));
@@ -1010,9 +1010,9 @@ static int mpi_init_check(struct pm8001_hba_info *pm8001_ha)
                return -EBUSY;
        }
        /* check the MPI-State for initialization upto 100ms*/
-       max_wait_count = 100 * 1000;/* 100 msec */
+       max_wait_count = 5;/* 100 msec */
        do {
-               udelay(1);
+               msleep(FW_READY_INTERVAL);
                gst_len_mpistate =
                        pm8001_mr32(pm8001_ha->general_stat_tbl_addr,
                                        GST_GSTLEN_MPIS_OFFSET);
index ec48bc2..2b6b525 100644 (file)
 #define SAS_DOPNRJT_RTRY_TMO            128
 #define SAS_COPNRJT_RTRY_TMO            128
 
-#define SPCV_DOORBELL_CLEAR_TIMEOUT    (30 * 1000 * 1000) /* 30 sec */
-#define SPC_DOORBELL_CLEAR_TIMEOUT     (15 * 1000 * 1000) /* 15 sec */
+#define SPCV_DOORBELL_CLEAR_TIMEOUT    (30 * 50) /* 30 sec */
+#define SPC_DOORBELL_CLEAR_TIMEOUT     (15 * 50) /* 15 sec */
 
 /*
   Making ORR bigger than IT NEXUS LOSS which is 2000000us = 2 second.