diff options
Diffstat (limited to 'chip/stm32')
-rw-r--r-- | chip/stm32/system.c | 43 |
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) { |