
In message 448FF915.5060306@inaccessnetworks.com you wrote:
I have a board that comes in three flash confirurations:
...
the last sector (a small sector) to contain the environment. The last sector though is in a different address (and has a different size) depending on the flash configuration.
OK.
Currently the defines for the environment expect raw numerical values.
What makes you think so?
I didn't try it, but I see no reason why something like
#define CFG_ENV_ADDR my_env_params(1) #define CFG_ENV_SIZE my_env_params(2) #define CFG_ENV_SECT_SIZE my_env_params(3)
would be impossible. But this probably does not solve your problem - see below.
Is there an infrastructure somewhere to define the flash size at runtime? I tried to print the flash sizes in the board specific codes, for instance:
You have all the powers of the C preprocessor and compiler at your hands. Just use them.
And all sizes are detected correctly. I want to use these values to calculate the location of the environment dynamically at runtime. This way I can have a single u-boot image for all flash configurations!
There is one problem which you probably did not realize yet: U-Boot will access the environment (for example, to read the console baudrate) *long* before the flash detection code is running (which actually happens very late in the init sequence, after relocation to RAM). So you cannot rely on values filled in the flash_info[] array, as such data does not exist yet when you need it. You will need some other way (like configuration registers of jumpers on the board) to figure out which configuration to use.
Or you simply chose a definition that works on all boards, even if this means that you will waste some flashmemory on 2 of the board configurations.
Best regards,
Wolfgang Denk