scsi: hisi_sas: move PHY init to hisi_sas_scan_start()
authorJohn Garry <john.garry@huawei.com>
Wed, 22 Mar 2017 17:25:19 +0000 (01:25 +0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 23 Mar 2017 15:12:01 +0000 (11:12 -0400)
Relocate the PHY init code from LLDD hw init path to
hisi_sas_scan_start().

Signed-off-by: John Garry <john.garry@huawei.com>
Signed-off-by: Xiang Chen <chenxiang66@hisilicon.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/hisi_sas/hisi_sas.h
drivers/scsi/hisi_sas/hisi_sas_main.c
drivers/scsi/hisi_sas/hisi_sas_v1_hw.c
drivers/scsi/hisi_sas/hisi_sas_v2_hw.c

index fd76a02873a5315ab0f04e59da047b7b5b2653bb..2135de9a654b8238d610c3b38c1d8c5c9fa1ab3f 100644 (file)
@@ -167,6 +167,7 @@ struct hisi_sas_hw {
                          int device_id, int abort_flag, int tag_to_abort);
        int (*slot_complete)(struct hisi_hba *hisi_hba,
                             struct hisi_sas_slot *slot, int abort);
+       void (*phys_init)(struct hisi_hba *hisi_hba);
        void (*phy_enable)(struct hisi_hba *hisi_hba, int phy_no);
        void (*phy_disable)(struct hisi_hba *hisi_hba, int phy_no);
        void (*phy_hard_reset)(struct hisi_hba *hisi_hba, int phy_no);
@@ -195,7 +196,6 @@ struct hisi_hba {
        u8 sas_addr[SAS_ADDR_SIZE];
 
        int n_phy;
-       int scan_finished;
        spinlock_t lock;
 
        struct timer_list timer;
index cbaef90e584d3be1453cef46967573be4251fbda..b86a228786094c5c7cdcdebf866b23b4a26cc31d 100644 (file)
@@ -493,12 +493,8 @@ static int hisi_sas_slave_configure(struct scsi_device *sdev)
 static void hisi_sas_scan_start(struct Scsi_Host *shost)
 {
        struct hisi_hba *hisi_hba = shost_priv(shost);
-       int i;
-
-       for (i = 0; i < hisi_hba->n_phy; ++i)
-               hisi_sas_bytes_dmaed(hisi_hba, i);
 
-       hisi_hba->scan_finished = 1;
+       hisi_hba->hw->phys_init(hisi_hba);
 }
 
 static int hisi_sas_scan_finished(struct Scsi_Host *shost, unsigned long time)
@@ -506,7 +502,8 @@ static int hisi_sas_scan_finished(struct Scsi_Host *shost, unsigned long time)
        struct hisi_hba *hisi_hba = shost_priv(shost);
        struct sas_ha_struct *sha = &hisi_hba->sha;
 
-       if (hisi_hba->scan_finished == 0)
+       /* Wait for PHY up interrupt to occur */
+       if (time < HZ)
                return 0;
 
        sas_drain_work(sha);
index 022ad10e102ccf3ac21df92b831454090db9cb51..43988eb040280cd0ac1729e3e61d427c2259b9f1 100644 (file)
@@ -1847,8 +1847,6 @@ static int hisi_sas_v1_init(struct hisi_hba *hisi_hba)
        if (rc)
                return rc;
 
-       phys_init_v1_hw(hisi_hba);
-
        return 0;
 }
 
@@ -1862,6 +1860,7 @@ static const struct hisi_sas_hw hisi_sas_v1_hw = {
        .get_free_slot = get_free_slot_v1_hw,
        .start_delivery = start_delivery_v1_hw,
        .slot_complete = slot_complete_v1_hw,
+       .phys_init = phys_init_v1_hw,
        .phy_enable = enable_phy_v1_hw,
        .phy_disable = disable_phy_v1_hw,
        .phy_hard_reset = phy_hard_reset_v1_hw,
index 53651cfd9da1952aa1e7e72295af6064dc5d7ebe..73e4f660ebf9113e41c1cfcb550e32fc50d3368c 100644 (file)
@@ -2864,8 +2864,6 @@ static int hisi_sas_v2_init(struct hisi_hba *hisi_hba)
        if (rc)
                return rc;
 
-       phys_init_v2_hw(hisi_hba);
-
        return 0;
 }
 
@@ -2965,6 +2963,7 @@ static const struct hisi_sas_hw hisi_sas_v2_hw = {
        .get_free_slot = get_free_slot_v2_hw,
        .start_delivery = start_delivery_v2_hw,
        .slot_complete = slot_complete_v2_hw,
+       .phys_init = phys_init_v2_hw,
        .phy_enable = enable_phy_v2_hw,
        .phy_disable = disable_phy_v2_hw,
        .phy_hard_reset = phy_hard_reset_v2_hw,