Hello Michael, On 10.05.22 08:57, Michael Olbrich wrote: > 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",
On my Debian, it is /boot/efi/EFI. Do you mind appending that one to the list? :-) > + 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); This duplicates code in the first if clause. Can you move this into a common helper (just a static function above state_get suffices) and use it? Thanks, Ahmad > + } > if (IS_ERR(root)) { > pr_err("Unable to read devicetree. %s\n", > strerror(-PTR_ERR(root))); -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |