Makefile: Add environment variable DEVICE_TREE to header
authorMichal Simek <michal.simek@xilinx.com>
Tue, 18 Feb 2020 14:03:13 +0000 (15:03 +0100)
committerMichal Simek <michal.simek@xilinx.com>
Mon, 6 Apr 2020 10:51:31 +0000 (12:51 +0200)
Users have option to overwrite default device tree
(CONFIG_DEFAULT_DEVICE_TREE) via environment variable DEVICE_TREE.

Feature has been added long time ago by commit 74de8c9a1672
("dts/Makefile: Build the user specified dts") for a little bit different
reason.

But this variable can be also used for different purpose like choosing
proper configuration from FIT image in SPL.
And this is the functionality I would like to use on Xilinx Zynq devices
that current u-boot.img can be composed in the same way based on OF_LIST
and different configuration is taken based on platform specific SPL.
SPL requires low level ps7_init_gpl configuration that's why different
boards require different SPL with fixed board_fit_config_name_match().

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Reviewed-by: Tom Rini <trini@konsulko.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Makefile
arch/arm/mach-zynq/spl.c

index 0db44d424946ccce6b8facbd47b64f6e27e23677..c9ae31c80d481cb2939a3e22505d302464df3582 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -483,6 +483,7 @@ endif
 version_h := include/generated/version_autogenerated.h
 timestamp_h := include/generated/timestamp_autogenerated.h
 defaultenv_h := include/generated/defaultenv_autogenerated.h
+dt_h := include/generated/dt.h
 
 no-dot-config-targets := clean clobber mrproper distclean \
                         help %docs check% coccicheck \
@@ -1767,7 +1768,7 @@ endif
 # prepare2 creates a makefile if using a separate output directory
 prepare2: prepare3 outputmakefile cfg
 
-prepare1: prepare2 $(version_h) $(timestamp_h) \
+prepare1: prepare2 $(version_h) $(timestamp_h) $(dt_h) \
                    include/config/auto.conf
 ifeq ($(wildcard $(LDSCRIPT)),)
        @echo >&2 "  Could not find linker script."
@@ -1833,12 +1834,23 @@ define filechk_defaultenv.h
         xxd -i ; echo ", 0x00" ; )
 endef
 
+define filechk_dt.h
+       (if test -n "$${DEVICE_TREE}"; then \
+               echo \#define DEVICE_TREE \"$(DEVICE_TREE)\"; \
+       else \
+               echo \#define DEVICE_TREE CONFIG_DEFAULT_DEVICE_TREE; \
+       fi)
+endef
+
 $(version_h): include/config/uboot.release FORCE
        $(call filechk,version.h)
 
 $(timestamp_h): $(srctree)/Makefile FORCE
        $(call filechk,timestamp.h)
 
+$(dt_h): $(srctree)/Makefile FORCE
+       $(call filechk,dt.h)
+
 $(defaultenv_h): $(CONFIG_DEFAULT_ENV_FILE:"%"=%) FORCE
        $(call filechk,defaultenv.h)
 
index 96ba90fb7a760faacd706fbe4e0b24d2e072581d..e89e46c1038ddd37421c85f3f7c80894ed34be45 100644 (file)
@@ -6,6 +6,7 @@
 #include <debug_uart.h>
 #include <hang.h>
 #include <spl.h>
+#include <generated/dt.h>
 
 #include <asm/io.h>
 #include <asm/spl.h>
@@ -89,8 +90,11 @@ void spl_board_prepare_for_boot(void)
 int board_fit_config_name_match(const char *name)
 {
        /* Just empty function now - can't decide what to choose */
-       debug("%s: %s\n", __func__, name);
+       debug("%s: Check %s, default %s\n", __func__, name, DEVICE_TREE);
 
-       return 0;
+       if (!strcmp(name, DEVICE_TREE))
+               return 0;
+
+       return -1;
 }
 #endif