summaryrefslogtreecommitdiff
path: root/post/post.c
diff options
context:
space:
mode:
authorwdenk <wdenk>2002-12-08 09:53:23 +0000
committerwdenk <wdenk>2002-12-08 09:53:23 +0000
commit228f29ac6e0026e596b3a6fbb640118b9944cdd8 (patch)
treef379b80d2d4be7cf9f25bd59156e53cb00faaf72 /post/post.c
parent7c7a23bd5a0bc149d2edd665ec46381726b24e0c (diff)
downloadu-boot-imx-228f29ac6e0026e596b3a6fbb640118b9944cdd8.zip
u-boot-imx-228f29ac6e0026e596b3a6fbb640118b9944cdd8.tar.gz
u-boot-imx-228f29ac6e0026e596b3a6fbb640118b9944cdd8.tar.bz2
* Improve log buffer code; use "loglevel" to decide which messages
to log on the console, too (like in Linux); get rid of "logstart"
Diffstat (limited to 'post/post.c')
-rw-r--r--post/post.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/post/post.c b/post/post.c
index f87636c..eab3f11 100644
--- a/post/post.c
+++ b/post/post.c
@@ -38,6 +38,7 @@
void post_bootmode_init (void)
{
+ DECLARE_GLOBAL_DATA_PTR;
int bootmode = post_bootmode_get (0);
if (bootmode == 0) {
@@ -49,6 +50,8 @@ void post_bootmode_init (void)
}
post_word_store (BOOTMODE_MAGIC | bootmode);
+ /* Reset activity record */
+ gd->post_log_word = 0;
}
int post_bootmode_get (unsigned int *last_test)
@@ -74,6 +77,36 @@ void post_bootmode_clear (void)
post_word_store (0);
}
+/* POST tests run before relocation only mark status bits .... */
+static void post_log_mark_start ( unsigned long testid )
+{
+ DECLARE_GLOBAL_DATA_PTR;
+ gd->post_log_word |= (testid)<<16;
+}
+
+static void post_log_mark_succ ( unsigned long testid )
+{
+ DECLARE_GLOBAL_DATA_PTR;
+ gd->post_log_word |= testid;
+}
+
+/* ... and the messages are output once we are relocated */
+void post_output_backlog ( void )
+{
+ DECLARE_GLOBAL_DATA_PTR;
+ int j;
+
+ for (j = 0; j < post_list_size; j++) {
+ if (gd->post_log_word & (post_list[j].testid<<16)) {
+ post_log ("POST %s ", post_list[j].cmd);
+ if (gd->post_log_word & post_list[j].testid)
+ post_log ("PASSED\n");
+ else
+ post_log ("FAILED\n");
+ }
+ }
+}
+
static void post_bootmode_test_on (unsigned int last_test)
{
unsigned long word = post_word_load ();
@@ -160,13 +193,21 @@ static int post_run_single (struct post_test *test,
post_bootmode_test_on (i);
}
+ if (test_flags & POST_PREREL)
+ post_log_mark_start ( test->testid );
+ else
post_log ("POST %s ", test->cmd);
}
+ if (test_flags & POST_PREREL) {
+ if ((*test->test) (flags) == 0)
+ post_log_mark_succ ( test->testid );
+ } else {
if ((*test->test) (flags) != 0)
post_log ("FAILED\n");
else
post_log ("PASSED\n");
+ }
if ((test_flags & POST_REBOOT) && !(flags & POST_MANUAL)) {
post_bootmode_test_off ();
@@ -282,6 +323,7 @@ int post_log (char *format, ...)
va_end (args);
#ifdef CONFIG_LOGBUFFER
+ /* Send to the logbuffer */
logbuff_log (printbuffer);
#else
/* Send to the stdout file */