summaryrefslogtreecommitdiff
path: root/post
diff options
context:
space:
mode:
Diffstat (limited to 'post')
-rw-r--r--post/post.c42
-rw-r--r--post/tests.c41
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,
- &ether_post_test
+ &ether_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
};