[U-Boot-Users] Environment in flash rather than EEProm

Hi all
I'm using a PPChameleonEVB, and am trying to move the u-boot environment into flash. I've modified the include/configs/PPChameleon.h file as follows:
#define CFG_ENV_IS_IN_FLASH 1 #define CFG_ENV_ADDR 0xFFFFA000 #define CFG_ENV_OFFSET (CFG_ENV_ADDR - 0xFFFC0000) #define CFG_ENV_SIZE 0x2000
I've added some debugging into the section where it reads the environment, and I'm seeing the following:
U-Boot 1.0.2-adh-2004/03/29 (Mar 30 2004 - 13:40:38)
CPU: IBM PowerPC 405EP Rev. B at 133.333 MHz (PLB=133, OPB=66, EBC=33 MHz) IIC Boot EEPROM disabled PCI async ext clock used, internal PCI arbiter enabled 16 kB I-Cache 16 kB D-Cache Board: ### No HW ID - assuming PPChameleonEVB I2C: ready DRAM: 32 MB Top of RAM usable for U-Boot at: 02000000 Reserving 189k for U-Boot at: 01fd0000 Reserving 256k for malloc() at: 01f90000 Reserving 128 Bytes for Board Info at: 01f8ff80 Reserving 48 Bytes for Global Data at: 01f8ff50 Stack Pointer at: 01f8ff38 New Stack Pointer is: 01f8ff38 Now running in RAM - U-Boot at: 01fd0000 FLASH: 4 MB env_relocate[204] offset = 0x2010000 env_relocate[216] embedded ENV (before reloc) at fffd9474 env_relocate[218] embedded ENV (after reloc) at 01fe9474 U-Boot relocated to 01fd0000 NAND:Probing at 0xff000000 32 MB ### main_loop entered: bootdelay=5
### main_loop: bootcmd="<UNDEFINED>" =>
As you can see, the address of the environment before relocation is 0xfffd9474. Shouldn't this be 0xFFFFA000? Is there anything else I need to do to force the location of the environment into the required place?
It looks like the address of the environment is based on the location of the 'environment' variable in common/environment.c. Do I need to change the LD script to force this variable to a certain location? If so, can anyone help with what I need to do (I'm not familiar with LD scripts yet).
Many thanks.
Andy

Hi,
Is the below recipe the way to put the environment in flash? I can't seem to find any other instructions on this...
BR, Martin
I'm using a PPChameleonEVB, and am trying to move the u-boot environment into flash. I've modified the include/configs/PPChameleon.h file as follows:
#define CFG_ENV_IS_IN_FLASH 1 #define CFG_ENV_ADDR 0xFFFFA000 #define CFG_ENV_OFFSET (CFG_ENV_ADDR - 0xFFFC0000) #define CFG_ENV_SIZE 0x2000
I've added some debugging into the section where it reads the environment, and I'm seeing the following:
U-Boot 1.0.2-adh-2004/03/29 (Mar 30 2004 - 13:40:38)
CPU: IBM PowerPC 405EP Rev. B at 133.333 MHz (PLB=133, OPB=66, EBC=33 MHz) IIC Boot EEPROM disabled PCI async ext clock used, internal PCI arbiter enabled 16 kB I-Cache 16 kB D-Cache Board: ### No HW ID - assuming PPChameleonEVB I2C: ready DRAM: 32 MB Top of RAM usable for U-Boot at: 02000000 Reserving 189k for U-Boot at: 01fd0000 Reserving 256k for malloc() at: 01f90000 Reserving 128 Bytes for Board Info at: 01f8ff80 Reserving 48 Bytes for Global Data at: 01f8ff50 Stack Pointer at: 01f8ff38 New Stack Pointer is: 01f8ff38 Now running in RAM - U-Boot at: 01fd0000 FLASH: 4 MB env_relocate[204] offset = 0x2010000 env_relocate[216] embedded ENV (before reloc) at fffd9474 env_relocate[218] embedded ENV (after reloc) at 01fe9474 U-Boot relocated to 01fd0000 NAND:Probing at 0xff000000 32 MB ### main_loop entered: bootdelay=5
### main_loop: bootcmd="<UNDEFINED>" =>
As you can see, the address of the environment before relocation is 0xfffd9474. Shouldn't this be 0xFFFFA000? Is there anything else I need to do to force the location of the environment into the required place?
It looks like the address of the environment is based on the location of the 'environment' variable in common/environment.c. Do I need to change the LD script to force this variable to a certain location? If so, can anyone help with what I need to do (I'm not familiar with LD scripts yet).
Many thanks.
Andy
This SF.Net email is sponsored by: IBM Linux Tutorials Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click

In message ctafbf$m30$1@sea.gmane.org you wrote:
Is the below recipe the way to put the environment in flash?
Obviously not - as it doesn't work.
I can't seem to find any other instructions on this...
There are lots of working board config files.
I'm using a PPChameleonEVB, and am trying to move the u-boot environment into flash. I've modified the include/configs/PPChameleon.h file as follows:
This statement is bogus. In the default configuration of the PPChameleonEVB board, the envrionment _is_ already in flash, and no changes are needed at all.
#define CFG_ENV_IS_IN_FLASH 1
OK.
#define CFG_ENV_ADDR 0xFFFFA000 #define CFG_ENV_OFFSET (CFG_ENV_ADDR - 0xFFFC0000)
This is redundand and extremely bad style. Why don't you use CFG_FLASH_BASE instead of the hardwired "magic" constant?
#define CFG_ENV_SIZE 0x2000
I really don't understand why you don't just look at the existing source code and use this. It reads ("include/configs/PPChameleonEVB.h"):
381 #define CFG_ENV_IS_IN_FLASH 1 /* use FLASH for environment vars */ 382 #define CFG_ENV_ADDR 0xFFFF8000 /* environment starts at the first small sector */ 383 #define CFG_ENV_SECT_SIZE 0x2000 /* 8196 bytes may be used for env vars*/ 384 #define CFG_ENV_ADDR_REDUND 0xFFFFA000 385 #define CFG_ENV_SIZE_REDUND 0x2000
Best regards,
Wolfgang Denk

Is the below recipe the way to put the environment in flash?
Obviously not - as it doesn't work.
:-)
I can't seem to find any other instructions on this...
There are lots of working board config files.
Now, that's an instruction - got it!
I'm using a PPChameleonEVB, and am trying to move the u-boot environment into flash. I've modified the include/configs/PPChameleon.h file as follows:
This statement is bogus.
Fortunately I didn't write it!
In the default configuration of the PPChameleonEVB board, the envrionment _is_ already in flash, and no changes are needed at all.
Ohh, I have been fooled by the initialisation sequence - stating something about EEPROM.
I wonder what would happen if the EEPROM is taken off (cheaper production cost) - would U-Boot reject to start?!
#define CFG_ENV_IS_IN_FLASH 1
OK.
Almost too easy...
Thanks for the guidelines, Martin

In message ctgpag$c19$1@sea.gmane.org you wrote:
I wonder what would happen if the EEPROM is taken off (cheaper production cost) - would U-Boot reject to start?!
No, but it would complain about errors when trying to access the device.
If you remove the EEPROM, you should also remove the EEPROm relevant config options from the config file.
Thanks for the guidelines,
You are welcome.
Best regards,
Wolfgang Denk

Hi,
This statement is bogus. In the default configuration of the PPChameleonEVB board, the envrionment _is_ already in flash, and no changes are needed at all.
#define CFG_ENV_IS_IN_FLASH 1
Don't know it you care at all :-), but in my default PPChameleon config this definition is hidden by the surrounding #define ENVIRONMENT_IN_EEPROM #ifdef ENVIRONMENT_IN_EEPROM
#define CFG_ENV_IS_IN_EEPROM 1
I wonder what would happen if the EEPROM is taken off (cheaper production cost) - would U-Boot reject to start?!
No, but it would complain about errors when trying to access the device. If you remove the EEPROM, you should also remove the EEPROm relevant config options from the config file.
Good idea. I removed "CFG_CMD_EEPROM" from the "CONFIG_COMMANDS" - that should do it... Thanks again!
// Martin

In message 420C9E1D.1010208@egholm-nielsen.dk you wrote:
This statement is bogus. In the default configuration of the PPChameleonEVB board, the envrionment _is_ already in flash, and no changes are needed at all.
#define CFG_ENV_IS_IN_FLASH 1
Don't know it you care at all :-), but in my default PPChameleon config
I do care.
this definition is hidden by the surrounding #define ENVIRONMENT_IN_EEPROM #ifdef ENVIRONMENT_IN_EEPROM
#define CFG_ENV_IS_IN_EEPROM 1
Yes, and ENVIRONMENT_IN_EEPROM is NOT defined, and the #else branch uses #define CFG_ENV_IS_IN_FLASH 1 (i. e. the default is in the #else branch.)
This is what I wrote before: in the default configuration of the PPChameleonEVB board, the environmment is in (redundand) flash sectors.
If you remove the EEPROM, you should also remove the EEPROm relevant config options from the config file.
Good idea. I removed "CFG_CMD_EEPROM" from the "CONFIG_COMMANDS" - that should do it...
Indeed.
Thanks again!
You are welcome.
Best regards,
Wolfgang Denk

Hi Wolfgang,
This statement is bogus. In the default configuration of the PPChameleonEVB board, the envrionment _is_ already in flash, and no changes are needed at all.
#define CFG_ENV_IS_IN_FLASH 1
this definition is hidden by the surrounding #define ENVIRONMENT_IN_EEPROM #ifdef ENVIRONMENT_IN_EEPROM #define CFG_ENV_IS_IN_EEPROM 1
Yes, and ENVIRONMENT_IN_EEPROM is NOT defined, and the #else branch uses #define CFG_ENV_IS_IN_FLASH 1 (i. e. the default is in the #else branch.)
Hum, mine was... Maybe some of the patches from my board manufactorer added this...
This is what I wrote before: in the default configuration of the PPChameleonEVB board, the environmment is in (redundand) flash sectors.
I read it :-)
// Martin
participants (3)
-
Andy Hawkins
-
Martin Egholm Nielsen
-
Wolfgang Denk