diff options
| author | Wolfgang Denk <wd@denx.de> | 2007-09-16 17:10:04 +0200 | 
|---|---|---|
| committer | Wolfgang Denk <wd@denx.de> | 2007-09-16 17:20:37 +0200 | 
| commit | 67c31036acaaaa992fc346cc89db0909a7e733c4 (patch) | |
| tree | 51c721627703ec40a724e1503061554401743f05 /common/environment.c | |
| parent | eb6da8050797c204c9d010548424186c7ce32fc1 (diff) | |
| download | olio-uboot-2014.01-67c31036acaaaa992fc346cc89db0909a7e733c4.tar.xz olio-uboot-2014.01-67c31036acaaaa992fc346cc89db0909a7e733c4.zip | |
TQM8xx[LM]: Fix broken environment alignment.
With recent toolchains, the environment sectors were no longer aligned to
sector boundaries. The reason was a combination of two bugs:
1) common/environment.c assumed that CONFIG_TQM8xxL would be defined
   for all TQM8xxL and TQM8xxM boards. But "include/common.h", where
   this gets defined, is not included here (and cannot be included
   without causing lots of problems).
   Added a new #define CFG_USE_PPCENV for all boards which really
   want to put the environment is a ".ppcenv" section.
2) The linker scripts just include environment.o, silently assuming
   that the objects in that file are really in the order in which
   they are coded in the C file, i. e. "environment" first, then
   "redundand_environment", and "env_size" last. However, current
   toolchains (GCC-4.x) reorder the objects, causing the environment
   data not to start on a flash sector boundary:
   Instead of:					we got:
	40008000 T environment			40008000 T env_size
	4000c000 T redundand_environment	40008004 T redundand_environment
	40010000 T env_size			4000c004 T environment
   Note: this patch fixes just the first part, and cures the alignment
   problem by making sure that "env_size" gets placed correctly. However,
   we still have a potential issue because primary and redundant
   environment sectors are actually swapped, i. e. we have now:
	40008000 T redundand_environment
	4000c000 T environment
	40010000 T env_size
   This shall be fixed in the next version.
Signed-off-by: Wolfgang Denk <wd@denx.de>
Diffstat (limited to 'common/environment.c')
| -rw-r--r-- | common/environment.c | 13 | 
1 files changed, 1 insertions, 12 deletions
| diff --git a/common/environment.c b/common/environment.c index 1d425a730..24257f7c5 100644 --- a/common/environment.c +++ b/common/environment.c @@ -51,18 +51,7 @@   * a seperate section.  Note that ENV_CRC is only defined when building   * U-Boot itself.   */ -#if (defined(CONFIG_CMI)	|| \ -     defined(CONFIG_FADS)	|| \ -     defined(CONFIG_HYMOD)	|| \ -     defined(CONFIG_ICU862)	|| \ -     defined(CONFIG_R360MPI)	|| \ -     defined(CONFIG_TQM8xxL)	|| \ -     defined(CONFIG_RRVISION)	|| \ -     defined(CONFIG_TRAB)   	|| \ -     defined(CONFIG_PPCHAMELEONEVB) || \ -     defined(CONFIG_M5271EVB)	|| \ -     defined(CONFIG_IDMR)	|| \ -     defined(CONFIG_NAND_U_BOOT))	&& \ +#if (defined(CFG_USE_PPCENV) || defined(CONFIG_NAND_U_BOOT)) && \       defined(ENV_CRC) /* Environment embedded in U-Boot .ppcenv section */  /* XXX - This only works with GNU C */  #  define __PPCENV__ __attribute__ ((section(".ppcenv"))) |