unable to map IRQ for my pccard

John Baldwin jhb at freebsd.org
Wed Jul 11 18:42:59 UTC 2007


On Tuesday 10 July 2007 10:56:34 pm M. Warner Losh wrote:
> In message: <1184115985.13672.1.camel at joe.realss.com>
>             Zhang Weiwu <zhangweiwu at realss.com> writes:
> : On Tue, 2007-07-10 at 15:18 -0400, John Baldwin wrote:
> : > On Sunday 08 July 2007 08:54:40 pm Zhang Weiwu wrote:
> : > > >  > cbb0: <TI1250 PCI-CardBus Bridge> mem 0x20822000-0x20822fff at
> : > > >  > device 2.0 on pci0 pccard0: <16-bit PCCard bus> on cbb0
> : > > >  > cbb1: <TI1250 PCI-CardBus Bridge> mem 0x20821000-0x20821fff at
> : > > >  > device 2.1 on pci0 pccard1: <16-bit PCCard bus> on cbb1
> : > > >  > $PIR: ROUTE_INTERRUPT failed.
> : > > >  > cbb: Unable to map IRQ...
> : > > >  > device_attach: cbb1 attach returned 12
> : > 
> : > We tried to set the IRQ for your device and the BIOS choked.  Can you 
get the 
> : > output from /usr/src/tools/tools/pirtool for your machine?
> : 
> : 
> : Thanks! Here is it:
> : 
> : PCI Interrupt Routing Table at 0x000FB270
> : -----------------------------------------
> : 0x00: Signature:          $PIR
> : 0x04: Version:            1.0
> : 0x06: Size:               96 bytes (4 entries)
> : 0x08: Device:             0:6:0
> : 0x0a: PCI Exclusive IRQs: 0x00000400
> : 0x0c: Compatible with:    0x00000000 unknown chipset
> : 0x10: Miniport Data:      0x00000000
> : 0x1f: Checksum:           0x4D
> : 
> : Entry 0: Device 0:6:0 Slot 0 (on-board)
> :         INTA: 60h routable irqs: 3 4 5 6 7 9 10 11 12 14 15
> :         INTB: 00h (not connected)
> :         INTC: 00h (not connected)
> :         INTD: 63h routable irqs: 3 4 5 6 7 9 10 11 12 14 15
> : Entry 1: Device 0:2:0 Slot 0 (on-board)
> :         INTA: 60h routable irqs: 3 4 5 6 7 9 10 11 12 14 15
> :         INTB: 61h routable irqs: 3 4 5 6 7 9 10 11 12 14 15
> :         INTC: 00h (not connected)
> :         INTD: 00h (not connected)
> : Entry 2: Device 0:3:0 Slot 0 (on-board)
> :         INTA: 60h routable irqs: 3 4 5 6 7 9 10 11 12 14 15
> :         INTB: 00h (not connected)
> :         INTC: 00h (not connected)
> :         INTD: 00h (not connected)
> : Entry 3: Device 0:7:0 Slot 0 (on-board)
> :         INTA: 60h routable irqs: 3 4 5 6 7 9 10 11 12 14 15
> :         INTB: 61h routable irqs: 3 4 5 6 7 9 10 11 12 14 15
> :         INTC: 00h (not connected)
> :         INTD: 00h (not connected)
> 
> consider:
> 
> : cbb0: <TI1250 PCI-CardBus Bridge> mem 0x20822000-0x20822fff at device 2.0 
on pci0
> : pccard0: <16-bit PCCard bus> on cbb0
> : cbb1: <TI1250 PCI-CardBus Bridge> mem 0x20821000-0x20821fff at device 2.1 
on pci0
> : pccard1: <16-bit PCCard bus> on cbb1
> : $PIR: ROUTE_INTERRUPT failed.
> : cbb: Unable to map IRQ...
> : Entry 1: Device 0:2:0 Slot 0 (on-board)
> :         INTA: 60h routable irqs: 3 4 5 6 7 9 10 11 12 14 15
> :         INTB: 61h routable irqs: 3 4 5 6 7 9 10 11 12 14 15
> 
> I think we're trying to rotue wire 0x60 twice.  The second try seems
> to be failing.

No, we only route things once.  Look at /sys/i386/pci/pci_pir.c.  It keeps 
track of which IRQ a link is routed to, and we only use the BIOS call if it 
didn't look like the BIOS had already routed it, and we haven't routed it 
before.  I think we are actually trying to route 0x61 btw, not 0x60 since 
it's device 2.1 (and thus probably INTB) that is keeling over.

You can try using a hint like 'hw.pci0.2.INTB.irq=11' and seeing if it works.

-- 
John Baldwin


More information about the freebsd-mobile mailing list