[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 :=