On Wed, 6 Mar 2019 at 13:41, Achin Gupta <achin.gu...@arm.com> wrote: > > On Wed, Mar 06, 2019 at 10:37:58AM +0100, Ard Biesheuvel wrote: > > (adding Achin and Charles) > > > > On Wed, 6 Mar 2019 at 10:16, Ni, Ray <ray...@intel.com> wrote: > > > > > > > -----Original Message----- > > > > From: edk2-devel <edk2-devel-boun...@lists.01.org> On Behalf Of Ard > > > > Biesheuvel > > > > Sent: Wednesday, March 6, 2019 3:38 PM > > > > To: Ni, Ray <ray...@intel.com> > > > > Cc: edk2-devel@lists.01.org > > > > Subject: Re: [edk2] Does ARM platform produce MP protocol? > > > > > > > > On Wed, 6 Mar 2019 at 06:44, Ni, Ray <ray...@intel.com> wrote: > > > > > > > > > > Ard, Leif, > > > > > I am a bit interested in how ARM platform supports the MP? > > > > > PI Spec defines below protocol but I failed to find a driver in ARM > > > > > platform > > > > producing this protocol. > > > > > Or did I miss anything? > > > > > > > > > > > > > No you are right. We don't expose that on ARM, since UEFI only runs on a > > > > single core. Bringing up and taking down cores is done via a protocol > > > > called > > > > PSCI, which is implemented by firmware running at a higher privilege > > > > level. > > > > > > > > So while it would be possible to implement the MP protocol on top of > > > > PSCI, > > > > we haven't identified a use case for it yet. (The OS calls PSCI > > > > directly to boot > > > > the secondary cores) > > IIUC, the MP protocol enables communication between processors that are > already > up instead of bringing them up or taking them down. So, it is orthogonal to > PSCI. Is that what you meant? >
Surely, StartupThisAP starts up the AP, no? In any case, I didn't dig any deeper, but I know that PSCI can be used (even in the UEFI context) to execute pieces of code on another core (ACS uses this IIRC) > > > > > > Is below EFI_MM_MP_PROTOCOL (added in PI spec 1.6) implemented in ARM? > > > Or will it be implemented by an ARM module? > > > > No it is currently not implemented, and I am not aware of any plans to do > > so. > > +1. There is no need to do this until UEFI runs on a single core on Arm. > until -> as long as ?? > > > > > I am asking this because MP_SERVICES protocol exposes CPU location > > > information > > > (Package/Core/Thread) through *GetProcessorInfo*, but MM_MP protocol > > > doesn't > > > have a way to expose that information. > > > If such location information isn't exposed by MM_MP, is that because ARM > > > doesn't > > > care about the location information? Or because ARM cares but forgot to > > > add similar > > > *GetProcessorInfo* interface to MM_MP when changing the PI spec? > > > Or ARM doesn't use the MM_MP at all? > > Even if Arm used this protocol, it can work with the logical processor > number. I > don't see a need to expose the location information to the caller. It seems > very > Intel specific. Is the EFI_MP_SERVICES_PROTOCOL used on Arm? > No, that is what started the discussion. > > > > > > > I don't know the history of this protocol and who proposed it, but > > today, we don't have a need for running per-CPU initialization code in > > the context of MM. Even if MM is a component of the more privileged > > firmware running on an ARM system, it is running in a sandbox that was > > primarily designed around exposing MM services to UEFI code running at > > the same privilege level as the OS (such as the authenticated variable > > store). Platform initialization code (which is more likely to require > > dispatch to each core) runs in the secure world as well, but not in > > the context of MM. > > > > I will let Achin chime in here as well. > > +1. > > I will let Charles comment on the history. Maybe this protocol was designed > for Arm systems where MM is the most privileged firmware. The upstream > implementation runs MM in the lowest privilege level. Either way, this > protocol > sense only when MM on Arm is MP capable. > > cheers, > Achin > > > > > > > > > typedef struct _EFI_MM_MP_PROTOCOL { > > > UINT32 Revision, > > > UINT32 Attributes, > > > EFI_MM_ GET_NUMBER_OF_PROCESSORS GetNumberOfProcessors, > > > EFI_MM_DISPATCH_PROCEDURE DispatchProcedure, > > > EFI_MM_BROADCAST_PROCEDURE BroadcastProcedure, > > > EFI_MM_SET_STARTUP_PROCEDURE SetStartupProcedure, > > > EFI_CHECK_FOR_PROCEDURE CheckOnProcedure, > > > EFI_WAIT_FOR_PROCEDURE WaitForProcedure, > > > }EFI_MM_MP_PROTOCOL; > > > > > > > > > typedef struct _EFI_MP_SERVICES_PROTOCOL { > > > > > EFI_MP_SERVICES_GET_NUMBER_OF_PROCESSORS > > > > GetNumberOfProcessors; > > > > > EFI_MP_SERVICES_GET_PROCESSOR_INFO GetProcessorInfo; > > > > > EFI_MP_SERVICES_STARTUP_ALL_APS StartupAllAPs; > > > > > EFI_MP_SERVICES_STARTUP_THIS_AP StartupThisAP; > > > > > EFI_MP_SERVICES_SWITCH_BSP SwitchBSP; > > > > EFI_MP_SERVICES_ENABLEDISABLEAP > > > > > EnableDisableAP; EFI_MP_SERVICES_WHOAMI WhoAmI; } > > > > > EFI_MP_SERVICES_PROTOCOL; > > > > > > > > > > Thanks, > > > > > Ray > > > > _______________________________________________ > > > > edk2-devel mailing list > > > > edk2-devel@lists.01.org > > > > https://lists.01.org/mailman/listinfo/edk2-devel > IMPORTANT NOTICE: The contents of this email and any attachments are > confidential and may also be privileged. If you are not the intended > recipient, please notify the sender immediately and do not disclose the > contents to any other person, use it for any purpose, or store or copy the > information in any medium. Thank you. _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel