From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nishanth Menon Date: Tue, 03 Mar 2009 10:33:17 +0200 Subject: [U-Boot] [PATCH 1/1] Changes for single binary image for u-boot for NAND/OneNAND flash. In-Reply-To: <1236051689-17867-1-git-send-email-mani.pillai@ti.com> References: <1236051689-17867-1-git-send-email-mani.pillai@ti.com> Message-ID: <49ACEB4D.3070402@gmail.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 > --- > 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 > +#include > #include > #include > #include > #include > +#include > > /* > * 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