[U-Boot] [PATCH 1/1] Changes for single binary image for u-boot for NAND/OneNAND flash.

Manikandan Pillai mani.pillai at ti.com
Tue Mar 3 04:41:29 CET 2009


Support for single binary image for NAND/OneNAND based OMAP3 EVM
boards. The software has to set the flag CONFIG_ENV_IS_RUNTIME_SEL
in include/configs/omap3_evm.h. The software is able to detect
whether it is NAND or OneNAND flash at runtime. The flash
detected is set as the environment store also.

As per the comments received, the change is done only for OMAP3 EVM.

Signed-off-by: Manikandan Pillai <mani.pillai at ti.com>
---
 board/omap3/evm/evm.c             |    2 +
 common/Makefile                   |    1 +
 common/cmd_nvedit.c               |    5 ++
 common/env_common.c               |    8 +++-
 common/env_nand.c                 |   33 +++++++++++-
 common/env_onenand.c              |   26 +++++++++-
 cpu/arm_cortexa8/omap3/board.c    |   13 +++++
 cpu/arm_cortexa8/omap3/mem.c      |  100 ++++++++++++++++++++++++++++++++++++-
 cpu/arm_cortexa8/omap3/sys_info.c |   27 +++++++++-
 include/common.h                  |   10 +++-
 include/configs/omap3_evm.h       |    6 ++-
 lib_arm/board.c                   |   25 +++++++---
 12 files changed, 237 insertions(+), 19 deletions(-)

