On Thu, Dec 28, 2023 at 01:36:54PM +0000, Simon Glass wrote:

> Standard passage provides for a bloblist to be passed from one firmware
> phase to the next. That can be used to pass the devicetree along as well.
> Add an option to support this.
> 
> Tests for this will be added as part of the Universal Payload work.
> 
> Signed-off-by: Simon Glass <s...@chromium.org>
> ---
> The discussion on this was not resolved and is now important due to the
> bloblist series from Raymond. So I am sending it again since I believe
> this is a better starting point than building on OF_BOARD
[snip]
> @@ -1662,23 +1667,42 @@ static void setup_multi_dtb_fit(void)
>  
>  int fdtdec_setup(void)
>  {
> -     int ret;
> +     int ret = -ENOENT;
> +
> +     /* If allowing a bloblist, check that first */
> +     if (CONFIG_IS_ENABLED(OF_BLOBLIST)) {
> +             ret = bloblist_maybe_init();
> +             if (!ret) {
> +                     gd->fdt_blob = bloblist_find(BLOBLISTT_CONTROL_FDT, 0);
> +                     if (gd->fdt_blob) {
> +                             gd->fdt_src = FDTSRC_BLOBLIST;
> +                             log_debug("Devicetree is in bloblist at %p\n",
> +                                       gd->fdt_blob);
> +                     } else {
> +                             log_debug("No FDT found in bloblist\n");
> +                             ret = -ENOENT;
> +                     }
> +             }
> +     }
>  
> -     /* The devicetree is typically appended to U-Boot */
> -     if (IS_ENABLED(CONFIG_OF_SEPARATE)) {
> -             gd->fdt_blob = fdt_find_separate();
> -             gd->fdt_src = FDTSRC_SEPARATE;
> -     } else { /* embed dtb in ELF file for testing / development */
> -             gd->fdt_blob = dtb_dt_embedded();
> -             gd->fdt_src = FDTSRC_EMBED;
> +     /* Otherwise, the devicetree is typically appended to U-Boot */
> +     if (ret) {
> +             if (IS_ENABLED(CONFIG_OF_SEPARATE)) {
> +                     gd->fdt_blob = fdt_find_separate();
> +                     gd->fdt_src = FDTSRC_SEPARATE;
> +             } else { /* embed dtb in ELF file for testing / development */
> +                     gd->fdt_blob = dtb_dt_embedded();
> +                     gd->fdt_src = FDTSRC_EMBED;
> +             }
>       }

This whole if/else tree looks wrong today, and then wrong with this
patch. If we have an embedded device tree, which should only be used for
development (or special case needs, I _think_ some users today are using
this for security type needs), it must win and be used. The over-ride
switch was set, and should be used. Then, I don't know if we should be
saying "the user provided a tree via OF_SEPARATE, it should be used" or
"the device has passed us a tree via standard mechanism, it should be
used" is the higher priority. I really don't know which is more valid.

-- 
Tom

Attachment: signature.asc
Description: PGP signature

Reply via email to