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