Falcon Mode Support For Uncompressed Kernel Images

Tom Rini trini at konsulko.com
Tue Apr 19 23:28:28 CEST 2022


On Tue, Apr 19, 2022 at 05:16:21PM -0400, Nathan Barrett-Morrison wrote:

> Hi Tom,
> 
> Let's see if this works any better.  Using a new mail client that is supposed to not modify whitespace:
> 
> From f1c34333f79996bd2927a60f4858c01699431cba Mon Sep 17 00:00:00 2001
> From: Nathan Barrett Morrison <nathan.morrison at timesys.com>
> Date: Wed, 2 Feb 2022 15:05:18 -0500
> Subject: [PATCH v2] Add in the ability to load and boot an uncompressed kernel
>  image during the Falcon Mode boot sequence.
> 
> This is required for architectures which do not support compressed kernel images (i.e. ARM64).  This is only used while not booting via FIT image.
> 
> Signed-off-by: Nathan Barrett-Morrison <nathan.morrison at timesys.com>
> Cc: Tom Rini <trini at konsulko.com>
> ---
> Changes for v2:
>    - Remove original SPL_OS_BOOT_UNCOMPRESSED option and check via CMD_BOOTI and CMD_BOOTZ instead

Whitespace is fine, but since it's in reply to the previous email, that
really throws patchwork for a loop so this doesn't show up yet.  Please
do this is a new thread, thanks.

