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>
This commit is contained in:
Karthikeyan Ramasubramanian
2018-09-17 16:19:34 -06:00
committed by Martin Roth
parent 2beadeec35
commit c80ff8437d
13 changed files with 72 additions and 22 deletions

View File

@ -637,7 +637,7 @@ int google_chromeec_cbi_get_dram_part_num(char *buf, size_t bufsize)
} }
#ifndef __SMM__ #ifndef __SMM__
u16 google_chromeec_get_board_version(void) int google_chromeec_get_board_version(uint32_t *version)
{ {
struct chromeec_command cmd; struct chromeec_command cmd;
struct ec_response_board_version board_v; 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_data_out = &board_v;
cmd.cmd_dev_index = 0; cmd.cmd_dev_index = 0;
if (google_chromeec_command(&cmd) != 0) if (google_chromeec_command(&cmd))
return 0; return -1;
return board_v.board_version; *version = board_v.board_version;
return 0;
} }
u32 google_chromeec_get_sku_id(void) u32 google_chromeec_get_sku_id(void)

View File

@ -46,7 +46,16 @@ uint64_t google_chromeec_get_device_current_events(void);
int google_chromeec_check_feature(int feature); int google_chromeec_check_feature(int feature);
uint8_t google_chromeec_calc_checksum(const uint8_t *data, int size); 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); u32 google_chromeec_get_sku_id(void);
int google_chromeec_set_sku_id(u32 skuid); int google_chromeec_set_sku_id(u32 skuid);
uint64_t google_chromeec_get_events_b(void); uint64_t google_chromeec_get_events_b(void);

View File

@ -18,10 +18,12 @@
uint32_t board_id(void) 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 = google_chromeec_get_board_version(); if (google_chromeec_get_board_version(&id))
id = BOARD_ID_UNKNOWN;
}
return id; return id;
} }

View File

@ -20,6 +20,15 @@
#define UNDEFINED_STRAPPING_ID (~0) #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 board_id(void); /* differentiates revisions */
uint32_t ram_code(void); /* identifies installed DRAM modules */ uint32_t ram_code(void); /* identifies installed DRAM modules */
uint32_t sku_id(void); /* differentiates other optional components */ uint32_t sku_id(void); /* differentiates other optional components */

View File

@ -18,7 +18,10 @@
const char *samus_board_version(void) 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: case SAMUS_EC_BOARD_VERSION_EVT1:
return "EVT1"; return "EVT1";
case SAMUS_EC_BOARD_VERSION_EVT2: case SAMUS_EC_BOARD_VERSION_EVT2:

View File

@ -16,10 +16,13 @@
#ifndef SAMUS_BOARD_VERSION_H #ifndef SAMUS_BOARD_VERSION_H
#define SAMUS_BOARD_VERSION_H #define SAMUS_BOARD_VERSION_H
#include <boardid.h>
#define SAMUS_EC_BOARD_VERSION_EVT1 3 #define SAMUS_EC_BOARD_VERSION_EVT1 3
#define SAMUS_EC_BOARD_VERSION_EVT2 4 #define SAMUS_EC_BOARD_VERSION_EVT2 4
#define SAMUS_EC_BOARD_VERSION_EVT3 5 #define SAMUS_EC_BOARD_VERSION_EVT3 5
#define SAMUS_EC_BOARD_VERSION_EVT4 0 #define SAMUS_EC_BOARD_VERSION_EVT4 0
#define SAMUS_EC_BOARD_VERSION_UNKNOWN BOARD_ID_UNKNOWN
const char *samus_board_version(void); const char *samus_board_version(void);

View File

@ -141,10 +141,13 @@ static int int15_handler(void)
static void mainboard_init(struct device *dev) static void mainboard_init(struct device *dev)
{ {
uint32_t board_version = 0;
/* Initialize the Embedded Controller */ /* Initialize the Embedded Controller */
link_ec_init(); 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. */ /* If running on proto1 - enable reversion of gpio11. */
u32 gpio_inv; u32 gpio_inv;
u16 gpio_base = pci_read_config16 u16 gpio_base = pci_read_config16

View File

@ -78,6 +78,7 @@ static void copy_spd(struct pei_data *peid)
char *spd_file; char *spd_file;
size_t spd_file_len; size_t spd_file_len;
size_t spd_len = sizeof(peid->spd_data[0]); 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); printk(BIOS_DEBUG, "SPD index %d\n", spd_index);
spd_file = cbfs_boot_map_with_leak("spd.bin", CBFS_TYPE_SPD, 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); 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: case PEPPY_BOARD_VERSION_PROTO:
/* Index 0 is 2GB config with CH0 only. */ /* Index 0 is 2GB config with CH0 only. */
if (spd_index == 0) if (spd_index == 0)

View File

@ -19,9 +19,9 @@
uint32_t board_id(void) 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(); id = variant_board_id();
return id; return id;

View File

@ -14,10 +14,16 @@
*/ */
#include <baseboard/variants.h> #include <baseboard/variants.h>
#include <boardid.h>
#include <compiler.h> #include <compiler.h>
#include <ec/google/chromeec/ec.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;
} }

View File

@ -23,7 +23,7 @@
#include <vendorcode/google/chromeos/chromeos.h> #include <vendorcode/google/chromeos/chromeos.h>
/* Return the board id for the current variant board. */ /* 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 * The next set of functions return the gpio table and fill in the number of

View File

@ -14,13 +14,21 @@
*/ */
#include <baseboard/variants.h> #include <baseboard/variants.h>
#include <boardid.h>
#include <compiler.h> #include <compiler.h>
#include <ec/google/chromeec/ec.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)) MAYBE_STATIC uint32_t id = BOARD_ID_INIT;
return google_chromeec_get_board_version();
else 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; return 0;
}
} }

View File

@ -21,8 +21,12 @@
#include <stdint.h> #include <stdint.h>
#include <vendorcode/google/chromeos/chromeos.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 /* The next set of functions return the gpio table and fill in the number of
* entries for each table. */ * entries for each table. */