pm80xx: Corrected device state changes in I_T_Nexus_Reset.
authorViswas G <Viswas.G@pmcs.com>
Tue, 11 Aug 2015 09:36:26 +0000 (15:06 +0530)
committerJames Bottomley <JBottomley@Odin.com>
Thu, 27 Aug 2015 00:07:39 +0000 (17:07 -0700)
In Nexus reset the device state request are not needed.

Signed-off-by: Viswas G <Viswas.G@pmcs.com>
Reviewed-by: Suresh Thiagarajan <Suresh.Thiagarajan@pmcs.com>
Acked-by: Jack Wang <jinpu.wang@profitbricks.com>
Reviewed-by: Tomas Henzl <thenzl@redhat.com>
Signed-off-by: James Bottomley <JBottomley@Odin.com>
drivers/scsi/pm8001/pm8001_sas.c
drivers/scsi/pm8001/pm8001_sas.h

index b93f289b42b3629ed4125fa8ffcf56d5e717f842..48f4627e05a4b3de61658532567ff26933e2e732 100644 (file)
@@ -975,19 +975,27 @@ int pm8001_I_T_nexus_reset(struct domain_device *dev)
        phy = sas_get_local_phy(dev);
 
        if (dev_is_sata(dev)) {
-               DECLARE_COMPLETION_ONSTACK(completion_setstate);
                if (scsi_is_sas_phy_local(phy)) {
                        rc = 0;
                        goto out;
                }
                rc = sas_phy_reset(phy, 1);
+               if (rc) {
+                       PM8001_EH_DBG(pm8001_ha,
+                       pm8001_printk("phy reset failed for device %x\n"
+                       "with rc %d\n", pm8001_dev->device_id, rc));
+                       rc = TMF_RESP_FUNC_FAILED;
+                       goto out;
+               }
                msleep(2000);
                rc = pm8001_exec_internal_task_abort(pm8001_ha, pm8001_dev ,
                        dev, 1, 0);
-               pm8001_dev->setds_completion = &completion_setstate;
-               rc = PM8001_CHIP_DISP->set_dev_state_req(pm8001_ha,
-                       pm8001_dev, 0x01);
-               wait_for_completion(&completion_setstate);
+               if (rc) {
+                       PM8001_EH_DBG(pm8001_ha,
+                       pm8001_printk("task abort failed %x\n"
+                       "with rc %d\n", pm8001_dev->device_id, rc));
+                       rc = TMF_RESP_FUNC_FAILED;
+               }
        } else {
                rc = sas_phy_reset(phy, 1);
                msleep(2000);
index 8dd8b7840f04259293180e8e77c44c51507fe7e4..c9736cc17520fbf2242ed2fcb3a7408127aac00a 100644 (file)
@@ -569,6 +569,14 @@ struct pm8001_fw_image_header {
 #define        NCQ_READ_LOG_FLAG                       0x80000000
 #define        NCQ_ABORT_ALL_FLAG                      0x40000000
 #define        NCQ_2ND_RLE_FLAG                        0x20000000
+
+/* Device states */
+#define DS_OPERATIONAL                         0x01
+#define DS_PORT_IN_RESET                       0x02
+#define DS_IN_RECOVERY                         0x03
+#define DS_IN_ERROR                            0x04
+#define DS_NON_OPERATIONAL                     0x07
+
 /**
  * brief param structure for firmware flash update.
  */