Hi Rob, On 3 August 2017 at 10:48, Rob Clark <robdcl...@gmail.com> wrote: > Similar to CONFIG_OF_BOARD, but in this case the fdt is still built by > u-boot build. This allows the board to patch the fdt, etc. > > In the specific case of dragonboard 410c, we pass the u-boot generated > fdt to the previous stage of bootloader (by embedding it in the > u-boot.img that is loaded by lk/aboot), which patches the fdt and passes > it back to u-boot.
Why do you need to create a weak function for this? Isn't there already a CONFIG_OF_BOARD to enable this feature? > > Signed-off-by: Rob Clark <robdcl...@gmail.com> > --- > include/fdtdec.h | 3 ++- > lib/fdtdec.c | 45 ++++++++++++++++++++++++++------------------- > 2 files changed, 28 insertions(+), 20 deletions(-) > > diff --git a/include/fdtdec.h b/include/fdtdec.h > index 4a0947c626..b9acec735a 100644 > --- a/include/fdtdec.h > +++ b/include/fdtdec.h > @@ -986,7 +986,8 @@ int fdtdec_setup(void); > > /** > * Board-specific FDT initialization. Returns the address to a device tree > blob. > - * Called when CONFIG_OF_BOARD is defined. > + * Called when CONFIG_OF_BOARD is defined, or if CONFIG_OF_SEPARATE is > defined > + * and the board implements it. > */ > void *board_fdt_blob_setup(void); > > diff --git a/lib/fdtdec.c b/lib/fdtdec.c > index d2dbd0f122..07c458673c 100644 > --- a/lib/fdtdec.c > +++ b/lib/fdtdec.c > @@ -1203,34 +1203,41 @@ int fdtdec_setup_memory_banksize(void) > } > #endif > > -int fdtdec_setup(void) > +#ifdef CONFIG_OF_SEPARATE > +/* > + * For CONFIG_OF_SEPARATE, the board may optionally implement this to > + * provide and/or fixup the fdt. > + */ > +__weak void *board_fdt_blob_setup(void) > { > -#if CONFIG_IS_ENABLED(OF_CONTROL) > -# ifdef CONFIG_OF_EMBED > - /* Get a pointer to the FDT */ > - gd->fdt_blob = __dtb_dt_begin; > -# elif defined CONFIG_OF_SEPARATE > -# ifdef CONFIG_SPL_BUILD > + void *fdt_blob = NULL; > +#ifdef CONFIG_SPL_BUILD > /* FDT is at end of BSS unless it is in a different memory region */ > if (IS_ENABLED(CONFIG_SPL_SEPARATE_BSS)) > - gd->fdt_blob = (ulong *)&_image_binary_end; > + fdt_blob = (ulong *)&_image_binary_end; > else > - gd->fdt_blob = (ulong *)&__bss_end; > + fdt_blob = (ulong *)&__bss_end; > > -# elif defined CONFIG_FIT_EMBED > - gd->fdt_blob = locate_dtb_in_fit(&_end); > +#elif defined CONFIG_FIT_EMBED > + fdt_blob = locate_dtb_in_fit(&_end); > > - if (gd->fdt_blob == NULL || gd->fdt_blob <= ((void *)&_end)) { > + if (fdt_blob == NULL || fdt_blob <= ((void *)&_end)) > puts("Failed to find proper dtb in embedded FIT Image\n"); > - return -1; > - } > - > -# else > +#else > /* FDT is at end of image */ > - gd->fdt_blob = (ulong *)&_end; > + fdt_blob = (ulong *)&_end; > # endif > -# elif defined(CONFIG_OF_BOARD) > - /* Allow the board to override the fdt address. */ > + return fdt_blob; > +} > +#endif > + > +int fdtdec_setup(void) > +{ > +#if CONFIG_IS_ENABLED(OF_CONTROL) > +# ifdef CONFIG_OF_EMBED > + /* Get a pointer to the FDT */ > + gd->fdt_blob = __dtb_dt_begin; > +# elif defined(CONFIG_OF_SEPARATE) || defined(CONFIG_OF_BOARD) > gd->fdt_blob = board_fdt_blob_setup(); > # elif defined(CONFIG_OF_HOSTFILE) > if (sandbox_read_fdt_from_file()) { > -- > 2.13.0 > Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot