Christian Ehrhardt wrote:

I tried to use a radeon r200 based graphic card on a sequoia ppc (440epx) board. I wondered about the initialization of radeonfb that failed with
    __ioremap(): phys addr 0x0 is RAM lr c029cf80
    radeonfb (0000:00:0a.0): cannot map MMIO
    radeonfb: probe of 0000:00:0a.0 failed with error -5

I trigger a check in ioremap, because the address it wants to remap is 0x0 which can never work. The reason of that is that the pci ressource of that graphic card is not properly detected.

There might be another reason. This driver seems to be another subject to the 440-specific PCI memory space issue beacuse it uses 'unsigned long' to store the PCI memory physical addresses and those are 64-bit in the 440 arch/powerpc/ kernels.

With some help I found two kernels - one that work and one that has this issue.
Unfortunately they are very different:
  good => 2.6.24.2 from the linux-2.6-denx - built for arch=ppc
bad => we have 2.6.25-rc9 (used in our kvm ppc project atm) - build for arch=powerpc I tried building the 2.6.25-rc9 with arch=ppc, but that one does not boot so far. Because of that I can't surely tell you if it is only that difference that breaks the pci detection. We need arch=powerpc for our kvm code anyway, so I hope there is another solution than to switch to arch=ppc ;-)

   Yes, the driver needs fixing -- at least that.

I just started to debug into that, but I wanted to ask here if there might be some known issues causing that and/or to get some hints where to look at.

   Now you know of at least one.

The issue is much better visible when I boot with these two kernels and use "lspci -vvv"

Good kernel:
00:0a.0 VGA compatible controller: ATI Technologies Inc RV280 [Radeon 9200 PRO] (rev 01) (prog-if 00 [VGA])
       Subsystem: PC Partner Limited Unknown device 0250
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
       Latency: 128 (2000ns min)
       Interrupt: pin A routed to IRQ 67
       Region 0: Memory at 88000000 (32-bit, prefetchable) [size=128M]
       Region 1: I/O ports at ff00 [size=256]
       Region 2: Memory at 87ff0000 (32-bit, non-prefetchable) [size=64K]
       Expansion ROM at 80020000 [disabled] [size=128K]

Here, the PCI resources have been re-assigned by arch/ppc/ kernel, and are confined to 4 GB due to fixup_bigphys_addr() trick used for 440...

       Capabilities: [50] Power Management version 2
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
               Status: D0 PME-Enable- DSel=0 DScale=0 PME-

Bad kernel:
00:0a.0 VGA compatible controller: ATI Technologies Inc RV280 [Radeon 9200 PRO] (rev 01) (prog-if 00 [VGA])
       Subsystem: PC Partner Limited Unknown device 0250
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
       Latency: 128 (2000ns min)
       Interrupt: pin A routed to IRQ 16
       Region 0: Memory at 180000000 (32-bit, prefetchable) [size=128M]

That's beyond 4 GB, seems correct. That should be the address assigned by bootloader? BTW, what's your bootloader, U-Boot?

       Region 1: I/O ports at 1000 [size=256]
       Region 2: Memory at <ignored> (32-bit, non-prefetchable)

   Hm... what could this mean? Could you post the result of 'lspci -x'?

       Capabilities: [50] Power Management version 2
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
               Status: D0 PME-Enable- DSel=0 DScale=0 PME-

=> Region 2 is not detected with our kernel, this later break things like radeonfb initialization.

   Well, not only this...

WBR, Sergei
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

Reply via email to