ryu: Add rev-id to platform version string

BUG=chrome-os-partner:34261
BRANCH=None
TEST=mosys platform version on p1 prints 'google,ryu-rev1'

Signed-off-by: Furquan Shaikh <furquan@google.com>
Reviewed-on: https://chromium-review.googlesource.com/233583
Trybot-Ready: Furquan Shaikh <furquan@chromium.org>
Tested-by: Furquan Shaikh <furquan@chromium.org>
Reviewed-by: David Hendricks <dhendrix@chromium.org>
Commit-Queue: Furquan Shaikh <furquan@chromium.org>

(cherry picked from commit 9e7e0d245b62682501ca8692938db6dcc3578542)

Change-Id: I09fc747dbee9af4020acf803654b8f52dccbb6d1
Reviewed-on: https://chromium-review.googlesource.com/252310
Reviewed-by: Furquan Shaikh <furquan@chromium.org>
Commit-Queue: Vic Yang <victoryang@chromium.org>
Tested-by: Vic Yang <victoryang@chromium.org>
diff --git a/platform/google/rush/rush.c b/platform/google/rush/rush.c
index 23e3576..c75bd30 100644
--- a/platform/google/rush/rush.c
+++ b/platform/google/rush/rush.c
@@ -32,6 +32,7 @@
 #include <stdlib.h>
 #include <unistd.h>
 
+#include "mosys/alloc.h"
 #include "mosys/command_list.h"
 #include "mosys/platform.h"
 #include "mosys/intf_list.h"
@@ -47,11 +48,22 @@
 
 #include "rush.h"
 
+struct board_id_gpio {
+	int num;
+	gpio_t *gpios;
+};
+
 const char *rush_ryu_id_list[] = {
 	"google,ryu",
 	NULL,
 };
 
+static gpio_t rush_ryu_boardid_gpio[] = {GPIO(Q3), GPIO(Q4)};
+
+static struct board_id_gpio rush_ryu_gpio_list[] = {
+	{ARRAY_SIZE(rush_ryu_boardid_gpio), rush_ryu_boardid_gpio},
+};
+
 struct platform_cmd *rush_sub[] = {
 	&cmd_ec,
 	&cmd_eeprom,
@@ -62,6 +74,23 @@
 	NULL
 };
 
+static void update_platform_version(struct platform_intf *intf,
+				    struct board_id_gpio *gpio,
+				    const char *str_id)
+{
+	char *str;
+	int value;
+
+	str = mosys_malloc(strlen(str_id) + strlen("-revXX") + 1);
+	if (str == NULL)
+		return;
+
+	value = gpio_get_in_tristate_values(intf, gpio->gpios, gpio->num);
+
+	sprintf(str, "%s-rev%d", str_id, value);
+	intf->version_id = str;
+}
+
 int rush_probe(struct platform_intf *intf)
 {
 	int index;
@@ -71,6 +100,14 @@
 	if (index >= 0) {
 		lprintf(LOG_DEBUG, "Found platform \"%s\" via FDT compatible "
 				"node.\n", rush_ryu_id_list[index]);
+
+		/* This condition should never be true */
+		if (index >= ARRAY_SIZE(rush_ryu_gpio_list))
+			return 0;
+
+		update_platform_version(intf, &rush_ryu_gpio_list[index],
+					rush_ryu_id_list[index]);
+
 		return 1;
 	}