From b6850ddbffa216ae7306d612fafb460ef1608d6f Mon Sep 17 00:00:00 2001 From: Kevin Chiu Date: Thu, 14 Sep 2017 11:05:57 +0800 Subject: [PATCH] google/snappy: Override SKU ID by VPD Since snappy PCB may have over 9 SKU and current GPIO board ID GP16/GP17 is insufficient to use. Using VPD to control could prevent H/W change. BUG=b:65339688 BRANCH=reef TEST=emerge-snappy coreboot Change-Id: I55ab741354797e022dd945da9c8499ee5e041316 Signed-off-by: Kevin Chiu Signed-off-by: Aaron Durbin Reviewed-on: https://review.coreboot.org/21533 Tested-by: build bot (Jenkins) Reviewed-by: Furquan Shaikh --- .../google/reef/variants/snappy/mainboard.c | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/mainboard/google/reef/variants/snappy/mainboard.c b/src/mainboard/google/reef/variants/snappy/mainboard.c index a04f61a72f..2767df245e 100644 --- a/src/mainboard/google/reef/variants/snappy/mainboard.c +++ b/src/mainboard/google/reef/variants/snappy/mainboard.c @@ -13,10 +13,53 @@ * GNU General Public License for more details. */ +#include #include #include +#include void variant_board_ec_set_skuid(void) { google_chromeec_set_sku_id(variant_board_sku()); } + +/* + * override SKU ID by VPD definition + */ +uint8_t variant_board_sku(void) +{ + static int board_sku_num = -1; + int vpd_sku_num; + char vpd_skuid[] = "skuid"; + char vpd_buffer[4]; + int vpd_len; + int i; + + if (board_sku_num != -1) + return board_sku_num; + + board_sku_num = sku_strapping_value(); + + if (!IS_ENABLED(CONFIG_CHROMEOS)) + return board_sku_num; + + if (!cros_vpd_gets(vpd_skuid, vpd_buffer, ARRAY_SIZE(vpd_buffer))) + return board_sku_num; + + vpd_len = strlen(vpd_buffer); + + vpd_sku_num = 0; + for (i = 0; i < vpd_len; i++) { + char ch = vpd_buffer[i]; + if ((ch < '0') || (ch > '9')) { + vpd_sku_num = -1; + break; + } else + vpd_sku_num = vpd_sku_num * 10 + (ch - '0'); + } + + if (vpd_sku_num != -1) + board_sku_num = vpd_sku_num; + + return board_sku_num; +}