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