diff options
author | Randall Spangler <rspangler@chromium.org> | 2012-10-03 12:16:06 -0700 |
---|---|---|
committer | Gerrit <chrome-bot@google.com> | 2012-10-04 09:31:00 -0700 |
commit | 09a8447862c7d111d6abdd7891508df1a8f1cc5b (patch) | |
tree | 7a918c9fa140d1c7926d5f30da3186ed5d7b4304 /host | |
parent | 788dbc34b06a958285db0ea6a407aecaaed64045 (diff) | |
download | vboot-09a8447862c7d111d6abdd7891508df1a8f1cc5b.tar.gz |
crossystem devsw_cur returns devsw_boot if virtual dev switch
devsw_cur is really a meaningless concept on systems with virtual dev
switches; it exists primarily to support factory test of physical
developer switches. However, some plugins use this instead of the
preferred devsw_boot, and it's easier to modify crossystem than the
plugins at this point in time.
BUG=chrome-os-partner:12928
BRANCH=none (affects all current products, but is an OS-level change, not FW)
TEST=manual
- On link, 'crossystem devsw_cur devsw_boot' with dev switch on -> '1 1'
- On link, 'crossystem devsw_cur devsw_boot' with dev switch off -> '0 0'
- On lumpy or earlier, 'crossystem devsw_cur' should return current dev
switch position; check this by toggling the physical switch without
rebooting and see that the reported value follows the switch value.
Change-Id: Ie7416e5cb03c133572c32af677b55ed18884dfb8
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/34531
Reviewed-by: Bill Richardson <wfrichar@chromium.org>
Reviewed-by: Hung-Te Lin <hungte@chromium.org>
Diffstat (limited to 'host')
-rw-r--r-- | host/arch/arm/lib/crossystem_arch.c | 14 | ||||
-rw-r--r-- | host/arch/x86/lib/crossystem_arch.c | 7 |
2 files changed, 16 insertions, 5 deletions
diff --git a/host/arch/arm/lib/crossystem_arch.c b/host/arch/arm/lib/crossystem_arch.c index f0f7ed0a..2534221e 100644 --- a/host/arch/arm/lib/crossystem_arch.c +++ b/host/arch/arm/lib/crossystem_arch.c @@ -19,6 +19,7 @@ #include "vboot_common.h" #include "vboot_nvstorage.h" #include "host_common.h" +#include "crossystem.h" #include "crossystem_arch.h" #define MOSYS_PATH "/usr/sbin/mosys" @@ -503,13 +504,18 @@ VbSharedDataHeader *VbSharedDataRead(void) { } int VbGetArchPropertyInt(const char* name) { - if (!strcasecmp(name, "fmap_base")) + if (!strcasecmp(name, "fmap_base")) { return ReadFdtInt("fmap-offset"); - else if (!strcasecmp(name, "devsw_cur")) + } else if (!strcasecmp(name, "devsw_cur")) { + /* Systems with virtual developer switches return at-boot value */ + int flags = VbGetSystemPropertyInt("vdat_flags"); + if ((flags != -1) && (flags & VBSD_HONOR_VIRT_DEV_SWITCH)) + return VbGetSystemPropertyInt("devsw_boot"); + return VbGetVarGpio("developer-switch"); - else if (!strcasecmp(name, "recoverysw_cur")) + } else if (!strcasecmp(name, "recoverysw_cur")) { return VbGetVarGpio("recovery-switch"); - else if (!strcasecmp(name, "wpsw_cur")) { + } else if (!strcasecmp(name, "wpsw_cur")) { int value; /* Try finding the GPIO through the chromeos_arm platform device first. */ value = VbGetPlatformGpioStatus("write-protect"); diff --git a/host/arch/x86/lib/crossystem_arch.c b/host/arch/x86/lib/crossystem_arch.c index 448a8ffa..23a3bcec 100644 --- a/host/arch/x86/lib/crossystem_arch.c +++ b/host/arch/x86/lib/crossystem_arch.c @@ -595,7 +595,12 @@ int VbGetArchPropertyInt(const char* name) { /* Switch positions */ if (!strcasecmp(name,"devsw_cur")) { - value = ReadGpio(GPIO_SIGNAL_TYPE_DEV); + /* Systems with virtual developer switches return at-boot value */ + int flags = VbGetSystemPropertyInt("vdat_flags"); + if ((flags != -1) && (flags & VBSD_HONOR_VIRT_DEV_SWITCH)) + value = VbGetSystemPropertyInt("devsw_boot"); + else + value = ReadGpio(GPIO_SIGNAL_TYPE_DEV); } else if (!strcasecmp(name,"recoverysw_cur")) { value = ReadGpio(GPIO_SIGNAL_TYPE_RECOVERY); } else if (!strcasecmp(name,"wpsw_cur")) { |