Re: pci probing causes booting to hang on dolphin ii laptop

Gabriel Paubert (paubert@iram.es)
Mon, 29 Sep 1997 11:24:20 +0100 (MET)


On Mon, 29 Sep 1997, Herbert Xu wrote:

> Thomas Kopp <Thomas.Kopp@dialogika.de> cannot boot Linux on his laptop because
> the kernel (2.0.30) hangs during pci probing. If DEBUG is enabled in pci.c, we
> get this before the kernel hangs (with \n added at appropriate places to make
> it more readable).
>
> ...pci_malloc(size=32,mem=0035c0bc)
> Warning : Unknown PCI device (1039:5107) ..."
> ...pci_malloc(size=28,mem=0035c0dc)
> ...scan_bus(busno=1,mem=0035c0f8)
>
> In particular, it hangs at line 801 in pci.c.

Jean-Marc.Tanzi@cma.inria.fr had exactly the same problem a few weeks ago,
he has a patch for this. Basically the problem is that this device
(SiS5107 docking station bridge) has header type 2 in his configuration
space header:
00 = 51071039
04 = c2000200
08 = 06040001
0c = 00820000
^^
multifunction device, header type 2. Linux does not yet know how to handle
this type of bridge and a long altavista search plus all available
literature only listed header type 0 and 1 as defined. The fix (_not_ the
solution) for now is that scan_bus should only descend down PCI<->PCI
bridges of header type 1. Something like replacing:

if (dev->class >> 8 == PCI_CLASS_BRIDGE_PCI) {

with
pcibios_read_config_byte(bus->number, devfn, PCI_HEADER_TYPE,
&tmp);
if ((dev->class >> 8 == PCI_CLASS_BRIDGE_PCI) &&
(tmp&0x7f) == 1) {

should help. A more radical approach (_only_ in your case) is to remove all
this if branch.

Gabriel (still trying to get info about PCI header type 2).

P.S: if you have a docking station, did you try with and without plugging
it ?