[coreboot-gerrit] Patch set updated for coreboot: cb0155c baytrail: mrc_cache: check region erased before erasing

Aaron Durbin (adurbin@google.com) gerrit at coreboot.org
Wed May 14 15:57:33 CEST 2014


Aaron Durbin (adurbin at google.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/5043

-gerrit

commit cb0155cd285b009d06e7e6227ee1f81257433b4c
Author: Aaron Durbin <adurbin at chromium.org>
Date:   Mon Jan 13 11:34:51 2014 -0600

    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 at chromium.org>
    Reviewed-on: https://chromium-review.googlesource.com/182153
    Reviewed-by: Duncan Laurie <dlaurie at chromium.org>
---
 src/soc/intel/baytrail/mrc_cache.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/soc/intel/baytrail/mrc_cache.c b/src/soc/intel/baytrail/mrc_cache.c
index 5613761..ae0afe7 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(&region, current_saved);
 
 	if (!mrc_slot_valid(&region, 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;
 	}



More information about the coreboot-gerrit mailing list