aboutsummaryrefslogtreecommitdiff
path: root/src/soc/intel/baytrail/mrc_cache.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/soc/intel/baytrail/mrc_cache.c')
-rw-r--r--src/soc/intel/baytrail/mrc_cache.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/soc/intel/baytrail/mrc_cache.c b/src/soc/intel/baytrail/mrc_cache.c
index ae0afe7f7f..f12f3ef0ea 100644
--- a/src/soc/intel/baytrail/mrc_cache.c
+++ b/src/soc/intel/baytrail/mrc_cache.c
@@ -174,8 +174,8 @@ int mrc_cache_stash_data(void *data, size_t size)
return -1;
}
- /* Clear alignment padding bytes. */
- memset(&cache->data[size], 0, cbmem_size - size);
+ /* Clear alignment padding bytes at end of data. */
+ memset(&cache->data[size], 0, cbmem_size - size - sizeof(*cache));
printk(BIOS_DEBUG, "Relocate MRC DATA from %p to %p (%zu bytes)\n",
data, cache, size);
@@ -206,7 +206,7 @@ static int mrc_slot_valid(const struct mrc_data_region *region,
size = to_save->size + sizeof(*to_save);
slot_end = slot_begin + size;
- if (slot_begin < region_begin || slot_begin > region_end)
+ if (slot_begin < region_begin || slot_begin >= region_end)
return 0;
if (size > region->size)
@@ -285,8 +285,11 @@ static void update_mrc_cache(void *unused)
next_slot = region.base;
}
- nvm_write((void *)next_slot, current_boot,
- current_boot->size + sizeof(*current_boot));
+ if (nvm_write((void *)next_slot, current_boot,
+ current_boot->size + sizeof(*current_boot))) {
+ printk(BIOS_DEBUG, "Failure writing MRC cache to %p.\n",
+ next_slot);
+ }
}
BOOT_STATE_INIT_ENTRIES(mrc_cache_update) = {