[build] Add support for custom device trees

Currently all arm64 targets that use the boot shim use a common dummy
device tree binary.
But the bootloaders for some Qualcomm boards require a custom device tree
binary with msm-id and board-id matching the board.
So here was add optional feature for board specific device tree binaries.

TEST: Builds, boots in arm64 qemu
Change-Id: I5e7b960edf90b627fb4272a86d811b6d4b10bf17
diff --git a/kernel/target/arm64/board/imx8mevk/rules.mk b/kernel/target/arm64/board/imx8mevk/rules.mk
index 1bce02e..2d08ea6 100644
--- a/kernel/target/arm64/board/imx8mevk/rules.mk
+++ b/kernel/target/arm64/board/imx8mevk/rules.mk
@@ -8,7 +8,7 @@
 PLATFORM_BOARD_NAME := imx8mevk
 PLATFORM_USE_SHIM := true
 PLATFORM_USE_MKBOOTIMG := true
-PLATFORM_DTB := mkbootimg
+PLATFORM_DTB_TYPE := mkbootimg
 PLATFORM_DTB_OFFSET := 0x03000000
 PLATFORM_USE_AVB := true
 
diff --git a/kernel/target/arm64/board/imx8mmevk/rules.mk b/kernel/target/arm64/board/imx8mmevk/rules.mk
index ad58bc8..cc924c6 100644
--- a/kernel/target/arm64/board/imx8mmevk/rules.mk
+++ b/kernel/target/arm64/board/imx8mmevk/rules.mk
@@ -8,7 +8,7 @@
 PLATFORM_BOARD_NAME := imx8mmevk
 PLATFORM_USE_SHIM := true
 PLATFORM_USE_MKBOOTIMG := true
-PLATFORM_DTB := mkbootimg
+PLATFORM_DTB_TYPE := mkbootimg
 PLATFORM_DTB_OFFSET := 0x03000000
 PLATFORM_USE_AVB := true
 
diff --git a/kernel/target/arm64/board/mt8167s_ref/rules.mk b/kernel/target/arm64/board/mt8167s_ref/rules.mk
index 66d2584..06884a0 100644
--- a/kernel/target/arm64/board/mt8167s_ref/rules.mk
+++ b/kernel/target/arm64/board/mt8167s_ref/rules.mk
@@ -11,7 +11,7 @@
 PLATFORM_USE_SHIM := true
 PLATFORM_USE_GZIP := true
 PLATFORM_USE_MKBOOTIMG := true
-PLATFORM_DTB := append
+PLATFORM_DTB_TYPE := append
 PLATFORM_USE_AVB := true
 
 PLATFORM_KERNEL_OFFSET := 0x00080000
diff --git a/kernel/target/arm64/board/sherlock/rules.mk b/kernel/target/arm64/board/sherlock/rules.mk
index 0dc532b..070e0f8 100644
--- a/kernel/target/arm64/board/sherlock/rules.mk
+++ b/kernel/target/arm64/board/sherlock/rules.mk
@@ -10,7 +10,7 @@
 
 PLATFORM_USE_SHIM := true
 PLATFORM_USE_GZIP := true
-PLATFORM_DTB := kdtb
+PLATFORM_DTB_TYPE := kdtb
 PLATFORM_USE_MKBOOTIMG := true
 PLATFORM_KERNEL_OFFSET := 0x01080000
 PLATFORM_MEMBASE := 0x00000000
diff --git a/make/board.mk b/make/board.mk
index df8200d..0da21e4 100644
--- a/make/board.mk
+++ b/make/board.mk
@@ -17,15 +17,18 @@
 #
 # PLATFORM_USE_MKBOOTIMG := true        # package the zircon image with the Android mkbootimg tool
 #
-# PLATFORM_DTB := append                # set if bootloader expects dtb appended to the image
+# PLATFORM_DTB_PATH := <path>           # set if bootloader requires a custom device tree (optional)
+#                                       # common dummy dtb used if none specified
 #
