]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
scsi: hisi_sas: Code cleanup and minor bug fixes
authorXiang Chen <chenxiang66@hisilicon.com>
Wed, 7 Mar 2018 12:25:12 +0000 (20:25 +0800)
committerStefan Bader <stefan.bader@canonical.com>
Wed, 23 May 2018 09:11:59 +0000 (11:11 +0200)
BugLink: https://bugs.launchpad.net/bugs/1768974
The patch does some code cleanup and fixes some small bugs:

- Correct return status of phy_up_v3_hw() and phy_bcast_v3_hw()
- Add static for function phy_get_max_linkrate_v3_hw()
- Change exception return status when no reset method
- Change magic value to ts->stat in slot_complete_vx_hw()
- Remove unnecessary check for dev_is_sata()
- Fix some issues of alignment and indents (Authored by Xiaofei Tan in
  another patch, but added here to be practical)

Signed-off-by: Xiaofei Tan <tanxiaofei@huawei.com>
Signed-off-by: Xiang Chen <chenxiang66@hisilicon.com>
Signed-off-by: John Garry <john.garry@huawei.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
(cherry picked from commit edafeef4f28ded4ea9ba7876cc35861d43c7b2b1)
Signed-off-by: dann frazier <dann.frazier@canonical.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>
Acked-by: Kleber Sacilotto de Souza <kleber.souza@canonical.com>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
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
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c

index b689ec9a08710333b95f9f71b1436fb03544979c..38ad2b72f29c831c7176795641a7233bade3f1fe 100644 (file)
@@ -33,7 +33,7 @@ u8 hisi_sas_get_ata_protocol(struct host_to_dev_fis *fis, int direction)
        case ATA_CMD_FPDMA_RECV:
        case ATA_CMD_FPDMA_SEND:
        case ATA_CMD_NCQ_NON_DATA:
-       return HISI_SAS_SATA_PROTOCOL_FPDMA;
+               return HISI_SAS_SATA_PROTOCOL_FPDMA;
 
        case ATA_CMD_DOWNLOAD_MICRO:
        case ATA_CMD_ID_ATA:
@@ -45,7 +45,7 @@ u8 hisi_sas_get_ata_protocol(struct host_to_dev_fis *fis, int direction)
        case ATA_CMD_WRITE_LOG_EXT:
        case ATA_CMD_PIO_WRITE:
        case ATA_CMD_PIO_WRITE_EXT:
-       return HISI_SAS_SATA_PROTOCOL_PIO;
+               return HISI_SAS_SATA_PROTOCOL_PIO;
 
        case ATA_CMD_DSM:
        case ATA_CMD_DOWNLOAD_MICRO_DMA:
@@ -64,7 +64,7 @@ u8 hisi_sas_get_ata_protocol(struct host_to_dev_fis *fis, int direction)
        case ATA_CMD_WRITE_LOG_DMA_EXT:
        case ATA_CMD_WRITE_STREAM_DMA_EXT:
        case ATA_CMD_ZAC_MGMT_IN:
-       return HISI_SAS_SATA_PROTOCOL_DMA;
+               return HISI_SAS_SATA_PROTOCOL_DMA;
 
        case ATA_CMD_CHK_POWER:
        case ATA_CMD_DEV_RESET:
@@ -77,21 +77,21 @@ u8 hisi_sas_get_ata_protocol(struct host_to_dev_fis *fis, int direction)
        case ATA_CMD_STANDBY:
        case ATA_CMD_STANDBYNOW1:
        case ATA_CMD_ZAC_MGMT_OUT:
