U-boot must be linked to the correct startup address in
flash so that global data acceses work before relocation to
RAM.

This patch demonstrates the changes needed in common
code needed to run from any link address.
With these changes and a few asm insn in start.S
I can link my u-boot to address 0 and still boot linux.

I am posting this for comment only and what I want to know
if this change to common code is accepable or not.
if so, I will send a formal patch for 83xx

The size cost is about 500 text bytes:
   text    data     bss     dec     hex filename
 229544   14876   27608  272028   4269c u-boot
 230008   14872   27608  272488   42868 u-boot.link_off

link_off looks like this currently:
        .globl link_off /* const void * link_off(const void * ptr) */
link_off:
        /* Adds GOT offset to ptr, might be useful for true PIC too */
        /* Would be great if this could be inline C __asm__ instead */
        /* Hand coded as we cannot clobber r14 when called from C */
        mflr    r4
        bl      1f
        .text   2
0:      .long   .LCTOC1-1f
        .text
1:      mflr    r6
        lwz     r0,0b-1b(r6)
        add     r6,r0,r6
        mtlr    r4
        la      r4,.L__GOT2_TABLE_(r6) /* addi  r4,r6,.L__GOT2_TABLE_ */
        lwz     r5,.L__GOT2_TABLE_(r6)
        sub     r4,r5,r4 /* r4 - r5 */
        sub     r3,r3,r4 /* r4 - r3 */
        blr

WD, what do you think?

Joakim Tjernlund (2):
  Use LINK_OFF to access global data
  Use LINK_OFF in enviroment too

 common/cmd_nvedit.c           |    2 +
 common/console.c              |   12 ++++++--
 common/env_common.c           |    2 +-
 common/env_flash.c            |   65 ++++++++++++++++++++++++----------------
 cpu/mpc83xx/cpu.c             |   10 +++---
 cpu/mpc83xx/cpu_init.c        |   26 +++++++++-------
 cpu/mpc83xx/speed.c           |   28 +++++++-----------
 drivers/serial/serial.c       |   21 +++++++------
 include/common.h              |    1 -
 include/linux/ctype.h         |    6 ++--
 lib_generic/crc32.c           |    7 ++++-
 lib_generic/ctype.c           |    2 +-
 lib_generic/display_options.c |    5 ++-
 lib_generic/vsprintf.c        |    9 ++++--
 lib_ppc/board.c               |    5 ++-
 tools/updater/ctype.c         |    2 +-
 16 files changed, 115 insertions(+), 88 deletions(-)

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to