On Tue, 13 Dec 2022 at 22:45, Marek Vasut <[email protected]> wrote: > > Commit d5ba6188dfb ("cmd: pxe_utils: Check fdtcontroladdr in label_boot") > forces '$fdtcontroladdr' DT address as a third parameter of bootm command > even if the PXE transfer pulls in a fitImage which contains configuration > node with its own DT that is preferrable to be passed to Linux. Limit the > $fdtcontroladdr fallback utilization to non-fitImages, since it is highly > likely a fitImage would come with its own DT, while single-file images do > need a separate DT. > > Fixes: d5ba6188dfb ("cmd: pxe_utils: Check fdtcontroladdr in label_boot") > Signed-off-by: Marek Vasut <[email protected]> > --- > Cc: Peter Hoyes <[email protected]> > Cc: Ramon Fried <[email protected]> > Cc: Simon Glass <[email protected]> > --- > V1: Map the kernel buffer before testing image type > V2: Update code comment to reflect the change > --- > boot/pxe_utils.c | 9 +++++---- > 1 file changed, 5 insertions(+), 4 deletions(-) > > diff --git a/boot/pxe_utils.c b/boot/pxe_utils.c > index 8133006875f..099aa2f4bc7 100644 > --- a/boot/pxe_utils.c > +++ b/boot/pxe_utils.c > @@ -617,7 +617,7 @@ static int label_boot(struct pxe_context *ctx, struct > pxe_label *label) > * bootm, and adjust argc appropriately. > * > * Scenario 3: If there is an fdtcontroladdr specified, pass it along > to > - * bootm, and adjust argc appropriately. > + * bootm, and adjust argc appropriately, unless the image type is > fitImage. > * > * Scenario 4: fdt blob is not available. > */ > @@ -724,7 +724,10 @@ static int label_boot(struct pxe_context *ctx, struct > pxe_label *label) > if (!bootm_argv[3]) > bootm_argv[3] = env_get("fdt_addr"); > > - if (!bootm_argv[3]) > + kernel_addr_r = genimg_get_kernel_addr(kernel_addr); > + buf = map_sysmem(kernel_addr_r, 0); > + > + if (!bootm_argv[3] && genimg_get_format(buf) != IMAGE_FORMAT_FIT) > bootm_argv[3] = env_get("fdtcontroladdr"); > > if (bootm_argv[3]) { > @@ -733,8 +736,6 @@ static int label_boot(struct pxe_context *ctx, struct > pxe_label *label) > bootm_argc = 4; > } > > - kernel_addr_r = genimg_get_kernel_addr(kernel_addr); > - buf = map_sysmem(kernel_addr_r, 0); > /* Try bootm for legacy and FIT format image */ > if (genimg_get_format(buf) != IMAGE_FORMAT_INVALID && > IS_ENABLED(CONFIG_CMD_BOOTM)) > -- > 2.35.1 >
Reviewed-by: Simon Glass <[email protected]>