-# PLATFORM_DTB := kdtb                  # set if bootloader expects dtb packaged in kdtb format
+# PLATFORM_DTB_TYPE := append           # set if bootloader expects dtb appended to the image
 #
-# PLATFORM_DTB := mkbootimg             # set if bootloader expects dtb added via mkbootimg --second
+# PLATFORM_DTB_TYPE := kdtb             # set if bootloader expects dtb packaged in kdtb format
+#
+# PLATFORM_DTB_TYPE := mkbootimg        # set if bootloader expects dtb added via mkbootimg --second
 #                                         (requires PLATFORM_DTB_OFFSET)
 #
 # PLATFORM_DTB_OFFSET := <offset>       # DTB offset passed to mkbootimg
-#                                         (required if using PLATFORM_DTB := mkbootimg)
+#                                         (required if using PLATFORM_DTB_TYPE := mkbootimg)
 #
 # PLATFORM_KERNEL_OFFSET := <offset>    # kernel offset to pass to mkbootimg
 #
@@ -53,6 +56,10 @@
 $(error PLATFORM_USE_SHIM not supported for target $(TARGET))
 endif
 
+ifeq ($(PLATFORM_DTB_PATH),)
+PLATFORM_DTB_PATH := kernel/target/arm64/dtb/dummy-device-tree.dtb
+endif
+
 # capture board specific variables for the build rules
 $(BOARD_ZIRCON_BOOTIMAGE): BOARD_ZIRCON_BOOTIMAGE:=$(BOARD_ZIRCON_BOOTIMAGE)
 $(BOARD_ZIRCON_BOOTIMAGE): BOOT_SHIM_BIN:=$(BOOT_SHIM_BIN)
@@ -92,7 +99,6 @@
 
 MKBOOTIMG := third_party/tools/android/mkbootimg
 MKBOOTFS_ARGS :=
-DUMMY_DTB := kernel/target/arm64/dtb/dummy-device-tree.dtb
 
 BOARD_BOOTIMG := $(BUILDDIR)/$(PLATFORM_BOARD_NAME)-boot.img
 
@@ -102,19 +108,19 @@
 BOARD_ZIRCON_BOOTIMAGE2 := $(BOARD_ZIRCON_BOOTIMAGE)
 endif
 
-ifeq ($(PLATFORM_DTB),append)
+ifeq ($(PLATFORM_DTB_TYPE),append)
 # device tree binary is appended to end of zircon image
 BOARD_ZIRCON_BOOTIMAGE3 := $(BUILDDIR)/$(PLATFORM_BOARD_NAME)-zircon-bootimage-dtb
-else ifeq ($(PLATFORM_DTB),kdtb)
+else ifeq ($(PLATFORM_DTB_TYPE),kdtb)
 # device tree binary is appended with the mkkdtb tool
 BOARD_ZIRCON_BOOTIMAGE3 := $(BUILDDIR)/$(PLATFORM_BOARD_NAME)-zircon-bootimage-kdtb
-else ifeq ($(PLATFORM_DTB),mkbootimg)
+else ifeq ($(PLATFORM_DTB_TYPE),mkbootimg)
 # device tree binary passed via mkbootimg
 ifeq ($(PLATFORM_DTB_OFFSET),)
 $(error PLATFORM_DTB_OFFSET not defined)
 endif
 BOARD_ZIRCON_BOOTIMAGE3 := $(BOARD_ZIRCON_BOOTIMAGE2)
-MKBOOTFS_ARGS += --second $(DUMMY_DTB) --second_offset $(PLATFORM_DTB_OFFSET)
+MKBOOTFS_ARGS += --second $(PLATFORM_DTB_PATH) --second_offset $(PLATFORM_DTB_OFFSET)
 else
 # no device tree is necessary
 BOARD_ZIRCON_BOOTIMAGE3 := $(BOARD_ZIRCON_BOOTIMAGE2)
