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:
		
				
					committed by
					
						
						Martin Roth
					
				
			
			
				
	
			
			
			
						parent
						
							2beadeec35
						
					
				
				
					commit
					c80ff8437d
				
			@@ -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)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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 */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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. */
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user