public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Leif Lindholm" <leif@nuviainc.com>
To: Ard Biesheuvel <ardb+tianocore@kernel.org>,
	Sami Mujawar <sami.mujawar@arm.com>
Cc: devel@edk2.groups.io, Rebecca Cran <rebecca@nuviainc.com>,
	Gerd Hoffmann <kraxel@redhat.com>,
	rfc@edk2.groups.io
Subject: Re: [RFC] [PATCH 0/2] Proposal to add EFI_MP_SERVICES_PROTOCOL support for AARCH64
Date: Thu, 7 Oct 2021 10:41:25 +0100	[thread overview]
Message-ID: <20211007094125.soldrzx7wfoa5kyw@leviathan> (raw)
In-Reply-To: <20210928111435.poztq4cksagsogbw@leviathan>

Ard/Sami - any comments?

/
    Leif

On Tue, Sep 28, 2021 at 12:14:35 +0100, Leif Lindholm wrote:
> On Fri, Sep 24, 2021 at 20:17:50 -0600, Rebecca Cran wrote:
> > I'd like to propose adding EFI_MP_SERVICES_PROTOCOL support for
> > AARCH64 systems. I've attached two patches to implement support for it
> > in the DXE phase, based on code in EmulatorPkg and UefiCpuPkg. It's added
> > under ArmPkg for now, but longer term it should probably be moved into
> > UefiCpuPkg.
> >
> > Patch 1/2 is the start of addressing the issue that the Aff0 field of
> > the MPIDR is no longer guaranteed to be the core, and should be referred
> > to in a more generic way: for example it could be the thread, with Aff1
> > being the core and Aff2 the cluster. Clearly much more work is needed
> > to fully remove that assumption.
> 
> Just to add to this:
> Aff0 was never defined by the architecture to be the "core", it was
> just the smallest schedulable entity. The intent being that whether
> you had multiple hardware threads per core or not, you could just use
> the affinity to determine whether
> There is also a bit in the MPIDR to indicate whether the core *had*
> multiple hardware threads.
> 
> In recent processors (without any change to the architecture), ARM
> thought it would be beneficial to keep software developers on their
> toes by starting to use the hyperthreading layout even for processors
> without hyperthreading support. I.e. Aff0 is always 0 even though MT
> is 0:
> https://developer.arm.com/documentation/100798/0301/Register-descriptions/AArch64-system-registers/MPIDR-EL1--Multiprocessor-Affinity-Register--EL1
> The justification being that an SoC might contain both processors
> with and without multiple hardware threads per core.
> 
> Anyway, the point is that from at least Cortex-A76 onwards, Aff0 no
> longer maps to CoreId universally, and Aff1 no longer maps to
> ClusterId, for all non-threaded implementations.
> So we need to start cleaning up this use.
> This will possibly break some out-of-tree platforms, but I figure
> we're far enough from next stable tag for that not to matter too
> much.
> 
> > Patch 2/2 implements the EFI_MP_SERVICES_PROTOCOL for DXE in Library/MpInitLib.
> 
> Worth calling out in the cover letter that this is backed by PSCI.
> 
> /
>     Leif
> 
> > CpuDxe initializes the MP support, and as a result gains a dependency on
> > MpInitLib. ArmVirt.dsc.inc needs updated to add the new library, as will
> > all AARCH64 platforms.
> > 
> > I sent out a patch for MdeModulePkg last week to add a corresponding test
> > application, MpServicesTest (see https://edk2.groups.io/g/devel/message/80878).
> > 
> > Rebecca Cran (2):
> >   ArmPkg: Replace CoreId and ClusterId with Mpidr in ARM_CORE_INFO
> >     struct
> >   ArmPkg: Add Library/MpInitLib to support EFI_MP_SERVICES_PROTOCOL
> > 
> >  ArmPkg/ArmPkg.dec                                              |    4 +
> >  ArmPkg/ArmPkg.dsc                                              |    4 +
> >  ArmPkg/Drivers/CpuDxe/AArch64/Arch.c                           |   22 +
> >  ArmPkg/Drivers/CpuDxe/Arm/Arch.c                               |   22 +
> >  ArmPkg/Drivers/CpuDxe/CpuDxe.c                                 |    2 +
> >  ArmPkg/Drivers/CpuDxe/CpuDxe.h                                 |   10 +
> >  ArmPkg/Drivers/CpuDxe/CpuDxe.inf                               |    6 +
> >  ArmPkg/Drivers/CpuDxe/CpuMpInit.c                              |  604 ++++++++
> >  ArmPkg/Include/Guid/ArmMpCoreInfo.h                            |    3 +-
> >  ArmPkg/Include/Library/ArmLib.h                                |    4 +
> >  ArmPkg/Include/Library/MpInitLib.h                             |  366 +++++
> >  ArmPkg/Library/MpInitLib/AArch64/MpFuncs.S                     |   61 +
> >  ArmPkg/Library/MpInitLib/DxeMpInitLib.inf                      |   53 +
> >  ArmPkg/Library/MpInitLib/DxeMpLib.c                            | 1498 ++++++++++++++++++++
> >  ArmPkg/Library/MpInitLib/InternalMpInitLib.h                   |  358 +++++
> >  ArmPlatformPkg/Library/ArmPlatformLibNull/ArmPlatformLibNull.c |    8 +-
> >  ArmPlatformPkg/PrePeiCore/MainMPCore.c                         |    2 +-
> >  ArmPlatformPkg/PrePi/MainMPCore.c                              |    2 +-
> >  ArmVirtPkg/ArmVirt.dsc.inc                                     |    3 +
> >  19 files changed, 3024 insertions(+), 8 deletions(-)
> >  create mode 100644 ArmPkg/Drivers/CpuDxe/AArch64/Arch.c
> >  create mode 100644 ArmPkg/Drivers/CpuDxe/Arm/Arch.c
> >  create mode 100644 ArmPkg/Drivers/CpuDxe/CpuMpInit.c
> >  create mode 100644 ArmPkg/Include/Library/MpInitLib.h
> >  create mode 100644 ArmPkg/Library/MpInitLib/AArch64/MpFuncs.S
> >  create mode 100644 ArmPkg/Library/MpInitLib/DxeMpInitLib.inf
> >  create mode 100644 ArmPkg/Library/MpInitLib/DxeMpLib.c
> >  create mode 100644 ArmPkg/Library/MpInitLib/InternalMpInitLib.h
> > 
> > -- 
> > 2.31.1
> > 

  reply	other threads:[~2021-10-07  9:41 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-25  2:17 [RFC] [PATCH 0/2] Proposal to add EFI_MP_SERVICES_PROTOCOL support for AARCH64 Rebecca Cran
2021-09-25  2:17 ` [RFC] [PATCH 1/2] ArmPkg: Replace CoreId and ClusterId with Mpidr in ARM_CORE_INFO struct Rebecca Cran
2021-09-25  2:17 ` [RFC] [PATCH 2/2] ArmPkg: Add Library/MpInitLib to support EFI_MP_SERVICES_PROTOCOL Rebecca Cran
2021-09-28 11:14 ` [RFC] [PATCH 0/2] Proposal to add EFI_MP_SERVICES_PROTOCOL support for AARCH64 Leif Lindholm
2021-10-07  9:41   ` Leif Lindholm [this message]
2021-10-07 10:03     ` Ard Biesheuvel
2021-10-07 11:02       ` Leif Lindholm
2021-10-08 14:51         ` Ard Biesheuvel
2021-10-11 12:28           ` Leif Lindholm
2021-10-11 14:20             ` Samer El-Haj-Mahmoud
2021-10-11 15:01               ` [edk2-rfc] " Leif Lindholm
2021-10-11 21:52                 ` Samer El-Haj-Mahmoud
2021-10-14 13:14                   ` Leif Lindholm
2021-10-18  9:21                     ` Sami Mujawar
2021-10-18 11:54                       ` Leif Lindholm
2022-01-19 10:28                         ` [edk2-devel] " Sami Mujawar
2021-10-14 12:41   ` Rebecca Cran

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20211007094125.soldrzx7wfoa5kyw@leviathan \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox