public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 1/1] Changes for single binary image for u-boot for NAND/OneNAND flash.
@ 2009-03-03  3:41 Manikandan Pillai
  2009-03-03  8:33 ` Nishanth Menon
  2009-03-08 22:34 ` Wolfgang Denk
  0 siblings, 2 replies; 6+ messages in thread
From: Manikandan Pillai @ 2009-03-03  3:41 UTC (permalink / raw)
  To: u-boot

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@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

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [U-Boot] [PATCH 1/1] Changes for single binary image for u-boot for NAND/OneNAND flash.
  2009-03-03  3:41 [U-Boot] [PATCH 1/1] Changes for single binary image for u-boot for NAND/OneNAND flash Manikandan Pillai
@ 2009-03-03  8:33 ` Nishanth Menon
  2009-03-04  6:35   ` Pillai, Manikandan
  2009-03-08 22:34 ` Wolfgang Denk
  1 sibling, 1 reply; 6+ messages in thread
From: Nishanth Menon @ 2009-03-03  8:33 UTC (permalink / raw)
  To: u-boot

Manikandan Pillai said the following on 03/03/2009 05:41 AM:
> 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.
>   
makes sense for SDP also.. in SDP3430, we have NOR,OneNAND,NAND and MMC
as possible boot devices. :(
Could you please split this patch into two:
a) changes to generic files
b) changes specific to omap.
it is easier to review that way..
> As per the comments received, the change is done only for OMAP3 EVM.
>
> Signed-off-by: Manikandan Pillai <mani.pillai@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))
>   
Errr.... ENV_IS_IN_NAND Vs ENV_IS_RUNTIME_SEL is not clear.

>  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";
>   
I suppose we might want a README.runtime_env to understand it's usage..
> +#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 */
>   
and NOT CONFIG_ENV_IS_RUNTIME_SEL...
>  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)
>   
how about #ifdef :).... many places we do have #if defined... ;).. saves
a few bytes here and there.. :D
> +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;
>  	}
> -
>   
some one did not like empty lines? ;)
>  	/* 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;
>  	}
> -
>   
some one did not like empty lines? ;)
>  	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);
> +}
> +
>   
I dont think this is related to this...
>  #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++;
> +	}
>   
with a change like above in a common omap3 file, you are essentially
bottlenecking scalability to other OMAP3 platforms which use different
NAND. Eg. we assume SZ_128K ;) kinda wrong rt? sector size is dependent
on the nand device we plug in..
> +#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;
>   
here.. PISMO? PISMO is a plugin Board on SDP and possibly EVM, but not
true for other platforms.. :(
> +	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
>   
I have this feel that we could improve this #ifdef mess.. using
variables maybe?
>  
>  }
>  
> 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                 */
>   
please move this to some other patch.. not relevant here..
>  #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();
>   
well.. my nand and onenand init dissapeared... :( not the way to di it I
guess..
> +#if defined(CONFIG_ENV_IS_RUNTIME_SEL)
> +	gpmc_init(); /* in SRAM or SDRAM, finish GPMC */
>   
Wooooaaah.. gpmc is TI OMAP2 or OMAP3 only.... NOT in other ARM or PPC
or other platforms.. NAK on this.
> +	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
>   

Regards,
Nishanth Menon

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [U-Boot] [PATCH 1/1] Changes for single binary image for u-boot for NAND/OneNAND flash.
  2009-03-03  8:33 ` Nishanth Menon
@ 2009-03-04  6:35   ` Pillai, Manikandan
  2009-03-04  7:25     ` Nishanth Menon
  0 siblings, 1 reply; 6+ messages in thread
From: Pillai, Manikandan @ 2009-03-04  6:35 UTC (permalink / raw)
  To: u-boot

Hi,

Pls find my comments below


> -----Original Message-----
> From: Nishanth Menon [mailto:menon.nishanth at gmail.com]
> Sent: Tuesday, March 03, 2009 2:03 PM
> To: Pillai, Manikandan
> Cc: u-boot at lists.denx.de; dirk.behme at googlemail.com
> Subject: Re: [U-Boot] [PATCH 1/1] Changes for single binary image for u-boot
> for NAND/OneNAND flash.
>
> Manikandan Pillai said the following on 03/03/2009 05:41 AM:
> > 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.
> >
> makes sense for SDP also.. in SDP3430, we have NOR,OneNAND,NAND and MMC
> as possible boot devices. :(
> Could you please split this patch into two:
> a) changes to generic files
> b) changes specific to omap.
> it is easier to review that way..
[Pillai, Manikandan] OK


