summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVic (Chun-Ju) Yang <victoryang@chromium.org>2013-11-28 12:07:32 +0800
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2013-12-02 04:54:15 +0000
commit0e0bc8bbbdfd29e6e6e4efc43b60e0ac42e1dd77 (patch)
tree4569e95d074afee2ac8e40af04f5b1bd862ec741
parent8d2fc77326c598a4379e45b0946d0dba5d09617f (diff)
downloadchrome-ec-0e0bc8bbbdfd29e6e6e4efc43b60e0ac42e1dd77.tar.gz
mec1322: Add support for VBAT backed RAM
This will be used for saving data across reboots. BUG=chrome-os-partner:24107 TEST=Enable scratchpad command and check value is preserved across watchdog reboot. BRANCH=None Change-Id: Ifd68541a3f842c466b6ff49bcc654c92df48aac6 Signed-off-by: Vic (Chun-Ju) Yang <victoryang@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/178276 Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
-rw-r--r--chip/mec1322/registers.h1
-rw-r--r--chip/mec1322/system.c16
2 files changed, 17 insertions, 0 deletions
diff --git a/chip/mec1322/registers.h b/chip/mec1322/registers.h
index 18bf3ba936..159e29c230 100644
--- a/chip/mec1322/registers.h
+++ b/chip/mec1322/registers.h
@@ -121,6 +121,7 @@ static inline uintptr_t gpio_port_base(int port_id)
#define MEC1322_VBAT_BASE 0x4000a400
#define MEC1322_VBAT_STS REG32(MEC1322_VBAT_BASE + 0x0)
#define MEC1322_VBAT_CE REG32(MEC1322_VBAT_BASE + 0x8)
+#define MEC1322_VBAT_RAM(x) REG32(MEC1322_VBAT_BASE + 0x400 + 4 * (x))
/* LPC */
diff --git a/chip/mec1322/system.c b/chip/mec1322/system.c
index 276803289b..62c08e028d 100644
--- a/chip/mec1322/system.c
+++ b/chip/mec1322/system.c
@@ -16,6 +16,11 @@
#include "timer.h"
#include "util.h"
+/* Indices for hibernate data registers (RAM backed by VBAT) */
+enum hibdata_index {
+ HIBDATA_INDEX_SCRATCHPAD = 0, /* General-purpose scratchpad */
+ HIBDATA_INDEX_SAVED_RESET_FLAGS /* Saved reset flags */
+};
@@ -78,6 +83,17 @@ int system_set_vbnvcontext(const uint8_t *block)
return EC_ERROR_UNIMPLEMENTED;
}
+int system_set_scratchpad(uint32_t value)
+{
+ MEC1322_VBAT_RAM(HIBDATA_INDEX_SCRATCHPAD) = value;
+ return EC_SUCCESS;
+}
+
+uint32_t system_get_scratchpad(void)
+{
+ return MEC1322_VBAT_RAM(HIBDATA_INDEX_SCRATCHPAD);
+}
+
void system_hibernate(uint32_t seconds, uint32_t microseconds)
{
/* TODO(crosbug.com/p/24107): Implement this */