From 24bbf5146827b6b7ba1b9fff4563ae53bd7848ee Mon Sep 17 00:00:00 2001 From: Michal Simek Date: Thu, 14 Feb 2019 13:14:30 +0100 Subject: [PATCH] arm64: zynqmp: Create fdtfile from compatible string distro boot expects that fdtfile name is setup for alternative DTB. Create this file based on the first platform compatible string. This should ensure that one rootfs can store multiple DTBs for different boards. Reflect structure which is used in Linux kernel. It means dtbs are strored in xilinx folder. Signed-off-by: Michal Simek Reviewed-by: Alexander Graf --- board/xilinx/zynqmp/zynqmp.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/board/xilinx/zynqmp/zynqmp.c b/board/xilinx/zynqmp/zynqmp.c index 2b14f979989..2ebf0700a57 100644 --- a/board/xilinx/zynqmp/zynqmp.c +++ b/board/xilinx/zynqmp/zynqmp.c @@ -515,6 +515,36 @@ static u32 reset_reason(void) return ret; } +static int set_fdtfile(void) +{ + char *compatible, *fdtfile; + const char *suffix = ".dtb"; + const char *vendor = "xilinx/"; + + if (env_get("fdtfile")) + return 0; + + compatible = (char *)fdt_getprop(gd->fdt_blob, 0, "compatible", NULL); + if (compatible) { + debug("Compatible: %s\n", compatible); + + /* Discard vendor prefix */ + strsep(&compatible, ","); + + fdtfile = calloc(1, strlen(vendor) + strlen(compatible) + + strlen(suffix) + 1); + if (!fdtfile) + return -ENOMEM; + + sprintf(fdtfile, "%s%s%s", vendor, compatible, suffix); + + env_set("fdtfile", fdtfile); + free(fdtfile); + } + + return 0; +} + int board_late_init(void) { u32 reg = 0; @@ -537,6 +567,10 @@ int board_late_init(void) return 0; } + ret = set_fdtfile(); + if (ret) + return ret; + ret = zynqmp_mmio_read((ulong)&crlapb_base->boot_mode, ®); if (ret) return -EINVAL; -- 2.47.3