Systemd mounts the EFI System Partition (ESP) to /boot or /efi.
So look there for the state.dtb when the devicetree in sysfs/procfs is
not available.

This way barebox-state can be used on EFI systems without manually
specifying the devicetree file.

Signed-off-by: Michael Olbrich <m.olbr...@pengutronix.de>
---
 src/barebox-state.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/src/barebox-state.c b/src/barebox-state.c
index 334aed6f3d43..bf67340d4dc6 100644
--- a/src/barebox-state.c
+++ b/src/barebox-state.c
@@ -342,6 +342,30 @@ struct state *state_get(const char *name, const char 
*filename, bool readonly, b
                }
        } else {
                root = of_read_proc_devicetree();
+
+               /* No device-tree in procfs / sysfs, try dtb file in the ESP */
+               if (-PTR_ERR(root) == ENOENT) {
+                       const char *paths[] = {
+                               /* default mount paths used by systemd */
+                               "/boot/EFI/BAREBOX/state.dtb",
+                               "/efi/EFI/BAREBOX/state.dtb",
+                               NULL
+                       };
+                       void *fdt;
+                       int i;
+
+                       for (i = 0; paths[i]; ++i) {
+                               fdt = read_file(paths[i], NULL);
+                               if (fdt)
+                                       break;
+                       }
+                       if (fdt) {
+                               root = of_unflatten_dtb(fdt);
+                               free(fdt);
+                       }
+                       else
+                               root = ERR_PTR(-ENOENT);
+               }
                if (IS_ERR(root)) {
                        pr_err("Unable to read devicetree. %s\n",
                               strerror(-PTR_ERR(root)));
-- 
2.30.2


_______________________________________________
OSS-Tools mailing list
OSS-Tools@pengutronix.de

Reply via email to