[U-Boot-Users] [SOLVED] How to support multiple flash sizes ?
laurent.pinchart at tbox.biz
Tue May 9 15:07:48 CEST 2006
I found out what was wrong with my understanding of the memory mapping.
U-Boot is compiled as position independent code, and jumps to it's link
address a few instructions after _start. This means TEXT_BASE can be defined
to anything, as long as
1) TEXT_BASE (which is equal to CFG_MONITOR_BASE for ROM-based boot) is
located in the flash reset mapping, as defined by HRCW[BMS] (low memory or
high memory). U-Boot clears OR0[SDAM] and OR0[LSDAM] before jumping to the
link address, so this might not even be required (not sure about high memory
boot, as BR0[BA] is not modified).
2) the U-Boot image stored in flash is accessible at the processor initial
interrupt prefix, as defined by HRCW[CIP] (0x00000000 for low memory boot,
0xFFF00000 for high memory boot). This means that TEXT_BASE must be equal to
[0x00000000|0xFFF00000], both modulus flash size (another option would be to
store two copies of U-Boot in flash, one at TEXT_BASE and the other at
0x00000000|0xFFF00000, but that would just be a waste of space).
3) the hard reset configuration word, stored at TEXT_BASE in the U-Boot image,
is located at the beginning of the flash. This is always the case for low
memory boot, as TEXT_BASE must be equal to 0x00000000 (both modulus flash
size). For high memory boot the problem can be solved by programming a copy
of the hard reset configuration word in the first flash sector (is there
another way ?).
This explanation is of course for reference purpose, I'm not teaching you
anything you don't already know.
Thank you for your help, and best regards.
More information about the U-Boot