[arm64] Move platform ID from generated bootdata to the boot shims

With this change, arm64 now uses a common bootdata for all platforms.
We can now update the Fuchsia build system to remove kernel-<board>-bootdata.bin
and stop using per-board bootdatas for "fx boot"

Change-Id: I13213702255a0a05149e78691674ff322c610c59
diff --git a/kernel/platform/generic-arm/platform.cpp b/kernel/platform/generic-arm/platform.cpp
index c02a249..7405d0f 100644
--- a/kernel/platform/generic-arm/platform.cpp
+++ b/kernel/platform/generic-arm/platform.cpp
@@ -264,6 +264,8 @@
 static void process_bootsection(bootdata_t* section) {
     switch (section->type) {
     case BOOTDATA_KERNEL_DRIVER:
+    case BOOTDATA_PLATFORM_ID:
+        // we don't process these here, but we need to save them for mexec
         save_mexec_bootdata(section);
         break;
     case BOOTDATA_CMDLINE: {
diff --git a/kernel/target/arm64/board/aml-s905d2/boot-shim-config.h b/kernel/target/arm64/board/aml-s905d2/boot-shim-config.h
index f402271..c0d209e 100644
--- a/kernel/target/arm64/board/aml-s905d2/boot-shim-config.h
+++ b/kernel/target/arm64/board/aml-s905d2/boot-shim-config.h
@@ -59,6 +59,12 @@
     .irq_phys = 30,
 };
 
+static const bootdata_platform_id_t platform_id = {
+    .vid = PDEV_VID_AMLOGIC,
+    .pid = PDEV_PID_AMLOGIC_S905D2,
+    .board_name = "aml-s905d2",
+};
+
 static void append_board_bootdata(bootdata_t* bootdata) {
     // add CPU configuration
     append_bootdata(bootdata, BOOTDATA_CPU_CONFIG, 0, &cpu_config,
@@ -78,4 +84,7 @@
                     sizeof(psci_driver));
     append_bootdata(bootdata, BOOTDATA_KERNEL_DRIVER, KDRV_ARM_GENERIC_TIMER, &timer_driver,
                     sizeof(timer_driver));
+
+    // add platform ID
+    append_bootdata(bootdata, BOOTDATA_PLATFORM_ID, 0, &platform_id, sizeof(platform_id));
 }
diff --git a/kernel/target/arm64/board/aml-s905d2/rules.mk b/kernel/target/arm64/board/aml-s905d2/rules.mk
index a3a4d3b..69fa0ce 100644
--- a/kernel/target/arm64/board/aml-s905d2/rules.mk
+++ b/kernel/target/arm64/board/aml-s905d2/rules.mk
@@ -6,8 +6,6 @@
 
 LOCAL_DIR := $(GET_LOCAL_DIR)
 
-PLATFORM_VID := 5   # PDEV_VID_AMLOGIC
-PLATFORM_PID := 5   # PDEV_PID_AMLOGIC_S905D2
 PLATFORM_BOARD_NAME := aml-s905d2
 PLATFORM_USE_SHIM := true
 
diff --git a/kernel/target/arm64/board/gauss/boot-shim-config.h b/kernel/target/arm64/board/gauss/boot-shim-config.h
index f2bd64f..a2a97f5 100644
--- a/kernel/target/arm64/board/gauss/boot-shim-config.h
+++ b/kernel/target/arm64/board/gauss/boot-shim-config.h
@@ -54,6 +54,12 @@
     .irq_phys = 30,
 };
 
+static const bootdata_platform_id_t platform_id = {
+    .vid = PDEV_VID_GOOGLE,
+    .pid = PDEV_PID_GAUSS,
+    .board_name = "gauss",
+};
+
 static void append_board_bootdata(bootdata_t* bootdata) {
     // add CPU configuration
     append_bootdata(bootdata, BOOTDATA_CPU_CONFIG, 0, &cpu_config,
@@ -73,4 +79,7 @@
                     sizeof(psci_driver));
     append_bootdata(bootdata, BOOTDATA_KERNEL_DRIVER, KDRV_ARM_GENERIC_TIMER, &timer_driver,
                     sizeof(timer_driver));
+
+    // add platform ID
+    append_bootdata(bootdata, BOOTDATA_PLATFORM_ID, 0, &platform_id, sizeof(platform_id));
 }
diff --git a/kernel/target/arm64/board/gauss/rules.mk b/kernel/target/arm64/board/gauss/rules.mk
index 219cfda..dea197d 100644
--- a/kernel/target/arm64/board/gauss/rules.mk
+++ b/kernel/target/arm64/board/gauss/rules.mk
@@ -8,8 +8,6 @@
 
 DEVICE_TREE := $(GET_LOCAL_DIR)/device-tree.dtb
 
-PLATFORM_VID := 3   # PDEV_VID_GOOGLE
-PLATFORM_PID := 1   # PDEV_PID_GAUSS
 PLATFORM_BOARD_NAME := gauss
 PLATFORM_USE_SHIM := true
 
diff --git a/kernel/target/arm64/board/hikey960/boot-shim-config.h b/kernel/target/arm64/board/hikey960/boot-shim-config.h
index b97bb13..3c0db04 100644
--- a/kernel/target/arm64/board/hikey960/boot-shim-config.h
+++ b/kernel/target/arm64/board/hikey960/boot-shim-config.h
@@ -86,6 +86,12 @@
     .pmu_phys = 0xfff34000,
 };
 
