}
        hisi_sas_dereg_device(hisi_hba, device);
 
-       if (dev_is_sata(device)) {
+       rc = hisi_sas_debug_I_T_nexus_reset(device);
+       if (rc == TMF_RESP_FUNC_COMPLETE && dev_is_sata(device)) {
+               struct sas_phy *local_phy;
+
                rc = hisi_sas_softreset_ata_disk(device);
-               if (rc == TMF_RESP_FUNC_FAILED)
-                       return TMF_RESP_FUNC_FAILED;
+               switch (rc) {
+               case -ECOMM:
+                       rc = -ENODEV;
+                       break;
+               case TMF_RESP_FUNC_FAILED:
+               case -EMSGSIZE:
+               case -EIO:
+                       local_phy = sas_get_local_phy(device);
+                       rc = sas_phy_enable(local_phy, 0);
+                       if (!rc) {
+                               local_phy->enabled = 0;
+                               dev_err(dev, "Disabled local phy of ATA disk %016llx due to softreset fail (%d)\n",
+                                       SAS_ADDR(device->sas_addr), rc);
+                               rc = -ENODEV;
+                       }
+                       sas_put_local_phy(local_phy);
+                       break;
+               default:
+                       break;
+               }
        }
 
-       rc = hisi_sas_debug_I_T_nexus_reset(device);
-
        if ((rc == TMF_RESP_FUNC_COMPLETE) || (rc == -ENODEV))
                hisi_sas_release_task(hisi_hba, device);