On Mon, Mar 31, 2025 at 10:07:29AM -0400, Raymond Mao wrote: > Hi Tom, > > On Fri, 28 Mar 2025 at 19:51, Tom Rini <tr...@konsulko.com> wrote: > > > > On Thu, Mar 27, 2025 at 04:13:17PM -0700, Raymond Mao wrote: > > > > > Point fdt_addr to the fdt embedded in the bloblist since fdt_addr > > > is a default address for bootefi, bootm and booti to look for the > > > device tree when launching the kernel. > > > > > > Signed-off-by: Raymond Mao <raymond....@linaro.org> > > > --- > > > env/common.c | 17 +++++++++++++++++ > > > 1 file changed, 17 insertions(+) > > > > > > diff --git a/env/common.c b/env/common.c > > > index a58955a4f42..a38e5d107a8 100644 > > > --- a/env/common.c > > > +++ b/env/common.c > > > @@ -16,6 +16,7 @@ > > > #include <asm/global_data.h> > > > #include <linux/printk.h> > > > #include <linux/stddef.h> > > > +#include <mapmem.h> > > > #include <search.h> > > > #include <errno.h> > > > #include <malloc.h> > > > @@ -368,6 +369,18 @@ int env_get_default_into(const char *name, char > > > *buf, unsigned int len) > > > return env_get_from_linear(default_environment, name, buf, len); > > > } > > > > > > +static int env_update_fdt_addr_from_bloblist(void) > > > +{ > > > + /* > > > + * fdt_addr is by default used by booti, bootm and bootefi, > > > + * thus set it to point to the fdt embedded in a bloblist if it > > > exists. > > > + */ > > > + if (!CONFIG_IS_ENABLED(BLOBLIST) || gd->fdt_src != FDTSRC_BLOBLIST) > > > + return 0; > > > + > > > + return env_set_hex("fdt_addr", > > > (uintptr_t)map_to_sysmem(gd->fdt_blob)); > > > +} > > > > This part is fine with me and makes enough sense, we can't do this > > immediately so we need some check to know to do it later. > > > > > void env_set_default(const char *s, int flags) > > > { > > > if (s) { > > > @@ -392,6 +405,10 @@ void env_set_default(const char *s, int flags) > > > > > > gd->flags |= GD_FLG_ENV_READY; > > > gd->flags |= GD_FLG_ENV_DEFAULT; > > > + > > > + /* This has to be done after GD_FLG_ENV_READY is set */ > > > + if (env_update_fdt_addr_from_bloblist()) > > > + pr_err("Failed to set fdt_addr to point at DTB\n"); > > > } > > > > I don't know this is the right spot. This won't work when for example > > the environment is valid but stored in a file on FAT (or whatever) will > > it? > > > > I can add invoking 'env_update_fdt_addr_from_bloblist()' inside > 'env_import()'. It should work in all the cases then.
That's probably closer? I'm not sure if it will or won't be a problem on say re-import with "env import .." in that case, so please check. Thanks! -- Tom
signature.asc
Description: PGP signature