[U-Boot-Users] How to support multiple flash sizes ?
laurent.pinchart at tbox.biz
Tue May 9 11:07:32 CEST 2006
I'm trying to find a way for U-Boot to automatically detect the flash base
Our custom board can be mounted with different flash options, from 16MB to
128MB. I would like to avoid programming the board with a different boot
loader for each flash size, so I was trying a way to create a
"one-fits-them-all" U-Boot version.
I thought defining CFG_FLASH_BASE to 0xF8000000 would be enough, as the flash
would repeat over the 128MB memory range. This indeed works fine for reading,
but U-Boot is clever enough to detect the flash size, which leads to problems
when erasing sectors. The environment, for instance, is stored at TEXT_BASE +
256kB (0xFFF40000). Saving the environment fails, as U-Boot is unable to
erase sector 0xFFF40000 which is outside the 16MB flash memory range
(0xF8000000 - 0xF8FFFFFF).
CFG_FLASH_BASE is used throughout the U-Boot code, so it would not be an easy
task to replacing it by a variable. Does someone know of a way to either
detect the flash base address, or read it from a fixed location in flash
(let's say in the first sector for instance, after the hard reset
configuration word) ? A possible approach would be to use the hardcoded
CFG_FLASH_BASE value at startup, and remap the flash at 0xFFFFFFFF -
flash_size later when the flash size is known. CFG_FLASH_BASE would have to
be replaced by a variable in several places.
Thanks in advance for all the help you can provide.
More information about the U-Boot