+static const bootdata_platform_id_t platform_id = {
+    .vid = PDEV_VID_96BOARDS,
+    .pid = PDEV_PID_HIKEY960,
+    .board_name = "hikey960",
+};
+
 static void append_board_bootdata(bootdata_t* bootdata) {
     // add CPU configuration
     append_bootdata(bootdata, BOOTDATA_CPU_CONFIG, 0, &cpu_config,
@@ -107,4 +113,7 @@
                     sizeof(timer_driver));
     append_bootdata(bootdata, BOOTDATA_KERNEL_DRIVER, KDRV_HISILICON_POWER, &power_driver,
                     sizeof(power_driver));
+
+    // add platform ID
+    append_bootdata(bootdata, BOOTDATA_PLATFORM_ID, 0, &platform_id, sizeof(platform_id));
 }
diff --git a/kernel/target/arm64/board/hikey960/rules.mk b/kernel/target/arm64/board/hikey960/rules.mk
index 90c721b..605dc2d 100644
--- a/kernel/target/arm64/board/hikey960/rules.mk
+++ b/kernel/target/arm64/board/hikey960/rules.mk
@@ -6,8 +6,6 @@
 
 LOCAL_DIR := $(GET_LOCAL_DIR)
 
-PLATFORM_VID := 2   # PDEV_VID_96BOARDS
-PLATFORM_PID := 1   # PDEV_PID_HIKEY960
 PLATFORM_BOARD_NAME := hikey960
 PLATFORM_USE_SHIM := true
 
diff --git a/kernel/target/arm64/board/imx8mevk/boot-shim-config.h b/kernel/target/arm64/board/imx8mevk/boot-shim-config.h
index 928bddb..e8a7ebb 100644
--- a/kernel/target/arm64/board/imx8mevk/boot-shim-config.h
+++ b/kernel/target/arm64/board/imx8mevk/boot-shim-config.h
@@ -49,6 +49,12 @@
     .freq_override = 8333333,
 };
 
+static const bootdata_platform_id_t platform_id = {
+    .vid = PDEV_VID_NXP,
+    .pid = PDEV_PID_IMX8MEVK,
+    .board_name = "imx8mevk",
+};
+
 static void append_board_bootdata(bootdata_t* bootdata) {
     // add CPU configuration
     append_bootdata(bootdata, BOOTDATA_CPU_CONFIG, 0, &cpu_config,
@@ -68,4 +74,7 @@
                     sizeof(psci_driver));
     append_bootdata(bootdata, BOOTDATA_KERNEL_DRIVER, KDRV_ARM_GENERIC_TIMER, &timer_driver,
                     sizeof(timer_driver));
+
+    // add platform ID
+    append_bootdata(bootdata, BOOTDATA_PLATFORM_ID, 0, &platform_id, sizeof(platform_id));
 }
diff --git a/kernel/target/arm64/board/imx8mevk/rules.mk b/kernel/target/arm64/board/imx8mevk/rules.mk
index 3985b61..ba06db5 100644
--- a/kernel/target/arm64/board/imx8mevk/rules.mk
+++ b/kernel/target/arm64/board/imx8mevk/rules.mk
@@ -5,8 +5,6 @@
 
 LOCAL_DIR := $(GET_LOCAL_DIR)
 
