Karthik Ramasubramanian has uploaded this change for review. ( https://review.coreboot.org/28576
Change subject: ec/google/chromeec: Update google_chromeec_get_board_version prototype ......................................................................
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 kramasub@google.com Tested-by: Karthikeyan Ramasubramanian kramasub@google.com --- M src/ec/google/chromeec/ec.c M src/ec/google/chromeec/ec.h M src/ec/google/chromeec/ec_boardid.c M src/mainboard/google/link/mainboard.c M src/mainboard/google/slippy/onboard.h M src/mainboard/google/slippy/variants/peppy/romstage.c M src/mainboard/google/zoombini/boardid.c M src/mainboard/google/zoombini/variants/baseboard/boardid.c M src/mainboard/google/zoombini/variants/baseboard/include/baseboard/variants.h M src/mainboard/intel/glkrvp/variants/baseboard/boardid.c M src/mainboard/intel/glkrvp/variants/baseboard/include/baseboard/variants.h 11 files changed, 29 insertions(+), 11 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/76/28576/1
diff --git a/src/ec/google/chromeec/ec.c b/src/ec/google/chromeec/ec.c index 449eaf3..24a597d 100644 --- a/src/ec/google/chromeec/ec.c +++ b/src/ec/google/chromeec/ec.c @@ -633,10 +633,11 @@ }
#ifndef __SMM__ -u16 google_chromeec_get_board_version(void) +int google_chromeec_get_board_version(void) { struct chromeec_command cmd; struct ec_response_board_version board_v; + int rv;
cmd.cmd_code = EC_CMD_GET_BOARD_VERSION; cmd.cmd_version = 0; @@ -645,8 +646,9 @@ cmd.cmd_data_out = &board_v; cmd.cmd_dev_index = 0;
- if (google_chromeec_command(&cmd) != 0) - return 0; + rv = google_chromeec_command(&cmd); + if (rv) + return -1;
return board_v.board_version; } diff --git a/src/ec/google/chromeec/ec.h b/src/ec/google/chromeec/ec.h index 2c6f1d6..6a63b14 100644 --- a/src/ec/google/chromeec/ec.h +++ b/src/ec/google/chromeec/ec.h @@ -46,7 +46,15 @@
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 + * + * Return: non-negative board version on success, -1 on failure. + * + * This function is used to get the board version information from EC. + */ +int google_chromeec_get_board_version(void); 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 9ec058d..09e7f99 100644 --- a/src/ec/google/chromeec/ec_boardid.c +++ b/src/ec/google/chromeec/ec_boardid.c @@ -19,9 +19,12 @@ uint32_t board_id(void) { MAYBE_STATIC int id = -1; + MAYBE_STATIC bool done_once = false;
- if (id < 0) + if (!done_once) { id = google_chromeec_get_board_version(); + done_once = true; + }
return id; } diff --git a/src/mainboard/google/link/mainboard.c b/src/mainboard/google/link/mainboard.c index 91b7e59..a5a9e05 100644 --- a/src/mainboard/google/link/mainboard.c +++ b/src/mainboard/google/link/mainboard.c @@ -144,7 +144,7 @@ /* Initialize the Embedded Controller */ link_ec_init();
- if (google_chromeec_get_board_version() == 0) { + if (google_chromeec_get_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/onboard.h b/src/mainboard/google/slippy/onboard.h index 9e1dc8b..cd48f6b 100644 --- a/src/mainboard/google/slippy/onboard.h +++ b/src/mainboard/google/slippy/onboard.h @@ -33,6 +33,7 @@ #define BOARD_TOUCHSCREEN_I2C_BUS 2 /* I2C1 */ #define BOARD_TOUCHSCREEN_I2C_ADDR 0x4a
+#define PEPPY_BOARD_VERSION_UNKNOWN -1 #define PEPPY_BOARD_VERSION_PROTO 0 #define PEPPY_BOARD_VERSION_EVT 1
diff --git a/src/mainboard/google/slippy/variants/peppy/romstage.c b/src/mainboard/google/slippy/variants/peppy/romstage.c index bf21cbc..6447174 100644 --- a/src/mainboard/google/slippy/variants/peppy/romstage.c +++ b/src/mainboard/google/slippy/variants/peppy/romstage.c @@ -96,6 +96,7 @@ memcpy(peid->spd_data[0], spd_file + (spd_index * spd_len), spd_len);
switch (google_chromeec_get_board_version()) { + case PEPPY_BOARD_VERSION_UNKNOWN: 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 4b05c52..4f39444 100644 --- a/src/mainboard/google/zoombini/boardid.c +++ b/src/mainboard/google/zoombini/boardid.c @@ -20,9 +20,12 @@ uint32_t board_id(void) { MAYBE_STATIC int id = -1; + MAYBE_STATIC bool done_once = false;
- if (id < 0) + if (!done_once) { id = variant_board_id(); + done_once = true; + }
return id; } diff --git a/src/mainboard/google/zoombini/variants/baseboard/boardid.c b/src/mainboard/google/zoombini/variants/baseboard/boardid.c index c8a5cf1..ad7e3ad 100644 --- a/src/mainboard/google/zoombini/variants/baseboard/boardid.c +++ b/src/mainboard/google/zoombini/variants/baseboard/boardid.c @@ -17,7 +17,7 @@ #include <compiler.h> #include <ec/google/chromeec/ec.h>
-uint8_t __weak variant_board_id(void) +int __weak variant_board_id(void) { return google_chromeec_get_board_version(); } 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 eac0fee..e8c7c20 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 <vendorcode/google/chromeos/chromeos.h>
/* 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 530c06a..1aac275 100644 --- a/src/mainboard/intel/glkrvp/variants/baseboard/boardid.c +++ b/src/mainboard/intel/glkrvp/variants/baseboard/boardid.c @@ -17,7 +17,7 @@ #include <compiler.h> #include <ec/google/chromeec/ec.h>
-uint8_t __weak variant_board_id(void) +int __weak variant_board_id(void) { if (IS_ENABLED(CONFIG_EC_GOOGLE_CHROMEEC)) return google_chromeec_get_board_version(); 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 c278cde..4ed7a73 100644 --- a/src/mainboard/intel/glkrvp/variants/baseboard/include/baseboard/variants.h +++ b/src/mainboard/intel/glkrvp/variants/baseboard/include/baseboard/variants.h @@ -22,7 +22,7 @@ #include <vendorcode/google/chromeos/chromeos.h>
/* 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 * entries for each table. */