aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Kconfig8
-rw-r--r--src/include/boot/coreboot_tables.h8
-rw-r--r--src/lib/Makefile.inc2
-rw-r--r--src/lib/coreboot_table.c18
4 files changed, 35 insertions, 1 deletions
diff --git a/src/Kconfig b/src/Kconfig
index 25184eb887..195fa809ea 100644
--- a/src/Kconfig
+++ b/src/Kconfig
@@ -1122,6 +1122,14 @@ config DEBUG_COVERAGE
If enabled, the code coverage hooks in coreboot will output some
information about the coverage data that is dumped.
+config BOARD_ID_SUPPORT
+ bool "Discover board ID and store it in coreboot table"
+ default n
+ help
+ If enabled, coreboot discovers the board id of the hardware it is
+ running on and reports it through the coreboot table to the rest of
+ the system.
+
config TERTIARY_BOARD_ID
bool "Interpret board ID GPIOs as tertiary inputs"
default n
diff --git a/src/include/boot/coreboot_tables.h b/src/include/boot/coreboot_tables.h
index 3dc8fb6d25..fc44a3c0a6 100644
--- a/src/include/boot/coreboot_tables.h
+++ b/src/include/boot/coreboot_tables.h
@@ -254,6 +254,14 @@ struct lb_x86_rom_mtrr {
uint32_t index;
};
+#define LB_TAG_BOARD_ID 0x0025
+struct lb_board_id {
+ uint32_t tag;
+ uint32_t size;
+ /* Board ID as retrieved from the board revision GPIOs. */
+ uint32_t board_id;
+};
+
/* The following structures are for the cmos definitions table */
#define LB_TAG_CMOS_OPTION_TABLE 200
/* cmos header record */
diff --git a/src/lib/Makefile.inc b/src/lib/Makefile.inc
index 1e70e2e01a..472bd8d8cc 100644
--- a/src/lib/Makefile.inc
+++ b/src/lib/Makefile.inc
@@ -57,7 +57,6 @@ ifeq ($(CONFIG_COMPILER_GCC),y)
romstage-$(CONFIG_ARCH_ROMSTAGE_X86_32) += gcc.c
ramstage-$(CONFIG_ARCH_RAMSTAGE_X86_32) += gcc.c
endif
-romstage-$(CONFIG_TERTIARY_BOARD_ID) += tristate_gpios.c
ramstage-y += hardwaremain.c
ramstage-y += selfboot.c
@@ -85,6 +84,7 @@ ramstage-$(CONFIG_MAINBOARD_DO_NATIVE_VGA_INIT) += edid.c
ramstage-y += memrange.c
ramstage-$(CONFIG_COOP_MULTITASKING) += thread.c
ramstage-$(CONFIG_TIMER_QUEUE) += timer_queue.c
+ramstage-$(CONFIG_TERTIARY_BOARD_ID) += tristate_gpios.c
romstage-y += cbmem_common.c dynamic_cbmem.c
ramstage-y += cbmem_common.c dynamic_cbmem.c
diff --git a/src/lib/coreboot_table.c b/src/lib/coreboot_table.c
index abcb0eda11..2b484d4b64 100644
--- a/src/lib/coreboot_table.c
+++ b/src/lib/coreboot_table.c
@@ -26,6 +26,7 @@
#include <boot/coreboot_tables.h>
#include <string.h>
#include <version.h>
+#include <boardid.h>
#include <device/device.h>
#include <stdlib.h>
#include <cbfs.h>
@@ -212,6 +213,19 @@ static inline void lb_vboot_handoff(struct lb_header *header) {}
#endif /* CONFIG_VBOOT_VERIFY_FIRMWARE */
#endif /* CONFIG_CHROMEOS */
+static void lb_board_id(struct lb_header *header)
+{
+#if CONFIG_BOARD_ID_SUPPORT
+ struct lb_board_id *bid;
+
+ bid = (struct lb_board_id *)lb_new_record(header);
+
+ bid->tag = LB_TAG_BOARD_ID;
+ bid->size = sizeof(*bid);
+ bid->board_id = board_id();
+#endif
+}
+
static void add_cbmem_pointers(struct lb_header *header)
{
/*
@@ -432,6 +446,10 @@ unsigned long write_coreboot_table(
/* pass along the vboot_handoff address. */
lb_vboot_handoff(head);
#endif
+
+ /* Add board ID if available */
+ lb_board_id(head);
+
add_cbmem_pointers(head);
/* Add board-specific table entries, if any. */