mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-22 07:01:39 +00:00
x86: Add a function to assign IRQ numbers to PCI device
Add a function to assign an IRQ number to PCI device's interrupt line register in its configuration space, so that the PCI device can have its interrupt working under PIC mode after OS boots up. Signed-off-by: Bin Meng <bmeng.cn@gmail.com> Acked-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
54c6001bba
commit
e3e7fa2cd1
2 changed files with 35 additions and 0 deletions
|
@ -151,3 +151,24 @@ int pci_x86_write_config(struct udevice *bus, pci_dev_t bdf, uint offset,
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void pci_assign_irqs(int bus, int device, int func, u8 irq[4])
|
||||||
|
{
|
||||||
|
pci_dev_t bdf;
|
||||||
|
u8 pin, line;
|
||||||
|
|
||||||
|
bdf = PCI_BDF(bus, device, func);
|
||||||
|
|
||||||
|
pin = x86_pci_read_config8(bdf, PCI_INTERRUPT_PIN);
|
||||||
|
|
||||||
|
/* PCI spec says all values except 1..4 are reserved */
|
||||||
|
if ((pin < 1) || (pin > 4))
|
||||||
|
return;
|
||||||
|
|
||||||
|
line = irq[pin - 1];
|
||||||
|
|
||||||
|
debug("Assigning IRQ %d to PCI device %d.%x.%d (INT%c)\n",
|
||||||
|
line, bus, device, func, 'A' + pin - 1);
|
||||||
|
|
||||||
|
x86_pci_write_config8(bdf, PCI_INTERRUPT_LINE, line);
|
||||||
|
}
|
||||||
|
|
|
@ -64,6 +64,20 @@ int pci_x86_read_config(struct udevice *bus, pci_dev_t bdf, uint offset,
|
||||||
int pci_x86_write_config(struct udevice *bus, pci_dev_t bdf, uint offset,
|
int pci_x86_write_config(struct udevice *bus, pci_dev_t bdf, uint offset,
|
||||||
ulong value, enum pci_size_t size);
|
ulong value, enum pci_size_t size);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Assign IRQ number to a PCI device
|
||||||
|
*
|
||||||
|
* This function assigns IRQ for a PCI device. If the device does not exist
|
||||||
|
* or does not require interrupts then this function has no effect.
|
||||||
|
*
|
||||||
|
* @bus: PCI bus number
|
||||||
|
* @device: PCI device number
|
||||||
|
* @func: PCI function number
|
||||||
|
* @irq: An array of IRQ numbers that are assigned to INTA through
|
||||||
|
* INTD of this PCI device.
|
||||||
|
*/
|
||||||
|
void pci_assign_irqs(int bus, int device, int func, u8 irq[4]);
|
||||||
|
|
||||||
#endif /* __ASSEMBLY__ */
|
#endif /* __ASSEMBLY__ */
|
||||||
|
|
||||||
#endif /* _PCI_I386_H_ */
|
#endif /* _PCI_I386_H_ */
|
||||||
|
|
Loading…
Add table
Reference in a new issue