diff options
| -rw-r--r-- | drivers/scsi/sata_mv.c | 18 | 
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/scsi/sata_mv.c b/drivers/scsi/sata_mv.c index 87f26cd60fae..3ed2f333d5a9 100644 --- a/drivers/scsi/sata_mv.c +++ b/drivers/scsi/sata_mv.c  | |||
| @@ -50,6 +50,12 @@ enum { | |||
| 50 | 50 | ||
| 51 | MV_PCI_REG_BASE = 0, | 51 | MV_PCI_REG_BASE = 0, | 
| 52 | MV_IRQ_COAL_REG_BASE = 0x18000, /* 6xxx part only */ | 52 | MV_IRQ_COAL_REG_BASE = 0x18000, /* 6xxx part only */ | 
| 53 | MV_IRQ_COAL_CAUSE = (MV_IRQ_COAL_REG_BASE + 0x08), | ||
| 54 | MV_IRQ_COAL_CAUSE_LO = (MV_IRQ_COAL_REG_BASE + 0x88), | ||
| 55 | MV_IRQ_COAL_CAUSE_HI = (MV_IRQ_COAL_REG_BASE + 0x8c), | ||
| 56 | MV_IRQ_COAL_THRESHOLD = (MV_IRQ_COAL_REG_BASE + 0xcc), | ||
| 57 | MV_IRQ_COAL_TIME_THRESHOLD = (MV_IRQ_COAL_REG_BASE + 0xd0), | ||
| 58 | |||
| 53 | MV_SATAHC0_REG_BASE = 0x20000, | 59 | MV_SATAHC0_REG_BASE = 0x20000, | 
| 54 | MV_FLASH_CTL = 0x1046c, | 60 | MV_FLASH_CTL = 0x1046c, | 
| 55 | MV_GPIO_PORT_CTL = 0x104f0, | 61 | MV_GPIO_PORT_CTL = 0x104f0, | 
| @@ -1448,6 +1454,7 @@ static irqreturn_t mv_interrupt(int irq, void *dev_instance, | |||
| 1448 | struct ata_host_set *host_set = dev_instance; | 1454 | struct ata_host_set *host_set = dev_instance; | 
| 1449 | unsigned int hc, handled = 0, n_hcs; | 1455 | unsigned int hc, handled = 0, n_hcs; | 
| 1450 | void __iomem *mmio = host_set->mmio_base; | 1456 | void __iomem *mmio = host_set->mmio_base; | 
| 1457 | struct mv_host_priv *hpriv; | ||
| 1451 | u32 irq_stat; | 1458 | u32 irq_stat; | 
| 1452 | 1459 | ||
| 1453 | irq_stat = readl(mmio + HC_MAIN_IRQ_CAUSE_OFS); | 1460 | irq_stat = readl(mmio + HC_MAIN_IRQ_CAUSE_OFS); | 
| @@ -1469,6 +1476,17 @@ static irqreturn_t mv_interrupt(int irq, void *dev_instance, | |||
| 1469 | handled++; | 1476 | handled++; | 
| 1470 | } | 1477 | } | 
| 1471 | } | 1478 | } | 
| 1479 | |||
| 1480 | hpriv = host_set->private_data; | ||
| 1481 | if (IS_60XX(hpriv)) { | ||
| 1482 | /* deal with the interrupt coalescing bits */ | ||
| 1483 | if (irq_stat & (TRAN_LO_DONE | TRAN_HI_DONE | PORTS_0_7_COAL_DONE)) { | ||
| 1484 | writelfl(0, mmio + MV_IRQ_COAL_CAUSE_LO); | ||
| 1485 | writelfl(0, mmio + MV_IRQ_COAL_CAUSE_HI); | ||
| 1486 | writelfl(0, mmio + MV_IRQ_COAL_CAUSE); | ||
| 1487 | } | ||
| 1488 | } | ||
| 1489 | |||
| 1472 | if (PCI_ERR & irq_stat) { | 1490 | if (PCI_ERR & irq_stat) { | 
| 1473 | printk(KERN_ERR DRV_NAME ": PCI ERROR; PCI IRQ cause=0x%08x\n", | 1491 | printk(KERN_ERR DRV_NAME ": PCI ERROR; PCI IRQ cause=0x%08x\n", | 
| 1474 | readl(mmio + PCI_IRQ_CAUSE_OFS)); | 1492 | readl(mmio + PCI_IRQ_CAUSE_OFS)); | 
