• Maciej W. Rozycki's avatar
    x86/PCI: Also match function number in $PIR table · 31324502
    Maciej W. Rozycki authored
    Contrary to the PCI BIOS specification[1] some systems include the PCI 
    function number for onboard devices in their $PIR table.  Consequently 
    the wrong entry can be matched leading to interrupt routing failures.
    
    For example the Tyan Tomcat IV S1564D board has:
    
    00:07.1 slot=00
     0:00/deb8
     1:00/deb8
     2:00/deb8
     3:00/deb8
    
    00:07.2 slot=00
     0:00/deb8
     1:00/deb8
     2:00/deb8
     3:63/deb8
    
    for its IDE interface and USB controller functions of the 82371SB PIIX3 
    southbridge.  Consequently the first entry matches causing the inability 
    to route the USB interrupt in the `noapic' mode, in which case we need 
    to rely on the interrupt line set by the BIOS:
    
    uhci_hcd 0000:00:07.2: runtime IRQ mapping not provided by arch
    uhci_hcd 0000:00:07.2: PCI INT D not routed
    uhci_hcd 0000:00:07.2: enabling bus mastering
    uhci_hcd 0000:00:07.2: UHCI Host Controller
    uhci_hcd 0000:00:07.2: new USB bus registered, assigned bus number 1
    uhci_hcd 0000:00:07.2: irq 11, io base 0x00006000
    
    Try to match the PCI device and function combined then and if that fails 
    move on to PCI device matching only.  Compliant systems will only have a 
    single $PIR table entry per PCI device, so this update does not change 
    the semantics with them, while systems that have several entries for 
    individual functions of a single PCI device each will match the correct 
    entry:
    
    uhci_hcd 0000:00:07.2: runtime IRQ mapping not provided by arch
    uhci_hcd 0000:00:07.2: PCI INT D -> PIRQ 63, mask deb8, excl 0c20
    uhci_hcd 0000:00:07.2: PCI INT D -> newirq 11
    uhci_hcd 0000:00:07.2: found PCI INT D -> IRQ 11
    uhci_hcd 0000:00:07.2: sharing IRQ 11 with 0000:00:11.0
    uhci_hcd 0000:00:07.2: enabling bus mastering
    uhci_hcd 0000:00:07.2: UHCI Host Controller
    uhci_hcd 0000:00:07.2: new USB bus registered, assigned bus number 1
    uhci_hcd 0000:00:07.2: irq 11, io base 0x00006000
    
    [1] "PCI BIOS Specification", Revision 2.1, PCI Special Interest Group,
        August 26, 1994, Table 4-1 "Layout of IRQ routing table entry.", p.
        12
    Signed-off-by: default avatarMaciej W. Rozycki <macro@orcam.me.uk>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Link: https://lore.kernel.org/r/alpine.DEB.2.21.2203301536020.22465@angie.orcam.me.uk
    31324502
irq.c 41.3 KB