aboutsummaryrefslogtreecommitdiff
path: root/src/drivers/pc80
diff options
context:
space:
mode:
authorStefan Reinauer <reinauer@chromium.org>2013-05-28 12:37:08 -0700
committerStefan Reinauer <stefan.reinauer@coreboot.org>2013-11-25 23:41:23 +0100
commit86ce7f92735d4e0a3c6938cf7695b2805f5f48b4 (patch)
tree4ea5c19dba176165f7bc8267510fb46a044903ba /src/drivers/pc80
parent7ae7fc081b3832f1f6ba80eac8c92f788cbdd554 (diff)
RTC: Skip rtc_init() in S3 resume path
In addition to not clearing the pending interrupts, we also don't want to reset the RTC control register when booting with an S3 resume. On most new systems, when the RTC well is losing power, we will also lose state that is required to perform a resume, so we end up in a normal boot anyways. Hence don't do any RTC initialization in the S3 resume path. Signed-off-by: Stefan Reinauer <reinauer@google.com> Change-Id: I73b486082faa741e9dccd15f2b8e3a8399c98f80 Reviewed-on: https://gerrit.chromium.org/gerrit/56826 Reviewed-by: Duncan Laurie <dlaurie@chromium.org> Reviewed-by: Aaron Durbin <adurbin@chromium.org> Reviewed-by: Derek Basehore <dbasehore@chromium.org> Commit-Queue: Stefan Reinauer <reinauer@google.com> Tested-by: Stefan Reinauer <reinauer@google.com> Reviewed-on: http://review.coreboot.org/4206 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
Diffstat (limited to 'src/drivers/pc80')
-rw-r--r--src/drivers/pc80/mc146818rtc.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/src/drivers/pc80/mc146818rtc.c b/src/drivers/pc80/mc146818rtc.c
index be524541fd..79aba27fbd 100644
--- a/src/drivers/pc80/mc146818rtc.c
+++ b/src/drivers/pc80/mc146818rtc.c
@@ -71,6 +71,17 @@ void rtc_init(int invalid)
unsigned char x;
#endif
+#if CONFIG_HAVE_ACPI_RESUME
+ /*
+ * Avoid clearing pending interrupts and resetting the RTC control
+ * register in the resume path because the Linux kernel relies on
+ * this to know if it should restart the RTC timer queue if the wake
+ * was due to the RTC alarm.
+ */
+ if (acpi_slp_type == 3)
+ return;
+#endif
+
printk(BIOS_DEBUG, "RTC Init\n");
#if CONFIG_USE_OPTION_TABLE
@@ -128,16 +139,6 @@ void rtc_init(int invalid)
PC_CKS_RANGE_END,PC_CKS_LOC);
#endif
-#if CONFIG_HAVE_ACPI_RESUME
- /*
- * Avoid clearing pending interrupts in the resume path because
- * the Linux kernel relies on this to know if it should restart
- * the RTC timer queue if the wake was due to the RTC alarm.
- */
- if (acpi_slp_type == 3)
- return;
-#endif
-
/* Clear any pending interrupts */
(void) cmos_read(RTC_INTR_FLAGS);
}