Log unexpected post code from the previous boot

Read out the post code from the previous boot and
log it if the code is not one of the expected values.

Test:
1) interrupt the boot of the system, this is easiest
with warm reset button when servo is attached
2) check the event log with mosys

65 | 2012-09-09 12:32:11 | Last post code in previous boot | 0x9d

Change-Id: Id418f4c0cf005a3e97b8c63de67cb9a09bc57384
Signed-off-by: Duncan Laurie <dlaurie@chromium.org>
Reviewed-on: http://review.coreboot.org/1744
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
This commit is contained in:
Duncan Laurie 2012-09-09 19:14:45 -07:00 committed by Stefan Reinauer
parent b6e97b19ae
commit 1fc3461792
3 changed files with 45 additions and 0 deletions

View File

@ -22,6 +22,7 @@
#include <arch/io.h> #include <arch/io.h>
#include <console/console.h> #include <console/console.h>
#include <pc80/mc146818rtc.h> #include <pc80/mc146818rtc.h>
#include <elog.h>
/* Write POST information */ /* Write POST information */
@ -40,6 +41,41 @@ void __attribute__((weak)) mainboard_post(uint8_t value)
#endif #endif
#if CONFIG_CMOS_POST #if CONFIG_CMOS_POST
#if !defined(__PRE_RAM__)
void cmos_post_log(void)
{
u8 code;
/* Get post code from other bank */
switch (cmos_read(CMOS_POST_BANK_OFFSET)) {
case CMOS_POST_BANK_0_MAGIC:
code = cmos_read(CMOS_POST_BANK_1_OFFSET);
break;
case CMOS_POST_BANK_1_MAGIC:
code = cmos_read(CMOS_POST_BANK_0_OFFSET);
break;
default:
return;
}
/* Check last post code in previous boot against normal list */
switch (code) {
case POST_OS_BOOT:
case POST_OS_RESUME:
case POST_ENTER_ELF_BOOT:
case 0:
break;
default:
printk(BIOS_WARNING, "POST: Unexpected post code "
"in previous boot: 0x%02x\n", code);
#if CONFIG_ELOG
elog_add_event_word(ELOG_TYPE_LAST_POST_CODE, code);
#endif
}
}
#endif /* !__PRE_RAM__ */
static void cmos_post_code(u8 value) static void cmos_post_code(u8 value)
{ {
switch (cmos_read(CMOS_POST_BANK_OFFSET)) { switch (cmos_read(CMOS_POST_BANK_OFFSET)) {

View File

@ -813,6 +813,11 @@ int elog_init(void)
elog_add_event_dword(ELOG_TYPE_BOOT, boot_count_read()); elog_add_event_dword(ELOG_TYPE_BOOT, boot_count_read());
#endif #endif
#if CONFIG_CMOS_POST && !defined(__SMM__)
/* Check and log POST codes from previous boot */
cmos_post_log();
#endif
return 0; return 0;
} }

View File

@ -175,6 +175,10 @@ static inline int get_option(void *dest __attribute__((unused)),
#define CMOS_POST_BANK_0_OFFSET (CMOS_POST_OFFSET + 1) #define CMOS_POST_BANK_0_OFFSET (CMOS_POST_OFFSET + 1)
#define CMOS_POST_BANK_1_MAGIC 0x81 #define CMOS_POST_BANK_1_MAGIC 0x81
#define CMOS_POST_BANK_1_OFFSET (CMOS_POST_OFFSET + 2) #define CMOS_POST_BANK_1_OFFSET (CMOS_POST_OFFSET + 2)
#if !defined(__ROMCC__)
void cmos_post_log(void);
#endif
#endif /* CONFIG_CMOS_POST */ #endif /* CONFIG_CMOS_POST */
#endif /* PC80_MC146818RTC_H */ #endif /* PC80_MC146818RTC_H */