-       return HISI_SAS_SATA_PROTOCOL_NONDATA;
+               return HISI_SAS_SATA_PROTOCOL_NONDATA;
        default:
        {
                if (fis->command == ATA_CMD_SET_MAX) {
                        switch (fis->features) {
                        case ATA_SET_MAX_PASSWD:
                        case ATA_SET_MAX_LOCK:
-                       return HISI_SAS_SATA_PROTOCOL_PIO;
+                               return HISI_SAS_SATA_PROTOCOL_PIO;
 
                        case ATA_SET_MAX_PASSWD_DMA:
                        case ATA_SET_MAX_UNLOCK_DMA:
-                       return HISI_SAS_SATA_PROTOCOL_DMA;
+                               return HISI_SAS_SATA_PROTOCOL_DMA;
 
                        default:
-                       return HISI_SAS_SATA_PROTOCOL_NONDATA;
+                               return HISI_SAS_SATA_PROTOCOL_NONDATA;
                        }
                }
                if (direction == DMA_NONE)
index 8dd0e6a6ff8a0700c73d047172ee817c2ff264e2..84a0ccc4daf585723b3265de0cb91f7e632932de 100644 (file)
@@ -651,8 +651,10 @@ static int reset_hw_v1_hw(struct hisi_hba *hisi_hba)
                        dev_err(dev, "De-reset failed\n");
                        return -EIO;
                }
-       } else
+       } else {
                dev_warn(dev, "no reset method\n");
+               return -EINVAL;
+       }
 
        return 0;
 }
index bd1a48a590bc0db89166dd77ffdfe0a2ec0ca476..f89fb9a49ea972c21d33db91f77b049b87484355 100644 (file)
@@ -1095,8 +1095,10 @@ static int reset_hw_v2_hw(struct hisi_hba *hisi_hba)
                        dev_err(dev, "SAS de-reset fail.\n");
                        return -EIO;
                }
-       } else
-               dev_warn(dev, "no reset method\n");
+       } else {
+               dev_err(dev, "no reset method\n");
+               return -EINVAL;
+       }
 
        return 0;
 }
@@ -2408,7 +2410,7 @@ slot_complete_v2_hw(struct hisi_hba *hisi_hba, struct hisi_sas_slot *slot)
                spin_lock_irqsave(&hisi_hba->lock, flags);
                hisi_sas_slot_task_free(hisi_hba, task, slot);
                spin_unlock_irqrestore(&hisi_hba->lock, flags);
-               return -1;
+               return ts->stat;
        }
 
        if (unlikely(!sas_dev)) {
@@ -2667,7 +2669,7 @@ static int prep_abort_v2_hw(struct hisi_hba *hisi_hba,
        /* dw0 */
        hdr->dw0 = cpu_to_le32((5 << CMD_HDR_CMD_OFF) | /*abort*/
                               (port->id << CMD_HDR_PORT_OFF) |
-                              ((dev_is_sata(dev) ? 1:0) <<
+                              (dev_is_sata(dev) <<
                                CMD_HDR_ABORT_DEVICE_TYPE_OFF) |
                               (abort_flag << CMD_HDR_ABORT_FLAG_OFF));
 
index 26ff51b272953b97ce951f1546d2e226db70e1ba..6f3e5ba6b472f25c14f192e0bae9fa2ded493b22 100644 (file)
@@ -669,8 +669,10 @@ static int reset_hw_v3_hw(struct hisi_hba *hisi_hba)
                        dev_err(dev, "Reset failed\n");
                        return -EIO;
                }
-       } else
+       } else {
                dev_err(dev, "no reset method!\n");
+               return -EINVAL;
+       }
 
        return 0;
 }
@@ -730,7 +732,7 @@ static void phy_hard_reset_v3_hw(struct hisi_hba *hisi_hba, int phy_no)
        start_phy_v3_hw(hisi_hba, phy_no);
 }
 
-enum sas_linkrate phy_get_max_linkrate_v3_hw(void)
+static enum sas_linkrate phy_get_max_linkrate_v3_hw(void)
 {
        return SAS_LINK_RATE_12_0_GBPS;
 }
