scsi: hisi_sas: shutdown axi bus to avoid exception CQ returned
[linux-2.6-microblaze.git] / drivers / scsi / hisi_sas / hisi_sas_v3_hw.c
index 726ac4b..d5eabfc 100644 (file)
@@ -1646,6 +1646,7 @@ static irqreturn_t fatal_axi_int_v3_hw(int irq_no, void *p)
        u32 irq_value, irq_msk;
        struct hisi_hba *hisi_hba = p;
        struct device *dev = hisi_hba->dev;
+       struct pci_dev *pdev = hisi_hba->pci_dev;
        int i;
 
        irq_msk = hisi_sas_read32(hisi_hba, ENT_INT_SRC_MSK3);
@@ -1677,6 +1678,17 @@ static irqreturn_t fatal_axi_int_v3_hw(int irq_no, void *p)
                                error->msg, irq_value);
                        queue_work(hisi_hba->wq, &hisi_hba->rst_work);
                }
+
+               if (pdev->revision < 0x21) {
+                       u32 reg_val;
+
+                       reg_val = hisi_sas_read32(hisi_hba,
+                                                 AXI_MASTER_CFG_BASE +
+                                                 AM_CTRL_GLOBAL);
+                       reg_val |= AM_CTRL_SHUTDOWN_REQ_MSK;
+                       hisi_sas_write32(hisi_hba, AXI_MASTER_CFG_BASE +
+                                        AM_CTRL_GLOBAL, reg_val);
+               }
        }
 
        if (irq_value & BIT(ENT_INT_SRC3_ITC_INT_OFF)) {