Merge branch 'master' of git://git.denx.de/u-boot-arm
authorWolfgang Denk <wd@denx.de>
Tue, 19 Oct 2010 22:10:07 +0000 (00:10 +0200)
committerWolfgang Denk <wd@denx.de>
Tue, 19 Oct 2010 22:10:07 +0000 (00:10 +0200)
1  2 
MAINTAINERS
Makefile
boards.cfg
doc/README.arm-relocation

diff --cc MAINTAINERS
Simple merge
diff --cc Makefile
Simple merge
diff --cc boards.cfg
Simple merge
index e9fe9993d951c306e1908736c38c97384191cece,8d328e09f9108c93c82f263f286f84322c4037ae..3856633e9d90d49e2454815c6d46bcb0b1911d2c
@@@ -92,164 -97,17 +97,17 @@@ Relocation with NAND_SPL (example for t
    the "real" u-boot to CONFIG_SYS_NAND_U_BOOT_DST and starts execution
    @CONFIG_SYS_NAND_U_BOOT_START
  
 -- This u-boot does no ram int, nor cpu register setup. Just looks
 -  where it have to relocate and relocate itself to this address.
 -  If relocate address = CONFIG_SYS_TEXT_BASE(not the same, as the TEXT_BASE
 -  from the nand_spl code), no need to copy, just go on with bss clear
 -  and jump to board_init_r.
 +- This u-boot does no RAM init, nor CPU register setup. Just look
 +  where it has to copy and relocate itself to this address. If
 +  relocate address = CONFIG_SYS_TEXT_BASE (not the same, as the
 +  CONFIG_SYS_TEXT_BASE from the nand_spl code), then there is no need
 +  to copy, just go on with bss clear and jump to board_init_r.
  
- -------------------------------------------------------------------------------------
- Relocation:
- How to translate flash addresses in GOT to ram addresses.
- This is automagically done from code, but this example
- shows, how this magic code works ;-)
- (example on the qong board)
- Find a variable:
- a) search it in System.map
- (for example flash_info)
- a005b4c0 B BootpID
- a005b4c4 B BootpTry
- a005b4c8 b slave
- a005b4cc B flash_info
- ^^^^^^^^
- a005c908 b saved_sector.4002
- a005c910 b cfi_mtd_info
- a005c9c0 b cfi_mtd_names
- a005c9d0 B mtd_table
- ---------------------------------------
- b) create hexdump from u-boot code:
- hexdump -C u-boot > gnlmpfhex
- ---------------------------------------
- c) search the variables address in the hexdump
- *
- 0005fc80  00 00 00 00 00 00 00 00  2c 06 01 a0 18 cd 05 a0  |........,.......|
- 0005fc90  9c d4 05 a0 bc b4 05 a0  1c 7f 05 a0 f0 05 01 a0  |................|
- 0005fca0  08 5a 04 a0 1c ab 05 a0  ec a4 05 a0 98 c3 01 a0  |.Z..............|
- 0005fcb0  a0 d6 05 a0 04 71 05 a0  c0 f9 00 a0 3c cd 05 a0  |.....q......<...|
- 0005fcc0  cc b4 05 a0 f0 fa 00 a0  f0 d6 05 a0 10 86 05 a0  |................|
-           ^^^^^^^^^^^
- 0005fcd0  a4 16 06 a0 dc 64 05 a0  18 86 05 a0 52 48 05 a0  |.....d......RH..|
- 0005fce0  c0 86 05 a0 24 6e 02 a0  b4 6c 05 a0 b0 94 01 a0  |....$n...l......|
- 0005fcf0  1c 86 05 a0 50 85 05 a0  d4 0c 06 a0 bc 0b 06 a0  |....P...........|
- -> 0005fcc0
- ----------------------------------------
- d) know we calculate this address in RAM
-   8ff08000    (new address of code in RAM *1)
- + 0005fcc0
- - 00008000    (offset of text *2)
- ----------
-   8ff5fcc0    -> Addr GOT in RAM
- *1:
- activate debug and look for the line:
- Now running in RAM - U-Boot at: 8ff08000
-                                 ^^^^^^^^
-                                 new address of u-boot code in RAM
- *2:
- Section Headers:
-   [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
-   [ 0]                   NULL            00000000 000000 000000 00      0   0  0
-   [ 1] .text             PROGBITS        a0000000 008000 04599c 00  AX  0   0 32
-                                                   ^^^^^^
-                                                   Offset of text
- ----------------------------------------
- e) now we look in 8ff5fcc0 (RAM)
- QongEVB>md 0x8ff5fcc0
- 8ff5fcc0 : a005b4cc a000faf0 a005d6f0 a0058610  ................
-            ^^^^^^^^
-            Bingo, here we have the old flash address (when relocation
-            is working, here is the fixed ram address. see @ f, how
-            it gets calculated)
- ----------------------------------------
- f) now translate it in the new RAM address
-   a005b4cc
- - a0000000     TextBase
- + 8ff08000     new address of u-boot in ram
- ----------
-   8ff634cc
- QongEVB>mm 0x8ff5fcc0 0x8ff634cc 1
- QongEVB>md 0x8ff5fcc0
- 8ff5fcc0 : 8ff634cc a000faf0 a005d6f0 a0058610  .4..............
- 8ff5fcd0 : a00616a4 a00564dc a0058618 a0054852  .....d......RH..
- As this must be done for all address in the GOT, the u-boot
- code did this automagically ... :-)
- ----------------------------------------------
- g) check if the new address is really in the bss section:
- bss start:
- 8ff6054c      (8ff08000 + 0005854C monitorlen)
- bss end:
- 8ff698ac      (8ff08000 + 618AC)
- 8ff634cc is in bss :-)
- ----------------------------------------------
- h) u-boot prints:
- important  addresses:
- U-Boot code: A0000000 -> A005854C  BSS: -> A00618AC   TextBase 0xa0000000
- Now running in RAM - U-Boot at: 8ff08000              relocBase 0x8ff08000
- ---------
+ -----------------------------------------------------------------------------
  
- U-Boot 2010.06-rc2-00002-gf8fbb25-dirty (Jun 18 2010 - 17:07:19)
+ How ELF relocations 23 and 2 work.
  
- U-Boot code: A0000000 -> A005854C  BSS: -> A00618AC
- CPU:   Freescale i.MX31 at 398 MHz
- Board: DAVE/DENX Qong
- mon: FFFFFFFF gd->monLen: 000618AC
- Top of RAM usable for U-Boot at: 90000000
- LCD panel info: 640 x 480, 16 bit/pix
- Reserving 600k for LCD Framebuffer at: 8ff6a000
- Reserving 390k for U-Boot at: 8ff08000
- Reserving 1280k for malloc() at: 8fdc8000
- Reserving 28 Bytes for Board Info at: 8fdc7fe4
- Reserving 48 Bytes for Global Data at: 8fdc7fb4
- New Stack Pointer is: 8fdc7fb0
- RAM Configuration:
- Bank #0: 80000000 256 MiB
- mon: 0005854C gd->monLen: 000618AC
- Now running in RAM - U-Boot at: 8ff08000
+ TBC
  
  -------------------------------------------------------------------------------------