diff options
author | Praveen hodagatta pranesh <praveenx.hodagatta.pranesh@intel.com> | 2018-12-19 19:28:21 +0800 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2019-01-09 10:03:05 +0000 |
commit | cd26f08d942638da9a6aa85bb8bd873197f467c8 (patch) | |
tree | 3963269eda18b11a4908dcdce364b40d00b97336 /src | |
parent | 7e48b47185d72e9a0c6bee5bab352d3c819dafe4 (diff) |
mb/intel/kblrvp: Add helper function to get Board Id
Add 2 helper function get_board_id() & get_spd_index()
to read board id & spd index from EC.
Rename the old get_board_id() function to get_ec_boardinfo().
BUG=None
TEST= Tested on KBL RVP11, able to read the Board id (0x44)
and verified in serial logs. not verified on KBL RVP8.
Signed-off-by: Praveen hodagatta pranesh <praveenx.hodagatta.pranesh@intel.com>
Change-Id: Ie20bf0d45a3568c2c433e5b844bea86aac07c47d
Reviewed-on: https://review.coreboot.org/c/30306
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/mainboard/intel/kblrvp/board_id.c | 42 | ||||
-rw-r--r-- | src/mainboard/intel/kblrvp/board_id.h | 9 | ||||
-rw-r--r-- | src/mainboard/intel/kblrvp/romstage.c | 4 |
3 files changed, 44 insertions, 11 deletions
diff --git a/src/mainboard/intel/kblrvp/board_id.c b/src/mainboard/intel/kblrvp/board_id.c index a362b08df8..d4c4f535cb 100644 --- a/src/mainboard/intel/kblrvp/board_id.c +++ b/src/mainboard/intel/kblrvp/board_id.c @@ -1,7 +1,7 @@ /* * This file is part of the coreboot project. * - * Copyright (C) 2016 Intel Corporation. + * Copyright (C) 2016-2018 Intel Corporation. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -15,18 +15,42 @@ #include "board_id.h" #include <ec/acpi/ec.h> #include <stdint.h> +#include <stddef.h> /* - * Get Board ID via EC I/O port write/read + * Get Board info via EC I/O port write/read */ -int get_board_id(void) +int get_ec_boardinfo(void) { - uint8_t buffer[2]; - uint8_t index; - if (send_ec_command(EC_FAB_ID_CMD) == 0) { - for (index = 0; index < sizeof(buffer); index++) - buffer[index] = recv_ec_data(); - return (buffer[1] << 8) | buffer[0]; + MAYBE_STATIC int ec_info = -1; + if (ec_info < 0) { + uint8_t buffer[2]; + uint8_t index; + if (send_ec_command(EC_FAB_ID_CMD) == 0) { + for (index = 0; index < sizeof(buffer); index++) + buffer[index] = recv_ec_data(); + ec_info = (buffer[1] << 8) | buffer[0]; + } } + return ec_info; +} + +/* Get spd index */ +int get_spd_index(void) +{ + int ec_info = get_ec_boardinfo(); + if (ec_info >= 0) + return ((uint16_t)ec_info >> 5) & 0x7; + + return -1; +} + +/* Get Board Id */ +int get_board_id(void) +{ + int ec_info = get_ec_boardinfo(); + if (ec_info >= 0) + return ((uint16_t)ec_info >> 8) & 0xff; + return -1; } diff --git a/src/mainboard/intel/kblrvp/board_id.h b/src/mainboard/intel/kblrvp/board_id.h index 881866fdbe..27201aa02b 100644 --- a/src/mainboard/intel/kblrvp/board_id.h +++ b/src/mainboard/intel/kblrvp/board_id.h @@ -1,7 +1,7 @@ /* * This file is part of the coreboot project. * - * Copyright (C) 2016 Intel Corporation. + * Copyright (C) 2016-2018 Intel Corporation. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,6 +19,7 @@ /* Mobile Board Id 0x00 - 0xFF */ #define BOARD_ID_SKL_A0_RVP3 0x04 #define BOARD_ID_SKL_RVP7 0x0B +#define BOARD_ID_KBL_RVP11 0x44 /* 60-6F reserved for KBL RVPs */ #define BOARD_ID_KBL_LPDDR3_RVP3 0x60 @@ -31,6 +32,12 @@ * Returns board information (board id[15:8] and * Fab info[7:0]) on success and < 0 on error */ +int get_ec_boardinfo(void); + +/* Return spd index */ +int get_spd_index(void); + +/* Board id[15:8] */ int get_board_id(void); #endif /* _MAINBOARD_BOARD_ID_H_ */ diff --git a/src/mainboard/intel/kblrvp/romstage.c b/src/mainboard/intel/kblrvp/romstage.c index a29a4afc44..47f8249739 100644 --- a/src/mainboard/intel/kblrvp/romstage.c +++ b/src/mainboard/intel/kblrvp/romstage.c @@ -31,7 +31,9 @@ void mainboard_memory_init_params(FSPM_UPD *mupd) { FSP_M_CONFIG *mem_cfg; mem_cfg = &mupd->FspmConfig; - u8 spd_index = (get_board_id() >> 5) & 0x7; + u8 spd_index = get_spd_index(); + if ((int)spd_index < 0) + return; printk(BIOS_INFO, "SPD index %d\n", spd_index); |