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: Kristen Carlson Accardi <kristen.c.accardi@intel.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
parent
2f2949680a
commit
a738492501
1 changed files with 10 additions and 1 deletions
|
@ -175,6 +175,7 @@ enum {
|
|||
AHCI_FLAG_32BIT_ONLY = (1 << 28), /* force 32bit */
|
||||
AHCI_FLAG_MV_PATA = (1 << 29), /* PATA port */
|
||||
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 |
|
||||
ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA |
|
||||
|
@ -215,6 +216,7 @@ struct ahci_port_priv {
|
|||
unsigned int ncq_saw_d2h:1;
|
||||
unsigned int ncq_saw_dmas: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);
|
||||
|
@ -1552,6 +1554,7 @@ static void ahci_thaw(struct ata_port *ap)
|
|||
void __iomem *mmio = ap->host->iomap[AHCI_PCI_BAR];
|
||||
void __iomem *port_mmio = ahci_port_base(ap);
|
||||
u32 tmp;
|
||||
struct ahci_port_priv *pp = ap->private_data;
|
||||
|
||||
/* clear IRQ */
|
||||
tmp = readl(port_mmio + PORT_IRQ_STAT);
|
||||
|
@ -1559,7 +1562,7 @@ static void ahci_thaw(struct ata_port *ap)
|
|||
writel(1 << ap->port_no, mmio + HOST_IRQ_STAT);
|
||||
|
||||
/* 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)
|
||||
|
@ -1713,6 +1716,12 @@ static int ahci_port_start(struct ata_port *ap)
|
|||
pp->cmd_tbl = mem;
|
||||
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;
|
||||
|
||||
/* engage engines, captain */
|
||||
|
|
Reference in a new issue