Re: Dual slot PCI riser messes up ivtv

From: Clemens Koller
Date: Sun Jun 24 2007 - 14:45:23 EST


Hello!

[problem with PCI riser card, hardware discussion]

First the riser card is a dual slot one , with a chip on it so I assumed
it is active. It has jumpers to set the device number of the upper slot
and the devices in the two slots have to share the IRQ. This is it
here :
www.tranquilpc.co.uk/support/Files/TPC014/Tranquil%20Riser.pdf

No, that's not an active one as Krzysztof wrote already.
The GAL only does some simple things.

Third : The bug lies in the situation where the PVR-150 card is in the
upper slot and the DVB card is in the lower slot, in which case the DVB
card does not work. That was the dmesg output I posted earlier.

I have the 32bit version of these cards:
http://paui.de/pub/archive/image/PCI_Riser_3x32bit_passive.jpg
http://paui.de/pub/archive/image/PCI_Riser_3x64bit_passive.jpg

As you can see, the cards are a 1:1 extension to the center slot.
The lower as well as the upper slot gets the additional signals from
the two small PCBs which are the four INTA...INTD and the REQest and
GraNT lines. The IDSELect's are soldered via 220R resistors to some
address lines.

Fourth : here's cat /proc/interrupts in the current working situation
with the PVR-150 card in the lower slot and the DVB card in the upper
slot.
0: 64 IO-APIC-edge timer
1: 1130 IO-APIC-edge i8042
7: 0 IO-APIC-edge parport0
8: 3 IO-APIC-edge rtc
9: 0 IO-APIC-fasteoi acpi
12: 4 IO-APIC-edge i8042
14: 18035 IO-APIC-edge ide0
17: 0 IO-APIC-fasteoi ohci_hcd:usb1
18: 26 IO-APIC-fasteoi ohci_hcd:usb2
19: 0 IO-APIC-fasteoi ohci_hcd:usb3
20: 2 IO-APIC-fasteoi ehci_hcd:usb4
21: 12329 IO-APIC-fasteoi eth1
22: 16399 IO-APIC-fasteoi SiS SI7012
23: 15020 IO-APIC-fasteoi saa7134[0], saa7134[0], ivtv0
NMI: 0 LOC: 757294 ERR: 0
MIS: 0

As you can see the two cards are sharing the IRQ properly.

IRQ sharing is possible. But on the PCI Bus, the usually four
IRQ lines are wired in a "Round Robin" scheme to avoid IRQ sharing.

Additionally, each slot gets a unique ID by wiring the IDSELect
of the slot connector to an AD bus line on the motherboard as
mentioned above.

So, each slot with a ID get it's fixed IRQ routed (along with the
REQn/GNTn lines). If the IDs and the IRQ lines don't fit together,
you might run into problems like you mentioned.
I think it's possible to tell the kernel the right ID-IRQ routing
associations manually. But I think it's not easy to get the BIOS fixed.
So, I suggest to figure out how the BIOS (the kernel get that
info from the BIOS, AFAIK (is that correct?)) wants to see its IRQ
on the IDs and rewire the riser card that they all fit together.

Well... that's what I did some time ago. For me it is more easy
to fit the hardware once to the default kernel settings instead of
patching every kernel on my embedded platform.

You can find some more details here:
http://www.formfactors.org/developer%5Cspecs%5CATX_Spec_V1_0.pdf
And there is the official PCI Spec at http://www.pcisig.com
however you have to be a member of the PCI SIG.

Good luck,
--
Clemens Koller
_______________________________
R&D Imaging Devices
Anagramm GmbH
Rupert-Mayer-Str. 45/1
81379 Muenchen
Germany

http://www.anagramm-technology.com
Phone: +49-89-741518-50
Fax: +49-89-741518-19
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/