From 7def3a9dfb56da418aa5dca0cf76e4448b9ba27e Mon Sep 17 00:00:00 2001 From: Che-Liang Chiou Date: Thu, 12 Jul 2012 12:02:44 +0800 Subject: CHERRY-PICK: crossystem: Return error when trying to read GPIO port zero For the record, zero is a valid GPIO port number. Unfortunately firmware uses port zero to denote that a GPIO port is not exist. So crossystem should not attempt to read GPIO port zero, but return error instead. Signed-off-by: Che-Liang Chiou BUG=chrome-os-partner:11296 TEST=On Snow, run crossystem and see devsw_cur and recoverysw_cur are "(error)" Change-Id: I36f201dcd098ff787707b5a5c7c741859c1ebd82 Original-Change-Id: I70b15824f613df1e46bf152515ad4e9362c9f066 Reviewed-on: https://gerrit.chromium.org/gerrit/27269 Reviewed-by: Bernie Thompson Reviewed-by: Che-Liang Chiou Tested-by: Katie Roberts-Hoffman --- host/arch/arm/lib/crossystem_arch.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/host/arch/arm/lib/crossystem_arch.c b/host/arch/arm/lib/crossystem_arch.c index d1030c89..1e5ecbad 100644 --- a/host/arch/arm/lib/crossystem_arch.c +++ b/host/arch/arm/lib/crossystem_arch.c @@ -238,7 +238,16 @@ static int VbGetVarGpio(const char* name) { gpio_num = ntohl(prop[1]); polarity = ntohl(prop[2]); - ret = VbGetGpioStatus(gpio_num) ^ polarity ^ 1; + /* + * TODO(chrome-os-partner:11296): Use gpio_num == 0 to denote non-exist + * GPIO for now, at the risk that one day we might actually want to read + * from a GPIO port 0. We should figure out how to represent "non-exist" + * properly. + */ + if (gpio_num) + ret = VbGetGpioStatus(gpio_num) ^ polarity ^ 1; + else + ret = -1; out: if (pp) free(pp); -- cgit v1.2.1