From: wdenk Date: Sat, 23 Dec 2000 00:50:02 +0000 (+0000) Subject: Fix initialization problem when environment in flash X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=ddc23b9b75b57861f7eeb583c63051826fe37644;p=users%2Frw%2Fppcboot.git Fix initialization problem when environment in flash --- diff --git a/CHANGELOG b/CHANGELOG index 29ce1fe..77ce92e 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -63,7 +63,8 @@ Modifications since 0.7.0: * Added support for PPC405CR (Stefan Roese) -* Fixes in environment code; better detection of CRC errors +* Fixes in environment code; better detection of CRC errors; fixes + for env in flash * Fixed serial driver over SCC; for MPC8xx now tested on all 4 SCC's diff --git a/board/cogent/flash.c b/board/cogent/flash.c index d9ae199..523ea0e 100644 --- a/board/cogent/flash.c +++ b/board/cogent/flash.c @@ -26,6 +26,18 @@ flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips */ +#if defined(CFG_ENV_IS_IN_FLASH) +# ifndef CFG_ENV_ADDR +# define CFG_ENV_ADDR (CFG_FLASH_BASE + CFG_ENV_OFFSET) +# endif +# ifndef CFG_ENV_SIZE +# define CFG_ENV_SIZE CFG_ENV_SECT_SIZE +# endif +# ifndef CFG_ENV_SECT_SIZE +# define CFG_ENV_SECT_SIZE CFG_ENV_SIZE +# endif +#endif + /*----------------------------------------------------------------------- * Functions */ @@ -331,17 +343,13 @@ flash_init(void) &flash_info[0]); #endif -#if defined(CFG_FLASH_ENV_ADDR) +#ifdef CFG_ENV_IS_IN_FLASH + /* ENV protection ON by default */ (void)flash_protect(FLAG_PROTECT_SET, - CFG_FLASH_ENV_ADDR, -#if defined(CFG_FLASH_ENV_BUF) - CFG_FLASH_ENV_ADDR + CFG_FLASH_ENV_BUF - 1, -#else - CFG_FLASH_ENV_ADDR + CFG_ENV_SIZE - 1, + CFG_ENV_ADDR, + CFG_ENV_ADDR+CFG_ENV_SECT_SIZE-1, + &flash_info[0]); #endif - &flash_info[0]); -#endif - return total; } diff --git a/board/ip860/flash.c b/board/ip860/flash.c index 53db852..2af7541 100644 --- a/board/ip860/flash.c +++ b/board/ip860/flash.c @@ -28,6 +28,18 @@ typedef volatile unsigned char vu_char; flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips */ +#if defined(CFG_ENV_IS_IN_FLASH) +# ifndef CFG_ENV_ADDR +# define CFG_ENV_ADDR (CFG_FLASH_BASE + CFG_ENV_OFFSET) +# endif +# ifndef CFG_ENV_SIZE +# define CFG_ENV_SIZE CFG_ENV_SECT_SIZE +# endif +# ifndef CFG_ENV_SECT_SIZE +# define CFG_ENV_SECT_SIZE CFG_ENV_SIZE +# endif +#endif + /*----------------------------------------------------------------------- * Protection Flags: */ @@ -94,14 +106,13 @@ unsigned long flash_init (void) CFG_FLASH_BASE+CFG_MONITOR_LEN-1, &flash_info[0]); -#ifdef CFG_FLASH_ENV_ADDR +#ifdef CFG_ENV_IS_IN_FLASH /* ENV protection ON by default */ (void)flash_protect(FLAG_PROTECT_SET, - CFG_FLASH_ENV_ADDR, - CFG_FLASH_ENV_ADDR+CFG_ENV_SIZE-1, + CFG_ENV_ADDR, + CFG_ENV_ADDR+CFG_ENV_SECT_SIZE-1, &flash_info[0]); #endif - return (size); } diff --git a/board/ivms8/flash.c b/board/ivms8/flash.c index 5926d86..251b835 100644 --- a/board/ivms8/flash.c +++ b/board/ivms8/flash.c @@ -26,6 +26,18 @@ flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips */ +#if defined(CFG_ENV_IS_IN_FLASH) +# ifndef CFG_ENV_ADDR +# define CFG_ENV_ADDR (CFG_FLASH_BASE + CFG_ENV_OFFSET) +# endif +# ifndef CFG_ENV_SIZE +# define CFG_ENV_SIZE CFG_ENV_SECT_SIZE +# endif +# ifndef CFG_ENV_SECT_SIZE +# define CFG_ENV_SECT_SIZE CFG_ENV_SIZE +# endif +#endif + /*----------------------------------------------------------------------- * Protection Flags: */ @@ -89,11 +101,11 @@ unsigned long flash_init (void) CFG_FLASH_BASE+CFG_MONITOR_LEN-1, &flash_info[0]); -#ifdef CFG_FLASH_ENV_ADDR +#ifdef CFG_ENV_IS_IN_FLASH /* ENV protection ON by default */ (void)flash_protect(FLAG_PROTECT_SET, - CFG_FLASH_ENV_ADDR, - CFG_FLASH_ENV_ADDR+CFG_ENV_SIZE-1, + CFG_ENV_ADDR, + CFG_ENV_ADDR+CFG_ENV_SECT_SIZE-1, &flash_info[0]); #endif diff --git a/common/cmd_nvedit.c b/common/cmd_nvedit.c index 8576aff..2f90192 100644 --- a/common/cmd_nvedit.c +++ b/common/cmd_nvedit.c @@ -42,6 +42,17 @@ ************************************************************************ */ +/*---------------------------------------------------------------------*/ +#undef DEBUG_ENV + +#ifdef DEBUG_ENV +#define DEBUG(fmt,args...) printf(fmt ,##args) +#else +#define DEBUG(fmt,args...) +#endif +/*---------------------------------------------------------------------*/ + + #if defined(CFG_ENV_IS_IN_FLASH) # ifndef CFG_ENV_ADDR # define CFG_ENV_ADDR (CFG_FLASH_BASE + CFG_ENV_OFFSET) @@ -163,6 +174,7 @@ void env_relocate (ulong offset) { init_data_t *idata = (init_data_t*)(CFG_INIT_RAM_ADDR+CFG_INIT_DATA_OFFSET); + DEBUG ("%s[%d] offset = 0x%lx\n", __FUNCTION__,__LINE__,offset); #if !defined(ENV_IS_EMBEDDED) || defined(CFG_ENV_IS_IN_NVRAM) /* * We must allocate a buffer for the environment @@ -171,12 +183,14 @@ void env_relocate (ulong offset) * so we need a RAM copy here, too. */ env_ptr = (env_t *)malloc (CFG_ENV_SIZE); + DEBUG ("%s[%d] malloced ENV at %p\n", __FUNCTION__,__LINE__,env_ptr); #else /* ENV_IS_EMBEDDED */ /* * The environment buffer is embedded with the text segment, * just relocate the environment pointer */ env_ptr = (env_t *)((ulong)env_ptr + offset); + DEBUG ("%s[%d] embedded ENV at %p\n", __FUNCTION__,__LINE__,env_ptr); #endif /* @@ -200,12 +214,15 @@ void env_relocate (ulong offset) } #if !defined(ENV_IS_EMBEDDED) else { -# if defined(CFG_ENV_IS_IN_NVRAM) + DEBUG ("%s[%d] ENV is valid\n", __FUNCTION__,__LINE__); +# if defined(CFG_ENV_IS_IN_EEPROM) + DEBUG ("%s[%d] read ENV from EEPROM\n", __FUNCTION__,__LINE__); + eeprom_read (offsetof(env_t,data), env_ptr->data, ENV_SIZE); +# else + DEBUG ("%s[%d] read ENV from NVRAM/FLASH\n", __FUNCTION__,__LINE__); memcpy (env_ptr->data, ((env_t *)CFG_ENV_ADDR)->data, ENV_SIZE); -# elif defined(CFG_ENV_IS_IN_EEPROM) - eeprom_read (offsetof(env_t,data), env_ptr->data, ENV_SIZE); # endif } #endif