@@ -1095,7 +1097,7 @@ static int prep_abort_v3_hw(struct hisi_hba *hisi_hba,
        /* dw0 */
        hdr->dw0 = cpu_to_le32((5 << CMD_HDR_CMD_OFF) | /*abort*/
                               (port->id << CMD_HDR_PORT_OFF) |
-                                  ((dev_is_sata(dev) ? 1:0)
+                                  (dev_is_sata(dev)
                                        << CMD_HDR_ABORT_DEVICE_TYPE_OFF) |
                                        (abort_flag
                                         << CMD_HDR_ABORT_FLAG_OFF));
@@ -1111,9 +1113,9 @@ static int prep_abort_v3_hw(struct hisi_hba *hisi_hba,
        return 0;
 }
 
-static int phy_up_v3_hw(int phy_no, struct hisi_hba *hisi_hba)
+static irqreturn_t phy_up_v3_hw(int phy_no, struct hisi_hba *hisi_hba)
 {
-       int i, res = 0;
+       int i, res;
        u32 context, port_id, link_rate;
        struct hisi_sas_phy *phy = &hisi_hba->phy[phy_no];
        struct asd_sas_phy *sas_phy = &phy->sas_phy;
@@ -1185,7 +1187,7 @@ static int phy_up_v3_hw(int phy_no, struct hisi_hba *hisi_hba)
        phy->port_id = port_id;
        phy->phy_attached = 1;
        hisi_sas_notify_phy_event(phy, HISI_PHYE_PHY_UP);
-
+       res = IRQ_HANDLED;
 end:
        hisi_sas_phy_write32(hisi_hba, phy_no, CHL_INT0,
                             CHL_INT0_SL_PHY_ENABLE_MSK);
@@ -1194,7 +1196,7 @@ end:
        return res;
 }
 
-static int phy_down_v3_hw(int phy_no, struct hisi_hba *hisi_hba)
+static irqreturn_t phy_down_v3_hw(int phy_no, struct hisi_hba *hisi_hba)
 {
        u32 phy_state, sl_ctrl, txid_auto;
        struct device *dev = hisi_hba->dev;
@@ -1216,10 +1218,10 @@ static int phy_down_v3_hw(int phy_no, struct hisi_hba *hisi_hba)
        hisi_sas_phy_write32(hisi_hba, phy_no, CHL_INT0, CHL_INT0_NOT_RDY_MSK);
        hisi_sas_phy_write32(hisi_hba, phy_no, PHYCTRL_NOT_RDY_MSK, 0);
 
-       return 0;
+       return IRQ_HANDLED;
 }
 
-static void phy_bcast_v3_hw(int phy_no, struct hisi_hba *hisi_hba)
+static irqreturn_t phy_bcast_v3_hw(int phy_no, struct hisi_hba *hisi_hba)
 {
        struct hisi_sas_phy *phy = &hisi_hba->phy[phy_no];
        struct asd_sas_phy *sas_phy = &phy->sas_phy;
@@ -1230,6 +1232,8 @@ static void phy_bcast_v3_hw(int phy_no, struct hisi_hba *hisi_hba)
        hisi_sas_phy_write32(hisi_hba, phy_no, CHL_INT0,
                             CHL_INT0_SL_RX_BCST_ACK_MSK);
        hisi_sas_phy_write32(hisi_hba, phy_no, SL_RX_BCAST_CHK_MSK, 0);
+
+       return IRQ_HANDLED;
 }
 
 static irqreturn_t int_phy_up_down_bcast_v3_hw(int irq_no, void *p)
@@ -1256,7 +1260,9 @@ static irqreturn_t int_phy_up_down_bcast_v3_hw(int irq_no, void *p)
                                                res = IRQ_HANDLED;
                                if (irq_value & CHL_INT0_SL_RX_BCST_ACK_MSK)
                                        /* phy bcast */
-                                       phy_bcast_v3_hw(phy_no, hisi_hba);
+                                       if (phy_bcast_v3_hw(phy_no, hisi_hba)
+                                                       == IRQ_HANDLED)
+                                               res = IRQ_HANDLED;
                        } else {
                                if (irq_value & CHL_INT0_NOT_RDY_MSK)
                                        /* phy down */
@@ -1572,7 +1578,7 @@ slot_complete_v3_hw(struct hisi_hba *hisi_hba, struct hisi_sas_slot *slot)
                spin_lock_irqsave(&hisi_hba->lock, flags);
                hisi_sas_slot_task_free(hisi_hba, task, slot);
                spin_unlock_irqrestore(&hisi_hba->lock, flags);
-               return -1;
+               return ts->stat;
        }
 
        if (unlikely(!sas_dev)) {