Publish the board ID value in coreboot table, when configured

Board ID value is usually of interest to bootloaders. Instead of
duplicating the board ID discovery code in different bootloaders let's
determine it in coreboot and publish it through coreboot table, when
configured.

BUG=chrome-os-partner:30489
TEST=none yet

Change-Id: Ia1e36b907ac15b0aafce0711f827cb83622e27bb
Original-Change-Id: Iee247c44a1c91dbcedcc9058e8742c75ff951f43
Original-Signed-off-by: Vadim Bendebury <vbendeb@chromium.org>
Original-Reviewed-on: https://chromium-review.googlesource.com/210116
Original-Reviewed-by: David Hendricks <dhendrix@chromium.org>
(cherry picked from commit b2057a02db9391e2085b138eea843e6bb09d3ea2)
Signed-off-by: Marc Jones <marc.jones@se-eng.com>
Reviewed-on: http://review.coreboot.org/8719
Tested-by: build bot (Jenkins)
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
diff --git a/src/lib/coreboot_table.c b/src/lib/coreboot_table.c
index abcb0ed..2b484d4 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 @@
 #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 @@
 	/* 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. */