summaryrefslogtreecommitdiff
path: root/src/mainboard
diff options
context:
space:
mode:
Diffstat (limited to 'src/mainboard')
-rw-r--r--src/mainboard/google/rush_ryu/boardid.c61
-rw-r--r--src/mainboard/google/rush_ryu/gpio.h15
2 files changed, 72 insertions, 4 deletions
diff --git a/src/mainboard/google/rush_ryu/boardid.c b/src/mainboard/google/rush_ryu/boardid.c
index 42a51bd0cf..1aa7c16831 100644
--- a/src/mainboard/google/rush_ryu/boardid.c
+++ b/src/mainboard/google/rush_ryu/boardid.c
@@ -22,17 +22,72 @@
#include <stdlib.h>
#include <boardid.h>
+#include "gpio.h"
+
+/*
+ * +------------------+---------+
+ * | BD_ID_STRAP[1:0] | PHASE |
+ * +------------------+---------+
+ * | 00 | PROTO0 |
+ * +------------------+---------+
+ * | 01 | PROTO1 |
+ * +------------------+---------+
+ * | 0Z | EVT |
+ * +------------------+---------+
+ * | 10 | DVT |
+ * +------------------+---------+
+ * | 11 | PVT |
+ * +------------------+---------+
+ * | 1Z | MP |
+ * +------------------+---------+
+ * | Z0 | |
+ * +------------------+---------+
+ * | Z1 | |
+ * +------------------+---------+
+ * | ZZ | |
+ * +------------------+---------+
+ */
+struct id_to_str {
+ const char *str;
+ int tri_state_value;
+ int normalized_id;
+};
+
+static const struct id_to_str bdid_map[] = {
+ { "PROTO 0", 0x00, BOARD_ID_PROTO_0 },
+ { "PROTO 1", 0x01, BOARD_ID_PROTO_1 },
+ { "EVT", 0x02, BOARD_ID_EVT },
+ { "DVT", 0x04, BOARD_ID_DVT },
+ { "PVT", 0x05, BOARD_ID_PVT },
+ { "MP", 0x06, BOARD_ID_MP },
+ { "Z0", 0x08, -1 },
+ { "Z1", 0x09, -1 },
+ { "ZZ", 0x0a, -1 },
+};
uint8_t board_id(void)
{
static int id = -1;
if (id < 0) {
- gpio_t gpio[] = {GPIO(Q3), GPIO(Q4)};
+ const char *idstr = "Unknown";
+ int i;
+ int tristate_id;
+ gpio_t gpio[] = { BD_ID0, BD_ID1 };
+
+ tristate_id = gpio_get_in_tristate_values(gpio,
+ ARRAY_SIZE(gpio), 0);
- id = gpio_get_in_tristate_values(gpio, ARRAY_SIZE(gpio), 0);
+ for (i = 0; i < ARRAY_SIZE(bdid_map); i++) {
+ if (tristate_id != bdid_map[i].tri_state_value)
+ continue;
+ idstr = bdid_map[i].str;
+ id = bdid_map[i].normalized_id;
+ break;
+ }
- printk(BIOS_SPEW, "Board TRISTATE ID: %#x.\n", id);
+ printk(BIOS_SPEW, "Board ID: '%s' %d (%#x)\n", idstr, id,
+ tristate_id);
}
return id;
}
diff --git a/src/mainboard/google/rush_ryu/gpio.h b/src/mainboard/google/rush_ryu/gpio.h
index 532b92c85f..9b51a58116 100644
--- a/src/mainboard/google/rush_ryu/gpio.h
+++ b/src/mainboard/google/rush_ryu/gpio.h
@@ -22,8 +22,21 @@
#include <soc/nvidia/tegra132/gpio.h>
-/* LTE modem related GPIOs */
+/* Board ID definitions. */
enum {
+ BOARD_ID_PROTO_0 = 0,
+ BOARD_ID_PROTO_1 = 1,
+ BOARD_ID_EVT = 2,
+ BOARD_ID_DVT = 3,
+ BOARD_ID_PVT = 4,
+ BOARD_ID_MP = 5,
+};
+
+enum {
+ /* Board ID related GPIOS. */
+ BD_ID0 = GPIO(Q3),
+ BD_ID1 = GPIO(Q4),
+ /* LTE modem related GPIOs */
MODEM_RESET = GPIO(S3),
MODEM_PWR_ON = GPIO(S4),
MDM_DET = GPIO(V1),