diff options
Diffstat (limited to 'drivers/ide/pci/siimage.c')
-rw-r--r-- | drivers/ide/pci/siimage.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/ide/pci/siimage.c b/drivers/ide/pci/siimage.c index 2b9961b88135..022d244f2eb0 100644 --- a/drivers/ide/pci/siimage.c +++ b/drivers/ide/pci/siimage.c | |||
@@ -701,6 +701,7 @@ static unsigned int setup_mmio_siimage (struct pci_dev *dev, const char *name) | |||
701 | unsigned long barsize = pci_resource_len(dev, 5); | 701 | unsigned long barsize = pci_resource_len(dev, 5); |
702 | u8 tmpbyte = 0; | 702 | u8 tmpbyte = 0; |
703 | void __iomem *ioaddr; | 703 | void __iomem *ioaddr; |
704 | u32 tmp, irq_mask; | ||
704 | 705 | ||
705 | /* | 706 | /* |
706 | * Drop back to PIO if we can't map the mmio. Some | 707 | * Drop back to PIO if we can't map the mmio. Some |
@@ -726,6 +727,14 @@ static unsigned int setup_mmio_siimage (struct pci_dev *dev, const char *name) | |||
726 | pci_set_drvdata(dev, (void *) ioaddr); | 727 | pci_set_drvdata(dev, (void *) ioaddr); |
727 | 728 | ||
728 | if (pdev_is_sata(dev)) { | 729 | if (pdev_is_sata(dev)) { |
730 | /* make sure IDE0/1 interrupts are not masked */ | ||
731 | irq_mask = (1 << 22) | (1 << 23); | ||
732 | tmp = readl(ioaddr + 0x48); | ||
733 | if (tmp & irq_mask) { | ||
734 | tmp &= ~irq_mask; | ||
735 | writel(tmp, ioaddr + 0x48); | ||
736 | readl(ioaddr + 0x48); /* flush */ | ||
737 | } | ||
729 | writel(0, ioaddr + 0x148); | 738 | writel(0, ioaddr + 0x148); |
730 | writel(0, ioaddr + 0x1C8); | 739 | writel(0, ioaddr + 0x1C8); |
731 | } | 740 | } |