> > As per the comments received, the change is done only for OMAP3 EVM.
> >
> > Signed-off-by: Manikandan Pillai <mani.pillai@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))
> >
> Errr.... ENV_IS_IN_NAND Vs ENV_IS_RUNTIME_SEL is not clear.
[Pillai, Manikandan] I am not clear with the query

>
> >  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";
> >
> I suppose we might want a README.runtime_env to understand it's usage..
[Pillai, Manikandan] OK

> > +#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 */
> >
> and NOT CONFIG_ENV_IS_RUNTIME_SEL...
[Pillai, Manikandan] OK


> >  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)
> >
> how about #ifdef :).... many places we do have #if defined... ;).. saves
> a few bytes here and there.. :D
[Pillai, Manikandan] OK


> > +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;
> >     }
> > -
> >
> some one did not like empty lines? ;)
> >     /* 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;
> >     }
> > -
> >
> some one did not like empty lines? ;)
> >     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);
> > +}
> > +
> >
> I dont think this is related to this...
[Pillai, Manikandan] The default EVM support does not have NAND. To build only
For NAND, you need to enable this. I can put this in a separate patch in a series.

> >  #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++;
> > +   }
> >
> with a change like above in a common omap3 file, you are essentially
> bottlenecking scalability to other OMAP3 platforms which use different
> NAND. Eg. we assume SZ_128K ;) kinda wrong rt? sector size is dependent
> on the nand device we plug in..
[Pillai, Manikandan] I can plug out the initialization stuff and put it in
a board dependent file and invoke the same from the common omap3 locations
for the type of board.

> > +#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;
> >
> here.. PISMO? PISMO is a plugin Board on SDP and possibly EVM, but not
> true for other platforms.. :(
> > +   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
> >
> I have this feel that we could improve this #ifdef mess.. using
> variables maybe?
[Pillai, Manikandan] other suggestions welcome Personally, I felt
here the #ifdef is not so dirty.

> >
> >  }
> >
> > 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                 */
> >
> please move this to some other patch.. not relevant here..
> >  #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();
> >
> well.. my nand and onenand init dissapeared... :( not the way to di it I
> guess..
[Pillai, Manikandan] OK agreed. It was a miss.


> > +#if defined(CONFIG_ENV_IS_RUNTIME_SEL)
> > +   gpmc_init(); /* in SRAM or SDRAM, finish GPMC */
> >
> Wooooaaah.. gpmc is TI OMAP2 or OMAP3 only.... NOT in other ARM or PPC
> or other platforms.. NAK on this.
[Pillai, Manikandan] Got your point. But I don't have a solution to this
Since I EVM is doing a scan,  it requires the gpmc_init to be called late.
An option is to have another function  board_init_late() which can be used to
called gpmc_init_late().

> > +   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
> >
>
> Regards,
> Nishanth Menon

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [U-Boot] [PATCH 1/1] Changes for single binary image for u-boot for NAND/OneNAND flash.
  2009-03-04  6:35   ` Pillai, Manikandan
@ 2009-03-04  7:25     ` Nishanth Menon
  0 siblings, 0 replies; 6+ messages in thread
From: Nishanth Menon @ 2009-03-04  7:25 UTC (permalink / raw)
  To: u-boot

Pillai, Manikandan said the following on 03/04/2009 08:35 AM:
>>>  #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))
>>>
>>>       
>> Errr.... ENV_IS_IN_NAND Vs ENV_IS_RUNTIME_SEL is not clear.
>>     
> [Pillai, Manikandan] I am not clear with the query
>
>   

CONFIG_ENV_IS_RUNTIME_SEL is dependent only on CMD_NAND? if I had onenand and NOR, then what?

>>> +void print_board_info(void)
>>> +{
>>> +   u32 btype;
>>> +
>>> +   btype = get_board_type();
>>> +
>>> +   display_board_info(btype);
>>> +}
>>> +
>>>
>>>       
>> I dont think this is related to this...
>>     
> [Pillai, Manikandan] The default EVM support does not have NAND. To build only
> For NAND, you need to enable this. I can put this in a separate patch in a series.
>
>   
my comment -> move this as a seperate patch.. this patch seems to mix up
things doing different things and confusing for a review.
>>> -#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++;
>>> +   }
>>>
>>>       
>> with a change like above in a common omap3 file, you are essentially
>> bottlenecking scalability to other OMAP3 platforms which use different
>> NAND. Eg. we assume SZ_128K ;) kinda wrong rt? sector size is dependent
>> on the nand device we plug in..
>>     
> [Pillai, Manikandan] I can plug out the initialization stuff and put it in
> a board dependent file and invoke the same from the common omap3 locations
> for the type of board.
>
>   
that might be a nice idea.. will look for your changes.. :)
>>>     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
>>>
>>>       
>> I have this feel that we could improve this #ifdef mess.. using
>> variables maybe?
>>     
> [Pillai, Manikandan] other suggestions welcome Personally, I felt
> here the #ifdef is not so dirty.
>   
;) not after a time of adding multiple #ifdefs :D... as I said, how
about using variables to do it?
>>> +#if defined(CONFIG_ENV_IS_RUNTIME_SEL)
>>> +   gpmc_init(); /* in SRAM or SDRAM, finish GPMC */
>>>
>>>       
>> Wooooaaah.. gpmc is TI OMAP2 or OMAP3 only.... NOT in other ARM or PPC
>> or other platforms.. NAK on this.
>>     
> [Pillai, Manikandan] Got your point. But I don't have a solution to this
> Since I EVM is doing a scan,  it requires the gpmc_init to be called late.
> An option is to have another function  board_init_late() which can be used to
> called gpmc_init_late().
>   
that could be an option.. but please keep other platforms in mind when
we send this patch.
Regards,
Nishanth Menon

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [U-Boot] [PATCH 1/1] Changes for single binary image for u-boot for NAND/OneNAND flash.
  2009-03-03  3:41 [U-Boot] [PATCH 1/1] Changes for single binary image for u-boot for NAND/OneNAND flash Manikandan Pillai
  2009-03-03  8:33 ` Nishanth Menon
@ 2009-03-08 22:34 ` Wolfgang Denk
  2009-03-09  3:19   ` Pillai, Manikandan
  1 sibling, 1 reply; 6+ messages in thread
From: Wolfgang Denk @ 2009-03-08 22:34 UTC (permalink / raw)
  To: u-boot

Dear Manikandan Pillai,

In message <1236051689-17867-1-git-send-email-mani.pillai@ti.com> you wrote:
> Support for single binary image for NAND/OneNAND based OMAP3 EVM

What is a "single binary image" ?

> boards. The software has to set the flag CONFIG_ENV_IS_RUNTIME_SEL

What is CONFIG_ENV_IS_RUNTIME_SEL supposed to mean?

> 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@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(-)

Given all the other postings about this - just to be sure: NAK for
now.

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
An age is called Dark not because  the  light  fails  to  shine,  but
because people refuse to see it.           -- James Michener, "Space"

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [U-Boot] [PATCH 1/1] Changes for single binary image for u-boot for NAND/OneNAND flash.
  2009-03-08 22:34 ` Wolfgang Denk
