scsi: hisi_sas: Drop hisi_sas_slot_abort()
[linux-2.6-microblaze.git] / drivers / scsi / hisi_sas / hisi_sas_v1_hw.c
index 05609ac..7dc6874 100644 (file)
@@ -1296,11 +1296,8 @@ static int slot_complete_v1_hw(struct hisi_hba *hisi_hba,
                !(cmplt_hdr_data & CMPLT_HDR_RSPNS_XFRD_MSK)) {
 
                slot_err_v1_hw(hisi_hba, task, slot);
-               if (unlikely(slot->abort)) {
-                       queue_work(hisi_hba->wq, &slot->abort_slot);
-                       /* immediately return and do not complete */
+               if (unlikely(slot->abort))
                        return ts->stat;
-               }
                goto out;
        }
 
@@ -1373,6 +1370,7 @@ static irqreturn_t int_phyup_v1_hw(int irq_no, void *p)
        u32 *frame_rcvd = (u32 *)sas_phy->frame_rcvd;
        struct sas_identify_frame *id = (struct sas_identify_frame *)frame_rcvd;
        irqreturn_t res = IRQ_HANDLED;
+       unsigned long flags;
 
        irq_value = hisi_sas_phy_read32(hisi_hba, phy_no, CHL_INT2);
        if (!(irq_value & CHL_INT2_SL_PHY_ENA_MSK)) {
@@ -1426,6 +1424,13 @@ static irqreturn_t int_phyup_v1_hw(int irq_no, void *p)
                        SAS_PROTOCOL_SMP;
        hisi_sas_notify_phy_event(phy, HISI_PHYE_PHY_UP);
 
+       spin_lock_irqsave(&phy->lock, flags);
+       if (phy->reset_completion) {
+               phy->in_reset = 0;
+               complete(phy->reset_completion);
+       }
+       spin_unlock_irqrestore(&phy->lock, flags);
+
 end:
        hisi_sas_phy_write32(hisi_hba, phy_no, CHL_INT2,
                             CHL_INT2_SL_PHY_ENA_MSK);
@@ -1461,7 +1466,8 @@ static irqreturn_t int_bcast_v1_hw(int irq, void *p)
                goto end;
        }
 
-       sha->notify_port_event(sas_phy, PORTE_BROADCAST_RCVD);
+       if (!test_bit(HISI_SAS_RESET_BIT, &hisi_hba->flags))
+               sha->notify_port_event(sas_phy, PORTE_BROADCAST_RCVD);
 
 end:
        hisi_sas_phy_write32(hisi_hba, phy_no, CHL_INT2,