From 985e90e26320c73949d5dfbf218773f2cb744598 Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Thu, 6 Sep 2012 14:57:54 -0700 Subject: [PATCH] Remove power button work-around for ARM On x86 U-Boot cannot see the power button, which means that the EC must deal with it, and may power off the unit at any time. To get around this, we write the vbcontext every time we change it. Since this isn't a problem on ARM, and we want to avoid spurious writes (due to delay and disk wear), make this code execute only on x86 machines. BUG=chrome-os-partner:13717 BUG=chrome-os-partner:7689 BRANCH=snow,link TEST=manual On snow, see that the EC no longer gets MKBP messages to write the nv context. On link, manually add a print to U-Boot's nvstorage_write_disk() function and see that changing language in recovery still causes a write. Change-Id: I62508739c9fc3aca46fba58b196a8af45269af2a Reviewed-on: https://gerrit.chromium.org/gerrit/32464 Commit-Ready: Tom Wai-Hong Tam Reviewed-by: Tom Wai-Hong Tam Tested-by: Tom Wai-Hong Tam --- firmware/Makefile | 6 ++++++ firmware/lib/vboot_display.c | 8 +++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/firmware/Makefile b/firmware/Makefile index 6dcf0bb3c0..0e8db324b7 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -42,6 +42,12 @@ CFLAGS += -DTPM_BLOCKING_CONTINUESELFTEST ifeq ($(FIRMWARE_ARCH),i386) CFLAGS += -DUNROLL_LOOPS + +# Workaround for coreboot on x86, which will power off asynchronously +# without giving us a chance to react. This is not an example of the Right +# Way to do things. See chrome-os-partner:7689, and the commit message +# that made this change. +CFLAGS += -DRANDOM_POWER_OFF endif INCLUDES = \ diff --git a/firmware/lib/vboot_display.c b/firmware/lib/vboot_display.c index b15b5183bd..5c45ae1e52 100644 --- a/firmware/lib/vboot_display.c +++ b/firmware/lib/vboot_display.c @@ -632,14 +632,12 @@ VbError_t VbCheckDisplayKey(VbCommonParams* cparams, uint32_t key, loc = (loc > 0 ? loc - 1 : count - 1); VBDEBUG(("VbCheckDisplayKey() - change localization to %d\n", (int)loc)); VbNvSet(vncptr, VBNV_LOCALIZATION_INDEX, loc); - /* Workaround for coreboot on x86, which will power off asynchronously - * without giving us a chance to react. This is not an example of the Right - * Way to do things. See chrome-os-partner:7689, and the commit message - * that made this change. - */ + +#ifdef RANDOM_POWER_OFF VbNvTeardown(vncptr); /* really only computes checksum */ if (vncptr->raw_changed) VbExNvStorageWrite(vncptr->raw); +#endif /* Force redraw of current screen */ return VbDisplayScreen(cparams, disp_current_screen, 1, vncptr);