aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/megaraid
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/megaraid')
-rw-r--r--drivers/scsi/megaraid/megaraid_sas_fusion.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c
index 52f6a158477a..ec2e097f7737 100644
--- a/drivers/scsi/megaraid/megaraid_sas_fusion.c
+++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c
@@ -101,6 +101,10 @@ extern u32 megasas_dbg_lvl;
101void 101void
102megasas_enable_intr_fusion(struct megasas_register_set __iomem *regs) 102megasas_enable_intr_fusion(struct megasas_register_set __iomem *regs)
103{ 103{
104 /* For Thunderbolt/Invader also clear intr on enable */
105 writel(~0, &regs->outbound_intr_status);
106 readl(&regs->outbound_intr_status);
107
104 writel(~MFI_FUSION_ENABLE_INTERRUPT_MASK, &(regs)->outbound_intr_mask); 108 writel(~MFI_FUSION_ENABLE_INTERRUPT_MASK, &(regs)->outbound_intr_mask);
105 109
106 /* Dummy readl to force pci flush */ 110 /* Dummy readl to force pci flush */
@@ -1806,10 +1810,13 @@ irqreturn_t megasas_isr_fusion(int irq, void *devp)
1806 } 1810 }
1807 1811
1808 /* If we are resetting, bail */ 1812 /* If we are resetting, bail */
1809 if (test_bit(MEGASAS_FUSION_IN_RESET, &instance->reset_flags)) 1813 if (test_bit(MEGASAS_FUSION_IN_RESET, &instance->reset_flags)) {
1814 instance->instancet->clear_intr(instance->reg_set);
1810 return IRQ_HANDLED; 1815 return IRQ_HANDLED;
1816 }
1811 1817
1812 if (!complete_cmd_fusion(instance)) { 1818 if (!complete_cmd_fusion(instance)) {
1819 instance->instancet->clear_intr(instance->reg_set);
1813 /* If we didn't complete any commands, check for FW fault */ 1820 /* If we didn't complete any commands, check for FW fault */
1814 fw_state = instance->instancet->read_fw_status_reg( 1821 fw_state = instance->instancet->read_fw_status_reg(
1815 instance->reg_set) & MFI_STATE_MASK; 1822 instance->reg_set) & MFI_STATE_MASK;