[edk2-devel] [Patch 4/5] UefiCpuPkg/CpuMpPei: Produce EDKII_PEI_MP_SERVICES2_PPI.

Dong, Eric posted 5 patches 6 years, 6 months ago
[edk2-devel] [Patch 4/5] UefiCpuPkg/CpuMpPei: Produce EDKII_PEI_MP_SERVICES2_PPI.
Posted by Dong, Eric 6 years, 6 months ago
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1973

Produce new EDKII_PEI_MP_SERVICES2_PPI service.

It includes all APIs existed in EFI_PEI_MP_SERVICES_PPI
and add new API EDKII_PEI_MP_SERVICES_STARTUP_ALL_CPUS.

Cc: Ray Ni <ray.ni@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Chandana Kumar <chandana.c.kumar@intel.com>
Cc: Star Zeng <star.zeng@intel.com>
Signed-off-by: Eric Dong <eric.dong@intel.com>
---
 UefiCpuPkg/CpuMpPei/CpuMpPei.c   | 73 +++++++++++++++++++++++++++++---
 UefiCpuPkg/CpuMpPei/CpuMpPei.h   | 35 ++++++++++++++-
 UefiCpuPkg/CpuMpPei/CpuMpPei.inf |  1 +
 3 files changed, 102 insertions(+), 7 deletions(-)

diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.c b/UefiCpuPkg/CpuMpPei/CpuMpPei.c
index 926541c937..5ed2297770 100644
--- a/UefiCpuPkg/CpuMpPei/CpuMpPei.c
+++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.c
@@ -1,7 +1,7 @@
 /** @file
   CPU PEI Module installs CPU Multiple Processor PPI.
 
-  Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
 **/
@@ -21,10 +21,31 @@ EFI_PEI_MP_SERVICES_PPI                mMpServicesPpi = {
   PeiWhoAmI,
 };
 
