[U-Boot] Getting "Unable to save the rest of sector (196608)" when I turn on Redundant env with CFG_ENV_ADDR_REDUND
Brian Hutchinson
b.hutchman at gmail.com
Wed Apr 7 17:14:39 CEST 2010
Hi,
I'm using u-boot 1.1.6 and have been using a single 256k flash sector
for the environment. I want to use the redundant env. feature so I
changed my config to:
#define CFG_ENV_IS_IN_FLASH 1 /* Environment
variables stored in Flash memory */
#define CFG_ENV_ADDR (PC20X_BOOTABLE_FLASH_BASE+FLASH_SECTOR_SIZE)
#define CFG_ENV_SECT_SIZE FLASH_SECTOR_SIZE /* One flash
sector for environment info */
#define CFG_ENV_SIZE 0x10000 /* But 64K is sufficient */
//#define CFG_ENV_SIZE CFG_ENV_SECT_SIZE /* the whole sector */
/* Redundant environment */
#define CFG_ENV_ADDR_REDUND (CFG_ENV_ADDR + CFG_ENV_SECT_SIZE)
#define CFG_ENV_SIZE_REDUND (CFG_ENV_SIZE)
#define CONFIG_ENV_OVERWRITE /* Turn off wite
protection for vendor parameters */
When I use u-boot built with a CFG_ENV_SIZE of 0x10000 (what was
working before I started) and enable CFG_ENV_ADDR_REDUND .... I get
the following when trying to saveenv:
=> saveenv
Saving Environment to Flash...
Un-Protected 1 sectors
Un-Protected 1 sectors
Unable to save the rest of sector (196608)
Protected 1 sectors
Protected 1 sectors
My physical NOR flash is setup as:
0x20000000 = u-boot
0x20040000 = u-boot env. (the original env that works if I don't have
redund turned on)
0x20080000 = u-boot redund env. (what I added)
I'm not certain what the problem is. I'm getting to the code in
common/env_flash.c that has:
#if CFG_ENV_SECT_SIZE > CFG_ENV_SIZE
up_data = (end_addr_new + 1 - ((long)flash_addr_new + CFG_ENV_SIZE));
debug ("Data to save 0x%x\n", up_data);
if (up_data) {
if ((saved_data = malloc(up_data)) == NULL) {
printf("Unable to save the rest of sector (%ld)\n",
up_data);
goto Done;
}
memcpy(saved_data,
(void *)((long)flash_addr_new + CFG_ENV_SIZE), up_data);
debug ("Data (start 0x%x, len 0x%x) saved at 0x%x\n",
(long)flash_addr_new + CFG_ENV_SIZE,
up_data, saved_data);
}
#endif
... which to my understanding is intended to allow you to save RAM by
using a env. smaller than your sector size which is my case.
I've also tried to set CFG_ENV_SIZE to be the flash sector size which
gets me over the above "Unable to save the rest of sector" problem but
I suspect that I'm having RAM issues as I only have 128M RAM and am
trying to use two environments of 256k each and the problem I'm having
then becomes when I try to nfs boot my board .... it just hangs.
Any ideas on what I should check? The "Unable to save the rest of
sector (196608)" is kind of strange as 196608 in hex is 0x30000 which
is the sector u-boot lives in!
Regards,
Brian
More information about the U-Boot
mailing list