[U-Boot] [PATCH] arm64: zynqmp: Create fdtfile from compatible string

Michal Simek michal.simek at xilinx.com
Thu Feb 14 12:18:12 UTC 2019


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.

Signed-off-by: Michal Simek <michal.simek at xilinx.com>
---

How good/bad idea is this?

---
 board/xilinx/zynqmp/zynqmp.c | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/board/xilinx/zynqmp/zynqmp.c b/board/xilinx/zynqmp/zynqmp.c
index a49f2f3e9ebe..64800d869819 100644
--- a/board/xilinx/zynqmp/zynqmp.c
+++ b/board/xilinx/zynqmp/zynqmp.c
@@ -514,6 +514,32 @@ static u32 reset_reason(void)
 	return ret;
 }
 
+static int set_fdtfile(void)
+{
+	char *compatible, *fdtfile;
+
+	if (env_get("fdtfile"))
+		return 0;
+
+	compatible = (char *)fdt_getprop(gd->fdt_blob, 0, "compatible", NULL);
+	if (compatible) {
+		debug("Compatible: %s\n", compatible);
+
+		strsep(&compatible, ",");
+
+		fdtfile = calloc(1, strlen(compatible) + 4);
+		if (!fdtfile)
+			return -ENOMEM;
+
+		sprintf(fdtfile, "%s%s", compatible, ".dtb");
+
+		env_set("fdtfile", fdtfile);
+		free(fdtfile);
+	}
+
+	return 0;
+}
+
 int board_late_init(void)
 {
 	u32 reg = 0;
@@ -536,6 +562,10 @@ int board_late_init(void)
 		return 0;
 	}
 
+	ret = set_fdtfile();
+	if (ret)
+		return ret;
+
 	ret = zynqmp_mmio_read((ulong)&crlapb_base->boot_mode, &reg);
 	if (ret)
 		return -EINVAL;
-- 
1.9.1



More information about the U-Boot mailing list