Commit a7384925 authored by Kristen Carlson Accardi's avatar Kristen Carlson Accardi Committed by Jeff Garzik

ahci: Store interrupt value

Use a stored value for which interrupts to enable.  Changing this allows
us to selectively turn off certain interrupts later and have them
stay off.
Signed-off-by: default avatarKristen Carlson Accardi <kristen.c.accardi@intel.com>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent 2f294968
...@@ -175,6 +175,7 @@ enum { ...@@ -175,6 +175,7 @@ enum {
AHCI_FLAG_32BIT_ONLY = (1 << 28), /* force 32bit */ AHCI_FLAG_32BIT_ONLY = (1 << 28), /* force 32bit */
AHCI_FLAG_MV_PATA = (1 << 29), /* PATA port */ AHCI_FLAG_MV_PATA = (1 << 29), /* PATA port */
AHCI_FLAG_NO_MSI = (1 << 30), /* no PCI MSI */ AHCI_FLAG_NO_MSI = (1 << 30), /* no PCI MSI */
AHCI_FLAG_NO_HOTPLUG = (1 << 31), /* ignore PxSERR.DIAG.N */
AHCI_FLAG_COMMON = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | AHCI_FLAG_COMMON = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA | ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA |
...@@ -215,6 +216,7 @@ struct ahci_port_priv { ...@@ -215,6 +216,7 @@ struct ahci_port_priv {
unsigned int ncq_saw_d2h:1; unsigned int ncq_saw_d2h:1;
unsigned int ncq_saw_dmas:1; unsigned int ncq_saw_dmas:1;
unsigned int ncq_saw_sdb:1; unsigned int ncq_saw_sdb:1;
u32 intr_mask; /* interrupts to enable */
}; };
static int ahci_scr_read(struct ata_port *ap, unsigned int sc_reg, u32 *val); static int ahci_scr_read(struct ata_port *ap, unsigned int sc_reg, u32 *val);
...@@ -1552,6 +1554,7 @@ static void ahci_thaw(struct ata_port *ap) ...@@ -1552,6 +1554,7 @@ static void ahci_thaw(struct ata_port *ap)
void __iomem *mmio = ap->host->iomap[AHCI_PCI_BAR]; void __iomem *mmio = ap->host->iomap[AHCI_PCI_BAR];
void __iomem *port_mmio = ahci_port_base(ap); void __iomem *port_mmio = ahci_port_base(ap);
u32 tmp; u32 tmp;
struct ahci_port_priv *pp = ap->private_data;
/* clear IRQ */ /* clear IRQ */
tmp = readl(port_mmio + PORT_IRQ_STAT); tmp = readl(port_mmio + PORT_IRQ_STAT);
...@@ -1559,7 +1562,7 @@ static void ahci_thaw(struct ata_port *ap) ...@@ -1559,7 +1562,7 @@ static void ahci_thaw(struct ata_port *ap)
writel(1 << ap->port_no, mmio + HOST_IRQ_STAT); writel(1 << ap->port_no, mmio + HOST_IRQ_STAT);
/* turn IRQ back on */ /* turn IRQ back on */
writel(DEF_PORT_IRQ, port_mmio + PORT_IRQ_MASK); writel(pp->intr_mask, port_mmio + PORT_IRQ_MASK);
} }
static void ahci_error_handler(struct ata_port *ap) static void ahci_error_handler(struct ata_port *ap)
...@@ -1713,6 +1716,12 @@ static int ahci_port_start(struct ata_port *ap) ...@@ -1713,6 +1716,12 @@ static int ahci_port_start(struct ata_port *ap)
pp->cmd_tbl = mem; pp->cmd_tbl = mem;
pp->cmd_tbl_dma = mem_dma; pp->cmd_tbl_dma = mem_dma;
/*
* Save off initial list of interrupts to be enabled.
* This could be changed later
*/
pp->intr_mask = DEF_PORT_IRQ;
ap->private_data = pp; ap->private_data = pp;
/* engage engines, captain */ /* engage engines, captain */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment