summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRandall Spangler <rspangler@chromium.org>2012-12-17 12:59:16 -0800
committerRandall Spangler <rspangler@chromium.org>2012-12-17 16:08:10 -0800
commitb6757ed42efc4984943b091d95a2123c9b38c8e1 (patch)
treeee180cde898a1a91ecaf125d3c132168c8395076
parent4a46446799a08e2c434674cdac0c837ecdca2f60 (diff)
downloadchrome-ec-b6757ed42efc4984943b091d95a2123c9b38c8e1.tar.gz
link: Workaround for errata 3.2
Reads of HIBRTCC and HIBRTCCSS are not properly synchronized and may return incorrect data. We were re-checking HIBRTC, but not HIBRTCSS. BUG=chrome-os-partner:16864 BRANCH=link TEST=from ec console, do 'rtc' command repeatedly; printed values should be strictly increasing. Original-Change-Id: I3e59dc840316ad36bb4851f03b66a3ae3df5cccd Signed-off-by: Randall Spangler <rspangler@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/39795 Reviewed-by: Bill Richardson <wfrichar@chromium.org> (cherry picked from commit eb6e08570a46fe641308ff696225acfa1643a5a8) Change-Id: If7362ce368f21bd6d21a037af12589837bcc62f3 Reviewed-on: https://gerrit.chromium.org/gerrit/39807 Reviewed-by: Randall Spangler <rspangler@chromium.org> Tested-by: Randall Spangler <rspangler@chromium.org>
-rw-r--r--chip/lm4/system.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/chip/lm4/system.c b/chip/lm4/system.c
index ee9afb2ab5..159013e92e 100644
--- a/chip/lm4/system.c
+++ b/chip/lm4/system.c
@@ -183,7 +183,7 @@ void __attribute__((section(".iram.text"))) __enter_hibernate(int hibctl)
uint32_t system_get_rtc(uint32_t *ss_ptr)
{
uint32_t rtc, rtc2;
- uint32_t rtcss;
+ uint32_t rtcss, rtcss2;
/*
* The hibernate module isn't synchronized, so need to read repeatedly
@@ -192,8 +192,9 @@ uint32_t system_get_rtc(uint32_t *ss_ptr)
do {
rtc = LM4_HIBERNATE_HIBRTCC;
rtcss = LM4_HIBERNATE_HIBRTCSS & 0x7fff;
+ rtcss2 = LM4_HIBERNATE_HIBRTCSS & 0x7fff;
rtc2 = LM4_HIBERNATE_HIBRTCC;
- } while (rtc != rtc2);
+ } while (rtc != rtc2 || rtcss != rtcss2);
if (ss_ptr)
*ss_ptr = rtcss;