diff --git a/board/omap3/evm/evm.c b/board/omap3/evm/evm.c
index b406312..9924432 100644
--- a/board/omap3/evm/evm.c
+++ b/board/omap3/evm/evm.c
@@ -44,7 +44,9 @@ int board_init(void)
 {
 	DECLARE_GLOBAL_DATA_PTR;
 
+#if !defined(CONFIG_ENV_IS_RUNTIME_SEL)
 	gpmc_init(); /* in SRAM or SDRAM, finish GPMC */
+#endif
 	/* board id for Linux */
 	gd->bd->bi_arch_number = MACH_TYPE_OMAP3EVM;
 	/* boot param addr */
diff --git a/common/Makefile b/common/Makefile
index f13cd11..a6c55d2 100644
--- a/common/Makefile
+++ b/common/Makefile
@@ -58,6 +58,7 @@ COBJS-$(CONFIG_ENV_IS_IN_NVRAM) += env_nvram.o
 COBJS-$(CONFIG_ENV_IS_IN_ONENAND) += env_onenand.o
 COBJS-$(CONFIG_ENV_IS_IN_SPI_FLASH) += env_sf.o
 COBJS-$(CONFIG_ENV_IS_NOWHERE) += env_nowhere.o
+COBJS-$(CONFIG_ENV_IS_RUNTIME_SEL) += env_onenand.o env_nand.o
 
 # command
 COBJS-$(CONFIG_CMD_AMBAPP) += cmd_ambapp.o
diff --git a/common/cmd_nvedit.c b/common/cmd_nvedit.c
index 68c673e..628bcf4 100644
--- a/common/cmd_nvedit.c
+++ b/common/cmd_nvedit.c
@@ -59,6 +59,7 @@ DECLARE_GLOBAL_DATA_PTR;
     !defined(CONFIG_ENV_IS_IN_NAND)	&& \
     !defined(CONFIG_ENV_IS_IN_ONENAND)	&& \
     !defined(CONFIG_ENV_IS_IN_SPI_FLASH)	&& \
+    !defined(CONFIG_ENV_IS_RUNTIME_SEL)	&& \
     !defined(CONFIG_ENV_IS_NOWHERE)
 # error Define one of CONFIG_ENV_IS_IN_{NVRAM|EEPROM|FLASH|DATAFLASH|ONENAND|SPI_FLASH|NOWHERE}
 #endif
@@ -66,6 +67,10 @@ DECLARE_GLOBAL_DATA_PTR;
 #define XMK_STR(x)	#x
 #define MK_STR(x)	XMK_STR(x)
 
+#if defined(CONFIG_ENV_IS_RUNTIME_SEL)
+extern saveenv_p saveenv;
+#endif
+
 /************************************************************************
 ************************************************************************/
 
diff --git a/common/env_common.c b/common/env_common.c
index 6be3bb0..b692900 100644
--- a/common/env_common.c
+++ b/common/env_common.c
@@ -46,8 +46,13 @@ DECLARE_GLOBAL_DATA_PTR;
 
 extern env_t *env_ptr;
 
+#if defined(CONFIG_ENV_IS_RUNTIME_SEL)
+extern env_get_char_spec_p env_get_char_spec;
+extern env_relocate_spec_p env_relocate_spec;
+#else
 extern void env_relocate_spec (void);
 extern uchar env_get_char_spec(int);
+#endif
 
 static uchar env_get_char_init (int index);
 
@@ -140,7 +145,8 @@ uchar default_environment[] = {
 };
 
 #if defined(CONFIG_ENV_IS_IN_NAND)		/* Environment is in Nand Flash */ \
-	|| defined(CONFIG_ENV_IS_IN_SPI_FLASH)
+	|| defined(CONFIG_ENV_IS_IN_SPI_FLASH) \
+	|| (defined(CONFIG_CMD_NAND) && defined(CONFIG_ENV_IS_RUNTIME_SEL))
 int default_environment_size = sizeof(default_environment);
 #endif
 
diff --git a/common/env_nand.c b/common/env_nand.c
index 76569da..add74c2 100644
--- a/common/env_nand.c
+++ b/common/env_nand.c
@@ -65,17 +65,22 @@ int nand_legacy_rw (struct nand_chip* nand, int cmd,
 extern uchar default_environment[];
 extern int default_environment_size;
 
+#if defined(CONFIG_ENV_IS_RUNTIME_SEL)
+char *nand_env_name_spec = "NAND";
+#else
 char * env_name_spec = "NAND";
-
+#endif
 
 #ifdef ENV_IS_EMBEDDED
 extern uchar environment[];
 env_t *env_ptr = (env_t *)(&environment[0]);
+#elif defined(CONFIG_ENV_IS_RUNTIME_SEL)
+env_t *nand_env_ptr;
+env_t *env_ptr;
 #else /* ! ENV_IS_EMBEDDED */
 env_t *env_ptr = 0;
 #endif /* ENV_IS_EMBEDDED */
 
-
 /* local functions */
 #if !defined(ENV_IS_EMBEDDED)
 static void use_default(void);
@@ -83,7 +88,11 @@ static void use_default(void);
 
 DECLARE_GLOBAL_DATA_PTR;
 
+#if defined(CONFIG_ENV_IS_RUNTIME_SEL)
+uchar nand_env_get_char_spec(int index)
+#else
 uchar env_get_char_spec (int index)
+#endif
 {
 	return ( *((uchar *)(gd->env_addr + index)) );
 }
@@ -100,7 +109,11 @@ uchar env_get_char_spec (int index)
  * the SPL loads not only the U-Boot image from NAND but also the
  * environment.
  */
+#if defined(CONFIG_ENV_IS_RUNTIME_SEL)
+int nand_env_init(void)
+#else
 int env_init(void)
+#endif
 {
 #if defined(ENV_IS_EMBEDDED)
 	size_t total;
@@ -181,7 +194,11 @@ int writeenv(size_t offset, u_char *buf)
 	return 0;
 }
 #ifdef CONFIG_ENV_OFFSET_REDUND
+#if defined(CONFIG_ENV_IS_RUNTIME_SEL)
+int nand_saveenv(void)
+#else
 int saveenv(void)
+#endif
 {
 	size_t total;
 	int ret = 0;
@@ -224,7 +241,11 @@ int saveenv(void)
 	return ret;
 }
 #else /* ! CONFIG_ENV_OFFSET_REDUND */
+#if defined(CONFIG_ENV_IS_RUNTIME_SEL)
+int nand_saveenv(void)
+#else
 int saveenv(void)
+#endif
 {
 	size_t total;
 	int ret = 0;
@@ -284,7 +305,11 @@ int readenv (size_t offset, u_char * buf)
 }
 
 #ifdef CONFIG_ENV_OFFSET_REDUND
+#if defined(CONFIG_ENV_IS_RUNTIME_SEL)
+void nand_env_relocate_spec(void)
+#else
 void env_relocate_spec (void)
+#endif
 {
 #if !defined(ENV_IS_EMBEDDED)
 	size_t total;
@@ -343,7 +368,11 @@ void env_relocate_spec (void)
  * The legacy NAND code saved the environment in the first NAND device i.e.,
  * nand_dev_desc + 0. This is also the behaviour using the new NAND code.
  */
+#if defined(CONFIG_ENV_IS_RUNTIME_SEL)
+void nand_env_relocate_spec(void)
+#else
 void env_relocate_spec (void)
+#endif
 {
 #if !defined(ENV_IS_EMBEDDED)
 	int ret;
diff --git a/common/env_onenand.c b/common/env_onenand.c
index dbccc79..7aaa83c 100644
--- a/common/env_onenand.c
+++ b/common/env_onenand.c
@@ -39,11 +39,19 @@ extern uchar default_environment[];
 
 #define ONENAND_ENV_SIZE(mtd)	(mtd.writesize - ENV_HEADER_SIZE)
 
+#if defined(CONFIG_ENV_IS_RUNTIME_SEL)
+char *onenand_env_name_spec = "OneNAND";
+#else
 char *env_name_spec = "OneNAND";
+#endif
 
 #ifdef ENV_IS_EMBEDDED
 extern uchar environment[];
 env_t *env_ptr = (env_t *) (&environment[0]);
+#elif defined(CONFIG_ENV_IS_RUNTIME_SEL)
+static unsigned char onenand_env[MAX_ONENAND_PAGESIZE];
+env_t *onenand_env_ptr = (env_t *)&onenand_env[0];
+extern env_t *env_ptr;
 #else /* ! ENV_IS_EMBEDDED */
 static unsigned char onenand_env[MAX_ONENAND_PAGESIZE];
 env_t *env_ptr = (env_t *) onenand_env;
@@ -51,12 +59,20 @@ env_t *env_ptr = (env_t *) onenand_env;
 
 DECLARE_GLOBAL_DATA_PTR;
 
+#if defined(CONFIG_ENV_IS_RUNTIME_SEL)
+uchar onenand_env_get_char_spec(int index)
+#else
 uchar env_get_char_spec(int index)
+#endif
 {
 	return (*((uchar *) (gd->env_addr + index)));
 }
 
+#if defined(CONFIG_ENV_IS_RUNTIME_SEL)
+void onenand_env_relocate_spec(void)
+#else
 void env_relocate_spec(void)
+#endif
 {
 	unsigned long env_addr;
 	int use_default = 0;
@@ -87,7 +103,11 @@ void env_relocate_spec(void)
 	gd->env_valid = 1;
 }
 
+#if defined(CONFIG_ENV_IS_RUNTIME_SEL)
+int onenand_saveenv(void)
+#else
 int saveenv(void)
+#endif
 {
 	unsigned long env_addr = CONFIG_ENV_ADDR;
 	struct erase_info instr = {
@@ -102,7 +122,6 @@ int saveenv(void)
 		printf("OneNAND: erase failed at 0x%08lx\n", env_addr);
 		return 1;
 	}
-
 	/* update crc */
 	env_ptr->crc =
 	    crc32(0, env_ptr->data, ONENAND_ENV_SIZE(onenand_mtd));
@@ -112,11 +131,14 @@ int saveenv(void)
 		printf("OneNAND: write failed at 0x%08x\n", instr.addr);
 		return 2;
 	}
-
 	return 0;
 }
 
+#if defined(CONFIG_ENV_IS_RUNTIME_SEL)
+int onenand_env_init(void)
+#else
 int env_init(void)
+#endif
 {
 	/* use default */
 	gd->env_addr = (ulong) & default_environment[0];
diff --git a/cpu/arm_cortexa8/omap3/board.c b/cpu/arm_cortexa8/omap3/board.c
index 7bb3e28..ba0eec6 100644
--- a/cpu/arm_cortexa8/omap3/board.c
+++ b/cpu/arm_cortexa8/omap3/board.c
@@ -313,6 +313,19 @@ void abort(void)
 {
 }
 
+/******************************************************************************
+ * Routine: print_board_info
+ * Description: Displays cpu and memory information for the board
+ *****************************************************************************/
+void print_board_info(void)
+{
+	u32 btype;
+
+	btype = get_board_type();
+
+	display_board_info(btype);
+}
+
 #ifdef CONFIG_NAND_OMAP_GPMC
 /******************************************************************************
  * OMAP3 specific command to switch between NAND HW and SW ecc
diff --git a/cpu/arm_cortexa8/omap3/mem.c b/cpu/arm_cortexa8/omap3/mem.c
index 3cc22c4..159ed87 100644
--- a/cpu/arm_cortexa8/omap3/mem.c
+++ b/cpu/arm_cortexa8/omap3/mem.c
@@ -26,10 +26,12 @@
  */
 
 #include <common.h>
+#include <environment.h>
 #include <asm/io.h>
 #include <asm/arch/mem.h>
 #include <asm/arch/sys_proto.h>
 #include <command.h>
+#include <nand.h>
 
 /*
  * Only One NAND allowed on board at a time.
@@ -41,7 +43,21 @@ unsigned int boot_flash_sec;
 unsigned int boot_flash_type;
 volatile unsigned int boot_flash_env_addr;
 
+#if defined(CONFIG_ENV_IS_RUNTIME_SEL)
+extern env_t *env_ptr;
+extern char *nand_env_name_spec;
+extern char *onenand_env_name_spec;
+extern env_t *nand_env_ptr;
+extern env_t *onenand_env_ptr;
+
+extern void onenand_init(void);
+extern int nand_scan_ident(struct mtd_info *mtd, int maxchips);
+#endif
+
 #if defined(CONFIG_CMD_NAND)
+u8 is_nand;
+extern nand_info_t nand_info[2];
+
 static u32 gpmc_m_nand[GPMC_MAX_REG] = {
 	M_NAND_GPMC_CONFIG1,
 	M_NAND_GPMC_CONFIG2,
@@ -63,6 +79,8 @@ gpmc_t *gpmc_cfg_base;
 #endif
 
 #if defined(CONFIG_CMD_ONENAND)
+u8 is_onenand;
+extern struct mtd_info onenand_mtd;
 static u32 gpmc_onenand[GPMC_MAX_REG] = {
 	ONENAND_GPMC_CONFIG1,
 	ONENAND_GPMC_CONFIG2,
@@ -84,6 +102,24 @@ gpmc_csx_t *onenand_cs_base;
 
 static sdrc_t *sdrc_base = (sdrc_t *)OMAP34XX_SDRC_BASE;
 
+#if defined(CONFIG_ENV_IS_RUNTIME_SEL)
+char *env_name_spec;
+env_get_char_spec_p env_get_char_spec;
+env_init_p env_init;
+saveenv_p saveenv;
+env_relocate_spec_p env_relocate_spec;
+
+extern uchar nand_env_get_char_spec(int index);
+extern int nand_env_init(void);
+extern int nand_saveenv(void);
+extern void nand_env_relocate_spec(void);
+
+extern uchar onenand_env_get_char_spec(int index);
+extern int onenand_env_init(void);
+extern int onenand_saveenv(void);
+extern void onenand_env_relocate_spec(void);
+#endif /* CONFIG_ENV_IS_RUNTIME_SEL */
+
 /**************************************************************************
  * make_cs1_contiguous() - for es2 and above remap cs1 behind cs0 to allow
  *  command line mem=xyz use all memory with out discontinuous support
@@ -229,6 +265,7 @@ void gpmc_init(void)
 	u32 f_off = CONFIG_SYS_MONITOR_LEN;
 	u32 f_sec = 0;
 	u32 config = 0;
+	u32 gpmc_index = 0;
 
 	/* global settings */
 	writel(0, &gpmc_base->irqenable); /* isr's sources masked */
@@ -245,7 +282,7 @@ void gpmc_init(void)
 	writel(0, &gpmc_cs_base->config7);
 	sdelay(1000);
 
-#if defined(CONFIG_CMD_NAND)	/* CS 0 */
+#if defined(CONFIG_CMD_NAND) && !defined(CONFIG_ENV_IS_RUNTIME_SEL)
 	gpmc_config = gpmc_m_nand;
 	gpmc_cfg_base = gpmc_base;
 	nand_cs_base = (gpmc_csx_t *)(GPMC_CONFIG_CS0_BASE +
@@ -264,7 +301,37 @@ void gpmc_init(void)
 #endif
 #endif
 
-#if defined(CONFIG_CMD_ONENAND)
+#if defined(CONFIG_CMD_NAND) && defined(CONFIG_ENV_IS_RUNTIME_SEL)
+	gpmc_config = gpmc_m_nand;
+	nand_cs_base = (gpmc_csx_t *)(GPMC_CONFIG_CS0_BASE +
+			(gpmc_index * GPMC_CONFIG_WIDTH));
+	base = PISMO1_NAND_BASE;
+	size = PISMO1_NAND_SIZE;
+	enable_gpmc_config(gpmc_config, nand_cs_base, base, size);
+	/* NAND and/or ONENAND is to be scanned */
+	is_nand = 0;
+	nand_init();
+	if (nand_info[0].size) {
+		is_nand = 1;
+		f_off = SMNAND_ENV_OFFSET;
+		f_sec = SZ_128K;
+		/* env setup */
+		boot_flash_base = base;
+		boot_flash_off = f_off;
+		boot_flash_sec = f_sec;
+		boot_flash_env_addr = f_off;
+
+		env_name_spec = nand_env_name_spec;
+		env_ptr = nand_env_ptr;
+		env_get_char_spec = nand_env_get_char_spec;
+		env_init = nand_env_init;
+		saveenv = nand_saveenv;
+		env_relocate_spec = nand_env_relocate_spec;
+		gpmc_index++;
+	}
+#endif
+
+#if defined(CONFIG_CMD_ONENAND) && !defined(CONFIG_ENV_IS_RUNTIME_SEL)
 	gpmc_config = gpmc_onenand;
 	onenand_cs_base = (gpmc_csx_t *)(GPMC_CONFIG_CS0_BASE +
 					(GPMC_CS * GPMC_CONFIG_WIDTH));
@@ -281,4 +348,33 @@ void gpmc_init(void)
 	boot_flash_env_addr = f_off;
 #endif
 #endif
+
+#if defined(CONFIG_CMD_ONENAND) && defined(CONFIG_ENV_IS_RUNTIME_SEL)
+	gpmc_config = gpmc_onenand;
+	onenand_cs_base = (gpmc_csx_t *)(GPMC_CONFIG_CS0_BASE +
+			(gpmc_index * GPMC_CONFIG_WIDTH));
+	base = PISMO1_ONEN_BASE;
+	size = PISMO1_ONEN_SIZE;
+	enable_gpmc_config(gpmc_config, onenand_cs_base, base, size);
+	/* NAND and/or ONENAND is to be scanned */
+	is_onenand = 0;
+	onenand_init();
+	if (onenand_mtd.size) {
+		is_onenand = 1;
+		f_off = ONENAND_ENV_OFFSET;
+		f_sec = SZ_128K;
+		/* env setup */
+		boot_flash_base = base;
+		boot_flash_off = f_off;
+		boot_flash_sec = f_sec;
+		boot_flash_env_addr = f_off;
+		env_name_spec = onenand_env_name_spec;
+		env_ptr = onenand_env_ptr;
+		env_get_char_spec = onenand_env_get_char_spec;
+		env_init = onenand_env_init;
+		saveenv = onenand_saveenv;
+		env_relocate_spec = onenand_env_relocate_spec;
+		gpmc_index++;
+	}
+#endif
 }
diff --git a/cpu/arm_cortexa8/omap3/sys_info.c b/cpu/arm_cortexa8/omap3/sys_info.c
index 28a1020..86cc95f 100644
--- a/cpu/arm_cortexa8/omap3/sys_info.c
+++ b/cpu/arm_cortexa8/omap3/sys_info.c
@@ -36,6 +36,14 @@ static gpmc_csx_t *gpmc_cs_base = (gpmc_csx_t *)GPMC_CONFIG_CS0_BASE;
 static sdrc_t *sdrc_base = (sdrc_t *)OMAP34XX_SDRC_BASE;
 static ctrl_t *ctrl_base = (ctrl_t *)OMAP34XX_CTRL_BASE;
 
+#if defined(CONFIG_CMD_NAND)
+extern u8 is_nand;
+#endif
+
+#if defined(CONFIG_CMD_ONENAND)
+extern u8 is_onenand;
+#endif
+
 /******************************************
  * get_cpu_type(void) - extract cpu info
  ******************************************/
@@ -208,9 +216,22 @@ void display_board_info(u32 btype)
 
 
 	printf("OMAP%s-%s rev %d, CPU-OPP2 L3-165MHz\n", cpu_s,
-	       sec_s, get_cpu_rev());
-	printf("%s + %s/%s\n", sysinfo.board_string,
-	       mem_s, sysinfo.nand_string);
+		sec_s, get_cpu_rev());
+#if defined(CONFIG_ENV_IS_RUNTIME_SEL)
+		printf("%s + %s/", sysinfo.board_string,
+			mem_s);
+#if defined(CONFIG_CMD_NAND)
+	if (is_nand)
+		printf("%s\n", "NAND");
+#endif
+#if defined(CONFIG_CMD_ONENAND)
+	if (is_onenand)
+		printf("%s\n", "ONENAND");
+#endif
+#else
+		printf("%s + %s/%s\n", sysinfo.board_string,
+			mem_s, sysinfo.nand_string);
+#endif
 
 }
 
diff --git a/include/common.h b/include/common.h
index b75ea60..fd3da2c 100644
--- a/include/common.h
+++ b/include/common.h
@@ -243,12 +243,20 @@ extern ulong load_addr;		/* Default Load Address */
 void	doc_probe(unsigned long physadr);
 
 /* common/cmd_nvedit.c */
+#if defined(CONFIG_ENV_IS_RUNTIME_SEL)
+typedef uchar (*env_get_char_spec_p)(int index);
+typedef int (*env_init_p)(void);
+typedef int (*saveenv_p)(void);
+typedef void (*env_relocate_spec_p)(void);
+#else
 int	env_init     (void);
+int     saveenv(void);
+#endif
 void	env_relocate (void);
 int	envmatch     (uchar *, int);
 char	*getenv	     (char *);
 int	getenv_r     (char *name, char *buf, unsigned len);
-int	saveenv	     (void);
+
 #ifdef CONFIG_PPC		/* ARM version to be fixed! */
 int inline setenv   (char *, char *);
 #else
diff --git a/include/configs/omap3_evm.h b/include/configs/omap3_evm.h
index f4498a9..bf5614e 100644
--- a/include/configs/omap3_evm.h
+++ b/include/configs/omap3_evm.h
@@ -107,6 +107,7 @@
 #define CONFIG_CMD_I2C		/* I2C serial bus support	*/
 #define CONFIG_CMD_MMC		/* MMC support			*/
 #define CONFIG_CMD_ONENAND	/* ONENAND support		*/
+#define CONFIG_CMD_NAND		/* NAND support                 */
 #define CONFIG_CMD_DHCP
 #define CONFIG_CMD_PING
 
@@ -125,12 +126,15 @@
 /*
  * Board NAND Info.
  */
+#define CONFIG_NAND_OMAP_GPMC
 #define CONFIG_SYS_NAND_ADDR		NAND_BASE	/* physical address */
 							/* to access nand */
 #define CONFIG_SYS_NAND_BASE		NAND_BASE	/* physical address */
 							/* to access */
 							/* nand at CS0 */
 
+#define GPMC_NAND_ECC_LP_x16_LAYOUT     1
+
 #define CONFIG_SYS_MAX_NAND_DEVICE	1		/* Max number of */
 							/* NAND devices */
 #define SECTORSIZE			512
@@ -271,7 +275,7 @@
 #define CONFIG_SYS_MONITOR_BASE		CONFIG_SYS_FLASH_BASE
 #define CONFIG_SYS_ONENAND_BASE		ONENAND_MAP
 
-#define CONFIG_ENV_IS_IN_ONENAND	1
+#define CONFIG_ENV_IS_RUNTIME_SEL	1
 #define ONENAND_ENV_OFFSET		0x260000 /* environment starts here */
 #define SMNAND_ENV_OFFSET		0x260000 /* environment starts here */
 
diff --git a/lib_arm/board.c b/lib_arm/board.c
index 09eaaf2..9a0c285 100644
--- a/lib_arm/board.c
+++ b/lib_arm/board.c
@@ -60,6 +60,11 @@ DECLARE_GLOBAL_DATA_PTR;
 
 ulong monitor_flash_len;
 
+#if defined(CONFIG_ENV_IS_RUNTIME_SEL)
+extern void gpmc_init(void);
+extern void print_board_info(void);
+#endif
+
 #ifdef CONFIG_HAS_DATAFLASH
 extern int  AT91F_DataflashInit(void);
 extern void dataflash_print_info(void);
@@ -259,12 +264,17 @@ static int arm_pci_init(void)
 typedef int (init_fnc_t) (void);
 
 int print_cpuinfo (void); /* test-only */
+extern env_init_p env_init;
 
 init_fnc_t *init_sequence[] = {
 	cpu_init,		/* basic cpu dependent setup */
 	board_init,		/* basic board dependent setup */
 	interrupt_init,		/* set up exceptions */
+#if defined(CONFIG_ENV_IS_RUNTIME_SEL)
+	NULL,			/* initialize environment */
+#else
 	env_init,		/* initialize environment */
+#endif
 	init_baudrate,		/* initialze baudrate settings */
 	serial_init,		/* serial communications setup */
 	console_init_f,		/* stage 1 init of console */
@@ -350,13 +360,14 @@ void start_armboot (void)
 	/* armboot_start is defined in the board-specific linker script */
 	mem_malloc_init (_armboot_start - CONFIG_SYS_MALLOC_LEN);
 
-#if defined(CONFIG_CMD_NAND)
-	puts ("NAND:  ");
-	nand_init();		/* go init the NAND */
-#endif
-
-#if defined(CONFIG_CMD_ONENAND)
-	onenand_init();
+#if defined(CONFIG_ENV_IS_RUNTIME_SEL)
+	gpmc_init(); /* in SRAM or SDRAM, finish GPMC */
+	env_init();
+	init_baudrate();        /* initialze baudrate settings */
+	serial_init();          /* serial communications setup */
+	console_init_f();       /* stage 1 init of console */
+	display_banner();
+	print_board_info();
 #endif
 
 #ifdef CONFIG_HAS_DATAFLASH
-- 
1.5.6



More information about the U-Boot mailing list