From 931e59074556988dfc4a2f32fe7fa7874a4e064e Mon Sep 17 00:00:00 2001 From: Aaron Durbin Date: Mon, 13 Jan 2014 11:34:51 -0600 Subject: baytrail: mrc_cache: check region erased before erasing On a firmware update the MRC cache is destroyed. On the subsequent boot the MRC region was attempted to be erased even if it was already erased. This led to spi part taking longer than it should have for an unnecessary erase operation. Therefore, check that the region is erased before issuing the erease command. BUG=chrome-os-partner:24916 BRANCH=baytrail TEST=Booted after chromeos-firmeareupdate. Noted no error messages in this path. Change-Id: I6fadeb6bc5fc178abb0a7e3f0898855e481add2e Signed-off-by: Aaron Durbin Reviewed-on: https://chromium-review.googlesource.com/182153 Reviewed-by: Duncan Laurie Reviewed-on: http://review.coreboot.org/5043 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi --- src/soc/intel/baytrail/mrc_cache.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src/soc/intel') diff --git a/src/soc/intel/baytrail/mrc_cache.c b/src/soc/intel/baytrail/mrc_cache.c index 5613761ce5..ae0afe7f7f 100644 --- a/src/soc/intel/baytrail/mrc_cache.c +++ b/src/soc/intel/baytrail/mrc_cache.c @@ -275,9 +275,12 @@ static void update_mrc_cache(void *unused) next_slot = mrc_cache_next_slot(®ion, current_saved); if (!mrc_slot_valid(®ion, next_slot, current_boot)) { - if (nvm_erase(region.base, region.size) < 0) { - printk(BIOS_DEBUG, "Could not erase MRC region.\n"); - return; + printk(BIOS_DEBUG, "Slot @ %p is invalid.\n", next_slot); + if (!nvm_is_erased(region.base, region.size)) { + if (nvm_erase(region.base, region.size) < 0) { + printk(BIOS_DEBUG, "Failure erasing region.\n"); + return; + } } next_slot = region.base; } -- cgit v1.2.3