diff options
| author | Wolfgang Denk <wd@denx.de> | 2010-07-24 20:22:02 +0200 | 
|---|---|---|
| committer | Wolfgang Denk <wd@denx.de> | 2010-09-19 19:29:48 +0200 | 
| commit | 91a76751a090bf43c166fda0815c9b5b2bfccbe9 (patch) | |
| tree | 08a984591270e574bcda8c2cd28bd4c6351c7b46 /arch/blackfin/include/asm/global_data.h | |
| parent | 6d014adfa2ac4b1151d2b80a6943f59c3e254239 (diff) | |
| download | olio-uboot-2014.01-91a76751a090bf43c166fda0815c9b5b2bfccbe9.tar.xz olio-uboot-2014.01-91a76751a090bf43c166fda0815c9b5b2bfccbe9.zip | |
Make getenv() work before relocation.
So far, getenv() would work before relocation is most cases, even
though it was not intended to be used that way.  When switching to a
hash table based implementation, this would break a number of boards.
For convenience, we make getenv() check if it's running before
relocation and, if so, use getenv_f() internally.
Note that this is limited to simple cases, as we use a small static
buffer (32 bytes) in the global data for this purpose.
For this reason, it is also not a good idea to convert all current
uses of getenv_f() into getenv() - some of the existing use cases need
to be able to deal with longer variable values, so getenv_f() is still
needed and recommended for use before relocation.
Signed-off-by: Wolfgang Denk <wd@denx.de>
Diffstat (limited to 'arch/blackfin/include/asm/global_data.h')
| -rw-r--r-- | arch/blackfin/include/asm/global_data.h | 7 | 
1 files changed, 4 insertions, 3 deletions
| diff --git a/arch/blackfin/include/asm/global_data.h b/arch/blackfin/include/asm/global_data.h index c7099e6da..3cfd00e66 100644 --- a/arch/blackfin/include/asm/global_data.h +++ b/arch/blackfin/include/asm/global_data.h @@ -3,7 +3,7 @@   *   * Copyright (c) 2005-2007 Analog Devices Inc.   * - * (C) Copyright 2000-2004 + * (C) Copyright 2000-2010   * Wolfgang Denk, DENX Software Engineering, wd@denx.de.   *   * See file CREDITS for list of people who contributed to this @@ -53,7 +53,8 @@ typedef struct global_data {  	unsigned long post_init_f_time;	/* When post_init_f started */  #endif -	void **jt;		/* jump table */ +	void	**jt;			/* jump table */ +	char	env_buf[32];		/* buffer for getenv() before reloc. */  } gd_t;  /* @@ -65,7 +66,7 @@ typedef struct global_data {  #define	GD_FLG_POSTFAIL	0x00008	/* Critical POST test failed     */  #define	GD_FLG_POSTSTOP	0x00010	/* POST seqeunce aborted	 */  #define	GD_FLG_LOGINIT	0x00020	/* Log Buf has been initialized	 */ -#define GD_FLG_DISABLE_CONSOLE	0x00040		/* Disable console (in & out)	 */ +#define GD_FLG_DISABLE_CONSOLE	0x00040	/* Disable console (in & out)	*/  #define DECLARE_GLOBAL_DATA_PTR     register gd_t * volatile gd asm ("P3") |