-PLATFORM_VID := 9   # PDEV_VID_NXP
-PLATFORM_PID := 1   # PDEV_PID_IMX8MEVK
 PLATFORM_BOARD_NAME := imx8mevk
 PLATFORM_USE_SHIM := true
 
diff --git a/kernel/target/arm64/board/odroidc2/boot-shim-config.h b/kernel/target/arm64/board/odroidc2/boot-shim-config.h
index 496c9b0..a03406f 100644
--- a/kernel/target/arm64/board/odroidc2/boot-shim-config.h
+++ b/kernel/target/arm64/board/odroidc2/boot-shim-config.h
@@ -59,6 +59,12 @@
     .irq_phys = 30,
 };
 
+static const bootdata_platform_id_t platform_id = {
+    .vid = PDEV_VID_HARDKERNEL,
+    .pid = PDEV_PID_ODROID_C2,
+    .board_name = "odroidc2",
+};
+
 static void append_board_bootdata(bootdata_t* bootdata) {
     // add CPU configuration
     append_bootdata(bootdata, BOOTDATA_CPU_CONFIG, 0, &cpu_config,
@@ -78,4 +84,7 @@
                     sizeof(psci_driver));
     append_bootdata(bootdata, BOOTDATA_KERNEL_DRIVER, KDRV_ARM_GENERIC_TIMER, &timer_driver,
                     sizeof(timer_driver));
+
+    // add platform ID
+    append_bootdata(bootdata, BOOTDATA_PLATFORM_ID, 0, &platform_id, sizeof(platform_id));
 }
diff --git a/kernel/target/arm64/board/odroidc2/rules.mk b/kernel/target/arm64/board/odroidc2/rules.mk
index db04374..9d3551d 100644
--- a/kernel/target/arm64/board/odroidc2/rules.mk
+++ b/kernel/target/arm64/board/odroidc2/rules.mk
@@ -6,8 +6,6 @@
 
 LOCAL_DIR := $(GET_LOCAL_DIR)
 
-PLATFORM_VID := 7   # PDEV_VID_HARDKERNEL
-PLATFORM_PID := 1   # PDEV_PID_ODROID_C2
 PLATFORM_BOARD_NAME := odroidc2
 PLATFORM_USE_SHIM := true
 
diff --git a/kernel/target/arm64/board/qemu/boot-shim-config.h b/kernel/target/arm64/board/qemu/boot-shim-config.h
index abaf692..40b1919 100644
--- a/kernel/target/arm64/board/qemu/boot-shim-config.h
+++ b/kernel/target/arm64/board/qemu/boot-shim-config.h
@@ -59,6 +59,12 @@
     .irq_virt = 27,
 };
 
+static const bootdata_platform_id_t platform_id = {
+    .vid = PDEV_VID_QEMU,
+    .pid = PDEV_PID_QEMU,
+    .board_name = "qemu",
+};
+
 static void append_board_bootdata(bootdata_t* bootdata) {
     // add CPU configuration
     append_bootdata(bootdata, BOOTDATA_CPU_CONFIG, 0, &cpu_config,
@@ -80,4 +86,7 @@
                     sizeof(psci_driver));
     append_bootdata(bootdata, BOOTDATA_KERNEL_DRIVER, KDRV_ARM_GENERIC_TIMER, &timer_driver,
                     sizeof(timer_driver));
+
+    // add platform ID
+    append_bootdata(bootdata, BOOTDATA_PLATFORM_ID, 0, &platform_id, sizeof(platform_id));
 }
diff --git a/kernel/target/arm64/board/qemu/rules.mk b/kernel/target/arm64/board/qemu/rules.mk
index 5ddfd61..932e9fd 100644
--- a/kernel/target/arm64/board/qemu/rules.mk
+++ b/kernel/target/arm64/board/qemu/rules.mk
@@ -7,8 +7,6 @@
 
 LOCAL_DIR := $(GET_LOCAL_DIR)
 
-PLATFORM_VID := 1   # PDEV_VID_QEMU
-PLATFORM_PID := 1   # PDEV_PID_QEMU
 PLATFORM_BOARD_NAME := qemu
 PLATFORM_USE_SHIM := true
 
