32-bit pc card cannot be seen

Dominik Brodowski linux at dominikbrodowski.net
Fri Dec 9 02:49:14 EST 2005


Hi,

On Fri, Dec 09, 2005 at 10:58:55AM +1100, Joo Ghee wrote:
> Without adding "pci=assign-busses", this is the lspci -v output:
Thanks,

> 0000:00:1e.0 PCI bridge: Intel Corp. 82801 PCI Bridge (rev d3)
> (prog-if 01 [Subtractive decode])
>         Flags: bus master, fast devsel, latency 0
>         Bus: primary=00, secondary=06, subordinate=06, sec-latency=32

This PCI bridge connects devices which are on a secondary PCI bus -- here
numbered 06 -- to the root PCI bus, which itself is connected to the CPU.

CPU
|
|
PCI bus 00 -- 0000:00:1e.0 --	PCI bus 06

Now, on this bus, there's the CardBus bridge:

> 0000:06:09.0 CardBus bridge: ENE Technology Inc CB1410 Cardbus
> Controller (rev 01)
>         Bus: primary=06, secondary=07, subordinate=0a, sec-latency=176

And it connects new CardBus devices, but as it is a _bridge_, these devices
are on a different bus, here named 07 (see the _secondary_)

				PCI bus 06 -- 0000:06:09.0 -- CardBus device
								on PCI bus07

Now, the CPU wants to access this device. It sees the bus number 07. How to
get there? The bridge from bus 00 to bus 06 would need to know to "transmit"
this request to bus 06, so that the CardBus bridge on 06 can transmit it to
the CardBus device. However, the bridge 0000:00:1e.0 only thinks busses 06
(secondary) to 06 (subordinate) are connected to it -- and therefore it does
not transmit the access ==> failure.

All these settings were made by the BIOS and are obviously broken.

Now, pci=assign-busses overrides these BIOS settings and allows the kernel
to set bus numbers on its own. Bus 06 becomes Bus 01, and:

> 0000:00:1e.0 PCI bridge: Intel Corp. 82801 PCI Bridge (rev d3)
>         Bus: primary=00, secondary=01, subordinate=05, sec-latency=32

> 0000:01:09.0 CardBus bridge: ENE Technology Inc CB1410 Cardbus
>         Bus: primary=01, secondary=02, subordinate=05, sec-latency=176

CardBus devices are connected on PCI bus 02. If the CPU wants to access the
device, the PCI bridge 0000:00:1e.0 _knows_ that bus 2 is below it, and
transmits the request to bus 1, where the CardBus bridge 0000:01:09.0
transmits it to the CardBus devcie.

	Dominik



More information about the linux-pcmcia mailing list