diff options
Diffstat (limited to 'drivers/ata/ahci.c')
-rw-r--r-- | drivers/ata/ahci.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index e45b18ee04c3..f6b3e31f63cd 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c | |||
@@ -1164,7 +1164,7 @@ static inline void ahci_gtf_filter_workaround(struct ata_host *host) | |||
1164 | #endif | 1164 | #endif |
1165 | 1165 | ||
1166 | static int ahci_init_interrupts(struct pci_dev *pdev, unsigned int n_ports, | 1166 | static int ahci_init_interrupts(struct pci_dev *pdev, unsigned int n_ports, |
1167 | struct ahci_host_priv *hpriv) | 1167 | struct ahci_host_priv *hpriv) |
1168 | { | 1168 | { |
1169 | int nvec; | 1169 | int nvec; |
1170 | 1170 | ||
@@ -1189,6 +1189,13 @@ static int ahci_init_interrupts(struct pci_dev *pdev, unsigned int n_ports, | |||
1189 | else if (nvec < 0) | 1189 | else if (nvec < 0) |
1190 | goto intx; | 1190 | goto intx; |
1191 | 1191 | ||
1192 | /* fallback to single MSI mode if the controller enforced MRSM mode */ | ||
1193 | if (readl(hpriv->mmio + HOST_CTL) & HOST_MRSM) { | ||
1194 | pci_disable_msi(pdev); | ||
1195 | printk(KERN_INFO "ahci: MRSM is on, fallback to single MSI\n"); | ||
1196 | goto single_msi; | ||
1197 | } | ||
1198 | |||
1192 | return nvec; | 1199 | return nvec; |
1193 | 1200 | ||
1194 | single_msi: | 1201 | single_msi: |