summaryrefslogtreecommitdiff
path: root/chip/stm32
diff options
context:
space:
mode:
Diffstat (limited to 'chip/stm32')
-rw-r--r--chip/stm32/system.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/chip/stm32/system.c b/chip/stm32/system.c
index f5f7dff73d..df10f6810a 100644
--- a/chip/stm32/system.c
+++ b/chip/stm32/system.c
@@ -19,6 +19,14 @@
enum bkpdata_index {
BKPDATA_INDEX_SCRATCHPAD, /* General-purpose scratchpad */
BKPDATA_INDEX_SAVED_RESET_FLAGS,/* Saved reset flags */
+ BKPDATA_INDEX_VBNV_CONTEXT0,
+ BKPDATA_INDEX_VBNV_CONTEXT1,
+ BKPDATA_INDEX_VBNV_CONTEXT2,
+ BKPDATA_INDEX_VBNV_CONTEXT3,
+ BKPDATA_INDEX_VBNV_CONTEXT4,
+ BKPDATA_INDEX_VBNV_CONTEXT5,
+ BKPDATA_INDEX_VBNV_CONTEXT6,
+ BKPDATA_INDEX_VBNV_CONTEXT7,
};
@@ -217,6 +225,41 @@ const char *system_get_chip_revision(void)
}
+int system_get_vbnvcontext(uint8_t *block)
+{
+ enum bkpdata_index i;
+ uint16_t value;
+
+ for (i = BKPDATA_INDEX_VBNV_CONTEXT0;
+ i <= BKPDATA_INDEX_VBNV_CONTEXT7; i++) {
+ value = bkpdata_read(i);
+ *block++ = (uint8_t)(value & 0xff);
+ *block++ = (uint8_t)(value >> 8);
+ }
+
+ return EC_SUCCESS;
+}
+
+
+int system_set_vbnvcontext(const uint8_t *block)
+{
+ enum bkpdata_index i;
+ uint16_t value;
+ int err;
+
+ for (i = BKPDATA_INDEX_VBNV_CONTEXT0;
+ i <= BKPDATA_INDEX_VBNV_CONTEXT7; i++) {
+ value = *block++;
+ value |= ((uint16_t)*block++) << 8;
+ err = bkpdata_write(i, value);
+ if (err)
+ return err;
+ }
+
+ return EC_SUCCESS;
+}
+
+
/* TODO: crosbug.com/p/12036 */
int system_set_fake_wp(int val)
{