mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-21 14:41:31 +00:00
Add NAND environment support for PPC440EPx Sequoia NAND boot config
Patch by Stefan Roese, 12 Sep 2006
This commit is contained in:
parent
a73c8dbb43
commit
d12ae80889
7 changed files with 73 additions and 25 deletions
|
@ -2,6 +2,9 @@
|
||||||
Changes since U-Boot 1.1.4:
|
Changes since U-Boot 1.1.4:
|
||||||
======================================================================
|
======================================================================
|
||||||
|
|
||||||
|
* Add NAND environment support for PPC440EPx Sequoia NAND boot config
|
||||||
|
Patch by Stefan Roese, 12 Sep 2006
|
||||||
|
|
||||||
* Update NAND boot documentation
|
* Update NAND boot documentation
|
||||||
Patch by Stefan Roese, 12 Sep 2006
|
Patch by Stefan Roese, 12 Sep 2006
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* (C) Copyright 2002
|
* (C) Copyright 2006
|
||||||
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
||||||
*
|
*
|
||||||
* See file CREDITS for list of people who contributed to this
|
* See file CREDITS for list of people who contributed to this
|
||||||
|
@ -56,6 +56,12 @@ SECTIONS
|
||||||
|
|
||||||
cpu/ppc4xx/start.o (.text)
|
cpu/ppc4xx/start.o (.text)
|
||||||
|
|
||||||
|
/* Align to next NAND block */
|
||||||
|
. = ALIGN(0x4000);
|
||||||
|
common/environment.o (.ppcenv)
|
||||||
|
/* Keep some space here for redundant env and potential bad env blocks */
|
||||||
|
. = ALIGN(0x10000);
|
||||||
|
|
||||||
*(.text)
|
*(.text)
|
||||||
*(.fixup)
|
*(.fixup)
|
||||||
*(.got1)
|
*(.got1)
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* (C) Copyright 2004
|
* (C) Copyright 2004
|
||||||
* Jian Zhang, Texas Instruments, jzhang@ti.com.
|
* Jian Zhang, Texas Instruments, jzhang@ti.com.
|
||||||
|
|
||||||
* (C) Copyright 2000-2004
|
* (C) Copyright 2000-2006
|
||||||
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
||||||
*
|
*
|
||||||
* (C) Copyright 2001 Sysgo Real-Time Solutions, GmbH <www.elinos.com>
|
* (C) Copyright 2001 Sysgo Real-Time Solutions, GmbH <www.elinos.com>
|
||||||
|
@ -76,7 +76,9 @@ env_t *env_ptr = 0;
|
||||||
|
|
||||||
|
|
||||||
/* local functions */
|
/* local functions */
|
||||||
|
#if !defined(ENV_IS_EMBEDDED)
|
||||||
static void use_default(void);
|
static void use_default(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
@ -91,11 +93,55 @@ uchar env_get_char_spec (int index)
|
||||||
* Mark it OK for now. env_relocate() in env_common.c
|
* Mark it OK for now. env_relocate() in env_common.c
|
||||||
* will call our relocate function which will does
|
* will call our relocate function which will does
|
||||||
* the real validation.
|
* the real validation.
|
||||||
|
*
|
||||||
|
* When using a NAND boot image (like sequoia_nand), the environment
|
||||||
|
* can be embedded or attached to the U-Boot image in NAND flash. This way
|
||||||
|
* the SPL loads not only the U-Boot image from NAND but also the
|
||||||
|
* environment.
|
||||||
*/
|
*/
|
||||||
int env_init(void)
|
int env_init(void)
|
||||||
{
|
{
|
||||||
|
#if defined(ENV_IS_EMBEDDED)
|
||||||
|
ulong total;
|
||||||
|
int crc1_ok = 0, crc2_ok = 0;
|
||||||
|
env_t *tmp_env1, *tmp_env2;
|
||||||
|
|
||||||
|
total = CFG_ENV_SIZE;
|
||||||
|
|
||||||
|
tmp_env1 = env_ptr;
|
||||||
|
tmp_env2 = (env_t *)((ulong)env_ptr + CFG_ENV_SIZE);
|
||||||
|
|
||||||
|
crc1_ok = (crc32(0, tmp_env1->data, ENV_SIZE) == tmp_env1->crc);
|
||||||
|
crc2_ok = (crc32(0, tmp_env2->data, ENV_SIZE) == tmp_env2->crc);
|
||||||
|
|
||||||
|
if (!crc1_ok && !crc2_ok)
|
||||||
|
gd->env_valid = 0;
|
||||||
|
else if(crc1_ok && !crc2_ok)
|
||||||
|
gd->env_valid = 1;
|
||||||
|
else if(!crc1_ok && crc2_ok)
|
||||||
|
gd->env_valid = 2;
|
||||||
|
else {
|
||||||
|
/* both ok - check serial */
|
||||||
|
if(tmp_env1->flags == 255 && tmp_env2->flags == 0)
|
||||||
|
gd->env_valid = 2;
|
||||||
|
else if(tmp_env2->flags == 255 && tmp_env1->flags == 0)
|
||||||
|
gd->env_valid = 1;
|
||||||
|
else if(tmp_env1->flags > tmp_env2->flags)
|
||||||
|
gd->env_valid = 1;
|
||||||
|
else if(tmp_env2->flags > tmp_env1->flags)
|
||||||
|
gd->env_valid = 2;
|
||||||
|
else /* flags are equal - almost impossible */
|
||||||
|
gd->env_valid = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gd->env_valid == 1)
|
||||||
|
env_ptr = tmp_env1;
|
||||||
|
else if (gd->env_valid == 2)
|
||||||
|
env_ptr = tmp_env2;
|
||||||
|
#else /* ENV_IS_EMBEDDED */
|
||||||
gd->env_addr = (ulong)&default_environment[0];
|
gd->env_addr = (ulong)&default_environment[0];
|
||||||
gd->env_valid = 1;
|
gd->env_valid = 1;
|
||||||
|
#endif /* ENV_IS_EMBEDDED */
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
@ -236,6 +282,7 @@ void env_relocate_spec (void)
|
||||||
}
|
}
|
||||||
#endif /* CFG_ENV_OFFSET_REDUND */
|
#endif /* CFG_ENV_OFFSET_REDUND */
|
||||||
|
|
||||||
|
#if !defined(ENV_IS_EMBEDDED)
|
||||||
static void use_default()
|
static void use_default()
|
||||||
{
|
{
|
||||||
puts ("*** Warning - bad CRC or NAND, using default environment\n\n");
|
puts ("*** Warning - bad CRC or NAND, using default environment\n\n");
|
||||||
|
@ -253,5 +300,6 @@ static void use_default()
|
||||||
gd->env_valid = 1;
|
gd->env_valid = 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* CFG_ENV_IS_IN_NAND */
|
#endif /* CFG_ENV_IS_IN_NAND */
|
||||||
|
|
|
@ -60,7 +60,8 @@
|
||||||
defined(CONFIG_RRVISION) || \
|
defined(CONFIG_RRVISION) || \
|
||||||
defined(CONFIG_TRAB) || \
|
defined(CONFIG_TRAB) || \
|
||||||
defined(CONFIG_PPCHAMELEONEVB) || \
|
defined(CONFIG_PPCHAMELEONEVB) || \
|
||||||
defined(CONFIG_M5271EVB)) && \
|
defined(CONFIG_M5271EVB) || \
|
||||||
|
defined(CONFIG_NAND_U_BOOT)) && \
|
||||||
defined(ENV_CRC) /* Environment embedded in U-Boot .ppcenv section */
|
defined(ENV_CRC) /* Environment embedded in U-Boot .ppcenv section */
|
||||||
/* XXX - This only works with GNU C */
|
/* XXX - This only works with GNU C */
|
||||||
# define __PPCENV__ __attribute__ ((section(".ppcenv")))
|
# define __PPCENV__ __attribute__ ((section(".ppcenv")))
|
||||||
|
|
|
@ -69,14 +69,9 @@
|
||||||
/*-----------------------------------------------------------------------
|
/*-----------------------------------------------------------------------
|
||||||
* Initial RAM & stack pointer
|
* Initial RAM & stack pointer
|
||||||
*----------------------------------------------------------------------*/
|
*----------------------------------------------------------------------*/
|
||||||
#if 0
|
|
||||||
/* 440EPx/440GRx have 16KB of internal SRAM, so no need for D-Cache */
|
/* 440EPx/440GRx have 16KB of internal SRAM, so no need for D-Cache */
|
||||||
#define CFG_INIT_RAM_DCACHE 1 /* d-cache as init ram */
|
|
||||||
#define CFG_INIT_RAM_ADDR 0x70000000 /* DCache */
|
|
||||||
#else
|
|
||||||
#define CFG_INIT_RAM_OCM 1 /* OCM as init ram */
|
#define CFG_INIT_RAM_OCM 1 /* OCM as init ram */
|
||||||
#define CFG_INIT_RAM_ADDR CFG_OCM_BASE /* OCM */
|
#define CFG_INIT_RAM_ADDR CFG_OCM_BASE /* OCM */
|
||||||
#endif
|
|
||||||
|
|
||||||
#define CFG_INIT_RAM_END (4 << 10)
|
#define CFG_INIT_RAM_END (4 << 10)
|
||||||
#define CFG_GBL_DATA_SIZE 256 /* num bytes initial data */
|
#define CFG_GBL_DATA_SIZE 256 /* num bytes initial data */
|
||||||
|
@ -98,18 +93,11 @@
|
||||||
/*-----------------------------------------------------------------------
|
/*-----------------------------------------------------------------------
|
||||||
* Environment
|
* Environment
|
||||||
*----------------------------------------------------------------------*/
|
*----------------------------------------------------------------------*/
|
||||||
/*
|
#if !defined(CONFIG_NAND_U_BOOT) && !defined(CONFIG_NAND_SPL)
|
||||||
* Define here the location of the environment variables (FLASH or EEPROM).
|
|
||||||
* Note: DENX encourages to use redundant environment in FLASH.
|
|
||||||
*/
|
|
||||||
#if 1 /* test-only */
|
|
||||||
#define CFG_ENV_IS_IN_FLASH 1 /* use FLASH for environment vars */
|
#define CFG_ENV_IS_IN_FLASH 1 /* use FLASH for environment vars */
|
||||||
#else
|
#else
|
||||||
#define CFG_ENV_IS_IN_NAND 1 /* use NAND for environment vars */
|
#define CFG_ENV_IS_IN_NAND 1 /* use NAND for environment vars */
|
||||||
#endif
|
#endif
|
||||||
#if 0
|
|
||||||
#define CFG_ENV_IS_IN_EEPROM 1 /* use EEPROM for environment vars */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------
|
/*-----------------------------------------------------------------------
|
||||||
* FLASH related
|
* FLASH related
|
||||||
|
@ -189,8 +177,12 @@
|
||||||
#undef CFG_NAND_4_ADDR_CYCLE /* No fourth addr used (<=32MB) */
|
#undef CFG_NAND_4_ADDR_CYCLE /* No fourth addr used (<=32MB) */
|
||||||
|
|
||||||
#ifdef CFG_ENV_IS_IN_NAND
|
#ifdef CFG_ENV_IS_IN_NAND
|
||||||
#define CFG_ENV_SIZE 0x4000
|
/*
|
||||||
#define CFG_ENV_OFFSET (CFG_NAND_U_BOOT_OFFS + CFG_NAND_U_BOOT_SIZE)
|
* For NAND booting the environment is embedded in the U-Boot image. Please take
|
||||||
|
* look at the file board/amcc/sequoia/u-boot-nand.lds for details.
|
||||||
|
*/
|
||||||
|
#define CFG_ENV_SIZE CFG_NAND_BLOCK_SIZE
|
||||||
|
#define CFG_ENV_OFFSET (CFG_NAND_U_BOOT_OFFS + CFG_ENV_SIZE)
|
||||||
#define CFG_ENV_OFFSET_REDUND (CFG_ENV_OFFSET + CFG_ENV_SIZE)
|
#define CFG_ENV_OFFSET_REDUND (CFG_ENV_OFFSET + CFG_ENV_SIZE)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -214,11 +206,6 @@
|
||||||
#define CFG_EEPROM_PAGE_WRITE_BITS 3
|
#define CFG_EEPROM_PAGE_WRITE_BITS 3
|
||||||
#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10
|
#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10
|
||||||
|
|
||||||
#ifdef CFG_ENV_IS_IN_EEPROM
|
|
||||||
#define CFG_ENV_SIZE 0x200 /* Size of Environment vars */
|
|
||||||
#define CFG_ENV_OFFSET 0x0
|
|
||||||
#endif /* CFG_ENV_IS_IN_EEPROM */
|
|
||||||
|
|
||||||
/* I2C SYSMON (LM75, AD7414 is almost compatible) */
|
/* I2C SYSMON (LM75, AD7414 is almost compatible) */
|
||||||
#define CONFIG_DTT_LM75 1 /* ON Semi's LM75 */
|
#define CONFIG_DTT_LM75 1 /* ON Semi's LM75 */
|
||||||
#define CONFIG_DTT_AD7414 1 /* use AD7414 */
|
#define CONFIG_DTT_AD7414 1 /* use AD7414 */
|
||||||
|
|
|
@ -79,6 +79,10 @@
|
||||||
# ifdef CFG_ENV_OFFSET_REDUND
|
# ifdef CFG_ENV_OFFSET_REDUND
|
||||||
# define CFG_REDUNDAND_ENVIRONMENT
|
# define CFG_REDUNDAND_ENVIRONMENT
|
||||||
# endif
|
# endif
|
||||||
|
# if defined(CONFIG_NAND_U_BOOT)
|
||||||
|
/* Use embedded environment in NAND boot versions */
|
||||||
|
# define ENV_IS_EMBEDDED 1
|
||||||
|
# endif
|
||||||
#endif /* CFG_ENV_IS_IN_NAND */
|
#endif /* CFG_ENV_IS_IN_NAND */
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -166,8 +166,7 @@ void nand_boot(void)
|
||||||
/*
|
/*
|
||||||
* Load U-Boot image from NAND into RAM
|
* Load U-Boot image from NAND into RAM
|
||||||
*/
|
*/
|
||||||
ret = nand_load(&nand_info, CFG_NAND_U_BOOT_OFFS,
|
ret = nand_load(&nand_info, CFG_NAND_U_BOOT_OFFS, CFG_NAND_U_BOOT_SIZE,
|
||||||
CFG_NAND_U_BOOT_SIZE,
|
|
||||||
(uchar *)CFG_NAND_U_BOOT_DST);
|
(uchar *)CFG_NAND_U_BOOT_DST);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Add table
Reference in a new issue