@@ -126,6 +132,7 @@
 $(BOARD_ZIRCON_BOOTIMAGE3): BOARD_ZIRCON_BOOTIMAGE3:=$(BOARD_ZIRCON_BOOTIMAGE3)
 $(BOARD_ZIRCON_BOOTIMAGE3): BOARD_ZIRCON_BOOTIMAGE:=$(BOARD_ZIRCON_BOOTIMAGE)
 $(BOARD_ZIRCON_BOOTIMAGE3): BOARD_ZIRCON_BOOTIMAGE2:=$(BOARD_ZIRCON_BOOTIMAGE2)
+$(BOARD_ZIRCON_BOOTIMAGE3): PLATFORM_DTB_PATH:=$(PLATFORM_DTB_PATH)
 
 $(BOARD_BOOTIMG): BOARD_BOOTIMG:=$(BOARD_BOOTIMG)
 $(BOARD_BOOTIMG): BOARD_ZIRCON_BOOTIMAGE:=$(BOARD_ZIRCON_BOOTIMAGE)
@@ -135,6 +142,7 @@
 $(BOARD_BOOTIMG): PLATFORM_MEMBASE:=$(PLATFORM_MEMBASE)
 $(BOARD_BOOTIMG): PLATFORM_CMDLINE:=$(PLATFORM_CMDLINE)
 $(BOARD_BOOTIMG): MKBOOTFS_ARGS:=$(MKBOOTFS_ARGS)
+$(BOARD_BOOTIMG): PLATFORM_DTB_PATH:=$(PLATFORM_DTB_PATH)
 
 ifeq ($(PLATFORM_USE_GZIP),true)
 $(BOARD_ZIRCON_BOOTIMAGE2): $(BOARD_ZIRCON_BOOTIMAGE)
@@ -142,16 +150,16 @@
 	$(NOECHO)gzip -c $< > $@
 endif
 
-ifeq ($(PLATFORM_DTB),append)
+ifeq ($(PLATFORM_DTB_TYPE),append)
 # device tree binary is appended to end of zircon image
-$(BOARD_ZIRCON_BOOTIMAGE3): $(BOARD_ZIRCON_BOOTIMAGE2) $(DUMMY_DTB)
+$(BOARD_ZIRCON_BOOTIMAGE3): $(BOARD_ZIRCON_BOOTIMAGE2) $(PLATFORM_DTB_PATH)
 	$(call BUILDECHO,generating $@)
-	$(NOECHO)cat $(BOARD_ZIRCON_BOOTIMAGE2) $(DUMMY_DTB) > $@
-else ifeq ($(PLATFORM_DTB),kdtb)
+	$(NOECHO)cat $(BOARD_ZIRCON_BOOTIMAGE2) $(PLATFORM_DTB_PATH) > $@
+else ifeq ($(PLATFORM_DTB_TYPE),kdtb)
 # device tree binary is appended with the mkkdtb tool
-$(BOARD_ZIRCON_BOOTIMAGE3): $(BOARD_ZIRCON_BOOTIMAGE2) $(DUMMY_DTB) $(KDTBTOOL)
+$(BOARD_ZIRCON_BOOTIMAGE3): $(BOARD_ZIRCON_BOOTIMAGE2) $(PLATFORM_DTB_PATH) $(KDTBTOOL)
 	$(call BUILDECHO,generating $@)
-	$(NOECHO)$(KDTBTOOL) $(BOARD_ZIRCON_BOOTIMAGE2) $(DUMMY_DTB) $@
+	$(NOECHO)$(KDTBTOOL) $(BOARD_ZIRCON_BOOTIMAGE2) $(PLATFORM_DTB_PATH) $@
 endif
 
 $(BOARD_BOOTIMG): $(BOARD_ZIRCON_BOOTIMAGE3)
@@ -205,7 +213,8 @@
 # clear variables that were passed in to us
 PLATFORM_USE_SHIM :=
 PLATFORM_USE_GZIP :=
-PLATFORM_DTB :=
+PLATFORM_DTB_PATH :=
+PLATFORM_DTB_TYPE :=
 PLATFORM_USE_MKBOOTIMG :=
 PLATFORM_USE_AVB :=
 PLATFORM_BOARD_NAME :=