Date: Wed, 11 Jul 2007 14:31:52 -0400 From: John Baldwin <jhb@freebsd.org> To: "M. Warner Losh" <imp@bsdimp.com> Cc: freebsd-mobile@freebsd.org, smithi@nimnet.asn.au, zhangweiwu@realss.com Subject: Re: unable to map IRQ for my pccard Message-ID: <200707111431.52840.jhb@freebsd.org> In-Reply-To: <20070710.205634.756906935.imp@bsdimp.com> References: <1183942480.6901.15.camel@joe.realss.com> <1184115985.13672.1.camel@joe.realss.com> <20070710.205634.756906935.imp@bsdimp.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tuesday 10 July 2007 10:56:34 pm M. Warner Losh wrote: > In message: <1184115985.13672.1.camel@joe.realss.com> > Zhang Weiwu <zhangweiwu@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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200707111431.52840.jhb>