diff options
author | Kyösti Mälkki <kyosti.malkki@gmail.com> | 2019-07-04 21:39:28 +0300 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2019-07-12 08:52:22 +0000 |
commit | c19d6a6ce59873f2326b14bb4af69048cceb9300 (patch) | |
tree | 78551a45b39443b50fc87c2d34729656d69ee04c /src/device | |
parent | 8da51ca2c36f9219a91a48540e673fbd04753345 (diff) |
device/pci: Replace use of dev_find_slot() for IRQs
Change-Id: I48c0de73338430282ce1a4442bbeb7c867dc174c
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/34079
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
Diffstat (limited to 'src/device')
-rw-r--r-- | src/device/pci_device.c | 29 |
1 files changed, 12 insertions, 17 deletions
diff --git a/src/device/pci_device.c b/src/device/pci_device.c index a2af0ec999..2c724aad50 100644 --- a/src/device/pci_device.c +++ b/src/device/pci_device.c @@ -1499,27 +1499,24 @@ int get_pci_irq_pins(struct device *dev, struct device **parent_bdg) * * This function should be called for each PCI slot in your system. * - * @param bus Pointer to the bus structure. - * @param slot TODO + * @param dev Pointer to dev structure. * @param pIntAtoD An array of IRQ #s that are assigned to PINTA through PINTD * of this slot. The particular IRQ #s that are passed in depend on the * routing inside your southbridge and on your board. */ -void pci_assign_irqs(unsigned bus, unsigned slot, - const unsigned char pIntAtoD[4]) +void pci_assign_irqs(struct device *dev, const unsigned char pIntAtoD[4]) { - unsigned int funct; - struct device *pdev; - u8 line, irq; + u8 slot, line, irq; - /* Each slot may contain up to eight functions. */ - for (funct = 0; funct < 8; funct++) { - pdev = dev_find_slot(bus, (slot << 3) + funct); + /* Each device may contain up to eight functions. */ + slot = dev->path.pci.devfn >> 3; - if (!pdev) - continue; + for (; dev ; dev = dev->sibling) { + + if (dev->path.pci.devfn >> 3 != slot) + break; - line = pci_read_config8(pdev, PCI_INTERRUPT_PIN); + line = pci_read_config8(dev, PCI_INTERRUPT_PIN); /* PCI spec says all values except 1..4 are reserved. */ if ((line < 1) || (line > 4)) @@ -1527,11 +1524,9 @@ void pci_assign_irqs(unsigned bus, unsigned slot, irq = pIntAtoD[line - 1]; - printk(BIOS_DEBUG, "Assigning IRQ %d to %d:%x.%d\n", - irq, bus, slot, funct); + printk(BIOS_DEBUG, "Assigning IRQ %d to %s\n", irq, dev_path(dev)); - pci_write_config8(pdev, PCI_INTERRUPT_LINE, - pIntAtoD[line - 1]); + pci_write_config8(dev, PCI_INTERRUPT_LINE, pIntAtoD[line - 1]); #ifdef PARANOID_IRQ_ASSIGNMENTS irq = pci_read_config8(pdev, PCI_INTERRUPT_LINE); |