[coreboot-gerrit] Patch set updated for coreboot: b1c8424 elog: Use the RTC driver interface instead of reading CMOS directly.

Marc Jones (marc.jones@se-eng.com) gerrit at coreboot.org
Tue Dec 30 07:08:12 CET 2014


Marc Jones (marc.jones at se-eng.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/7891

-gerrit

commit b1c8424ea8e13a19bcdb7425856742f860c8f964
Author: Gabe Black <gabeblack at google.com>
Date:   Wed Apr 30 21:41:23 2014 -0700

    elog: Use the RTC driver interface instead of reading CMOS directly.
    
    Use the RTC driver interface to find the timestamp for events instead of
    reading the CMOS based RTC directly on x86 or punting on ARM. This makes
    timestamps available on both architectures, assuming an RTC driver is
    available.
    
    BUG=None
    TEST=Built and booted on nyan_big and link and verified that the timestamps
    in the event log were accurate.
    BRANCH=nyan
    
    Original-Change-Id: Id45da53bc7ddfac8dd0978e7f2a3b8bc2c7ea753
    Original-Signed-off-by: Gabe Black <gabeblack at google.com>
    Original-Reviewed-on: https://chromium-review.googlesource.com/197798
    Original-Reviewed-by: David Hendricks <dhendrix at chromium.org>
    Original-Tested-by: Gabe Black <gabeblack at chromium.org>
    Original-Commit-Queue: Gabe Black <gabeblack at chromium.org>
    (cherry picked from commit 493b05e06dd461532c9366fb09025efb3568a975)
    Signed-off-by: Marc Jones <marc.jones at se-eng.com>
    
    Change-Id: I4fad296ecfeff8987e4a18054661190239245f32
---
 src/drivers/elog/elog.c | 25 +++++++++++--------------
 1 file changed, 11 insertions(+), 14 deletions(-)

diff --git a/src/drivers/elog/elog.c b/src/drivers/elog/elog.c
index 92d5af3..85198e2 100644
--- a/src/drivers/elog/elog.c
+++ b/src/drivers/elog/elog.c
@@ -25,6 +25,8 @@
 #if CONFIG_ARCH_X86
 #include <pc80/mc146818rtc.h>
 #endif
+#include <bcd.h>
+#include <rtc.h>
 #include <smbios.h>
 #include <spi-generic.h>
 #include <spi_flash.h>
@@ -637,20 +639,15 @@ int elog_init(void)
  */
 static void elog_fill_timestamp(struct event_header *event)
 {
-#if CONFIG_ARCH_X86
-	event->second = cmos_read(RTC_CLK_SECOND);
-	event->minute = cmos_read(RTC_CLK_MINUTE);
-	event->hour   = cmos_read(RTC_CLK_HOUR);
-	event->day    = cmos_read(RTC_CLK_DAYOFMONTH);
-	event->month  = cmos_read(RTC_CLK_MONTH);
-	event->year   = cmos_read(RTC_CLK_YEAR);
-#else
-	/*
-	 * FIXME: We need to abstract the CMOS stuff on non-x86 platforms.
-	 * Until then, use bogus data here to force the values to 0.
-	 */
-	event->month  = 0xff;
-#endif
+	struct rtc_time time;
+
+	rtc_get(&time);
+	event->second = bin2bcd(time.sec);
+	event->minute = bin2bcd(time.min);
+	event->hour = bin2bcd(time.hour);
+	event->day = bin2bcd(time.mday);
+	event->month = bin2bcd(time.mon);
+	event->year = bin2bcd(time.year) & 0xff;
 
 	/* Basic sanity check of expected ranges */
 	if (event->month > 0x12 || event->day > 0x31 || event->hour > 0x23 ||



More information about the coreboot-gerrit mailing list