Falcon Mode Support For Uncompressed Kernel Images

Tom Rini trini at konsulko.com
Tue Apr 19 22:30:29 CEST 2022


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/1c8f3803/attachment.sig>


More information about the U-Boot mailing list