summaryrefslogtreecommitdiff
path: root/post/post.c
diff options
context:
space:
mode:
authorYuri Tikhonov <yur@pollux.denx.de>2008-02-04 14:11:03 +0100
committerWolfgang Denk <wd@denx.de>2008-03-18 22:24:48 +0100
commitb428f6a8c65c5303e5f96db8d24f2f699d94a98c (patch)
tree0bede5fb7b3eaec6b71b355748ad19b4ddab2c79 /post/post.c
parent8f15d4addd49c956412e1e3bfc764a0c8b1f3184 (diff)
downloadu-boot-imx-b428f6a8c65c5303e5f96db8d24f2f699d94a98c.zip
u-boot-imx-b428f6a8c65c5303e5f96db8d24f2f699d94a98c.tar.gz
u-boot-imx-b428f6a8c65c5303e5f96db8d24f2f699d94a98c.tar.bz2
The patch introduces the CRITICAL feature of POST tests. If the test marked as POST_CRITICAL fails then the alternative, post_critical, boot-command is used. If this command is not defined then U-Boot enters into interactive mode.
Signed-off-by: Dmitry Rakhchev <rda@emcraft.com> Signed-off-by: Yuri Tikhonov <yur@emcraft.com>
Diffstat (limited to 'post/post.c')
-rw-r--r--post/post.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/post/post.c b/post/post.c
index 4ff75ee..1df0657 100644
--- a/post/post.c
+++ b/post/post.c
@@ -157,8 +157,10 @@ static void post_bootmode_test_off (void)
static void post_get_flags (int *test_flags)
{
- int flag[] = { POST_POWERON, POST_NORMAL, POST_SLOWTEST };
- char *var[] = { "post_poweron", "post_normal", "post_slowtest" };
+ int flag[] = { POST_POWERON, POST_NORMAL, POST_SLOWTEST,
+ POST_CRITICAL };
+ char *var[] = { "post_poweron", "post_normal", "post_slowtest",
+ "post_critical" };
int varnum = sizeof (var) / sizeof (var[0]);
char list[128]; /* long enough for POST list */
char *name;
@@ -224,7 +226,9 @@ static int post_run_single (struct post_test *test,
if (!(flags & POST_REBOOT)) {
if ((test_flags & POST_REBOOT) && !(flags & POST_MANUAL)) {
- post_bootmode_test_on (i);
+ post_bootmode_test_on (
+ (gd->flags & GD_FLG_POSTFAIL) ?
+ POST_FAIL_SAVE | i : i);
}
if (test_flags & POST_PREREL)
@@ -236,10 +240,14 @@ static int post_run_single (struct post_test *test,
if (test_flags & POST_PREREL) {
if ((*test->test) (flags) == 0)
post_log_mark_succ ( test->testid );
+ else if (test_flags & POST_CRITICAL)
+ gd->flags |= GD_FLG_POSTFAIL;
} else {
if ((*test->test) (flags) != 0) {
post_log ("FAILED\n");
show_boot_progress (-32);
+ if (test_flags & POST_CRITICAL)
+ gd->flags |= GD_FLG_POSTFAIL;
}
else
post_log ("PASSED\n");
@@ -266,6 +274,10 @@ int post_run (char *name, int flags)
unsigned int last;
if (post_bootmode_get (&last) & POST_POWERTEST) {
+ if (last & POST_FAIL_SAVE) {
+ last &= ~POST_FAIL_SAVE;
+ gd->flags |= GD_FLG_POSTFAIL;
+ }
if (last < post_list_size &&
(flags & test_flags[last] & POST_ALWAYS) &&
(flags & test_flags[last] & POST_MEM)) {