diff options
-rw-r--r-- | chip/mec1322/registers.h | 1 | ||||
-rw-r--r-- | chip/mec1322/system.c | 16 |
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 */ |