diff options
author | Thomas Herzmann | 2012-05-04 10:55:58 +0200 |
---|---|---|
committer | Kim Phillips | 2012-06-15 17:12:52 -0500 |
commit | c1b3d84168ad423b3932f671c0863327fb005599 (patch) | |
tree | c75c7c013ec70f4d640adbe880d043fcaa5511bf | |
parent | 13fff2229178ab3d7f8d6b8fda37873c7a8cb1eb (diff) |
km/common: check test_bank and testpin for testboot
If the testpin is asserted, first check if a test_bank
variable is defined before trying to boot this
test_bank.
Signed-off-by: Thomas Herzmann <thomas.herzmann@keymile.com>
Signed-off-by: Holger Brunck <holger.brunck@keymile.com>
Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
-rw-r--r-- | board/keymile/common/common.c | 36 | ||||
-rw-r--r-- | include/configs/km/keymile-common.h | 4 |
2 files changed, 39 insertions, 1 deletions
diff --git a/board/keymile/common/common.c b/board/keymile/common/common.c index f26230648d4..1013f42e11e 100644 --- a/board/keymile/common/common.c +++ b/board/keymile/common/common.c @@ -34,6 +34,9 @@ #include <asm/io.h> #include <linux/ctype.h> +#if defined(CONFIG_POST) +#include "post.h" +#endif #include "common.h" #if defined(CONFIG_HARD_I2C) || defined(CONFIG_SOFT_I2C) #include <i2c.h> @@ -390,3 +393,36 @@ U_BOOT_CMD(km_checkbidhwk, 2, 0, do_checkboardidhwk, "\"boardIdListHex\" against stored boardid and hwkey "\ "from the IVM\n v: verbose output" ); + +/* + * command km_checktestboot + * if the testpin of the board is asserted, return 1 + * * else return 0 + */ +int do_checktestboot(cmd_tbl_t *cmdtp, int flag, int argc, + char *const argv[]) +{ + int testpin = 0; + char *s = NULL; + int testboot = 0; + int verbose = argc > 1 && *argv[1] == 'v'; + +#if defined(CONFIG_POST) + testpin = post_hotkeys_pressed(); + s = getenv("test_bank"); +#endif + /* when test_bank is not set, act as if testpin is not asserted */ + testboot = (testpin != 0) && (s); + if (verbose) { + printf("testpin = %d\n", testpin); + printf("test_bank = %s\n", s ? s : "not set"); + printf("boot test app : %s\n", (testboot) ? "yes" : "no"); + } + /* return 0 means: testboot, therefore we need the inversion */ + return !testboot; +} + +U_BOOT_CMD(km_checktestboot, 2, 0, do_checktestboot, + "check if testpin is asserted", + "[v]\n v - verbose output" +); diff --git a/include/configs/km/keymile-common.h b/include/configs/km/keymile-common.h index 04f39c1a496..b6505391264 100644 --- a/include/configs/km/keymile-common.h +++ b/include/configs/km/keymile-common.h @@ -245,7 +245,9 @@ CONFIG_KM_DEF_ENV_CONSTANTS \ "altbootcmd=run bootcmd\0" \ "bootcmd=km_checkbidhwk && " \ - " setenv bootcmd \'setenv boot_bank ${actual_bank}; " \ + "setenv bootcmd \'if km_checktestboot; then; " \ + "setenv boot_bank ${test_bank}; else; " \ + "setenv boot_bank ${actual_bank}; fi;" \ "run ${subbootcmds}; reset\' && " \ "setenv altbootcmd \'setenv boot_bank ${backup_bank}; " \ "run ${subbootcmds}; reset\' && " \ |