Hi, Pls find my comments below
> -----Original Message----- > From: Nishanth Menon [mailto:menon.nisha...@gmail.com] > Sent: Tuesday, March 03, 2009 2:03 PM > To: Pillai, Manikandan > Cc: u-boot@lists.denx.de; dirk.be...@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.pil...@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 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot