PCIe to PCI bus expansion chassis, bad IRQ number?
I am testing a PCI card in a 4-slot bus expansion chassis. I bought the chassis from CoolDrives.com, it appears to be identical to the Startech PEX2PCI4 unit, but was quite a bit cheaper... This device shows up on my lspci output:
05:00.0 PCI bridge: Texas Instruments XIO2000(A)/XIO2200(A) PCI Express-to-PCI Bridge (rev 03)
I think that the following line may also be associated with this device:
06:07.0 PCI bridge: Hint Corp HB6 Universal PCI-PCI bridge (non-transparent mode) (rev 11)
I've installed in the expansion chassis one card, a Linux Media Labs BT484 card. This card works out-of-the-box when installed directly in the system, using the bttv driver.
Installed in the expansion chassis, the card still shows up as follows:
07:00.0 Multimedia video controller: Brooktree Corporation Bt878 Video Capture (rev 11)
07:00.1 Multimedia controller: Brooktree Corporation Bt878 Audio Capture (rev 11)
07:01.0 Multimedia video controller: Brooktree Corporation Bt878 Video Capture (rev 11)
07:01.1 Multimedia controller: Brooktree Corporation Bt878 Audio Capture (rev 11)
07:02.0 Multimedia video controller: Brooktree Corporation Bt878 Video Capture (rev 11)
07:02.1 Multimedia controller: Brooktree Corporation Bt878 Audio Capture (rev 11)
07:03.0 Multimedia video controller: Brooktree Corporation Bt878 Video Capture (rev 11)
07:03.1 Multimedia controller: Brooktree Corporation Bt878 Audio Capture (rev 11)
Now here's the problem: when the card is probed, the system thinks it wants to use IRQ0, and this causes a problem. Here is the long output from lspci:
07:00.0 Multimedia video controller: Brooktree Corporation Bt878 Video Capture (rev 11)
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 64 (4000ns min, 10000ns max)
Interrupt: pin A routed to IRQ 0
Region 0: Memory at cff00000 (32-bit, prefetchable) [size=4K]
Capabilities: <access denied>
Kernel modules: bttv
And here are the error messages printed to /var/log/messages:
Apr 23 11:00:53 wheatstone kernel: bttv: Bt8xx card found (0).
Apr 23 11:00:53 wheatstone kernel: bttv0: Bt878 (rev 17) at 0000:07:03.0, irq: 0, latency: 64, mmio: 0x
cff06000
Apr 23 11:00:53 wheatstone kernel: bttv0: using: *** UNKNOWN/GENERIC *** [card=0,autodetected]
Apr 23 11:00:53 wheatstone kernel: IRQ handler type mismatch for IRQ 0
Apr 23 11:00:53 wheatstone kernel: current handler: timer
Apr 23 11:00:53 wheatstone kernel: Pid: 3095, comm: modprobe Tainted: P 2.6.27.41-170.2.117.JB
M2.fc10.x86_64 #1
Apr 23 11:00:53 wheatstone kernel:
Apr 23 11:00:53 wheatstone kernel: Call Trace:
Apr 23 11:00:53 wheatstone kernel: [<ffffffff8106dfc1>] setup_irq+0x286/0x2ab
Apr 23 11:00:53 wheatstone kernel: [<ffffffffa0a0b233>] ? bttv_irq+0x0/0x82d [bttv]
Apr 23 11:00:53 wheatstone kernel: [<ffffffff8106e0d0>] request_irq+0xea/0x113
Apr 23 11:00:53 wheatstone kernel: [<ffffffffa0a104db>] bttv_probe+0x316/0x92e [bttv]
Apr 23 11:00:53 wheatstone kernel: [<ffffffff81157025>] pci_device_probe+0x4c/0x72
Apr 23 11:00:53 wheatstone kernel: [<ffffffff8119461e>] driver_probe_device+0xc0/0x16e
Apr 23 11:00:53 wheatstone kernel: [<ffffffff8119471b>] __driver_attach+0x4f/0x79
Apr 23 11:00:53 wheatstone kernel: [<ffffffff811946cc>] ? __driver_attach+0x0/0x79
Apr 23 11:00:53 wheatstone kernel: [<ffffffff81193ec6>] bus_for_each_dev+0x4f/0x89
Apr 23 11:00:53 wheatstone kernel: [<ffffffff81194469>] driver_attach+0x1c/0x1e
Apr 23 11:00:53 wheatstone kernel: [<ffffffff81193808>] bus_add_driver+0xb1/0x1e5
Apr 23 11:00:53 wheatstone kernel: [<ffffffff81194917>] driver_register+0xa8/0x116
Apr 23 11:00:53 wheatstone kernel: [<ffffffffa0015000>] ? bttv_init_module+0x0/0xed [bttv]
Apr 23 11:00:53 wheatstone kernel: [<ffffffff81157284>] __pci_register_driver+0x66/0x9e
Apr 23 11:00:53 wheatstone kernel: [<ffffffffa0015000>] ? bttv_init_module+0x0/0xed [bttv]
Apr 23 11:00:53 wheatstone kernel: [<ffffffffa00150d5>] bttv_init_module+0xd5/0xed [bttv]
Apr 23 11:00:53 wheatstone kernel: [<ffffffff81009047>] _stext+0x47/0x121
Apr 23 11:00:53 wheatstone kernel: [<ffffffff8105cc4e>] sys_init_module+0xa9/0x1b7
Apr 23 11:00:53 wheatstone kernel: [<ffffffff8100c37b>] system_call_fastpath+0x16/0x1b
Apr 23 11:00:53 wheatstone kernel:
Apr 23 11:00:53 wheatstone kernel: bttv0: can't get IRQ 0
Apr 23 11:00:53 wheatstone kernel: bttv: probe of 0000:07:03.0 failed with error -16
When the card is installed directly in the motherboard it gets IRQ17 or 18. I suspect that it does not really want IRQ0, but that there is some problem detecting the proper IRQ over the bus expander. One possible approach I am considering is to build a custom version of the driver where I can set the IRQ manually to something else just to get the driver to finish loading, then see what happens when I run the card. This would at least tell me which IRQ the hardware is really using and whether or not the 0 reported is correct or not.
Any other suggestions will be most appreciated.
thanks in advance, Jeff
|