summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKarthikeyan Ramasubramanian <kramasub@chromium.org>2018-09-17 16:19:34 -0600
committerMartin Roth <martinroth@google.com>2018-09-20 17:15:26 +0000
commitc80ff8437d61f0867eccc520cc68d19fe181af14 (patch)
treefd94a2103e48b08c5df10421952a945bc7d68a9e /src
parent2beadeec3512d6087ae5057da681e50883d04acf (diff)
downloadcoreboot-c80ff8437d61f0867eccc520cc68d19fe181af14.tar.xz
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> Reviewed-on: https://review.coreboot.org/28576 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Aaron Durbin <adurbin@chromium.org> Reviewed-by: Jett Rink <jettrink@google.com>
Diffstat (limited to 'src')
-rw-r--r--src/ec/google/chromeec/ec.c9
-rw-r--r--src/ec/google/chromeec/ec.h11
-rw-r--r--src/ec/google/chromeec/ec_boardid.c8
-rw-r--r--src/include/boardid.h9
-rw-r--r--src/mainboard/google/auron/variants/samus/board_version.c5
-rw-r--r--src/mainboard/google/auron/variants/samus/include/variant/board_version.h3
-rw-r--r--src/mainboard/google/link/mainboard.c5
-rw-r--r--src/mainboard/google/slippy/variants/peppy/romstage.c4
-rw-r--r--src/mainboard/google/zoombini/boardid.c4
-rw-r--r--src/mainboard/google/zoombini/variants/baseboard/boardid.c10
-rw-r--r--src/mainboard/google/zoombini/variants/baseboard/include/baseboard/variants.h2
-rw-r--r--src/mainboard/intel/glkrvp/variants/baseboard/boardid.c16
-rw-r--r--src/mainboard/intel/glkrvp/variants/baseboard/include/baseboard/variants.h8
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 <boardid.h>
+
#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 <baseboard/variants.h>
+#include <boardid.h>
#include <compiler.h>
#include <ec/google/chromeec/ec.h>
-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 <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 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 <baseboard/variants.h>
+#include <boardid.h>
#include <compiler.h>
#include <ec/google/chromeec/ec.h>
-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 <stdint.h>
#include <vendorcode/google/chromeos/chromeos.h>
-/* 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. */