diff mbox series

[v2] cmd: pxe_utils: Limit fdtcontroladdr usage to non-fitImage

Message ID 20221214064518.753432-1-marex@denx.de
State Accepted
Commit 519e6641dbdd46907feac094ccd032743f4174b0
Delegated to: Tom Rini
Headers show
Series [v2] cmd: pxe_utils: Limit fdtcontroladdr usage to non-fitImage | expand

Commit Message

Marek Vasut Dec. 14, 2022, 6:45 a.m. UTC
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 <marex@denx.de>
---
Cc: Peter Hoyes <Peter.Hoyes@arm.com>
Cc: Ramon Fried <rfried.dev@gmail.com>
Cc: Simon Glass <sjg@chromium.org>
---
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(-)

Comments

Quentin Schulz Dec. 14, 2022, 3:23 p.m. UTC | #1
Hi Marek,

On 12/14/22 07:45, Marek Vasut 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.
> 

Reviewed-by: Quentin Schulz <quentin.schulz@theobroma-systems.com>
Tested-by: Quentin Schulz <quentin.schulz@theobroma-systems.com>

Tested on top of an almost vanilla v2022.10 on Ringneck PX30, the FDT 
from the selected fitimage configuration (via #conf in kernel field in 
extlinux.conf) is taken into account.

Not sure overriding the DT gotten from the fit image wasn't a use-case 
Peter wanted to support though.

Cheers,
Quentin

> Fixes: d5ba6188dfb ("cmd: pxe_utils: Check fdtcontroladdr in label_boot")
> Signed-off-by: Marek Vasut <marex@denx.de>
> ---
> Cc: Peter Hoyes <Peter.Hoyes@arm.com>
> Cc: Ramon Fried <rfried.dev@gmail.com>
> Cc: Simon Glass <sjg@chromium.org>
> ---
> 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))
Marek Vasut Dec. 14, 2022, 3:25 p.m. UTC | #2
On 12/14/22 16:23, Quentin Schulz wrote:
> Hi Marek,

Hi,

> On 12/14/22 07:45, Marek Vasut 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.
>>
> 
> Reviewed-by: Quentin Schulz <quentin.schulz@theobroma-systems.com>
> Tested-by: Quentin Schulz <quentin.schulz@theobroma-systems.com>
> 
> Tested on top of an almost vanilla v2022.10 on Ringneck PX30, the FDT 
> from the selected fitimage configuration (via #conf in kernel field in 
> extlinux.conf) is taken into account.
> 
> Not sure overriding the DT gotten from the fit image wasn't a use-case 
> Peter wanted to support though.

I am hoping to get feedback from Peter, but that kind of behavior would 
be rather odd. If user wants to use fdtcontroladdr DT, then just don't 
add DT fdt property into the configuration node entry in the fitImage.
Simon Glass Dec. 14, 2022, 11:56 p.m. UTC | #3
On Tue, 13 Dec 2022 at 22:45, Marek Vasut <marex@denx.de> 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 <marex@denx.de>
> ---
> Cc: Peter Hoyes <Peter.Hoyes@arm.com>
> Cc: Ramon Fried <rfried.dev@gmail.com>
> Cc: Simon Glass <sjg@chromium.org>
> ---
> 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 <sjg@chromium.org>
Peter Hoyes Dec. 15, 2022, 2:21 p.m. UTC | #4
On 14/12/2022 15:25, Marek Vasut wrote:
> On 12/14/22 16:23, Quentin Schulz wrote:
>> Hi Marek,
>
> Hi,
>
>> On 12/14/22 07:45, Marek Vasut 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.
>>>
>>
>> Reviewed-by: Quentin Schulz <quentin.schulz@theobroma-systems.com>
>> Tested-by: Quentin Schulz <quentin.schulz@theobroma-systems.com>
>>
>> Tested on top of an almost vanilla v2022.10 on Ringneck PX30, the FDT 
>> from the selected fitimage configuration (via #conf in kernel field 
>> in extlinux.conf) is taken into account.
>>
>> Not sure overriding the DT gotten from the fit image wasn't a 
>> use-case Peter wanted to support though.
>
> I am hoping to get feedback from Peter, but that kind of behavior 
> would be rather odd. If user wants to use fdtcontroladdr DT, then just 
> don't add DT fdt property into the configuration node entry in the 
> fitImage.

Reviewed-by: Peter Hoyes <peter.hoyes@arm.com>
Tested-by: Peter Hoyes <peter.hoyes@arm.com>

Tested with an fdtcontroladdr provided by a prior boot stage (TF-A) on 
an Arm FVP.

The implemented behavior works for me. We do not have any need to 
override the DT from a FIT image.

Thanks,

Peter
Neil Armstrong Jan. 2, 2023, 10:09 a.m. UTC | #5
On 14/12/2022 07:45, Marek Vasut 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 <marex@denx.de>
> ---
> Cc: Peter Hoyes <Peter.Hoyes@arm.com>
> Cc: Ramon Fried <rfried.dev@gmail.com>
> Cc: Simon Glass <sjg@chromium.org>
> ---
> 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))



Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Tom Rini Jan. 6, 2023, 4:52 p.m. UTC | #6
On Wed, Dec 14, 2022 at 07:45:18AM +0100, Marek Vasut 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 <marex@denx.de>
> Reviewed-by: Quentin Schulz <quentin.schulz@theobroma-systems.com>
> Tested-by: Quentin Schulz <quentin.schulz@theobroma-systems.com>
> Reviewed-by: Simon Glass <sjg@chromium.org>
> Reviewed-by: Peter Hoyes <peter.hoyes@arm.com>
> Tested-by: Peter Hoyes <peter.hoyes@arm.com>
> Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>

Applied to u-boot/master, thanks!
diff mbox series

Patch

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))