> 
>  arch/arm/lib/Makefile |  5 ++++-
>  common/spl/spl.c      | 21 +++++++++++++++++++++
>  2 files changed, 25 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm/lib/Makefile b/arch/arm/lib/Makefile
> index c603fe61bc..08b7475e37 100644
> --- a/arch/arm/lib/Makefile
> +++ b/arch/arm/lib/Makefile
> @@ -36,7 +36,10 @@ obj-$(CONFIG_CMD_BOOTZ) += bootm.o zimage.o
>  obj-$(CONFIG_SYS_L2_PL310) += cache-pl310.o
>  else
>  obj-$(CONFIG_$(SPL_TPL_)FRAMEWORK) += spl.o
> -obj-$(CONFIG_SPL_FRAMEWORK) += zimage.o
> +ifdef CONFIG_SPL_FRAMEWORK
> +obj-$(CONFIG_CMD_BOOTI) += image.o
> +obj-$(CONFIG_CMD_BOOTZ) += zimage.o
> +endif
>  obj-$(CONFIG_OF_LIBFDT) += bootm-fdt.o
>  endif
>  ifdef CONFIG_ARM64
> diff --git a/common/spl/spl.c b/common/spl/spl.c
> index c9750ee163..7b86443f1b 100644
> --- a/common/spl/spl.c
> +++ b/common/spl/spl.c
> @@ -107,6 +107,11 @@ int __weak bootz_setup(ulong image, ulong *start, ulong *end)
>  {
>  	 return 1;
>  }
> +
> +int __weak booti_setup(ulong image, ulong *relocated_addr, ulong *size, bool force_reloc)
> +{
> +	 return 1;
> +}
>  #endif
>  
>  /* Weak default function for arch/board-specific fixups to the spl_image_info */
> @@ -366,6 +371,21 @@ int spl_parse_image_header(struct spl_image_info *spl_image,
>  #endif
>  
>  #if CONFIG_IS_ENABLED(OS_BOOT)
> +#if defined(CMD_BOOTI)
> +		ulong start, size;
> +
> +		if (!booti_setup((ulong)header, &start, &size, 0)) {
> +			spl_image->name = "Linux";
> +			spl_image->os = IH_OS_LINUX;
> +			spl_image->load_addr = start;
> +			spl_image->entry_point = start;
> +			spl_image->size = size;
> +			debug(SPL_TPL_PROMPT
> +			      "payload Image, load addr: 0x%lx size: %d\n",
> +			      spl_image->load_addr, spl_image->size);
> +			return 0;
> +		}
> +#elif defined(CMD_BOOTZ)
>  		ulong start, end;
>  
>  		if (!bootz_setup((ulong)header, &start, &end)) {
> @@ -379,6 +399,7 @@ int spl_parse_image_header(struct spl_image_info *spl_image,
>  			      spl_image->load_addr, spl_image->size);
>  			return 0;
>  		}
> +#endif
>  #endif
>  
>  		if (!spl_parse_board_header(spl_image, bootdev, (const void *)header, sizeof(*header)))
> -- 
> 2.30.2
> 
> On 4/19/22 16:30, Tom Rini wrote:
> > On Wed, Feb 02, 2022 at 04:53:11PM -0500, Nathan Barrett-Morrison wrote:
> >> Hi Tom,
> >>
> >> I've attached version 2 of the patch.  I believe this should adhere more
> >> closely to your suggestions.
> >>
> >> Keep in mind, CONFIG_IS_ENABLED will not work for checking
> >> CMD_BOOTI/CMD_BOOTZ in this case, as there is no CONFIG_SPL_CMD_BOOTx.  So,
> >> I'm just directly checking if it's defined instead.
> >>
> >> I verified both CONFIG_IS_ENABLED() and IS_ENABLED() did not work.
> >>
> >> Sincerely,
> >> Nathan
> >>
> >> On Mon, Jan 31, 2022 at 10:35 AM Tom Rini <trini at konsulko.com> wrote:
> >>
> >>> On Mon, Jan 31, 2022 at 10:23:58AM -0500, Nathan Barrett-Morrison wrote:
> >>>
> >>>> Hi Tom,
> >>>>
> >>>> Yea, I'm not sure if uncompressed ARM32 would work, but I don't believe
> >>> it
> >>>> was ever working to begin with... as bootz_setup is being called right
> >>> now
> >>>> ( @
> >>> https://source.denx.de/u-boot/u-boot/-/blob/master/common/spl/spl.c#L366
> >>>> )
> >>>>
> >>>> My intent was for SPL_OS_BOOT_UNCOMPRESSED to only be used for platforms
> >>>> which need booti_setup (ARM64, ...).
> >>>>
> >>>> So... I could add a dependency on ARM64 in the config option or I could
> >>>> remove the option altogether and let the booti_setup fail and fallback to
> >>>> bootz_setup.  Would either of those work for you?
> >>>
> >>> The code and logic overall needs a bit of refactoring to support
> >>> "booti", "bootz" and also FIT images.  I believe FIT images are how
> >>> anyone doing falcon mode on arm64 has worked thus far.  booti/bootz
> >>> should only be an option when CMD_BOOTI/Z is set, and FIT should depend
> >>> on SPL_LOAD_FIT already.
> >>>
> >>> --
> >>> Tom
> >>>
> > 
> >> From 5d37f2a930e7cb3455b6ec925ec6e67b40d4c022 Mon Sep 17 00:00:00 2001
> >> From: Nathan Barrett Morrison <nathan.morrison at timesys.com>
> >> Date: Wed, 2 Feb 2022 15:05:18 -0500
> >> Subject: [PATCH v2] Add in the ability to load and boot an uncompressed kernel
> >>  image during the Falcon Mode boot sequence.
> >>
> >> This is required for architectures which do not support compressed kernel images (i.e. ARM64).  This is only used while not booting via FIT image.
> >>
> >> Signed-off-by: Nathan Barrett-Morrison <nathan.morrison at timesys.com>
> >> Cc: Tom Rini <trini at konsulko.com>
> >> ---
> >> Changes for v2:
> >>    - Remove original SPL_OS_BOOT_UNCOMPRESSED option and check via CMD_BOOTI and CMD_BOOTZ instead
> >>
> >>  arch/arm/lib/Makefile |  5 ++++-
> >>  common/spl/spl.c      | 21 +++++++++++++++++++++
> >>  2 files changed, 25 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/arch/arm/lib/Makefile b/arch/arm/lib/Makefile
> >> index c48e1f622d..57e49f69f7 100644
> >> --- a/arch/arm/lib/Makefile
> >> +++ b/arch/arm/lib/Makefile
> >> @@ -36,7 +36,10 @@ obj-$(CONFIG_CMD_BOOTZ) += bootm.o zimage.o
> >>  obj-$(CONFIG_SYS_L2_PL310) += cache-pl310.o
> >>  else
> >>  obj-$(CONFIG_$(SPL_TPL_)FRAMEWORK) += spl.o
> >> -obj-$(CONFIG_SPL_FRAMEWORK) += zimage.o
> >> +ifdef CONFIG_SPL_FRAMEWORK
> >> +obj-$(CONFIG_CMD_BOOTI) += image.o
> >> +obj-$(CONFIG_CMD_BOOTZ) += zimage.o
> >> +endif
> >>  obj-$(CONFIG_OF_LIBFDT) += bootm-fdt.o
> >>  endif
> >>  ifdef CONFIG_ARM64
> >> diff --git a/common/spl/spl.c b/common/spl/spl.c
> >> index f51d1f3205..1f6b3f1ac8 100644
> >> --- a/common/spl/spl.c
> >> +++ b/common/spl/spl.c
> >> @@ -104,6 +104,11 @@ int __weak bootz_setup(ulong image, ulong *start, ulong *end)
> >>  {
> >>  	 return 1;
> >>  }
> >> +
> >> +int __weak booti_setup(ulong image, ulong *relocated_addr, ulong *size, bool force_reloc)
> >> +{
> >> +	 return 1;
> >> +}
> >>  #endif
> >>  
> >>  /* Weak default function for arch/board-specific fixups to the spl_image_info */
> >> @@ -354,6 +359,21 @@ int spl_parse_image_header(struct spl_image_info *spl_image,
> >>  #endif
> >>  
> >>  #if CONFIG_IS_ENABLED(OS_BOOT)
> >> +#if defined(CMD_BOOTI)
> >> +		ulong start, size;
> >> +
> >> +		if (!booti_setup((ulong)header, &start, &size, 0)) {
> >> +			spl_image->name = "Linux";
> >> +			spl_image->os = IH_OS_LINUX;
> >> +			spl_image->load_addr = start;
> >> +			spl_image->entry_point = start;
> >> +			spl_image->size = size;
> >> +			debug(SPL_TPL_PROMPT
> >> +			      "payload Image, load addr: 0x%lx size: %d\n",
> >> +			      spl_image->load_addr, spl_image->size);
> >> +			return 0;
> >> +		}
> >> +#elif defined(CMD_BOOTZ)
> >>  		ulong start, end;
> >>  
> >>  		if (!bootz_setup((ulong)header, &start, &end)) {
> >> @@ -367,6 +387,7 @@ int spl_parse_image_header(struct spl_image_info *spl_image,
> >>  			      spl_image->load_addr, spl_image->size);
> >>  			return 0;
> >>  		}
> >> +#endif
> >>  #endif
> >>  
> >>  		if (!spl_parse_board_header(spl_image, (const void *)header, sizeof(*header)))
> > 
> > Sorry for the late response.  Attached patches aren't picked up by
> > patchwork.  I think this looks OK, but can you please re-send it
> > directly rather than as attachment?  Thanks.
> > 

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20220419/93db70d4/attachment.sig>


More information about the U-Boot mailing list