diff mbox series

[U-Boot] image: fit: Allow booting Aarch64 from arm

Message ID 20180514213343.19865-1-ramon.fried@gmail.com
State Deferred
Delegated to: Tom Rini
Headers show
Series [U-Boot] image: fit: Allow booting Aarch64 from arm | expand

Commit Message

Ramon Fried May 14, 2018, 9:33 p.m. UTC
Snapdragon bootloader needs to jump from 32bit to 64bit
Allow booting in these cases when CONFIG_AARCH32_SUPPORT_ARM64 is defined.

Signed-off-by: Ramon Fried <ramon.fried@gmail.com>
---
 common/image-fit.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

Comments

Michal Simek May 15, 2018, 6:15 a.m. UTC | #1
On 14.5.2018 23:33, Ramon Fried wrote:
> Snapdragon bootloader needs to jump from 32bit to 64bit
> Allow booting in these cases when CONFIG_AARCH32_SUPPORT_ARM64 is defined.
> 
> Signed-off-by: Ramon Fried <ramon.fried@gmail.com>
> ---
>  common/image-fit.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/common/image-fit.c b/common/image-fit.c
> index 5b93dceae1..62dbfbdd3d 100644
> --- a/common/image-fit.c
> +++ b/common/image-fit.c
> @@ -1253,17 +1253,24 @@ int fit_image_check_arch(const void *fit, int noffset, uint8_t arch)
>  {
>         uint8_t image_arch;
>         int aarch32_support = 0;
> +       int aarch64_support = 0;
> 
>  #ifdef CONFIG_ARM64_SUPPORT_AARCH32
>         aarch32_support = 1;
>  #endif
> 
> +#ifdef CONFIG_AARCH32_SUPPORT_ARM64
> +       aarch64_support = 1;
> +#endif
> +
>         if (fit_image_get_arch(fit, noffset, &image_arch))
>                 return 0;
>         return (arch == image_arch) ||
>                 (arch == IH_ARCH_I386 && image_arch == IH_ARCH_X86_64) ||
>                 (arch == IH_ARCH_ARM64 && image_arch == IH_ARCH_ARM &&
> -                aarch32_support);
> +                aarch32_support) ||
> +               (arch == IH_ARCH_ARM && image_arch == IH_ARCH_ARM64 &&
> +                aarch64_support);
>  }
> 
>  /**
> --
> 2.17.0
> 

Code above is aligned with previous support but I can't see that macro
in Kconfig.
Also it is kind of weird that on arm you can run i386 image. It could be
stopped later but that changes just suggest that this should be changed.

Thanks,
Michal
Tom Rini May 15, 2018, 3:58 p.m. UTC | #2
On Tue, May 15, 2018 at 08:15:31AM +0200, Michal Simek wrote:
> On 14.5.2018 23:33, Ramon Fried wrote:
> > Snapdragon bootloader needs to jump from 32bit to 64bit
> > Allow booting in these cases when CONFIG_AARCH32_SUPPORT_ARM64 is defined.
> > 
> > Signed-off-by: Ramon Fried <ramon.fried@gmail.com>
> > ---
> >  common/image-fit.c | 9 ++++++++-
> >  1 file changed, 8 insertions(+), 1 deletion(-)
> > 
> > diff --git a/common/image-fit.c b/common/image-fit.c
> > index 5b93dceae1..62dbfbdd3d 100644
> > --- a/common/image-fit.c
> > +++ b/common/image-fit.c
> > @@ -1253,17 +1253,24 @@ int fit_image_check_arch(const void *fit, int noffset, uint8_t arch)
> >  {
> >         uint8_t image_arch;
> >         int aarch32_support = 0;
> > +       int aarch64_support = 0;
> > 
> >  #ifdef CONFIG_ARM64_SUPPORT_AARCH32
> >         aarch32_support = 1;
> >  #endif
> > 
> > +#ifdef CONFIG_AARCH32_SUPPORT_ARM64
> > +       aarch64_support = 1;
> > +#endif
> > +
> >         if (fit_image_get_arch(fit, noffset, &image_arch))
> >                 return 0;
> >         return (arch == image_arch) ||
> >                 (arch == IH_ARCH_I386 && image_arch == IH_ARCH_X86_64) ||
> >                 (arch == IH_ARCH_ARM64 && image_arch == IH_ARCH_ARM &&
> > -                aarch32_support);
> > +                aarch32_support) ||
> > +               (arch == IH_ARCH_ARM && image_arch == IH_ARCH_ARM64 &&
> > +                aarch64_support);
> >  }
> > 
> >  /**
> > --
> > 2.17.0
> > 
> 
> Code above is aligned with previous support but I can't see that macro
> in Kconfig.
> Also it is kind of weird that on arm you can run i386 image. It could be
> stopped later but that changes just suggest that this should be changed.

It's the generic area where we make sure either the image is for what
we're running on, or the special cases, ie aarch64 runs arm or x8664
runs i386 :)
diff mbox series

Patch

diff --git a/common/image-fit.c b/common/image-fit.c
index 5b93dceae1..62dbfbdd3d 100644
--- a/common/image-fit.c
+++ b/common/image-fit.c
@@ -1253,17 +1253,24 @@  int fit_image_check_arch(const void *fit, int noffset, uint8_t arch)
 {
 	uint8_t image_arch;
 	int aarch32_support = 0;
+	int aarch64_support = 0;
 
 #ifdef CONFIG_ARM64_SUPPORT_AARCH32
 	aarch32_support = 1;
 #endif
 
+#ifdef CONFIG_AARCH32_SUPPORT_ARM64
+	aarch64_support = 1;
+#endif
+
 	if (fit_image_get_arch(fit, noffset, &image_arch))
 		return 0;
 	return (arch == image_arch) ||
 		(arch == IH_ARCH_I386 && image_arch == IH_ARCH_X86_64) ||
 		(arch == IH_ARCH_ARM64 && image_arch == IH_ARCH_ARM &&
-		 aarch32_support);
+		 aarch32_support) ||
+		(arch == IH_ARCH_ARM && image_arch == IH_ARCH_ARM64 &&
+		 aarch64_support);
 }
 
 /**