@ 2009-03-09  3:19   ` Pillai, Manikandan
  0 siblings, 0 replies; 6+ messages in thread
From: Pillai, Manikandan @ 2009-03-09  3:19 UTC (permalink / raw)
  To: u-boot

Hi,

Single binary image - The type of flash is not selected during compile time. The
U-boot scans the flash available(as of now whether it is NAND or OneNAND) and
starts using the first flash detected as the ENV storge. To select this option,
I added a #define CONFIG_ENV_IS_RUNTIME_SEL(env storage selection during runtime).



Regards
Mani



> -----Original Message-----
> From: Wolfgang Denk [mailto:wd at denx.de]
> Sent: Monday, March 09, 2009 4:05 AM
> To: Pillai, Manikandan
> Cc: u-boot at lists.denx.de; dirk.behme at googlemail.com
> Subject: Re: [U-Boot] [PATCH 1/1] Changes for single binary image for u-boot
> for NAND/OneNAND flash.
> 
> Dear Manikandan Pillai,
> 
> In message <1236051689-17867-1-git-send-email-mani.pillai@ti.com> you wrote:
> > Support for single binary image for NAND/OneNAND based OMAP3 EVM
> 
> What is a "single binary image" ?
> 
> > boards. The software has to set the flag CONFIG_ENV_IS_RUNTIME_SEL
> 
> What is CONFIG_ENV_IS_RUNTIME_SEL supposed to mean?
> 
> > 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@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(-)
> 
> Given all the other postings about this - just to be sure: NAK for
> now.
> 
> Best regards,
> 
> Wolfgang Denk
> 
> --
> DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
> An age is called Dark not because  the  light  fails  to  shine,  but
> because people refuse to see it.           -- James Michener, "Space"

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2009-03-09  3:19 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-03-03  3:41 [U-Boot] [PATCH 1/1] Changes for single binary image for u-boot for NAND/OneNAND flash Manikandan Pillai
2009-03-03  8:33 ` Nishanth Menon
2009-03-04  6:35   ` Pillai, Manikandan
2009-03-04  7:25     ` Nishanth Menon
2009-03-08 22:34 ` Wolfgang Denk
2009-03-09  3:19   ` Pillai, Manikandan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox