[coreboot-gerrit] New patch to review for coreboot: 1dffa83 as3277: Fix month-off-by-one error for RTC driver

Patrick Georgi (pgeorgi@google.com) gerrit at coreboot.org
Thu Apr 16 10:26:43 CEST 2015


Patrick Georgi (pgeorgi at google.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/9723

-gerrit

commit 1dffa83fbb24b5f9a42dd09cb0d2aa2858cf612d
Author: Julius Werner <jwerner at chromium.org>
Date:   Tue Dec 30 18:38:06 2014 -0800

    as3277: Fix month-off-by-one error for RTC driver
    
    The AS3277 RTC code seems to closely follow the corresponding Linux
    driver. Unfortunately, while coreboot (and even other parts of Linux,
    like mktime()) directly follows the standard IBM PC RTC time
    representation (except for the BCD part), Linux' struct rtc_time decided
    to use 0-based (instead of 1-based) months instead.
    
    This patch removes the faulty month offset that was copied into our
    driver so that we will generate correct timestamps again.
    
    BRANCH=nyan
    BUG=chrome-os-partner:34108
    TEST=firmware_EventLog (pre-release version) gets further than before
    (and then craps up on unrelated problems with suspend/resume events).
    
    Change-Id: Ica221a8bcfd7c1c6cd7ba382d760b586d511e3a3
    Signed-off-by: Patrick Georgi <pgeorgi at chromium.org>
    Original-Commit-Id: 5b55c3f5bbecc776a71338256b910aecccac1e04
    Original-Change-Id: I163fa4778ec534cd9e6f92a6b6dc55e9871a6a82
    Original-Signed-off-by: Julius Werner <jwerner at chromium.org>
    Original-Reviewed-on: https://chromium-review.googlesource.com/238122
    Original-Reviewed-by: David Hendricks <dhendrix at chromium.org>
---
 src/drivers/ams/as3722rtc.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/drivers/ams/as3722rtc.c b/src/drivers/ams/as3722rtc.c
index 8fe5748..e15ae32 100644
--- a/src/drivers/ams/as3722rtc.c
+++ b/src/drivers/ams/as3722rtc.c
@@ -72,7 +72,7 @@ int rtc_set(const struct rtc_time *time)
 	as3722_write(AS3722_RTC_MINUTE, bin2bcd(time->min));
 	as3722_write(AS3722_RTC_HOUR, bin2bcd(time->hour));
 	as3722_write(AS3722_RTC_DAY, bin2bcd(time->mday));
-	as3722_write(AS3722_RTC_MONTH, bin2bcd(time->mon + 1));
+	as3722_write(AS3722_RTC_MONTH, bin2bcd(time->mon));
 	as3722_write(AS3722_RTC_YEAR, bin2bcd(time->year));
 	return 0;
 }
@@ -85,7 +85,7 @@ int rtc_get(struct rtc_time *time)
 	time->min = bcd2bin(as3722_read(AS3722_RTC_MINUTE) & 0x7f);
 	time->hour = bcd2bin(as3722_read(AS3722_RTC_HOUR) & 0x3f);
 	time->mday = bcd2bin(as3722_read(AS3722_RTC_DAY) & 0x3f);
-	time->mon = bcd2bin(as3722_read(AS3722_RTC_MONTH) & 0x1f) - 1;
+	time->mon = bcd2bin(as3722_read(AS3722_RTC_MONTH) & 0x1f);
 	time->year = bcd2bin(as3722_read(AS3722_RTC_YEAR) & 0x7f);
 	return 0;
 }



More information about the coreboot-gerrit mailing list