diff options
| author | wdenk <wdenk> | 2002-12-08 09:53:23 +0000 | 
|---|---|---|
| committer | wdenk <wdenk> | 2002-12-08 09:53:23 +0000 | 
| commit | 228f29ac6e0026e596b3a6fbb640118b9944cdd8 (patch) | |
| tree | f379b80d2d4be7cf9f25bd59156e53cb00faaf72 /post/post.c | |
| parent | 7c7a23bd5a0bc149d2edd665ec46381726b24e0c (diff) | |
| download | olio-uboot-2014.01-228f29ac6e0026e596b3a6fbb640118b9944cdd8.tar.xz olio-uboot-2014.01-228f29ac6e0026e596b3a6fbb640118b9944cdd8.zip | |
* 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.c | 42 | 
1 files changed, 42 insertions, 0 deletions
| diff --git a/post/post.c b/post/post.c index f87636cb4..eab3f114d 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 */ |