]> www.infradead.org Git - users/rw/ppcboot.git/commitdiff
Fix initialization problem when environment in flash
authorwdenk <wdenk>
Sat, 23 Dec 2000 00:50:02 +0000 (00:50 +0000)
committerwdenk <wdenk>
Sat, 23 Dec 2000 00:50:02 +0000 (00:50 +0000)
CHANGELOG
board/cogent/flash.c
board/ip860/flash.c
board/ivms8/flash.c
common/cmd_nvedit.c

index 29ce1fe4feff71cc780b21df4abc0a3a222ddc20..77ce92ef7840673190c8b2016c3f65955e3a574c 100644 (file)
--- 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
 
index d9ae1990e1ecedde95a126432107be7d6871e8c2..523ea0ed6a48e71c42d244d09cf0bb522704ce44 100644 (file)
 
 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;
 }
 
index 53db852cddfb8338053fbbc7d1eb901adfe10924..2af7541efc849ba329fb8901c18eab1873fa393e 100644 (file)
@@ -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);
 }
 
index 5926d8640f8ce27c54e2c203e2db18014f32d120..251b83567f417928d976a42ff483b26ff49cf83b 100644 (file)
 
 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
 
index 8576aff7e369b7faab445368c633757c1515b4f5..2f901922f4fbe7261834597c5ede52bf70d0a181 100644 (file)
  ************************************************************************
  */
 
+/*---------------------------------------------------------------------*/
+#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