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 <clchiou@chromium.org>

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 <bhthompson@chromium.org>
Reviewed-by: Che-Liang Chiou <clchiou@chromium.org>
Tested-by: Katie Roberts-Hoffman <katierh@chromium.org>
diff --git a/host/arch/arm/lib/crossystem_arch.c b/host/arch/arm/lib/crossystem_arch.c
index d1030c8..1e5ecba 100644
--- a/host/arch/arm/lib/crossystem_arch.c
+++ b/host/arch/arm/lib/crossystem_arch.c
@@ -238,7 +238,16 @@
   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);