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

Nishanth Menon menon.nishanth at gmail.com
Tue Mar 3 09:33:17 CET 2009


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 at ti.com>
> ---
>  board/omap3/evm/evm.c             |    2 +
>  common/Makefile                   |    1 +
>  common/cmd_nvedit.c               |    5 ++
>  common/env_common.c               |    8 +++-
>  common/env_nand.c                 |   33 +++++++++++-
>  common/env_onenand.c              |   26 +++++++++-
>  cpu/arm_cortexa8/omap3/board.c    |   13 +++++
>  cpu/arm_cortexa8/omap3/mem.c      |  100 ++++++++++++++++++++++++++++++++++++-
>  cpu/arm_cortexa8/omap3/sys_info.c |   27 +++++++++-
>  include/common.h                  |   10 +++-
>  include/configs/omap3_evm.h       |    6 ++-
>  lib_arm/board.c                   |   25 +++++++---
>  12 files changed, 237 insertions(+), 19 deletions(-)
>
> diff --git a/board/omap3/evm/evm.c b/board/omap3/evm/evm.c
> index b406312..9924432 100644
> --- a/board/omap3/evm/evm.c
> +++ b/board/omap3/evm/evm.c
> @@ -44,7 +44,9 @@ int board_init(void)
>  {
>  	DECLARE_GLOBAL_DATA_PTR;
>  
> +#if !defined(CONFIG_ENV_IS_RUNTIME_SEL)
>  	gpmc_init(); /* in SRAM or SDRAM, finish GPMC */
> +#endif
>  	/* board id for Linux */
>  	gd->bd->bi_arch_number = MACH_TYPE_OMAP3EVM;
>  	/* boot param addr */
> diff --git a/common/Makefile b/common/Makefile
> index f13cd11..a6c55d2 100644
> --- a/common/Makefile
> +++ b/common/Makefile
> @@ -58,6 +58,7 @@ COBJS-$(CONFIG_ENV_IS_IN_NVRAM) += env_nvram.o
>  COBJS-$(CONFIG_ENV_IS_IN_ONENAND) += env_onenand.o
>  COBJS-$(CONFIG_ENV_IS_IN_SPI_FLASH) += env_sf.o
>  COBJS-$(CONFIG_ENV_IS_NOWHERE) += env_nowhere.o
> +COBJS-$(CONFIG_ENV_IS_RUNTIME_SEL) += env_onenand.o env_nand.o
>  
>  # command
>  COBJS-$(CONFIG_CMD_AMBAPP) += cmd_ambapp.o
> diff --git a/common/cmd_nvedit.c b/common/cmd_nvedit.c
> index 68c673e..628bcf4 100644
> --- a/common/cmd_nvedit.c
> +++ b/common/cmd_nvedit.c
> @@ -59,6 +59,7 @@ DECLARE_GLOBAL_DATA_PTR;
>      !defined(CONFIG_ENV_IS_IN_NAND)	&& \
>      !defined(CONFIG_ENV_IS_IN_ONENAND)	&& \
>      !defined(CONFIG_ENV_IS_IN_SPI_FLASH)	&& \
> +    !defined(CONFIG_ENV_IS_RUNTIME_SEL)	&& \
>      !defined(CONFIG_ENV_IS_NOWHERE)
>  # error Define one of CONFIG_ENV_IS_IN_{NVRAM|EEPROM|FLASH|DATAFLASH|ONENAND|SPI_FLASH|NOWHERE}
>  #endif
> @@ -66,6 +67,10 @@ DECLARE_GLOBAL_DATA_PTR;
>  #define XMK_STR(x)	#x
>  #define MK_STR(x)	XMK_STR(x)
>  
> +#if defined(CONFIG_ENV_IS_RUNTIME_SEL)
> +extern saveenv_p saveenv;
> +#endif
> +
>  /************************************************************************
>  ************************************************************************/
>  
> diff --git a/common/env_common.c b/common/env_common.c
> index 6be3bb0..b692900 100644
> --- a/common/env_common.c
> +++ b/common/env_common.c
> @@ -46,8 +46,13 @@ DECLARE_GLOBAL_DATA_PTR;
>  
>  extern env_t *env_ptr;
>  
> +#if defined(CONFIG_ENV_IS_RUNTIME_SEL)
> +extern env_get_char_spec_p env_get_char_spec;
> +extern env_relocate_spec_p env_relocate_spec;
> +#else
>  extern void env_relocate_spec (void);
>  extern uchar env_get_char_spec(int);
> +#endif
>  
>  static uchar env_get_char_init (int index);
>  
> @@ -140,7 +145,8 @@ uchar default_environment[] = {
>  };
>  
>  #if defined(CONFIG_ENV_IS_IN_NAND)		/* Environment is in Nand Flash */ \
> -	|| defined(CONFIG_ENV_IS_IN_SPI_FLASH)
> +	|| defined(CONFIG_ENV_IS_IN_SPI_FLASH) \
> +	|| (defined(CONFIG_CMD_NAND) && defined(CONFIG_ENV_IS_RUNTIME_SEL))
>   
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


More information about the U-Boot mailing list