summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorValentin Longchamp <valentin.longchamp@keymile.com>2011-08-03 02:37:01 +0000
committerWolfgang Denk <wd@denx.de>2011-10-05 22:03:10 +0200
commit79843950b26980cc0a62954bf49509de301607f3 (patch)
treefbfb2b49a38f92bf7b1c6b427f3b8c7ed6e4dde1
parent3e161ced8fd3276aa77e4276e9237ae972b21f33 (diff)
POST: add post_log_res field for post results in global data
The current post_log_word in global data is currently split into 2x 16 bits: half for the test start, half for the test success. Since we alredy have more than 16 POST tests defined and more could be defined, this may result in an overflow and the post_output_backlog would not work for the tests defined further of these 16 positions. An additional field is added to global data so that we can now support up to 32 (depending of architecture) tests. The post_log_word is only used to record the start of the test and the new field post_log_res for the test success (or failure). The post_output_backlog is for this change also adapted. Signed-off-by: Valentin Longchamp <valentin.longchamp@keymile.com>
-rw-r--r--arch/arm/include/asm/global_data.h1
-rw-r--r--arch/blackfin/include/asm/global_data.h1
-rw-r--r--arch/nios2/include/asm/global_data.h1
-rw-r--r--arch/powerpc/include/asm/global_data.h1
-rw-r--r--arch/sparc/include/asm/global_data.h1
-rw-r--r--post/post.c9
6 files changed, 10 insertions, 4 deletions
diff --git a/arch/arm/include/asm/global_data.h b/arch/arm/include/asm/global_data.h
index 1264d3028f1..fac98d559a4 100644
--- a/arch/arm/include/asm/global_data.h
+++ b/arch/arm/include/asm/global_data.h
@@ -80,6 +80,7 @@ typedef struct global_data {
char env_buf[32]; /* buffer for getenv() before reloc. */
#if defined(CONFIG_POST) || defined(CONFIG_LOGBUFFER)
unsigned long post_log_word; /* Record POST activities */
+ unsigned long post_log_res; /* success of POST test */
unsigned long post_init_f_time; /* When post_init_f started */
#endif
} gd_t;
diff --git a/arch/blackfin/include/asm/global_data.h b/arch/blackfin/include/asm/global_data.h
index f7aa71113de..67aa30f04c4 100644
--- a/arch/blackfin/include/asm/global_data.h
+++ b/arch/blackfin/include/asm/global_data.h
@@ -53,6 +53,7 @@ typedef struct global_data {
unsigned long env_valid; /* Checksum of Environment valid? */
#if defined(CONFIG_POST) || defined(CONFIG_LOGBUFFER)
unsigned long post_log_word; /* Record POST activities */
+ unsigned long post_log_res; /* success of POST test */
unsigned long post_init_f_time; /* When post_init_f started */
#endif
diff --git a/arch/nios2/include/asm/global_data.h b/arch/nios2/include/asm/global_data.h
index d9f06645a3a..4b86fbdacfa 100644
--- a/arch/nios2/include/asm/global_data.h
+++ b/arch/nios2/include/asm/global_data.h
@@ -37,6 +37,7 @@ typedef struct global_data {
unsigned long env_valid; /* Checksum of Environment valid */
#if defined(CONFIG_POST) || defined(CONFIG_LOGBUFFER)
unsigned long post_log_word; /* Record POST activities */
+ unsigned long post_log_res; /* success of POST test */
unsigned long post_init_f_time; /* When post_init_f started */
#endif
void **jt; /* Standalone app jump table */
diff --git a/arch/powerpc/include/asm/global_data.h b/arch/powerpc/include/asm/global_data.h
index 7fcaf384ed7..01f1d4acba3 100644
--- a/arch/powerpc/include/asm/global_data.h
+++ b/arch/powerpc/include/asm/global_data.h
@@ -163,6 +163,7 @@ typedef struct global_data {
#endif
#if defined(CONFIG_POST) || defined(CONFIG_LOGBUFFER)
unsigned long post_log_word; /* Record POST activities */
+ unsigned long post_log_res; /* success of POST test */
unsigned long post_init_f_time; /* When post_init_f started */
#endif
#ifdef CONFIG_BOARD_TYPES
diff --git a/arch/sparc/include/asm/global_data.h b/arch/sparc/include/asm/global_data.h
index a1e4b44aac8..613e2d8e0cb 100644
--- a/arch/sparc/include/asm/global_data.h
+++ b/arch/sparc/include/asm/global_data.h
@@ -61,6 +61,7 @@ typedef struct global_data {
#endif
#if defined(CONFIG_POST) || defined(CONFIG_LOGBUFFER)
unsigned long post_log_word; /* Record POST activities */
+ unsigned long post_log_res; /* success of POST test */
unsigned long post_init_f_time; /* When post_init_f started */
#endif
#ifdef CONFIG_BOARD_TYPES
diff --git a/post/post.c b/post/post.c
index 852d6a5dab5..61acf8d5bbc 100644
--- a/post/post.c
+++ b/post/post.c
@@ -121,6 +121,7 @@ void post_bootmode_init (void)
/* Reset activity record */
gd->post_log_word = 0;
+ gd->post_log_res = 0;
}
int post_bootmode_get (unsigned int *last_test)
@@ -144,12 +145,12 @@ int post_bootmode_get (unsigned int *last_test)
/* POST tests run before relocation only mark status bits .... */
static void post_log_mark_start ( unsigned long testid )
{
- gd->post_log_word |= (testid)<<16;
+ gd->post_log_word |= testid;
}
static void post_log_mark_succ ( unsigned long testid )
{
- gd->post_log_word |= testid;
+ gd->post_log_res |= testid;
}
/* ... and the messages are output once we are relocated */
@@ -158,9 +159,9 @@ void post_output_backlog ( void )
int j;
for (j = 0; j < post_list_size; j++) {
- if (gd->post_log_word & (post_list[j].testid<<16)) {
+ if (gd->post_log_word & (post_list[j].testid)) {
post_log ("POST %s ", post_list[j].cmd);
- if (gd->post_log_word & post_list[j].testid)
+ if (gd->post_log_res & post_list[j].testid)
post_log ("PASSED\n");
else {
post_log ("FAILED\n");