diff options
author | Wolfgang Denk <wd@denx.de> | 2010-11-12 22:24:06 +0100 |
---|---|---|
committer | Wolfgang Denk <wd@denx.de> | 2010-11-12 22:24:06 +0100 |
commit | d963e84c92a63b4e6c4f2f80482a5ecbe9b24fe0 (patch) | |
tree | 07dd5889d73f4b66ad608815adcf6f2f953d9501 /common/hwconfig.c | |
parent | 66fca016057b1c6b697552cc7220ebada9d4f82d (diff) | |
parent | 0c0892be0d93a5a892b93739c5eb3bf692fed4ff (diff) | |
download | u-boot-imx-d963e84c92a63b4e6c4f2f80482a5ecbe9b24fe0.zip u-boot-imx-d963e84c92a63b4e6c4f2f80482a5ecbe9b24fe0.tar.gz u-boot-imx-d963e84c92a63b4e6c4f2f80482a5ecbe9b24fe0.tar.bz2 |
Merge branch 'master' of /home/wd/git/u-boot/master
Diffstat (limited to 'common/hwconfig.c')
-rw-r--r-- | common/hwconfig.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/common/hwconfig.c b/common/hwconfig.c index 1f9f4a0..3c9759f 100644 --- a/common/hwconfig.c +++ b/common/hwconfig.c @@ -26,6 +26,8 @@ #define min(a, b) (((a) < (b)) ? (a) : (b)) #endif /* HWCONFIG_TEST */ +DECLARE_GLOBAL_DATA_PTR; + static const char *hwconfig_parse(const char *opts, size_t maxlen, const char *opt, char *stopchs, char eqch, size_t *arglen) @@ -69,9 +71,26 @@ next: const char *cpu_hwconfig __attribute__((weak)); const char *board_hwconfig __attribute__((weak)); +#define HWCONFIG_PRE_RELOC_BUF_SIZE 128 + static const char *__hwconfig(const char *opt, size_t *arglen) { - const char *env_hwconfig = getenv("hwconfig"); + const char *env_hwconfig = NULL; + char buf[HWCONFIG_PRE_RELOC_BUF_SIZE]; + + if (gd->flags & GD_FLG_ENV_READY) { + env_hwconfig = getenv("hwconfig"); + } else { + /* + * Use our own on stack based buffer before relocation to allow + * accessing longer hwconfig strings that might be in the + * environment before we've relocated. This is pretty fragile + * on both the use of stack and if the buffer is big enough. + * However we will get a warning from getenv_f for the later. + */ + if ((getenv_f("hwconfig", buf, sizeof(buf))) > 0) + env_hwconfig = buf; + } if (env_hwconfig) return hwconfig_parse(env_hwconfig, strlen(env_hwconfig), |