diff options
Diffstat (limited to 'post')
-rw-r--r-- | post/post.c | 42 | ||||
-rw-r--r-- | post/tests.c | 41 |
2 files changed, 70 insertions, 13 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 */ diff --git a/post/tests.c b/post/tests.c index bdc7e81..4ec307b 100644 --- a/post/tests.c +++ b/post/tests.c @@ -19,6 +19,10 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA + * + * Be sure to mark tests to be run before relocation as such with the + * CFG_POST_PREREL flag so that logging is done correctly if the + * logbuffer support is enabled. */ #include <common.h> @@ -47,7 +51,8 @@ struct post_test post_list[] = "cache", "This test verifies the CPU cache operation.", POST_RAM | POST_ALWAYS, - &cache_post_test + &cache_post_test, + CFG_POST_CACHE }, #endif #if CONFIG_POST & CFG_POST_WATCHDOG @@ -56,7 +61,8 @@ struct post_test post_list[] = "watchdog", "This test checks the watchdog timer.", POST_RAM | POST_POWERON | POST_POWERFAIL | POST_MANUAL | POST_REBOOT, - &watchdog_post_test + &watchdog_post_test, + CFG_POST_WATCHDOG }, #endif #if CONFIG_POST & CFG_POST_I2C @@ -65,7 +71,8 @@ struct post_test post_list[] = "i2c", "This test verifies the I2C operation.", POST_RAM | POST_ALWAYS, - &i2c_post_test + &i2c_post_test, + CFG_POST_I2C }, #endif #if CONFIG_POST & CFG_POST_RTC @@ -74,7 +81,8 @@ struct post_test post_list[] = "rtc", "This test verifies the RTC operation.", POST_RAM | POST_POWERFAIL | POST_MANUAL, - &rtc_post_test + &rtc_post_test, + CFG_POST_RTC }, #endif #if CONFIG_POST & CFG_POST_MEMORY @@ -82,8 +90,9 @@ struct post_test post_list[] = "Memory test", "memory", "This test checks RAM.", - POST_ROM | POST_POWERON | POST_POWERFAIL, - &memory_post_test + POST_ROM | POST_POWERON | POST_POWERFAIL | POST_PREREL, + &memory_post_test, + CFG_POST_MEMORY }, #endif #if CONFIG_POST & CFG_POST_CPU @@ -93,7 +102,8 @@ struct post_test post_list[] = "This test verifies the arithmetic logic unit of" " CPU.", POST_RAM | POST_ALWAYS, - &cpu_post_test + &cpu_post_test, + CFG_POST_CPU }, #endif #if CONFIG_POST & CFG_POST_UART @@ -102,7 +112,8 @@ struct post_test post_list[] = "uart", "This test verifies the UART operation.", POST_RAM | POST_POWERFAIL | POST_MANUAL, - &uart_post_test + &uart_post_test, + CFG_POST_UART }, #endif #if CONFIG_POST & CFG_POST_ETHER @@ -111,7 +122,8 @@ struct post_test post_list[] = "ethernet", "This test verifies the ETHERNET operation.", POST_RAM | POST_ALWAYS | POST_MANUAL, - ðer_post_test + ðer_post_test, + CFG_POST_ETHER }, #endif #if CONFIG_POST & CFG_POST_SPI @@ -120,7 +132,8 @@ struct post_test post_list[] = "spi", "This test verifies the SPI operation.", POST_RAM | POST_ALWAYS | POST_MANUAL, - &spi_post_test + &spi_post_test, + CFG_POST_SPI }, #endif #if CONFIG_POST & CFG_POST_USB @@ -129,7 +142,8 @@ struct post_test post_list[] = "usb", "This test verifies the USB operation.", POST_RAM | POST_ALWAYS | POST_MANUAL, - &usb_post_test + &usb_post_test, + CFG_POST_USB }, #endif #if CONFIG_POST & CFG_POST_SPR @@ -137,8 +151,9 @@ struct post_test post_list[] = "SPR test", "spr", "This test checks SPR contents.", - POST_ROM | POST_ALWAYS, - &spr_post_test + POST_ROM | POST_ALWAYS | POST_PREREL, + &spr_post_test, + CFG_POST_SPR }, #endif }; |