summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mainboard/intel/kblrvp/board_id.c42
-rw-r--r--src/mainboard/intel/kblrvp/board_id.h9
-rw-r--r--src/mainboard/intel/kblrvp/romstage.c4
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);