From c80ff8437d61f0867eccc520cc68d19fe181af14 Mon Sep 17 00:00:00 2001 From: Karthikeyan Ramasubramanian Date: Mon, 17 Sep 2018 16:19:34 -0600 Subject: ec/google/chromeec: Update google_chromeec_get_board_version prototype The helper function to get the board version from EC returns 0 on failure. But 0 is also a valid board version. Update the helper function to return -1 on failure and update the use-cases. BUG=b:114001972,b:114677884,b:114677887 Change-Id: I93e8dbce2ff26e76504b132055985f53cbf07d31 Signed-off-by: Karthikeyan Ramasubramanian Tested-by: Karthikeyan Ramasubramanian Reviewed-on: https://review.coreboot.org/28576 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin Reviewed-by: Jett Rink --- src/ec/google/chromeec/ec.c | 9 +++++---- src/ec/google/chromeec/ec.h | 11 ++++++++++- src/ec/google/chromeec/ec_boardid.c | 8 +++++--- src/include/boardid.h | 9 +++++++++ .../google/auron/variants/samus/board_version.c | 5 ++++- .../auron/variants/samus/include/variant/board_version.h | 3 +++ src/mainboard/google/link/mainboard.c | 5 ++++- src/mainboard/google/slippy/variants/peppy/romstage.c | 4 +++- src/mainboard/google/zoombini/boardid.c | 4 ++-- .../google/zoombini/variants/baseboard/boardid.c | 10 ++++++++-- .../variants/baseboard/include/baseboard/variants.h | 2 +- src/mainboard/intel/glkrvp/variants/baseboard/boardid.c | 16 ++++++++++++---- .../variants/baseboard/include/baseboard/variants.h | 8 ++++++-- 13 files changed, 72 insertions(+), 22 deletions(-) diff --git a/src/ec/google/chromeec/ec.c b/src/ec/google/chromeec/ec.c index 09550d57b3..90fcc3d96c 100644 --- a/src/ec/google/chromeec/ec.c +++ b/src/ec/google/chromeec/ec.c @@ -637,7 +637,7 @@ int google_chromeec_cbi_get_dram_part_num(char *buf, size_t bufsize) } #ifndef __SMM__ -u16 google_chromeec_get_board_version(void) +int google_chromeec_get_board_version(uint32_t *version) { struct chromeec_command cmd; struct ec_response_board_version board_v; @@ -649,10 +649,11 @@ u16 google_chromeec_get_board_version(void) cmd.cmd_data_out = &board_v; cmd.cmd_dev_index = 0; - if (google_chromeec_command(&cmd) != 0) - return 0; + if (google_chromeec_command(&cmd)) + return -1; - return board_v.board_version; + *version = board_v.board_version; + return 0; } u32 google_chromeec_get_sku_id(void) diff --git a/src/ec/google/chromeec/ec.h b/src/ec/google/chromeec/ec.h index 2c6f1d6b8c..419870c35c 100644 --- a/src/ec/google/chromeec/ec.h +++ b/src/ec/google/chromeec/ec.h @@ -46,7 +46,16 @@ uint64_t google_chromeec_get_device_current_events(void); int google_chromeec_check_feature(int feature); uint8_t google_chromeec_calc_checksum(const uint8_t *data, int size); -u16 google_chromeec_get_board_version(void); + +/** + * google_chromeec_get_board_version() - Get the board version + * @version: Out parameter to retrieve the board Version + * + * Return: 0 on success or -1 on failure/error. + * + * This function is used to get the board version information from EC. + */ +int google_chromeec_get_board_version(uint32_t *version); u32 google_chromeec_get_sku_id(void); int google_chromeec_set_sku_id(u32 skuid); uint64_t google_chromeec_get_events_b(void); diff --git a/src/ec/google/chromeec/ec_boardid.c b/src/ec/google/chromeec/ec_boardid.c index 9ec058d1ae..01e3c90e3a 100644 --- a/src/ec/google/chromeec/ec_boardid.c +++ b/src/ec/google/chromeec/ec_boardid.c @@ -18,10 +18,12 @@ uint32_t board_id(void) { - MAYBE_STATIC int id = -1; + MAYBE_STATIC uint32_t id = BOARD_ID_INIT; - if (id < 0) - id = google_chromeec_get_board_version(); + if (id == BOARD_ID_INIT) { + if (google_chromeec_get_board_version(&id)) + id = BOARD_ID_UNKNOWN; + } return id; } diff --git a/src/include/boardid.h b/src/include/boardid.h index e1bce0388a..a959b85367 100644 --- a/src/include/boardid.h +++ b/src/include/boardid.h @@ -20,6 +20,15 @@ #define UNDEFINED_STRAPPING_ID (~0) +#define BOARD_ID_UNKNOWN ~((uint32_t)0) /* unsigned equivalent to -1 */ +#define BOARD_ID_INIT ~((uint32_t)1) /* unsigned equivalent to -2 */ +/** + * board_id() - Get the board version + * + * Return: board version on success, BOARD_ID_UNKNOWN on failure/error. + * + * This function is used to get the mainboard version. + */ uint32_t board_id(void); /* differentiates revisions */ uint32_t ram_code(void); /* identifies installed DRAM modules */ uint32_t sku_id(void); /* differentiates other optional components */ diff --git a/src/mainboard/google/auron/variants/samus/board_version.c b/src/mainboard/google/auron/variants/samus/board_version.c index c45b84e9e2..dfb7c248a1 100644 --- a/src/mainboard/google/auron/variants/samus/board_version.c +++ b/src/mainboard/google/auron/variants/samus/board_version.c @@ -18,7 +18,10 @@ const char *samus_board_version(void) { - switch (google_chromeec_get_board_version()) { + uint32_t board_version = SAMUS_EC_BOARD_VERSION_UNKNOWN; + + google_chromeec_get_board_version(&board_version); + switch (board_version) { case SAMUS_EC_BOARD_VERSION_EVT1: return "EVT1"; case SAMUS_EC_BOARD_VERSION_EVT2: diff --git a/src/mainboard/google/auron/variants/samus/include/variant/board_version.h b/src/mainboard/google/auron/variants/samus/include/variant/board_version.h index f5371a19fa..55c8360b0a 100644 --- a/src/mainboard/google/auron/variants/samus/include/variant/board_version.h +++ b/src/mainboard/google/auron/variants/samus/include/variant/board_version.h @@ -16,10 +16,13 @@ #ifndef SAMUS_BOARD_VERSION_H #define SAMUS_BOARD_VERSION_H +#include + #define SAMUS_EC_BOARD_VERSION_EVT1 3 #define SAMUS_EC_BOARD_VERSION_EVT2 4 #define SAMUS_EC_BOARD_VERSION_EVT3 5 #define SAMUS_EC_BOARD_VERSION_EVT4 0 +#define SAMUS_EC_BOARD_VERSION_UNKNOWN BOARD_ID_UNKNOWN const char *samus_board_version(void); diff --git a/src/mainboard/google/link/mainboard.c b/src/mainboard/google/link/mainboard.c index 91b7e596b2..367e288c26 100644 --- a/src/mainboard/google/link/mainboard.c +++ b/src/mainboard/google/link/mainboard.c @@ -141,10 +141,13 @@ static int int15_handler(void) static void mainboard_init(struct device *dev) { + uint32_t board_version = 0; + /* Initialize the Embedded Controller */ link_ec_init(); - if (google_chromeec_get_board_version() == 0) { + google_chromeec_get_board_version(&board_version); + if (board_version == 0) { /* If running on proto1 - enable reversion of gpio11. */ u32 gpio_inv; u16 gpio_base = pci_read_config16 diff --git a/src/mainboard/google/slippy/variants/peppy/romstage.c b/src/mainboard/google/slippy/variants/peppy/romstage.c index bf21cbc6fc..e0162b311e 100644 --- a/src/mainboard/google/slippy/variants/peppy/romstage.c +++ b/src/mainboard/google/slippy/variants/peppy/romstage.c @@ -78,6 +78,7 @@ static void copy_spd(struct pei_data *peid) char *spd_file; size_t spd_file_len; size_t spd_len = sizeof(peid->spd_data[0]); + uint32_t board_version = PEPPY_BOARD_VERSION_PROTO; printk(BIOS_DEBUG, "SPD index %d\n", spd_index); spd_file = cbfs_boot_map_with_leak("spd.bin", CBFS_TYPE_SPD, @@ -95,7 +96,8 @@ static void copy_spd(struct pei_data *peid) memcpy(peid->spd_data[0], spd_file + (spd_index * spd_len), spd_len); - switch (google_chromeec_get_board_version()) { + google_chromeec_get_board_version(&board_version); + switch (board_version) { case PEPPY_BOARD_VERSION_PROTO: /* Index 0 is 2GB config with CH0 only. */ if (spd_index == 0) diff --git a/src/mainboard/google/zoombini/boardid.c b/src/mainboard/google/zoombini/boardid.c index 4b05c52190..4e431766b2 100644 --- a/src/mainboard/google/zoombini/boardid.c +++ b/src/mainboard/google/zoombini/boardid.c @@ -19,9 +19,9 @@ uint32_t board_id(void) { - MAYBE_STATIC int id = -1; + MAYBE_STATIC uint32_t id = BOARD_ID_INIT; - if (id < 0) + if (id == BOARD_ID_INIT) id = variant_board_id(); return id; diff --git a/src/mainboard/google/zoombini/variants/baseboard/boardid.c b/src/mainboard/google/zoombini/variants/baseboard/boardid.c index c8a5cf1073..21c39cf280 100644 --- a/src/mainboard/google/zoombini/variants/baseboard/boardid.c +++ b/src/mainboard/google/zoombini/variants/baseboard/boardid.c @@ -14,10 +14,16 @@ */ #include +#include #include #include -uint8_t __weak variant_board_id(void) +int variant_board_id(void) { - return google_chromeec_get_board_version(); + uint32_t id = BOARD_ID_INIT; + + if (google_chromeec_get_board_version(&id)) + id = BOARD_ID_UNKNOWN; + + return id; } diff --git a/src/mainboard/google/zoombini/variants/baseboard/include/baseboard/variants.h b/src/mainboard/google/zoombini/variants/baseboard/include/baseboard/variants.h index eac0feea6f..e8c7c20601 100644 --- a/src/mainboard/google/zoombini/variants/baseboard/include/baseboard/variants.h +++ b/src/mainboard/google/zoombini/variants/baseboard/include/baseboard/variants.h @@ -23,7 +23,7 @@ #include /* Return the board id for the current variant board. */ -uint8_t variant_board_id(void); +int variant_board_id(void); /* * The next set of functions return the gpio table and fill in the number of diff --git a/src/mainboard/intel/glkrvp/variants/baseboard/boardid.c b/src/mainboard/intel/glkrvp/variants/baseboard/boardid.c index 530c06a993..f6f31bbcd1 100644 --- a/src/mainboard/intel/glkrvp/variants/baseboard/boardid.c +++ b/src/mainboard/intel/glkrvp/variants/baseboard/boardid.c @@ -14,13 +14,21 @@ */ #include +#include #include #include -uint8_t __weak variant_board_id(void) +int variant_board_id(void) { - if (IS_ENABLED(CONFIG_EC_GOOGLE_CHROMEEC)) - return google_chromeec_get_board_version(); - else + MAYBE_STATIC uint32_t id = BOARD_ID_INIT; + + if (IS_ENABLED(CONFIG_EC_GOOGLE_CHROMEEC)) { + if (id == BOARD_ID_INIT) { + if (google_chromeec_get_board_version(&id)) + id = BOARD_ID_UNKNOWN; + } + return id; + } else { return 0; + } } diff --git a/src/mainboard/intel/glkrvp/variants/baseboard/include/baseboard/variants.h b/src/mainboard/intel/glkrvp/variants/baseboard/include/baseboard/variants.h index c278cdee26..cf91a049e9 100644 --- a/src/mainboard/intel/glkrvp/variants/baseboard/include/baseboard/variants.h +++ b/src/mainboard/intel/glkrvp/variants/baseboard/include/baseboard/variants.h @@ -21,8 +21,12 @@ #include #include -/* Return the board id for the current variant board. */ -uint8_t variant_board_id(void); +/** + * variant_board_id() - Get the board id for the current board variant + * + * Return: board id on success, -1 on failure/error. + */ +int variant_board_id(void); /* The next set of functions return the gpio table and fill in the number of * entries for each table. */ -- cgit v1.2.3