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
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to