mbox series

[boot-wrapper,v3,0/8] Add Armv8-R AArch64 support

Message ID 20210525062509.201464-1-jaxson.han@arm.com (mailing list archive)
Headers show
Series Add Armv8-R AArch64 support | expand

Message

Jaxson Han May 25, 2021, 6:25 a.m. UTC
Currently, we cannot boot Linux with boot-wrapper on Armv8-R AArch64:
1. The Armv8-R AArch64 profile does not support the EL3.
2. The Armv8-R AArch64 EL2 only supports a PMSA, which Linux does not
support. So it's necessary to drop into EL1 before entering the kernel.
3. There is no EL2 booting code for Armv8-R AArch64 and no
configuration for dropping to EL1 in boot-wrapper.

These patches enable boot-wrapper booting Linux with Armv8-R AArch64:
Patch 1 allows boot-wrapper to boot on more platforms.
Patch 2 renames some labels as preparations for booting from lower EL.
Patch 3 remove the redundant setup_stack.
Patch 4-5 does some preparations for lower EL booting.
Patch 6 prepares for GICv3 initialization with EL2.
Patch 7 adds necessary EL2 registers.
Patch 8 adds auto-detection for Armv8-R AArch64 to drop into EL1
before entering the kernel.

Refs: Arm Architecture Reference Manual Supplement - Armv8, for
Armv8-R AArch64 architecture profile.
[https://developer.arm.com/documentation/ddi0600/latest/]

---
v2 -> v3:
1. Refine Patch 1 and move relevant changes into Patch 5 and 8.
2. Refine Patch 8, more detailed comments and guarantees that those
CPUID fields never lose features when the value in a field increases.

Jaxson Han (8):
  Decouple V2M_SYS config by auto-detect dtb node
  aarch64: Rename labels and prepare for lower EL booting
  aarch64: Remove the redundant setup_stack
  aarch64: Prepare for EL1 booting
  aarch64: Prepare for lower EL booting
  gic-v3: Prepare for gicv3 with EL2
  aarch64: Prepare for booting with EL2
  aarch64: Introduce EL2 boot code for Armv8-R AArch64

 Makefile.am                       |   4 +-
 arch/aarch32/include/asm/gic-v3.h |   7 ++
 arch/aarch64/boot.S               | 151 +++++++++++++++++++++++++++---
 arch/aarch64/include/asm/cpu.h    |   3 +
 arch/aarch64/include/asm/gic-v3.h |  38 +++++++-
 arch/aarch64/psci.S               |  13 +--
 arch/aarch64/spin.S               |   8 +-
 arch/aarch64/utils.S              |  10 +-
 gic-v3.c                          |   2 +-
 platform.c                        |   4 +
 10 files changed, 208 insertions(+), 32 deletions(-)

Comments

Andre Przywara June 17, 2021, 11:57 a.m. UTC | #1
On Tue, 25 May 2021 14:25:01 +0800
Jaxson Han <jaxson.han@arm.com> wrote:

Hi Mark,

> Currently, we cannot boot Linux with boot-wrapper on Armv8-R AArch64:
> 1. The Armv8-R AArch64 profile does not support the EL3.
> 2. The Armv8-R AArch64 EL2 only supports a PMSA, which Linux does not
> support. So it's necessary to drop into EL1 before entering the kernel.
> 3. There is no EL2 booting code for Armv8-R AArch64 and no
> configuration for dropping to EL1 in boot-wrapper.
> 
> These patches enable boot-wrapper booting Linux with Armv8-R AArch64:
> Patch 1 allows boot-wrapper to boot on more platforms.
> Patch 2 renames some labels as preparations for booting from lower EL.
> Patch 3 remove the redundant setup_stack.
> Patch 4-5 does some preparations for lower EL booting.
> Patch 6 prepares for GICv3 initialization with EL2.
> Patch 7 adds necessary EL2 registers.
> Patch 8 adds auto-detection for Armv8-R AArch64 to drop into EL1
> before entering the kernel.

So I reviewed the whole series (replies with the missing tags for 2/8
and 8/8 are on the list), and am now happy with it.
I also tested this for regressions with various v8-A models. I had
some issues with the SMMU on RevC models, but this was also with
boot-wrapper master and is unrelated to this series (as the kernel
starts booting).

So from my point of view this is good to go. Please let us know if you
need more information or how we can help with anything to get this
merged.

Cheers,
Andre
 
> Refs: Arm Architecture Reference Manual Supplement - Armv8, for
> Armv8-R AArch64 architecture profile.
> [https://developer.arm.com/documentation/ddi0600/latest/]
> 
> ---
> v2 -> v3:
> 1. Refine Patch 1 and move relevant changes into Patch 5 and 8.
> 2. Refine Patch 8, more detailed comments and guarantees that those
> CPUID fields never lose features when the value in a field increases.
> 
> Jaxson Han (8):
>   Decouple V2M_SYS config by auto-detect dtb node
>   aarch64: Rename labels and prepare for lower EL booting
>   aarch64: Remove the redundant setup_stack
>   aarch64: Prepare for EL1 booting
>   aarch64: Prepare for lower EL booting
>   gic-v3: Prepare for gicv3 with EL2
>   aarch64: Prepare for booting with EL2
>   aarch64: Introduce EL2 boot code for Armv8-R AArch64
> 
>  Makefile.am                       |   4 +-
>  arch/aarch32/include/asm/gic-v3.h |   7 ++
>  arch/aarch64/boot.S               | 151 +++++++++++++++++++++++++++---
>  arch/aarch64/include/asm/cpu.h    |   3 +
>  arch/aarch64/include/asm/gic-v3.h |  38 +++++++-
>  arch/aarch64/psci.S               |  13 +--
>  arch/aarch64/spin.S               |   8 +-
>  arch/aarch64/utils.S              |  10 +-
>  gic-v3.c                          |   2 +-
>  platform.c                        |   4 +
>  10 files changed, 208 insertions(+), 32 deletions(-)
>
Jaxson Han July 13, 2021, 2:18 a.m. UTC | #2
Hi Mark and Andre,
I hope you are doing well. :)
May I ask about the situation of these patches and what else I can do to
improve them if needed?

Cheers,
Jaxson

> -----Original Message-----
> From: Andre Przywara <andre.przywara@arm.com>
> Sent: Thursday, June 17, 2021 7:58 PM
> To: Mark Rutland <Mark.Rutland@arm.com>
> Cc: Jaxson Han <Jaxson.Han@arm.com>; linux-arm-
> kernel@lists.infradead.org; Wei Chen <Wei.Chen@arm.com>
> Subject: Re: [boot-wrapper PATCH v3 0/8] Add Armv8-R AArch64 support
> 
> On Tue, 25 May 2021 14:25:01 +0800
> Jaxson Han <jaxson.han@arm.com> wrote:
> 
> Hi Mark,
> 
> > Currently, we cannot boot Linux with boot-wrapper on Armv8-R AArch64:
> > 1. The Armv8-R AArch64 profile does not support the EL3.
> > 2. The Armv8-R AArch64 EL2 only supports a PMSA, which Linux does not
> > support. So it's necessary to drop into EL1 before entering the kernel.
> > 3. There is no EL2 booting code for Armv8-R AArch64 and no
> > configuration for dropping to EL1 in boot-wrapper.
> >
> > These patches enable boot-wrapper booting Linux with Armv8-R AArch64:
> > Patch 1 allows boot-wrapper to boot on more platforms.
> > Patch 2 renames some labels as preparations for booting from lower EL.
> > Patch 3 remove the redundant setup_stack.
> > Patch 4-5 does some preparations for lower EL booting.
> > Patch 6 prepares for GICv3 initialization with EL2.
> > Patch 7 adds necessary EL2 registers.
> > Patch 8 adds auto-detection for Armv8-R AArch64 to drop into EL1
> > before entering the kernel.
> 
> So I reviewed the whole series (replies with the missing tags for 2/8 and 8/8
> are on the list), and am now happy with it.
> I also tested this for regressions with various v8-A models. I had some issues
> with the SMMU on RevC models, but this was also with boot-wrapper master
> and is unrelated to this series (as the kernel starts booting).
> 
> So from my point of view this is good to go. Please let us know if you need
> more information or how we can help with anything to get this merged.
> 
> Cheers,
> Andre
> 
> > Refs: Arm Architecture Reference Manual Supplement - Armv8, for
> > Armv8-R AArch64 architecture profile.
> > [https://developer.arm.com/documentation/ddi0600/latest/]
> >
> > ---
> > v2 -> v3:
> > 1. Refine Patch 1 and move relevant changes into Patch 5 and 8.
> > 2. Refine Patch 8, more detailed comments and guarantees that those
> > CPUID fields never lose features when the value in a field increases.
> >
> > Jaxson Han (8):
> >   Decouple V2M_SYS config by auto-detect dtb node
> >   aarch64: Rename labels and prepare for lower EL booting
> >   aarch64: Remove the redundant setup_stack
> >   aarch64: Prepare for EL1 booting
> >   aarch64: Prepare for lower EL booting
> >   gic-v3: Prepare for gicv3 with EL2
> >   aarch64: Prepare for booting with EL2
> >   aarch64: Introduce EL2 boot code for Armv8-R AArch64
> >
> >  Makefile.am                       |   4 +-
> >  arch/aarch32/include/asm/gic-v3.h |   7 ++
> >  arch/aarch64/boot.S               | 151 +++++++++++++++++++++++++++---
> >  arch/aarch64/include/asm/cpu.h    |   3 +
> >  arch/aarch64/include/asm/gic-v3.h |  38 +++++++-
> >  arch/aarch64/psci.S               |  13 +--
> >  arch/aarch64/spin.S               |   8 +-
> >  arch/aarch64/utils.S              |  10 +-
> >  gic-v3.c                          |   2 +-
> >  platform.c                        |   4 +
> >  10 files changed, 208 insertions(+), 32 deletions(-)
> >