When barebox is chainloaded from another bootloader it usually gets passed a device tree from the previous bootloader. While this external device tree is normally not used by barebox, its contents can still be interesting, so store the device tree at /external-devicetree when found. This needs board support to pass the external device tree in handoff data, i.e. a board has to call handoff_data_add(HANDOFF_DATA_EXTERNAL_DT, dtb, size); Signed-off-by: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx> --- common/startup.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/common/startup.c b/common/startup.c index b311b77418..abdc0c2db0 100644 --- a/common/startup.c +++ b/common/startup.c @@ -40,6 +40,8 @@ #include <net.h> #include <efi/efi-mode.h> #include <bselftest.h> +#include <pbl/handoff-data.h> +#include <libfile.h> extern initcall_t __barebox_initcalls_start[], __barebox_early_initcalls_end[], __barebox_initcalls_end[]; @@ -246,6 +248,8 @@ static int run_init(void) struct stat s; glob_t g; int i, ret; + size_t size; + void *ext_dtb; setenv("PATH", "/env/bin"); export("PATH"); @@ -289,6 +293,10 @@ static int run_init(void) globfree(&g); } + ext_dtb = handoff_data_get_entry(HANDOFF_DATA_EXTERNAL_DT, &size); + if (ext_dtb) + write_file("/external-devicetree", ext_dtb, size); + /* source matching script in /env/bmode/ */ bmode = reboot_mode_get(); if (bmode) { -- 2.39.5