diff --git a/kernel/target/arm64/board/vim/boot-shim-config.h b/kernel/target/arm64/board/vim/boot-shim-config.h
index fc0496d..37a7773 100644
--- a/kernel/target/arm64/board/vim/boot-shim-config.h
+++ b/kernel/target/arm64/board/vim/boot-shim-config.h
@@ -79,6 +79,12 @@
     .irq_phys = 30,
 };
 
+static const bootdata_platform_id_t platform_id = {
+    .vid = PDEV_VID_KHADAS,
+    .pid = PDEV_PID_VIM,
+    .board_name = "vim",
+};
+
 static void append_board_bootdata(bootdata_t* bootdata) {
     // add CPU configuration
     append_bootdata(bootdata, BOOTDATA_CPU_CONFIG, 0, &cpu_config,
@@ -98,4 +104,7 @@
                     sizeof(psci_driver));
     append_bootdata(bootdata, BOOTDATA_KERNEL_DRIVER, KDRV_ARM_GENERIC_TIMER, &timer_driver,
                     sizeof(timer_driver));
+
+    // add platform ID
+    append_bootdata(bootdata, BOOTDATA_PLATFORM_ID, 0, &platform_id, sizeof(platform_id));
 }
diff --git a/kernel/target/arm64/board/vim/rules.mk b/kernel/target/arm64/board/vim/rules.mk
index 56f6e03..c571439 100644
--- a/kernel/target/arm64/board/vim/rules.mk
+++ b/kernel/target/arm64/board/vim/rules.mk
@@ -6,8 +6,6 @@
 
 LOCAL_DIR := $(GET_LOCAL_DIR)
 
-PLATFORM_VID := 4   # PDEV_VID_KHADAS
-PLATFORM_PID := 1   # PDEV_PID_VIM
 PLATFORM_BOARD_NAME := vim
 PLATFORM_USE_SHIM := true
 
diff --git a/kernel/target/arm64/board/vim2/boot-shim-config.h b/kernel/target/arm64/board/vim2/boot-shim-config.h
index b37df60..6b1cf50 100644
--- a/kernel/target/arm64/board/vim2/boot-shim-config.h
+++ b/kernel/target/arm64/board/vim2/boot-shim-config.h
@@ -83,6 +83,12 @@
     .hdmitx_phys = 0xc883a000,
 };
 
+static const bootdata_platform_id_t platform_id = {
+    .vid = PDEV_VID_KHADAS,
+    .pid = PDEV_PID_VIM2,
+    .board_name = "vim2",
+};
+
 static void append_board_bootdata(bootdata_t* bootdata) {
     // add CPU configuration
     append_bootdata(bootdata, BOOTDATA_CPU_CONFIG, 0, &cpu_config,
@@ -104,4 +110,8 @@
                     sizeof(timer_driver));
     append_bootdata(bootdata, BOOTDATA_KERNEL_DRIVER, KDRV_AMLOGIC_HDCP, &hdcp_driver,
                     sizeof(hdcp_driver));
+
+
+    // add platform ID
+    append_bootdata(bootdata, BOOTDATA_PLATFORM_ID, 0, &platform_id, sizeof(platform_id));
 }
diff --git a/kernel/target/arm64/boot-shim/boot-shim.c b/kernel/target/arm64/boot-shim/boot-shim.c
index 1f81a48..64ee54f 100644
--- a/kernel/target/arm64/boot-shim/boot-shim.c
+++ b/kernel/target/arm64/boot-shim/boot-shim.c
@@ -9,6 +9,7 @@
 
 #include <stdbool.h>
 #include <stddef.h>
+#include <ddk/protocol/platform-defs.h>
 #include <zircon/boot/bootdata.h>
 #include <zircon/boot/driver-config.h>
 
diff --git a/kernel/target/arm64/boot-shim/rules.mk b/kernel/target/arm64/boot-shim/rules.mk
index be0498b..2047fd2 100644
--- a/kernel/target/arm64/boot-shim/rules.mk
+++ b/kernel/target/arm64/boot-shim/rules.mk
@@ -22,6 +22,7 @@
 KERNEL_ALIGN := 65536
 SHIM_DEFINES := -DKERNEL_ALIGN=$(KERNEL_ALIGN)
 SHIM_INCLUDES := -Ikernel/include -Ikernel/arch/arm64/include -Isystem/public
+SHIM_INCLUDES += -Isystem/ulib/ddk/include  # for ddk/protocol/platform-defs.h
 SHIM_CFLAGS := $(NO_SAFESTACK) $(NO_SANITIZERS)
 
 # for including target specific headers
