2.4 -> 2.6: problem probing PCI

Marc Leeman marc.leeman at gmail.com
Thu Nov 18 02:51:53 EST 2004

I am currently comparing the 2.6.9 (failing code) PCI DBG output with
the 2.4.28-rc1 (working code) DBG output:

> PCI: Probing PCI hardware
> PCI: bridge rsrc 0..bfffff (100), parent c0172188
> PCI: reparented dma1 [0..1f] under PCI host bridge
> PCI: reparented pic1 [20..3f] under PCI host bridge
> PCI: reparented timer [40..5f] under PCI host bridge
> PCI: reparented dma page reg [80..8f] under PCI host bridge
> PCI: reparented pic2 [a0..bf] under PCI host bridge
> PCI: reparented dma2 [c0..df] under PCI host bridge
> PCI: bridge rsrc 80000000..fcffffff (200), parent c017216c
> PCI:0000:00:00.0: Resource 1: 00000000-00000fff (f=200)
> PCI: Cannot allocate resource region 1 of device 0000:00:00.0
> PCI:  parent is c01b6054: 80000000-fcffffff (f=200)
> PCI:0000:00:10.0: Resource 0: bffff000-bfffffff (f=200)
> PCI:0000:00:10.0: Resource 1: 00bfffc0-00bfffff (f=101)
> PCI:0000:00:10.0: Resource 2: bffc0000-bffdffff (f=200)
> PCI:0000:00:11.0: Resource 0: bffbf000-bffbffff (f=200)
> PCI:0000:00:11.0: Resource 1: 00bfff80-00bfffbf (f=101)
> PCI:0000:00:11.0: Resource 2: bff80000-bff9ffff (f=200)
> PCI:0000:00:12.0: Resource 0: bf800000-bfbfffff (f=1208)
> PCI:0000:00:12.0: Resource 1: bf000000-bf7fffff (f=200)
> PCI:0000:00:12.0: Resource 2: 00bfff70-00bfff7f (f=101)
> PCI:0000:00:13.0: Resource 0: 00bfff60-00bfff6f (f=101)
> PCI:0000:00:13.0: Resource 1: befffff0-beffffff (f=200)

PCI: Probing PCI hardware
PCI:00:00.0 Resource 1 [00000000-00000fff] is unassigned
Fixup res 1 (101) of dev 00:10.0: bfffc0 -> febfffc0
Fixup res 1 (101) of dev 00:11.0: bfff80 -> febfff80
Fixup res 2 (101) of dev 00:12.0: bfff70 -> febfff70
Fixup res 0 (101) of dev 00:13.0: bfff60 -> febfff60
PCI: bridge rsrc fe000000..febfffff (100), parent c012aee8
PCI: bridge rsrc 80000000..fcffffff (200), parent c012aecc
PCI:00:10.0: Resource 0: bffff000-bfffffff (f=200)
PCI:00:10.0: Resource 1: febfffc0-febfffff (f=101)
PCI:00:10.0: Resource 2: bffc0000-bffdffff (f=200)
PCI:00:11.0: Resource 0: bffbf000-bffbffff (f=200)
PCI:00:11.0: Resource 1: febfff80-febfffbf (f=101)
PCI:00:11.0: Resource 2: bff80000-bff9ffff (f=200)
PCI:00:12.0: Resource 0: bf800000-bfbfffff (f=1208)
PCI:00:12.0: Resource 1: bf000000-bf7fffff (f=200)
PCI:00:12.0: Resource 2: febfff70-febfff7f (f=101)
PCI:00:13.0: Resource 0: febfff60-febfff6f (f=101)
PCI:00:13.0: Resource 1: befffff0-beffffff (f=200)

The first important difference is that a number of fixups are no
longer performed in the 2.6.9 kernel; which account for the
differences in the PCI address ranges.

The problem seems to be in 

When comparing (but not yet fixed), some minor changes have been made:

line 16 changed from
   if (!res->start || res->end == 0xffffffff) {
   if (res->end == 0xffffffff) {

which disables the flow to enter the body in this case.

another relevant piece of code that gets me into troubles is the
computation of the offset
                } else if (res->flags & IORESOURCE_IO) {
                        offset = (unsigned long) hose->io_base_virt;
                                - isa_io_base;

both values are equal to 0xfe000000, giving a final offset of 0 and no

I tried commenting out 'isa_io_base' but this gets me in resource
allocation conflicts later on (even though I get the ranges identical
to the ones in the 2.4.28 kernel).

Anyway, insights are welcome, I'm still investigating...

ash nazg durbatulûk, ash nazg gimbatul,
ash nazg thrakatulûk agh burzum-ishi krimpatul

More information about the Linuxppc-dev mailing list