447240808c
Under certain conditions, e.g. automated testing, it is useful to have the payload (e.g. Linux) reset the reboot_bits CMOS value. This allows automated recovery in the case of coreboot starting properly but the payload failing to start due to bad configuration data provided by the coreboot image under test. Signed-off-by: Timothy Pearson <tpearson@raptorengineeringinc.com> Change-Id: Ifc8f565f8292941d90b2e520cc9c5993b41e9cdd Reviewed-on: http://review.coreboot.org/8698 Reviewed-by: Patrick Georgi <pgeorgi@google.com> Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net> Tested-by: build bot (Jenkins)
49 lines
1 KiB
C
49 lines
1 KiB
C
#include <console/console.h>
|
|
#include <fallback.h>
|
|
#include <watchdog.h>
|
|
#include <arch/io.h>
|
|
|
|
#if CONFIG_PC80_SYSTEM
|
|
#include <pc80/mc146818rtc.h>
|
|
|
|
static void set_boot_successful(void)
|
|
{
|
|
/* Remember I successfully booted by setting
|
|
* the initial boot direction
|
|
* to the direction that I booted.
|
|
*/
|
|
unsigned char index, byte;
|
|
index = inb(RTC_PORT(0)) & 0x80;
|
|
index |= RTC_BOOT_BYTE;
|
|
outb(index, RTC_PORT(0));
|
|
|
|
byte = inb(RTC_PORT(1));
|
|
byte &= 0xfe;
|
|
byte |= (byte & (1 << 1)) >> 1;
|
|
|
|
/* If we are in normal mode set the boot count to 0 */
|
|
if (!IS_ENABLED(CONFIG_SKIP_MAX_REBOOT_CNT_CLEAR))
|
|
if(byte & 1)
|
|
byte &= 0x0f;
|
|
outb(byte, RTC_PORT(1));
|
|
}
|
|
#else
|
|
static void set_boot_successful(void)
|
|
{
|
|
/* To be implemented */
|
|
}
|
|
#endif
|
|
|
|
void boot_successful(void)
|
|
{
|
|
#if CONFIG_FRAMEBUFFER_SET_VESA_MODE && !CONFIG_FRAMEBUFFER_KEEP_VESA_MODE
|
|
void vbe_textmode_console(void);
|
|
|
|
vbe_textmode_console();
|
|
#endif
|
|
/* Remember this was a successful boot */
|
|
set_boot_successful();
|
|
|
|
/* turn off the boot watchdog */
|
|
watchdog_off();
|
|
}
|