diff options
author | Scott Collyer <scollyer@google.com> | 2017-08-22 18:54:40 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2017-08-23 12:19:09 -0700 |
commit | c592ced088d9a252d62081e083dd8659770b7b93 (patch) | |
tree | b8c44611cb9b3cddcdc711e60c7ab955a439cdbc | |
parent | 219a77416993966005067df9be1dd6f16ca8d0ed (diff) | |
download | chrome-ec-c592ced088d9a252d62081e083dd8659770b7b93.tar.gz |
coral: Read SKU ID at initialization time
BUG=b:64705535
BRANCH=none
TEST=Tested two boards with different strapping resistors and verified
that the SKU ID logged in the EC console matches the expected values.
Change-Id: I3534e99856f25dbef810b97a2e4b90c00a65f32e
Signed-off-by: Scott Collyer <scollyer@google.com>
Reviewed-on: https://chromium-review.googlesource.com/627664
Commit-Ready: Scott Collyer <scollyer@chromium.org>
Tested-by: Patrick Georgi <pgeorgi@chromium.org>
Reviewed-by: Patrick Georgi <pgeorgi@chromium.org>
-rw-r--r-- | board/coral/board.c | 37 |
1 files changed, 30 insertions, 7 deletions
diff --git a/board/coral/board.c b/board/coral/board.c index 4bb5144465..319252040d 100644 --- a/board/coral/board.c +++ b/board/coral/board.c @@ -63,6 +63,8 @@ #define USB_PD_PORT_ANX74XX 0 #define USB_PD_PORT_PS8751 1 +static int sku_id; + static void tcpc_alert_event(enum gpio_signal signal) { if ((signal == GPIO_USB_C0_PD_INT_ODL) && @@ -545,6 +547,9 @@ static void board_init(void) /* Enable Gyro interrupts */ gpio_enable_interrupt(GPIO_BASE_SIXAXIS_INT_L); + + /* Need to read SKU ID at least once each boot */ + sku_id = BOARD_VERSION_UNKNOWN; } /* PP3300 needs to be enabled before TCPC init hooks */ DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_FIRST); @@ -1076,6 +1081,23 @@ int board_get_version(void) return version; } +static void board_get_sku_id(void) +{ + int sku_id_lower; + int sku_id_higher; + + if (sku_id == BOARD_VERSION_UNKNOWN) { + sku_id_lower = board_read_version(ADC_BOARD_SKU_0); + sku_id_higher = board_read_version(ADC_BOARD_SKU_1); + if ((sku_id_lower != BOARD_VERSION_UNKNOWN) && + (sku_id_higher != BOARD_VERSION_UNKNOWN)) + sku_id = (sku_id_higher << 4) | sku_id_lower; + CPRINTS("SKU ID: %d", sku_id); + } +} +/* This can't run until after the ADC module has been initialized */ +DECLARE_HOOK(HOOK_INIT, board_get_sku_id, HOOK_PRIO_INIT_ADC + 1); + static int command_board_id(int argc, char **argv) { enum adc_channel chan; @@ -1089,7 +1111,11 @@ static int command_board_id(int argc, char **argv) chan = ADC_BOARD_SKU_0; else if (!strcasecmp(argv[1], "sku1")) chan = ADC_BOARD_SKU_1; - else + else if (!strcasecmp(argv[1], "sku")) { + system_get_sku_id(); + ccprintf("SKU ID: %d\n", sku_id); + return EC_SUCCESS; + } else return EC_ERROR_PARAM1; ccprintf("Board id|sku: chan %d = %d\n", chan, @@ -1103,13 +1129,10 @@ DECLARE_CONSOLE_COMMAND(board_id, command_board_id, uint32_t system_get_sku_id(void) { - uint8_t sku_id_lower = board_read_version(ADC_BOARD_SKU_0); - uint8_t sku_id_higher = board_read_version(ADC_BOARD_SKU_1); - - assert(sku_id_lower < 16); - assert(sku_id_higher < 16); - return (uint32_t)((sku_id_higher << 4) | sku_id_lower); + if (sku_id == BOARD_VERSION_UNKNOWN) + board_get_sku_id(); + return (uint32_t)sku_id; } /* Keyboard scan setting */ |