* 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
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
*/
&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;
}
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:
*/
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);
}
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:
*/
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
************************************************************************
*/
+/*---------------------------------------------------------------------*/
+#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)
{
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
* 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
/*
}
#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