summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/drivers/pc80/rtc/mc146818rtc.c34
-rw-r--r--src/include/fallback.h1
-rw-r--r--src/lib/fallback_boot.c39
3 files changed, 37 insertions, 37 deletions
diff --git a/src/drivers/pc80/rtc/mc146818rtc.c b/src/drivers/pc80/rtc/mc146818rtc.c
index adbc611e14..0d36b004a6 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,35 @@ 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 740f130dc2..3a7225e113 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 203071fc8a..1c1255776b 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)
{