From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f47.google.com (mail-wr1-f47.google.com [209.85.221.47]) by mx.groups.io with SMTP id smtpd.web09.9364.1633599689214197415 for ; Thu, 07 Oct 2021 02:41:29 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@nuviainc-com.20210112.gappssmtp.com header.s=20210112 header.b=7LNVWpSD; spf=pass (domain: nuviainc.com, ip: 209.85.221.47, mailfrom: leif@nuviainc.com) Received: by mail-wr1-f47.google.com with SMTP id i12so4534041wrb.7 for ; Thu, 07 Oct 2021 02:41:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nuviainc-com.20210112.gappssmtp.com; s=20210112; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=EFoBRE3haJ92lAM0Mv0/aRbEzwlr9WNypGprHLV4ENM=; b=7LNVWpSDbEfeGzMo84bo+TPavzfdpG4QyFEfS5Il5tPPEqoLGopV+vWSbPYzcQ7Me1 9/0UY9AeXaaeMDzTRMXBBHQwEELc/VBcZp6xVJSv1PBLEFmCvvGtMnmuQTqggQ1cvuKi VqCYbuoUjGg/zsSriGoqCcoZ/OXLJnVHaicSFcKjo5jGK58Vz3UoJQxTXMv9u1x1boq9 Rw2tEJLzY92bLSM2YSasYfjHOqUtPnAfecizmQ6/QvYeqYI6Wc7edhJDQkCmAYroyF2l kOS2fSFTFQz40HvwIZDKQYdmfXLPS4snmIl959BeboBGljGCjvKPduF+IncN5AQA0IAt 5Nrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=EFoBRE3haJ92lAM0Mv0/aRbEzwlr9WNypGprHLV4ENM=; b=TOIG3N7qDsik/V7KwRLUEjEqVuILOpCwo00k59sW/IbvGOvMHVhAv4GeoUC9MCv7u7 vJZVcV7qAP1suxN76zPOOx/N5KtsP+84swdK0bTWBPdq2BUAChr5Usta7BNefW3wHPmg fCtR6Z8+0L5OknPNnMzYtFNQuoHT7pmGYoO6KJ22bG7vBi6cwGi2oKOkeHE2JWz35Fnk kE7a/SjZETOupjtsMPvOY7IuWs5lVlvggLLiXKSjMCBWULc/SgKREjJEFGMqAqPQNkMC nFVpKsVX4XW+U5iLXfb5BqMEv69iOs6EdhgdTPdcLvRyn2Wd1W+H0j/bI9Ny+lPRwWaZ yudg== X-Gm-Message-State: AOAM532uTYV2EcXLzD9/KvUtdU7vGR5YIbtDI/ciGFe5OWxSdwtig35+ I8b+EtYetLWLh8H9F+X7wYSc1Q== X-Google-Smtp-Source: ABdhPJyROE66W7wsK6Vm15xw22Y9dBB2l5OZsz/xr1JFNMVxSvaSacpYG5S9cSk5KJIH5arL0Jopwg== X-Received: by 2002:a1c:2543:: with SMTP id l64mr15274999wml.9.1633599687210; Thu, 07 Oct 2021 02:41:27 -0700 (PDT) Return-Path: Received: from leviathan (cpc92314-cmbg19-2-0-cust559.5-4.cable.virginm.net. [82.11.186.48]) by smtp.gmail.com with ESMTPSA id r18sm17625044wrs.47.2021.10.07.02.41.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 02:41:26 -0700 (PDT) Date: Thu, 7 Oct 2021 10:41:25 +0100 From: "Leif Lindholm" To: Ard Biesheuvel , Sami Mujawar Cc: devel@edk2.groups.io, Rebecca Cran , Gerd Hoffmann , rfc@edk2.groups.io Subject: Re: [RFC] [PATCH 0/2] Proposal to add EFI_MP_SERVICES_PROTOCOL support for AARCH64 Message-ID: <20211007094125.soldrzx7wfoa5kyw@leviathan> References: <20210925021752.20678-1-rebecca@nuviainc.com> <20210928111435.poztq4cksagsogbw@leviathan> MIME-Version: 1.0 In-Reply-To: <20210928111435.poztq4cksagsogbw@leviathan> Content-Type: text/plain; charset=us-ascii Content-Disposition: inline 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 > >