From: "Chiu, Chasel" <chasel.chiu@intel.com>
To: devel@edk2.groups.io
Cc: Chasel Chiu <chasel.chiu@intel.com>,
Eric Dong <eric.dong@intel.com>, Ray Ni <ray.ni@intel.com>,
Laszlo Ersek <lersek@redhat.com>,
Rahul Kumar <rahul1.kumar@intel.com>,
Nate DeSimone <nathaniel.l.desimone@intel.com>
Subject: [PATCH] UefiCpuPkg/RegisterCpuFeaturesLib: Support MpServices2 only case.
Date: Thu, 10 Sep 2020 17:02:33 +0800 [thread overview]
Message-ID: <20200910090233.22784-1-chasel.chiu@intel.com> (raw)
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2883
MpServices Ppi can be replaced by MpServices2 Ppi and MpServices2
Ppi is mandatory for RegisterCpuFeaturesLib functionality,
basing on this we can drop MpServices Ppi usage from the library
and the constraint that both Ppis must be installed.
Cc: Eric Dong <eric.dong@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Rahul Kumar <rahul1.kumar@intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Signed-off-by: Chasel Chiu <chasel.chiu@intel.com>
---
UefiCpuPkg/Library/RegisterCpuFeaturesLib/PeiRegisterCpuFeaturesLib.c | 61 +++++++++++++++++++++++--------------------------------------
UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeatures.h | 6 +++---
2 files changed, 26 insertions(+), 41 deletions(-)
diff --git a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/PeiRegisterCpuFeaturesLib.c b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/PeiRegisterCpuFeaturesLib.c
index 64768f7a74..4e558e9fee 100644
--- a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/PeiRegisterCpuFeaturesLib.c
+++ b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/PeiRegisterCpuFeaturesLib.c
@@ -1,7 +1,7 @@
/** @file
CPU Register Table Library functions.
- Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
+ Copyright (c) 2016 - 2020, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -11,7 +11,6 @@
#include <Library/HobLib.h>
#include <Library/PeiServicesLib.h>
#include <Library/PeiServicesTablePointerLib.h>
-#include <Ppi/MpServices.h>
#include <Ppi/MpServices2.h>
#include "RegisterCpuFeatures.h"
@@ -75,10 +74,10 @@ GetMpService (
MP_SERVICES MpService;
//
- // Get MP Services Protocol
+ // Get MP Services2 Ppi
//
Status = PeiServicesLocatePpi (
- &gEfiPeiMpServicesPpiGuid,
+ &gEdkiiPeiMpServices2PpiGuid,
0,
NULL,
(VOID **)&MpService.Ppi
@@ -100,17 +99,17 @@ GetProcessorIndex (
)
{
EFI_STATUS Status;
- EFI_PEI_MP_SERVICES_PPI *CpuMpPpi;
+ EDKII_PEI_MP_SERVICES2_PPI *CpuMp2Ppi;
UINTN ProcessorIndex;
- CpuMpPpi = CpuFeaturesData->MpService.Ppi;
+ CpuMp2Ppi = CpuFeaturesData->MpService.Ppi;
//
// For two reasons which use NULL for WhoAmI:
// 1. This function will be called by APs and AP should not use PeiServices Table
// 2. Check WhoAmI implementation, this parameter will not be used.
//
- Status = CpuMpPpi->WhoAmI(NULL, CpuMpPpi, &ProcessorIndex);
+ Status = CpuMp2Ppi->WhoAmI (CpuMp2Ppi, &ProcessorIndex);
ASSERT_EFI_ERROR (Status);
return ProcessorIndex;
}
@@ -131,16 +130,15 @@ GetProcessorInformation (
OUT EFI_PROCESSOR_INFORMATION *ProcessorInfoBuffer
)
{
- EFI_PEI_MP_SERVICES_PPI *CpuMpPpi;
+ EDKII_PEI_MP_SERVICES2_PPI *CpuMp2Ppi;
EFI_STATUS Status;
CPU_FEATURES_DATA *CpuFeaturesData;
CpuFeaturesData = GetCpuFeaturesData ();
- CpuMpPpi = CpuFeaturesData->MpService.Ppi;
+ CpuMp2Ppi = CpuFeaturesData->MpService.Ppi;
- Status = CpuMpPpi->GetProcessorInfo (
- GetPeiServicesTablePointer(),
- CpuMpPpi,
+ Status = CpuMp2Ppi->GetProcessorInfo (
+ CpuMp2Ppi,
ProcessorNumber,
ProcessorInfoBuffer
);
@@ -162,18 +160,17 @@ StartupAllAPsWorker (
)
{
EFI_STATUS Status;
- EFI_PEI_MP_SERVICES_PPI *CpuMpPpi;
+ EDKII_PEI_MP_SERVICES2_PPI *CpuMp2Ppi;
CPU_FEATURES_DATA *CpuFeaturesData;
CpuFeaturesData = GetCpuFeaturesData ();
- CpuMpPpi = CpuFeaturesData->MpService.Ppi;
+ CpuMp2Ppi = CpuFeaturesData->MpService.Ppi;
//
// Wakeup all APs for data collection.
//
- Status = CpuMpPpi->StartupAllAPs (
- GetPeiServicesTablePointer (),
- CpuMpPpi,
+ Status = CpuMp2Ppi->StartupAllAPs (
+ CpuMp2Ppi,
Procedure,
FALSE,
0,
@@ -203,17 +200,7 @@ StartupAllCPUsWorker (
//
// Get MP Services2 Ppi
//
- Status = PeiServicesLocatePpi (
- &gEdkiiPeiMpServices2PpiGuid,
- 0,
- NULL,
- (VOID **)&CpuMp2Ppi
- );
- ASSERT_EFI_ERROR (Status);
-
- //
- // Wakeup all APs for data collection.
- //
+ CpuMp2Ppi = CpuFeaturesData->MpService.Ppi;
Status = CpuMp2Ppi->StartupAllCPUs (
CpuMp2Ppi,
Procedure,
@@ -234,18 +221,17 @@ SwitchNewBsp (
)
{
EFI_STATUS Status;
- EFI_PEI_MP_SERVICES_PPI *CpuMpPpi;
+ EDKII_PEI_MP_SERVICES2_PPI *CpuMp2Ppi;
CPU_FEATURES_DATA *CpuFeaturesData;
CpuFeaturesData = GetCpuFeaturesData ();
- CpuMpPpi = CpuFeaturesData->MpService.Ppi;
+ CpuMp2Ppi = CpuFeaturesData->MpService.Ppi;
//
// Wakeup all APs for data collection.
//
- Status = CpuMpPpi->SwitchBSP (
- GetPeiServicesTablePointer (),
- CpuMpPpi,
+ Status = CpuMp2Ppi->SwitchBSP (
+ CpuMp2Ppi,
ProcessorNumber,
TRUE
);
@@ -269,18 +255,17 @@ GetNumberOfProcessor (
)
{
EFI_STATUS Status;
- EFI_PEI_MP_SERVICES_PPI *CpuMpPpi;
+ EDKII_PEI_MP_SERVICES2_PPI *CpuMp2Ppi;
CPU_FEATURES_DATA *CpuFeaturesData;
CpuFeaturesData = GetCpuFeaturesData ();
- CpuMpPpi = CpuFeaturesData->MpService.Ppi;
+ CpuMp2Ppi = CpuFeaturesData->MpService.Ppi;
//
// Get the number of CPUs
//
- Status = CpuMpPpi->GetNumberOfProcessors (
- GetPeiServicesTablePointer (),
- CpuMpPpi,
+ Status = CpuMp2Ppi->GetNumberOfProcessors (
+ CpuMp2Ppi,
NumberOfCpus,
NumberOfEnabledProcessors
);
diff --git a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeatures.h b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeatures.h
index 53cb340b4c..e8a4aa644d 100644
--- a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeatures.h
+++ b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeatures.h
@@ -10,7 +10,7 @@
#define _REGISTER_CPU_FEATURES_H_
#include <PiPei.h>
#include <PiDxe.h>
-#include <Ppi/MpServices.h>
+#include <Ppi/MpServices2.h>
#include <Protocol/MpService.h>
#include <Library/BaseLib.h>
@@ -64,8 +64,8 @@ typedef struct {
} PROGRAM_CPU_REGISTER_FLAGS;
typedef union {
- EFI_MP_SERVICES_PROTOCOL *Protocol;
- EFI_PEI_MP_SERVICES_PPI *Ppi;
+ EFI_MP_SERVICES_PROTOCOL *Protocol;
+ EDKII_PEI_MP_SERVICES2_PPI *Ppi;
} MP_SERVICES;
typedef struct {
--
2.13.3.windows.1
next reply other threads:[~2020-09-10 9:04 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-10 9:02 Chiu, Chasel [this message]
2020-09-10 11:03 ` [PATCH] UefiCpuPkg/RegisterCpuFeaturesLib: Support MpServices2 only case Laszlo Ersek
2020-09-11 2:31 ` Dong, Eric
2020-09-11 18:37 ` Ni, Ray
2020-09-14 0:50 ` Chiu, Chasel
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=20200910090233.22784-1-chasel.chiu@intel.com \
--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