-EFI_PEI_PPI_DESCRIPTOR           mPeiCpuMpPpiDesc = {
-  (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
-  &gEfiPeiMpServicesPpiGuid,
-  &mMpServicesPpi
+//
+// CPU MP2 PPI to be installed
+//
+EDKII_PEI_MP_SERVICES2_PPI            mMpServices2Ppi = {
+  PeiGetNumberOfProcessors,
+  PeiGetProcessorInfo,
+  PeiStartupAllAPs,
+  PeiStartupThisAP,
+  PeiSwitchBSP,
+  PeiEnableDisableAP,
+  PeiWhoAmI,
+  PeiStartupAllCPUs
+};
+
+EFI_PEI_PPI_DESCRIPTOR           mPeiCpuMpPpiList[] = {
+  {
+    EFI_PEI_PPI_DESCRIPTOR_PPI,
+    &gEdkiiPeiMpServices2PpiGuid,
+    &mMpServices2Ppi
+  },
+  {
+    (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
+    &gEfiPeiMpServicesPpiGuid,
+    &mMpServicesPpi
+  }
 };
 
 /**
@@ -402,6 +423,46 @@ PeiWhoAmI (
   return MpInitLibWhoAmI (ProcessorNumber);
 }
 
+/**
+  This service executes a caller provided function on all enabled CPUs. CPUs can
+  run either simultaneously or one at a time in sequence. This service may only
+  be called from the BSP.
+
+  @param[in] This                 A pointer to the EDKII_PEI_MP_SERVICES2_PPI instance.
+  @param[in] Procedure            A pointer to the function to be run on enabled APs of
+                                  the system.
+  @param[in] TimeoutInMicroSeconds
+                                  Indicates the time limit in microseconds for APs to
+                                  return from Procedure, for blocking mode only. Zero
+                                  means infinity.  If the timeout expires in blocking
+                                  mode, BSP returns EFI_TIMEOUT.
+  @param[in] ProcedureArgument    The parameter passed into Procedure for all CPUs.
+
+  @retval EFI_SUCCESS             In blocking mode, all APs have finished before the
+                                  timeout expired.
+  @retval EFI_DEVICE_ERROR        Caller processor is AP.
+  @retval EFI_NOT_READY           Any enabled APs are busy.
+  @retval EFI_TIMEOUT             In blocking mode, the timeout expired before all
+                                  enabled APs have finished.
+  @retval EFI_INVALID_PARAMETER   Procedure is NULL.
+**/
+EFI_STATUS
+EFIAPI
+PeiStartupAllCPUs (
+  IN  EDKII_PEI_MP_SERVICES2_PPI   *This,
+  IN  EFI_AP_PROCEDURE             Procedure,
+  IN  UINTN                        TimeoutInMicroSeconds,
+  IN  VOID                         *ProcedureArgument      OPTIONAL
+  )
+{
+  return MpInitLibStartupAllCPUs (
+           Procedure,
+           TimeoutInMicroSeconds,
+           ProcedureArgument,
+           NULL
+           );
+}
+
 /**
   Get GDT register value.
 
@@ -667,7 +728,7 @@ InitializeCpuMpWorker (
   //
   // Install CPU MP PPI
   //
-  Status = PeiServicesInstallPpi(&mPeiCpuMpPpiDesc);
+  Status = PeiServicesInstallPpi(mPeiCpuMpPpiList);
   ASSERT_EFI_ERROR (Status);
 
   return Status;
diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.h b/UefiCpuPkg/CpuMpPei/CpuMpPei.h
index a5d8a755b2..b385c5088b 100644
--- a/UefiCpuPkg/CpuMpPei/CpuMpPei.h
+++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.h
@@ -1,7 +1,7 @@
 /** @file
   Definitions to install Multiple Processor PPI.
 
-  Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
 **/
@@ -15,6 +15,7 @@
 #include <Ppi/SecPlatformInformation.h>
 #include <Ppi/SecPlatformInformation2.h>
 #include <Ppi/EndOfPeiPhase.h>
+#include <Ppi/EdkiiMpServices2.h>
 
 #include <Library/BaseLib.h>
 #include <Library/DebugLib.h>
@@ -431,6 +432,38 @@ MemoryDiscoveredPpiNotifyCallback (
   IN VOID                       *Ppi
   );
 
+/**
+  This service executes a caller provided function on all enabled CPUs. CPUs can
+  run either simultaneously or one at a time in sequence. This service may only
+  be called from the BSP.
+
+  @param[in] This                 A pointer to the EDKII_PEI_MP_SERVICES2_PPI instance.
+  @param[in] Procedure            A pointer to the function to be run on enabled APs of
+                                  the system.
+  @param[in] TimeoutInMicroSeconds
+                                  Indicates the time limit in microseconds for APs to
+                                  return from Procedure, for blocking mode only. Zero
+                                  means infinity.  If the timeout expires in blocking
+                                  mode, BSP returns EFI_TIMEOUT.
+  @param[in] ProcedureArgument    The parameter passed into Procedure for all CPUs.
+
+  @retval EFI_SUCCESS             In blocking mode, all APs have finished before the
+                                  timeout expired.
+  @retval EFI_DEVICE_ERROR        Caller processor is AP.
+  @retval EFI_NOT_READY           Any enabled APs are busy.
+  @retval EFI_TIMEOUT             In blocking mode, the timeout expired before all
+                                  enabled APs have finished.
+  @retval EFI_INVALID_PARAMETER   Procedure is NULL.
+**/
+EFI_STATUS
+EFIAPI
+PeiStartupAllCPUs (
+  IN  EDKII_PEI_MP_SERVICES2_PPI   *This,
+  IN  EFI_AP_PROCEDURE             Procedure,
+  IN  UINTN                        TimeoutInMicroSeconds,
+  IN  VOID                         *ProcedureArgument      OPTIONAL
+  );
+
 extern EFI_PEI_NOTIFY_DESCRIPTOR  mPostMemNotifyList[];
 
 #endif
diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.inf b/UefiCpuPkg/CpuMpPei/CpuMpPei.inf
index 4fc4ea77ba..e42ba824e4 100644
--- a/UefiCpuPkg/CpuMpPei/CpuMpPei.inf
+++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.inf
@@ -54,6 +54,7 @@
   gEfiSecPlatformInformation2PpiGuid
   gEfiVectorHandoffInfoPpiGuid                  ## SOMETIMES_CONSUMES
   gEfiPeiMemoryDiscoveredPpiGuid                ## CONSUMES
+  gEdkiiPeiMpServices2PpiGuid                   ## PRODUCES
 
 [Pcd]
   gEfiMdeModulePkgTokenSpaceGuid.PcdPteMemoryEncryptionAddressOrMask    ## CONSUMES
-- 
2.21.0.windows.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#44020): https://edk2.groups.io/g/devel/message/44020
Mute This Topic: https://groups.io/mt/32524460/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-

Re: [edk2-devel] [Patch 4/5] UefiCpuPkg/CpuMpPei: Produce EDKII_PEI_MP_SERVICES2_PPI.
Posted by Ni, Ray 6 years, 6 months ago
If FailedCpuList isn't cared by the new PPI service, can we remove the FailedCpuList parameter from the MpInitLib library API?

> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Dong,
> Eric
> Sent: Friday, July 19, 2019 3:28 PM
> To: devel@edk2.groups.io
> Cc: Ni, Ray <ray.ni@intel.com>; Laszlo Ersek <lersek@redhat.com>; Kumar,
> Chandana C <chandana.c.kumar@intel.com>; Zeng, Star
> <star.zeng@intel.com>
> Subject: [edk2-devel] [Patch 4/5] UefiCpuPkg/CpuMpPei: Produce
> EDKII_PEI_MP_SERVICES2_PPI.
> 
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1973
> 
> Produce new EDKII_PEI_MP_SERVICES2_PPI service.
> 
> It includes all APIs existed in EFI_PEI_MP_SERVICES_PPI and add new API
> EDKII_PEI_MP_SERVICES_STARTUP_ALL_CPUS.
> 
> Cc: Ray Ni <ray.ni@intel.com>
> Cc: Laszlo Ersek <lersek@redhat.com>
> Cc: Chandana Kumar <chandana.c.kumar@intel.com>
> Cc: Star Zeng <star.zeng@intel.com>
> Signed-off-by: Eric Dong <eric.dong@intel.com>
> ---
>  UefiCpuPkg/CpuMpPei/CpuMpPei.c   | 73
> +++++++++++++++++++++++++++++---
>  UefiCpuPkg/CpuMpPei/CpuMpPei.h   | 35 ++++++++++++++-
>  UefiCpuPkg/CpuMpPei/CpuMpPei.inf |  1 +
>  3 files changed, 102 insertions(+), 7 deletions(-)
> 
> diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.c
> b/UefiCpuPkg/CpuMpPei/CpuMpPei.c index 926541c937..5ed2297770 100644
> --- a/UefiCpuPkg/CpuMpPei/CpuMpPei.c
> +++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.c
> @@ -1,7 +1,7 @@
>  /** @file
>    CPU PEI Module installs CPU Multiple Processor PPI.
> 
> -  Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2015 - 2019, Intel Corporation. All rights
> + reserved.<BR>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>  **/
> @@ -21,10 +21,31 @@ EFI_PEI_MP_SERVICES_PPI                mMpServicesPpi =
> {
>    PeiWhoAmI,
>  };
> 
> -EFI_PEI_PPI_DESCRIPTOR           mPeiCpuMpPpiDesc = {
> -  (EFI_PEI_PPI_DESCRIPTOR_PPI |
> EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
> -  &gEfiPeiMpServicesPpiGuid,
> -  &mMpServicesPpi
> +//
> +// CPU MP2 PPI to be installed
> +//
> +EDKII_PEI_MP_SERVICES2_PPI            mMpServices2Ppi = {
> +  PeiGetNumberOfProcessors,
> +  PeiGetProcessorInfo,
> +  PeiStartupAllAPs,
> +  PeiStartupThisAP,
> +  PeiSwitchBSP,
> +  PeiEnableDisableAP,
> +  PeiWhoAmI,
> +  PeiStartupAllCPUs
> +};
> +
> +EFI_PEI_PPI_DESCRIPTOR           mPeiCpuMpPpiList[] = {
> +  {
> +    EFI_PEI_PPI_DESCRIPTOR_PPI,
> +    &gEdkiiPeiMpServices2PpiGuid,
> +    &mMpServices2Ppi
> +  },
> +  {
> +    (EFI_PEI_PPI_DESCRIPTOR_PPI |
> EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
> +    &gEfiPeiMpServicesPpiGuid,
> +    &mMpServicesPpi
> +  }
>  };
> 
>  /**
> @@ -402,6 +423,46 @@ PeiWhoAmI (
>    return MpInitLibWhoAmI (ProcessorNumber);  }
> 
> +/**
> +  This service executes a caller provided function on all enabled CPUs.
> +CPUs can
> +  run either simultaneously or one at a time in sequence. This service
> +may only
> +  be called from the BSP.
> +
> +  @param[in] This                 A pointer to the EDKII_PEI_MP_SERVICES2_PPI
> instance.
> +  @param[in] Procedure            A pointer to the function to be run on
> enabled APs of
> +                                  the system.
> +  @param[in] TimeoutInMicroSeconds
> +                                  Indicates the time limit in microseconds for APs to
> +                                  return from Procedure, for blocking mode only. Zero
> +                                  means infinity.  If the timeout expires in blocking
> +                                  mode, BSP returns EFI_TIMEOUT.
> +  @param[in] ProcedureArgument    The parameter passed into Procedure
> for all CPUs.
> +
> +  @retval EFI_SUCCESS             In blocking mode, all APs have finished before
> the
> +                                  timeout expired.
> +  @retval EFI_DEVICE_ERROR        Caller processor is AP.
> +  @retval EFI_NOT_READY           Any enabled APs are busy.
> +  @retval EFI_TIMEOUT             In blocking mode, the timeout expired before
> all
> +                                  enabled APs have finished.
> +  @retval EFI_INVALID_PARAMETER   Procedure is NULL.
> +**/
> +EFI_STATUS
> +EFIAPI
> +PeiStartupAllCPUs (
> +  IN  EDKII_PEI_MP_SERVICES2_PPI   *This,
> +  IN  EFI_AP_PROCEDURE             Procedure,
> +  IN  UINTN                        TimeoutInMicroSeconds,
> +  IN  VOID                         *ProcedureArgument      OPTIONAL
> +  )
> +{
> +  return MpInitLibStartupAllCPUs (
> +           Procedure,
> +           TimeoutInMicroSeconds,
> +           ProcedureArgument,
> +           NULL
> +           );
> +}
> +
>  /**
>    Get GDT register value.
> 
> @@ -667,7 +728,7 @@ InitializeCpuMpWorker (
>    //
>    // Install CPU MP PPI
>    //
> -  Status = PeiServicesInstallPpi(&mPeiCpuMpPpiDesc);
> +  Status = PeiServicesInstallPpi(mPeiCpuMpPpiList);
>    ASSERT_EFI_ERROR (Status);
> 
>    return Status;
> diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.h
> b/UefiCpuPkg/CpuMpPei/CpuMpPei.h index a5d8a755b2..b385c5088b
> 100644
> --- a/UefiCpuPkg/CpuMpPei/CpuMpPei.h
> +++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.h
> @@ -1,7 +1,7 @@
>  /** @file
>    Definitions to install Multiple Processor PPI.
> 
> -  Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2015 - 2019, Intel Corporation. All rights
> + reserved.<BR>
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>  **/
> @@ -15,6 +15,7 @@
>  #include <Ppi/SecPlatformInformation.h>  #include
> <Ppi/SecPlatformInformation2.h>  #include <Ppi/EndOfPeiPhase.h>
> +#include <Ppi/EdkiiMpServices2.h>
> 
>  #include <Library/BaseLib.h>
>  #include <Library/DebugLib.h>
> @@ -431,6 +432,38 @@ MemoryDiscoveredPpiNotifyCallback (
>    IN VOID                       *Ppi
>    );
> 
> +/**
> +  This service executes a caller provided function on all enabled CPUs.
> +CPUs can
> +  run either simultaneously or one at a time in sequence. This service
> +may only
> +  be called from the BSP.
> +
> +  @param[in] This                 A pointer to the EDKII_PEI_MP_SERVICES2_PPI
> instance.
> +  @param[in] Procedure            A pointer to the function to be run on
> enabled APs of
> +                                  the system.
> +  @param[in] TimeoutInMicroSeconds
> +                                  Indicates the time limit in microseconds for APs to
> +                                  return from Procedure, for blocking mode only. Zero
> +                                  means infinity.  If the timeout expires in blocking
> +                                  mode, BSP returns EFI_TIMEOUT.
> +  @param[in] ProcedureArgument    The parameter passed into Procedure
> for all CPUs.
> +
> +  @retval EFI_SUCCESS             In blocking mode, all APs have finished before
> the
> +                                  timeout expired.
> +  @retval EFI_DEVICE_ERROR        Caller processor is AP.
> +  @retval EFI_NOT_READY           Any enabled APs are busy.
> +  @retval EFI_TIMEOUT             In blocking mode, the timeout expired before
> all
> +                                  enabled APs have finished.
> +  @retval EFI_INVALID_PARAMETER   Procedure is NULL.
> +**/
> +EFI_STATUS
> +EFIAPI
> +PeiStartupAllCPUs (
> +  IN  EDKII_PEI_MP_SERVICES2_PPI   *This,
> +  IN  EFI_AP_PROCEDURE             Procedure,
> +  IN  UINTN                        TimeoutInMicroSeconds,
> +  IN  VOID                         *ProcedureArgument      OPTIONAL
> +  );
> +
>  extern EFI_PEI_NOTIFY_DESCRIPTOR  mPostMemNotifyList[];
> 
>  #endif
> diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.inf
> b/UefiCpuPkg/CpuMpPei/CpuMpPei.inf
> index 4fc4ea77ba..e42ba824e4 100644
> --- a/UefiCpuPkg/CpuMpPei/CpuMpPei.inf
> +++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.inf
> @@ -54,6 +54,7 @@
>    gEfiSecPlatformInformation2PpiGuid
>    gEfiVectorHandoffInfoPpiGuid                  ## SOMETIMES_CONSUMES
>    gEfiPeiMemoryDiscoveredPpiGuid                ## CONSUMES
> +  gEdkiiPeiMpServices2PpiGuid                   ## PRODUCES
> 
>  [Pcd]
> 
> gEfiMdeModulePkgTokenSpaceGuid.PcdPteMemoryEncryptionAddressOrM
> ask    ## CONSUMES
> --
> 2.21.0.windows.1
> 
> 
> 


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#44026): https://edk2.groups.io/g/devel/message/44026
Mute This Topic: https://groups.io/mt/32524460/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-

Re: [edk2-devel] [Patch 4/5] UefiCpuPkg/CpuMpPei: Produce EDKII_PEI_MP_SERVICES2_PPI.
Posted by Dong, Eric 6 years, 6 months ago
Ray,

Agree, will remove this parameter in next version change.

Thanks,
Eric

> -----Original Message-----
> From: Ni, Ray
> Sent: Friday, July 19, 2019 4:03 PM
> To: devel@edk2.groups.io; Dong, Eric <eric.dong@intel.com>
> Cc: Laszlo Ersek <lersek@redhat.com>; Kumar, Chandana C
> <chandana.c.kumar@intel.com>; Zeng, Star <star.zeng@intel.com>
> Subject: RE: [edk2-devel] [Patch 4/5] UefiCpuPkg/CpuMpPei: Produce
> EDKII_PEI_MP_SERVICES2_PPI.
> 
> If FailedCpuList isn't cared by the new PPI service, can we remove the
> FailedCpuList parameter from the MpInitLib library API?
> 
> > -----Original Message-----
> > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Dong,
> > Eric
> > Sent: Friday, July 19, 2019 3:28 PM
> > To: devel@edk2.groups.io
> > Cc: Ni, Ray <ray.ni@intel.com>; Laszlo Ersek <lersek@redhat.com>;
> > Kumar, Chandana C <chandana.c.kumar@intel.com>; Zeng, Star
> > <star.zeng@intel.com>
> > Subject: [edk2-devel] [Patch 4/5] UefiCpuPkg/CpuMpPei: Produce
> > EDKII_PEI_MP_SERVICES2_PPI.
> >
> > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1973
> >
> > Produce new EDKII_PEI_MP_SERVICES2_PPI service.
> >
> > It includes all APIs existed in EFI_PEI_MP_SERVICES_PPI and add new
> > API EDKII_PEI_MP_SERVICES_STARTUP_ALL_CPUS.
> >
> > Cc: Ray Ni <ray.ni@intel.com>
> > Cc: Laszlo Ersek <lersek@redhat.com>
> > Cc: Chandana Kumar <chandana.c.kumar@intel.com>
> > Cc: Star Zeng <star.zeng@intel.com>
> > Signed-off-by: Eric Dong <eric.dong@intel.com>
> > ---
> >  UefiCpuPkg/CpuMpPei/CpuMpPei.c   | 73
> > +++++++++++++++++++++++++++++---
> >  UefiCpuPkg/CpuMpPei/CpuMpPei.h   | 35 ++++++++++++++-
> >  UefiCpuPkg/CpuMpPei/CpuMpPei.inf |  1 +
> >  3 files changed, 102 insertions(+), 7 deletions(-)
> >
> > diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.c
> > b/UefiCpuPkg/CpuMpPei/CpuMpPei.c index 926541c937..5ed2297770
> 100644
> > --- a/UefiCpuPkg/CpuMpPei/CpuMpPei.c
> > +++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.c
> > @@ -1,7 +1,7 @@
> >  /** @file
> >    CPU PEI Module installs CPU Multiple Processor PPI.
> >
> > -  Copyright (c) 2015 - 2018, Intel Corporation. All rights
> > reserved.<BR>
> > +  Copyright (c) 2015 - 2019, Intel Corporation. All rights
> > + reserved.<BR>
> >    SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> >  **/
> > @@ -21,10 +21,31 @@ EFI_PEI_MP_SERVICES_PPI                mMpServicesPpi
> =
> > {
> >    PeiWhoAmI,
> >  };
> >
> > -EFI_PEI_PPI_DESCRIPTOR           mPeiCpuMpPpiDesc = {
> > -  (EFI_PEI_PPI_DESCRIPTOR_PPI |
> > EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
> > -  &gEfiPeiMpServicesPpiGuid,
> > -  &mMpServicesPpi
> > +//
> > +// CPU MP2 PPI to be installed
> > +//
> > +EDKII_PEI_MP_SERVICES2_PPI            mMpServices2Ppi = {
> > +  PeiGetNumberOfProcessors,
> > +  PeiGetProcessorInfo,
> > +  PeiStartupAllAPs,
> > +  PeiStartupThisAP,
> > +  PeiSwitchBSP,
> > +  PeiEnableDisableAP,
> > +  PeiWhoAmI,
> > +  PeiStartupAllCPUs
> > +};
> > +
> > +EFI_PEI_PPI_DESCRIPTOR           mPeiCpuMpPpiList[] = {
> > +  {
> > +    EFI_PEI_PPI_DESCRIPTOR_PPI,
> > +    &gEdkiiPeiMpServices2PpiGuid,
> > +    &mMpServices2Ppi
> > +  },
> > +  {
> > +    (EFI_PEI_PPI_DESCRIPTOR_PPI |
> > EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
> > +    &gEfiPeiMpServicesPpiGuid,
> > +    &mMpServicesPpi
> > +  }
> >  };
> >
> >  /**
> > @@ -402,6 +423,46 @@ PeiWhoAmI (
> >    return MpInitLibWhoAmI (ProcessorNumber);  }
> >
> > +/**
> > +  This service executes a caller provided function on all enabled CPUs.
> > +CPUs can
> > +  run either simultaneously or one at a time in sequence. This
> > +service may only
> > +  be called from the BSP.
> > +
> > +  @param[in] This                 A pointer to the EDKII_PEI_MP_SERVICES2_PPI
> > instance.
> > +  @param[in] Procedure            A pointer to the function to be run on
> > enabled APs of
> > +                                  the system.
> > +  @param[in] TimeoutInMicroSeconds
> > +                                  Indicates the time limit in microseconds for APs to
> > +                                  return from Procedure, for blocking mode only. Zero
> > +                                  means infinity.  If the timeout expires in blocking
> > +                                  mode, BSP returns EFI_TIMEOUT.
> > +  @param[in] ProcedureArgument    The parameter passed into Procedure
> > for all CPUs.
> > +
> > +  @retval EFI_SUCCESS             In blocking mode, all APs have finished
> before
> > the
> > +                                  timeout expired.
> > +  @retval EFI_DEVICE_ERROR        Caller processor is AP.
> > +  @retval EFI_NOT_READY           Any enabled APs are busy.
> > +  @retval EFI_TIMEOUT             In blocking mode, the timeout expired
> before
> > all
> > +                                  enabled APs have finished.
> > +  @retval EFI_INVALID_PARAMETER   Procedure is NULL.
> > +**/
> > +EFI_STATUS
> > +EFIAPI
> > +PeiStartupAllCPUs (
> > +  IN  EDKII_PEI_MP_SERVICES2_PPI   *This,
> > +  IN  EFI_AP_PROCEDURE             Procedure,
> > +  IN  UINTN                        TimeoutInMicroSeconds,
> > +  IN  VOID                         *ProcedureArgument      OPTIONAL
> > +  )
> > +{
> > +  return MpInitLibStartupAllCPUs (
> > +           Procedure,
> > +           TimeoutInMicroSeconds,
> > +           ProcedureArgument,
> > +           NULL
> > +           );
> > +}
> > +
> >  /**
> >    Get GDT register value.
> >
> > @@ -667,7 +728,7 @@ InitializeCpuMpWorker (
> >    //
> >    // Install CPU MP PPI
> >    //
> > -  Status = PeiServicesInstallPpi(&mPeiCpuMpPpiDesc);
> > +  Status = PeiServicesInstallPpi(mPeiCpuMpPpiList);
> >    ASSERT_EFI_ERROR (Status);
> >
> >    return Status;
> > diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.h
> > b/UefiCpuPkg/CpuMpPei/CpuMpPei.h index a5d8a755b2..b385c5088b
> > 100644
> > --- a/UefiCpuPkg/CpuMpPei/CpuMpPei.h
> > +++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.h
> > @@ -1,7 +1,7 @@
> >  /** @file
> >    Definitions to install Multiple Processor PPI.
> >
> > -  Copyright (c) 2015 - 2018, Intel Corporation. All rights
> > reserved.<BR>
> > +  Copyright (c) 2015 - 2019, Intel Corporation. All rights
> > + reserved.<BR>
> >    SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> >  **/
> > @@ -15,6 +15,7 @@
> >  #include <Ppi/SecPlatformInformation.h>  #include
> > <Ppi/SecPlatformInformation2.h>  #include <Ppi/EndOfPeiPhase.h>
> > +#include <Ppi/EdkiiMpServices2.h>
> >
> >  #include <Library/BaseLib.h>
> >  #include <Library/DebugLib.h>
> > @@ -431,6 +432,38 @@ MemoryDiscoveredPpiNotifyCallback (
> >    IN VOID                       *Ppi
> >    );
> >
> > +/**
> > +  This service executes a caller provided function on all enabled CPUs.
> > +CPUs can
> > +  run either simultaneously or one at a time in sequence. This
> > +service may only
> > +  be called from the BSP.
> > +
> > +  @param[in] This                 A pointer to the EDKII_PEI_MP_SERVICES2_PPI
> > instance.
> > +  @param[in] Procedure            A pointer to the function to be run on
> > enabled APs of
> > +                                  the system.
> > +  @param[in] TimeoutInMicroSeconds
> > +                                  Indicates the time limit in microseconds for APs to
> > +                                  return from Procedure, for blocking mode only. Zero
> > +                                  means infinity.  If the timeout expires in blocking
> > +                                  mode, BSP returns EFI_TIMEOUT.
> > +  @param[in] ProcedureArgument    The parameter passed into Procedure
> > for all CPUs.
> > +
> > +  @retval EFI_SUCCESS             In blocking mode, all APs have finished
> before
> > the
> > +                                  timeout expired.
> > +  @retval EFI_DEVICE_ERROR        Caller processor is AP.
> > +  @retval EFI_NOT_READY           Any enabled APs are busy.
> > +  @retval EFI_TIMEOUT             In blocking mode, the timeout expired
> before
> > all
> > +                                  enabled APs have finished.
> > +  @retval EFI_INVALID_PARAMETER   Procedure is NULL.
> > +**/
> > +EFI_STATUS
> > +EFIAPI
> > +PeiStartupAllCPUs (
> > +  IN  EDKII_PEI_MP_SERVICES2_PPI   *This,
> > +  IN  EFI_AP_PROCEDURE             Procedure,
> > +  IN  UINTN                        TimeoutInMicroSeconds,
> > +  IN  VOID                         *ProcedureArgument      OPTIONAL
> > +  );
> > +
> >  extern EFI_PEI_NOTIFY_DESCRIPTOR  mPostMemNotifyList[];
> >
> >  #endif
> > diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.inf
> > b/UefiCpuPkg/CpuMpPei/CpuMpPei.inf
> > index 4fc4ea77ba..e42ba824e4 100644
> > --- a/UefiCpuPkg/CpuMpPei/CpuMpPei.inf
> > +++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.inf
> > @@ -54,6 +54,7 @@
> >    gEfiSecPlatformInformation2PpiGuid
> >    gEfiVectorHandoffInfoPpiGuid                  ## SOMETIMES_CONSUMES
> >    gEfiPeiMemoryDiscoveredPpiGuid                ## CONSUMES
> > +  gEdkiiPeiMpServices2PpiGuid                   ## PRODUCES
> >
> >  [Pcd]
> >
> >
> gEfiMdeModulePkgTokenSpaceGuid.PcdPteMemoryEncryptionAddressOrM
> > ask    ## CONSUMES
> > --
> > 2.21.0.windows.1
> >
> >
> > 


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#44071): https://edk2.groups.io/g/devel/message/44071
Mute This Topic: https://groups.io/mt/32524460/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-