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 <adurbin@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/182153 Reviewed-by: Duncan Laurie <dlaurie@chromium.org> Reviewed-on: http://review.coreboot.org/5043 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <patrick@georgi-clan.de>
This commit is contained in:
parent
58d6e18f0c
commit
931e590745
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue