Problem setting link_address too high on PowerPC 40x

David Baird dhbaird at gmail.com
Wed May 12 08:48:48 EST 2010


Hi,

I am working with the PowerPC 405 in the Virtex-II Pro FPGA.  I've
come across a possible problem where the device tree is located in at
an address that the kernel cannot access if link_address (the location
where zImage executes from, set in the "wrapper" script) is set too
high (somewhere in the ballpark of 16 MB).  Here is a summary of the
problem:

In arch/powerpc/boot/main.c, ft_addr (a pointer to the flat? device
tree) is computed and then passed on to "kentry" to the kernel startup
code.  At startup, the kernel only has access via the TLB to the first
16 MB of memory which is initialized by "initial_imu" in
arch/powerpc/kernel/head_40x.S.  The problem is that ft_addr is
located relative to link_address / zImage, but this address might be
outside of the bounds of the 16MB initially mapped by the TLB.

A symptom of this problem is that the kernel ceases to print any
messages to the console because it could not read information about
the console from the flat device tree.  The last thing the user will
see is this:

zImage starting: loaded at 0x04000000 (sp: 0x0430beb0)
Allocating 0x6f11b0 bytes for kernel ...
gunzipping (0x00000000 <- 0x0400c000:0x0430a31a)...done 0x657000 bytes

Linux/PowerPC load: console=ttyUL0 root=/dev/ram
Finalizing device tree... flat tree at 0x4318300

...and then the screen goes completely blank...  And it seems that the
kernel also eventually crashes (but I couldn't tell exactly what
happened because __log_buf repeatedly gets corrupted with zeros
whenever I try this particular experiment).

Maybe there is also more to this problem too than just the ft_addr.

-David


More information about the Linuxppc-dev mailing list