提交 d868dd19 编写于 作者: J John W. Linville 提交者: Bartlomiej Zolnierkiewicz

[PATCH] siimage: enable interrupts on Adaptec SA-1210 card

The siimage driver proports to support the Adaptec SA-1210 SATA
controller.  However, at least some of those cards boot-up with their
interrupts disabled internally.  The siimage driver currently ignores
that fact, so that driver does not actually work with those cards.
This patch enables those interrupts on cards that need it.

[ This is implemented based on similar code in the libata-based
  sata_sil driver. ]
Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
Signed-off-by: NBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
上级 25000c2c
...@@ -701,6 +701,7 @@ static unsigned int setup_mmio_siimage (struct pci_dev *dev, const char *name) ...@@ -701,6 +701,7 @@ static unsigned int setup_mmio_siimage (struct pci_dev *dev, const char *name)
unsigned long barsize = pci_resource_len(dev, 5); unsigned long barsize = pci_resource_len(dev, 5);
u8 tmpbyte = 0; u8 tmpbyte = 0;
void __iomem *ioaddr; void __iomem *ioaddr;
u32 tmp, irq_mask;
/* /*
* Drop back to PIO if we can't map the mmio. Some * 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,6 +727,14 @@ static unsigned int setup_mmio_siimage (struct pci_dev *dev, const char *name)
pci_set_drvdata(dev, (void *) ioaddr); pci_set_drvdata(dev, (void *) ioaddr);
if (pdev_is_sata(dev)) { if (pdev_is_sata(dev)) {
/* make sure IDE0/1 interrupts are not masked */
irq_mask = (1 << 22) | (1 << 23);
tmp = readl(ioaddr + 0x48);
if (tmp & irq_mask) {
tmp &= ~irq_mask;
writel(tmp, ioaddr + 0x48);
readl(ioaddr + 0x48); /* flush */
}
writel(0, ioaddr + 0x148); writel(0, ioaddr + 0x148);
writel(0, ioaddr + 0x1C8); writel(0, ioaddr + 0x1C8);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册