From 0e0bc8bbbdfd29e6e6e4efc43b60e0ac42e1dd77 Mon Sep 17 00:00:00 2001 From: "Vic (Chun-Ju) Yang" Date: Thu, 28 Nov 2013 12:07:32 +0800 Subject: [PATCH] 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 Reviewed-on: https://chromium-review.googlesource.com/178276 Reviewed-by: Vincent Palatin --- chip/mec1322/registers.h | 1 + chip/mec1322/system.c | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) 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 */