diff --git a/kernel/target/pc/rules.mk b/kernel/target/pc/rules.mk
index dbe08f9..5d1f22b 100644
--- a/kernel/target/pc/rules.mk
+++ b/kernel/target/pc/rules.mk
@@ -19,6 +19,7 @@
 include make/module.mk
 
 # build kernel-bootdata for fuchisa build
+# TODO: remove this once Fuchsia build no longer needs this
 KERNEL_BOOTDATA := $(BUILDDIR)/pc-kernel-bootdata.bin
 $(KERNEL_BOOTDATA): $(MKBOOTFS)
 	$(call BUILDECHO,generating $@)
diff --git a/make/board.mk b/make/board.mk
index 327d338..6484c96 100644
--- a/make/board.mk
+++ b/make/board.mk
@@ -4,17 +4,10 @@
 # license that can be found in the LICENSE file or at
 # https://opensource.org/licenses/MIT
 
-ifeq ($(PLATFORM_VID),)
-$(error PLATFORM_VID not defined)
-endif
-ifeq ($(PLATFORM_PID),)
-$(error PLATFORM_PID not defined)
-endif
 ifeq ($(PLATFORM_BOARD_NAME),)
 $(error PLATFORM_BOARD_NAME not defined)
 endif
 
-BOARD_PLATFORM_ID := --vid $(PLATFORM_VID) --pid $(PLATFORM_PID) --board $(PLATFORM_BOARD_NAME)
 BOARD_KERNEL_BOOTDATA := $(BUILDDIR)/$(PLATFORM_BOARD_NAME)-kernel-bootdata.bin
 BOARD_BOOTDATA := $(BUILDDIR)/$(PLATFORM_BOARD_NAME)-bootdata.bin
 BOARD_COMBO_BOOTDATA := $(BUILDDIR)/$(PLATFORM_BOARD_NAME)-combo-bootdata.bin
@@ -32,7 +25,6 @@
 
 # capture board specific variables for the build rules
 $(BOARD_KERNEL_BOOTDATA): BOARD_KERNEL_BOOTDATA:=$(BOARD_KERNEL_BOOTDATA)
-$(BOARD_KERNEL_BOOTDATA): BOARD_PLATFORM_ID:=$(BOARD_PLATFORM_ID)
 $(BOARD_BOOTDATA): BOARD_BOOTDATA:=$(BOARD_BOOTDATA)
 $(BOARD_BOOTDATA): BOARD_KERNEL_BOOTDATA:=$(BOARD_KERNEL_BOOTDATA)
 $(BOARD_COMBO_BOOTDATA): BOARD_COMBO_BOOTDATA:=$(BOARD_COMBO_BOOTDATA)
@@ -40,12 +32,14 @@
 $(BOARD_COMBO_BOOTDATA): BOARD_BOOT_SHIM_OPTS:=$(BOARD_BOOT_SHIM_OPTS)
 
 # kernel bootdata for fuchsia build
+# TODO: remove this once Fuchsia build no longer needs this
 $(BOARD_KERNEL_BOOTDATA): $(MKBOOTFS)
 	$(call BUILDECHO,generating $@)
 	@$(MKDIR)
-	$(NOECHO)$(MKBOOTFS) -o $@ $(BOARD_PLATFORM_ID)
+	$(NOECHO)$(MKBOOTFS) -o $@ --empty
 
 # full bootdata (kernel bootdata + bootfs)
+# TODO: replace this with common bootdata for all boards
 $(BOARD_BOOTDATA): $(MKBOOTFS) $(BOARD_KERNEL_BOOTDATA) $(USER_BOOTDATA)
 	$(call BUILDECHO,generating $@)
 	@$(MKDIR)
@@ -64,13 +58,10 @@
 EXTRA_BUILDDEPS += $(BOARD_KERNEL_BOOTDATA) $(BOARD_BOOTDATA) $(BOARD_COMBO_BOOTDATA)
 
 # clear variables that were passed in to us
-PLATFORM_VID :=
-PLATFORM_PID :=
 PLATFORM_BOARD_NAME :=
 PLATFORM_USE_SHIM :=
 
 # clear variables we set here
-BOARD_PLATFORM_ID :=
 BOARD_KERNEL_BOOTDATA :=
 BOARD_BOOTDATA :=
 BOARD_COMBO_BOOTDATA :=