Kyösti Mälkki (kyosti.malkki@gmail.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/17793
-gerrit
commit 6fbf2524c2feb24804d640dd57111488dcfb0086 Author: Kyösti Mälkki kyosti.malkki@gmail.com Date: Sun Dec 11 12:56:37 2016 +0200
pc80: Move set_boot_successful()
Don't implement arch or driver -specific code under lib/,
Change-Id: If75980ec5efc622582e2b5e124ad0e7ee3fa39a3 Signed-off-by: Kyösti Mälkki kyosti.malkki@gmail.com --- src/drivers/pc80/rtc/mc146818rtc.c | 32 +++++++++++++++++++++++++++++++ src/include/fallback.h | 1 + src/lib/fallback_boot.c | 39 ++------------------------------------ 3 files changed, 35 insertions(+), 37 deletions(-)
diff --git a/src/drivers/pc80/rtc/mc146818rtc.c b/src/drivers/pc80/rtc/mc146818rtc.c index adbc611..b5b3be1 100644 --- a/src/drivers/pc80/rtc/mc146818rtc.c +++ b/src/drivers/pc80/rtc/mc146818rtc.c @@ -15,7 +15,9 @@ */
#include <arch/acpi.h> +#include <arch/io.h> #include <bcd.h> +#include <fallback.h> #include <stdint.h> #include <version.h> #include <console/console.h> @@ -404,3 +406,33 @@ int rtc_get(struct rtc_time *time) time->wday = bcd2bin(cmos_read(RTC_CLK_DAYOFWEEK)) - 1; return 0; } + +/* Signal coreboot proper completed -- just before running payload + * or jumping to ACPI S3 wakeup vector. + */ +void set_boot_successful(void) +{ + uint8_t index, byte; + + index = inb(RTC_PORT(0)) & 0x80; + index |= RTC_BOOT_BYTE; + outb(index, RTC_PORT(0)); + + byte = inb(RTC_PORT(1)); + + if (IS_ENABLED(CONFIG_SKIP_MAX_REBOOT_CNT_CLEAR)) { + /* Set the fallback boot bit to allow for recovery if + * the payload fails to boot. + * It is the responsibility of the payload to reset + * the normal boot bit to 1 if desired + */ + byte &= ~RTC_BOOT_NORMAL; + } else { + /* If we are in normal mode set the boot count to 0 */ + if (byte & RTC_BOOT_NORMAL) + byte &= 0x0f; + + } + + outb(byte, RTC_PORT(1)); +} diff --git a/src/include/fallback.h b/src/include/fallback.h index 740f130..3a7225e 100644 --- a/src/include/fallback.h +++ b/src/include/fallback.h @@ -4,6 +4,7 @@ #if !defined(__ASSEMBLER__)
void boot_successful(void); +void set_boot_successful(void);
#endif /* __ASSEMBLER__ */
diff --git a/src/lib/fallback_boot.c b/src/lib/fallback_boot.c index 203071f..1c12557 100644 --- a/src/lib/fallback_boot.c +++ b/src/lib/fallback_boot.c @@ -1,43 +1,8 @@ -#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) -{ - uint8_t index, byte; - - index = inb(RTC_PORT(0)) & 0x80; - index |= RTC_BOOT_BYTE; - outb(index, RTC_PORT(0)); - - byte = inb(RTC_PORT(1)); - - if (IS_ENABLED(CONFIG_SKIP_MAX_REBOOT_CNT_CLEAR)) { - /* Set the fallback boot bit to allow for recovery if - * the payload fails to boot. - * It is the responsibility of the payload to reset - * the normal boot bit to 1 if desired - */ - byte &= ~RTC_BOOT_NORMAL; - } else { - /* If we are in normal mode set the boot count to 0 */ - if (byte & RTC_BOOT_NORMAL) - byte &= 0x0f; - - } - - outb(byte, RTC_PORT(1)); -} -#else -static void set_boot_successful(void) -{ - /* To be implemented */ -} -#endif +/* Implement platform specific override. */ +void __attribute__((weak)) set_boot_successful(void) { }
void boot_successful(void) {