mirror of
https://github.com/freebsd/freebsd-src.git
synced 2024-11-28 09:02:44 +00:00
While AHCI specification tells that multi-vector MSI doesn't use global IS
register, nVidia chipsets have different oppinion, requiring every interrupt to be acknowledged there. While there, add interrupt descriptions in multi-vector MSI mode.
This commit is contained in:
parent
5be4c0818e
commit
f343c07f96
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=202011
@ -570,6 +570,12 @@ ahci_setup_interrupt(device_t dev)
|
||||
device_printf(dev, "unable to setup interrupt\n");
|
||||
return ENXIO;
|
||||
}
|
||||
if (ctlr->numirqs > 1) {
|
||||
bus_describe_intr(dev, ctlr->irqs[i].r_irq,
|
||||
ctlr->irqs[i].handle,
|
||||
ctlr->irqs[i].mode == AHCI_IRQ_MODE_ONE ?
|
||||
"ch%d" : "%d", i);
|
||||
}
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
@ -622,8 +628,14 @@ ahci_intr_one(void *data)
|
||||
int unit;
|
||||
|
||||
unit = irq->r_irq_rid - 1;
|
||||
/* Some controllers have edge triggered IS. */
|
||||
if (ctlr->quirks & AHCI_Q_EDGEIS)
|
||||
ATA_OUTL(ctlr->r_mem, AHCI_IS, 1 << unit);
|
||||
if ((arg = ctlr->interrupt[unit].argument))
|
||||
ctlr->interrupt[unit].function(arg);
|
||||
/* AHCI declares level triggered IS. */
|
||||
if (!(ctlr->quirks & AHCI_Q_EDGEIS))
|
||||
ATA_OUTL(ctlr->r_mem, AHCI_IS, 1 << unit);
|
||||
}
|
||||
|
||||
static struct resource *
|
||||
|
Loading…
Reference in New Issue
Block a user