Thanks Mike. I have checked in SVN 18958, with comment update as your suggestion.
-----Original Message----- From: Kinney, Michael D Sent: Thursday, November 26, 2015 2:39 AM To: Laszlo Ersek; edk2-de...@ml01.01.org; Kinney, Michael D Cc: Yao, Jiewen; Fan, Jeff Subject: RE: [edk2] [PATCH v2 2/2] UefiCpuPkg/CpuS3DataDxe: Add module to initialize ACPI_CPU_DATA for S3 Laszlo, I have rb Jiewen's patch to SmmCpuFeaturesLib, so it should go in soon. Mike > -----Original Message----- > From: Laszlo Ersek [mailto:ler...@redhat.com] > Sent: Wednesday, November 25, 2015 10:23 AM > To: Kinney, Michael D <michael.d.kin...@intel.com>; > edk2-de...@ml01.01.org > Cc: Yao, Jiewen <jiewen....@intel.com>; Fan, Jeff <jeff....@intel.com> > Subject: Re: [edk2] [PATCH v2 2/2] UefiCpuPkg/CpuS3DataDxe: Add module > to initialize ACPI_CPU_DATA for S3 > > On 11/25/15 18:05, Kinney, Michael D wrote: > > Laszlo, > > > > Thanks for the feedback and the testing! > > > > I have made the updates you suggested in this series except for > > removing the lines that initialize the RegisterTable fields. I left > > those there to make it easier for CPU/Platform package that needs to > > use this module as a starting point for a custom version. > > > > This series has been committed, so it is now available for use with > > your OVMF SMM v5 series. > > /me does a little dance > > Thank you :) > > What do you think about the scheduling between the OVMF SMM series and: > > http://thread.gmane.org/gmane.comp.bios.edk2.devel/4770/focus=4832 > > Do you think it makes sense for me to await until Jiewen's series too > is committed, and post v5 on top of that? > > (This means copying the null implementations of > SmmCpuFeaturesCompleteSmmReadyToLock() and > SmmCpuFeaturesAllocatePageTableMemory() into OVMF's SmmCpuFeaturesLib > instance, for v5.) > > Thanks! > Laszlo > > > > > Mike > > > >> -----Original Message----- > >> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf > >> Of Laszlo Ersek > >> Sent: Wednesday, November 25, 2015 3:04 AM > >> To: Kinney, Michael D <michael.d.kin...@intel.com>; > >> edk2-de...@ml01.01.org > >> Cc: Yao, Jiewen <jiewen....@intel.com>; Fan, Jeff > >> <jeff....@intel.com> > >> Subject: Re: [edk2] [PATCH v2 2/2] UefiCpuPkg/CpuS3DataDxe: Add > >> module to initialize ACPI_CPU_DATA for S3 > >> > >> On 11/25/15 00:47, Michael Kinney wrote: > >>> This module initializes the ACPI_CPU_DATA structure and registers > >>> the address of this structure in the PcdCpuS3DataAddress PCD. > >>> This is a generic/simple version of this module. It does not > >>> provide a machine check handler or CPU register initialization tables for > >>> ACPI S3 resume. > >>> It also only supports the number of CPUs reported by the MP > >>> Services Protocol, so this module does not support hot plug CPUs. > >>> This module can be copied into a CPU specific package and > >>> customized if these additional features are required. > >>> > >>> This patch series is in response to the OvmfPkg patch series from > >>> Laszlo Ersek that enables SMM on OVMF. The v4 version of the > >>> patch series from Laszlo includes an OVMF specific CPU module to > >>> initialize the ACPI_CPU_DATA structure. > >>> > >>> This proposed patch series replaces the patches listed below. > >>> > >>> [PATCH v4 27/41] OvmfPkg: > >>> add skeleton QuarkPort/CpuS3DataDxe > >>> > >>> [PATCH v4 28/41] OvmfPkg: > >>> QuarkPort/CpuS3DataDxe: fill in ACPI_CPU_DATA.StartupVector > >>> > >>> [PATCH v4 29/41] OvmfPkg: > >>> QuarkPort/CpuS3DataDxe: handle IDT, GDT and MCE in ACPI_CPU_DATA > >>> > >>> [PATCH v4 30/41] OvmfPkg: > >>> QuarkPort/CpuS3DataDxe: handle StackAddress and StackSize > >>> > >>> [PATCH v4 31/41] OvmfPkg: > >>> import CpuConfigLib header from > >>> Quark_EDKII_v1.1.0/IA32FamilyCpuBasePkg > >>> > >>> [PATCH v4 32/41] OvmfPkg: > >>> QuarkPort/CpuS3DataDxe: fill in ACPI_CPU_DATA.NumberOfCpus > >>> > >>> [PATCH v4 33/41] OvmfPkg: > >>> QuarkPort/CpuS3DataDxe: fill in ACPI_CPU_DATA.MtrrTable > >>> > >>> [PATCH v4 34/41] OvmfPkg: > >>> QuarkPort/CpuS3DataDxe: handle register tables in ACPI_CPU_DATA > >>> > >>> [PATCH v4 35/41] OvmfPkg: > >>> port CpuS3DataDxe to X64 > >>> > >>> [PATCH v4 36/41] OvmfPkg: > >>> build QuarkPort/CpuS3DataDxe for -D SMM_REQUIRE > >>> > >>> Cc: Laszlo Ersek <ler...@redhat.com> > >>> Cc: "Yao, Jiewen" <jiewen....@intel.com> > >>> Cc: "Fan, Jeff" <jeff....@intel.com> > >>> Contributed-under: TianoCore Contribution Agreement 1.0 > >>> Signed-off-by: Michael Kinney <michael.d.kin...@intel.com> > >>> --- > >>> UefiCpuPkg/CpuS3DataDxe/CpuS3Data.c | 271 > >>> +++++++++++++++++++++++++++++++ > >>> UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.inf | 64 ++++++++ > >>> UefiCpuPkg/UefiCpuPkg.dsc | 1 + > >>> 3 files changed, 336 insertions(+) create mode 100644 > >>> UefiCpuPkg/CpuS3DataDxe/CpuS3Data.c > >>> create mode 100644 UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.inf > >> > >> (1) The commit message looks great, thank you very much for the references. > >> > >> A small request: please mark, under "port CpuS3DataDxe to X64" > >> (i.e., [PATCH v4 35/41]), that that patch was originally authored by Paolo > >> Bonzini. > >> > >> There's no need to submit a v3 of this series just because of this; > >> it can be fixed up before committing the patch. > >> > >>> > >>> diff --git a/UefiCpuPkg/CpuS3DataDxe/CpuS3Data.c > >>> b/UefiCpuPkg/CpuS3DataDxe/CpuS3Data.c > >>> new file mode 100644 > >>> index 0000000..7cf923d > >>> --- /dev/null > >>> +++ b/UefiCpuPkg/CpuS3DataDxe/CpuS3Data.c > >>> @@ -0,0 +1,271 @@ > >>> +/** @file > >>> +ACPI CPU Data initialization module > >>> + > >>> +This module initializes the ACPI_CPU_DATA structure and registers > >>> +the address of this structure in the PcdCpuS3DataAddress PCD. > >>> +This is a generic/simple version of this module. It does not > >>> +provide a machine check handler or CPU register initialization > >>> +tables for ACPI S3 resume. It also only supports the number of > >>> +CPUs reported by the MP Services Protocol, so this module does > >>> +not support hot plug CPUs. This module can be copied into a CPU > >>> specific package and customized if these additional features are required. > >>> + > >>> +Copyright (c) 2013 - 2015, Intel Corporation. All rights > >>> +reserved.<BR> Copyright (c) 2015, Red Hat, Inc. > >>> + > >>> +This program and the accompanying materials are licensed and made > >>> +available under the terms and conditions of the BSD License which > >>> +accompanies this distribution. The full text of the license may > >>> +be found at http://opensource.org/licenses/bsd-license.php > >>> + > >>> +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" > >>> +BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS > >>> OR IMPLIED. > >>> + > >>> +**/ > >>> + > >>> +#include <PiDxe.h> > >>> + > >>> +#include <AcpiCpuData.h> > >>> + > >>> +#include <Library/BaseLib.h> > >>> +#include <Library/BaseMemoryLib.h> #include > >>> +<Library/UefiBootServicesTableLib.h> > >>> +#include <Library/DebugLib.h> > >>> +#include <Library/MtrrLib.h> > >>> + > >>> +#include <Protocol/MpService.h> > >>> +#include <Guid/EventGroup.h> > >>> + > >>> +// > >>> +// Data structure used to allocate ACPI_CPU_DATA and its > >>> +supporting structures // typedef struct { > >>> + ACPI_CPU_DATA AcpuCpuData; > >> > >> (2) Please fix the typo in the name of this field: it should be > >> Acp[i]CpuData. Apologies for not noticing it in v1. > >> > >> No need to submit a v3 just because of this; can be fixed up on commit. > >> > >>> + MTRR_SETTINGS MtrrTable; > >>> + IA32_DESCRIPTOR GdtrProfile; > >>> + IA32_DESCRIPTOR IdtrProfile; > >>> +} ACPI_CPU_DATA_EX; > >>> + > >>> +/** > >>> + Allocate EfiACPIMemoryNVS below 4G memory address. > >>> + > >>> + This function allocates EfiACPIMemoryNVS below 4G memory address. > >>> + > >>> + @param[in] Size Size of memory to allocate. > >>> + > >>> + @return Allocated address for output. > >>> + > >>> +**/ > >>> +VOID * > >>> +AllocateAcpiNvsMemoryBelow4G ( > >>> + IN UINTN Size > >>> + ) > >>> +{ > >>> + EFI_PHYSICAL_ADDRESS Address; > >>> + EFI_STATUS Status; > >>> + VOID *Buffer; > >>> + > >>> + Address = BASE_4GB - 1; > >>> + Status = gBS->AllocatePages ( > >>> + AllocateMaxAddress, > >>> + EfiACPIMemoryNVS, > >>> + EFI_SIZE_TO_PAGES (Size), > >>> + &Address > >>> + ); > >>> + if (EFI_ERROR (Status)) { > >>> + return NULL; > >>> + } > >>> + > >>> + Buffer = (VOID *)(UINTN)Address; ZeroMem (Buffer, Size); > >>> + > >>> + return Buffer; > >>> +} > >>> + > >>> +/** > >>> + Callback function executed when the EndOfDxe event group is signaled. > >>> + > >>> + We delay saving the MTRR settings until BDS signals EndOfDxe. > >>> + > >>> + @param[in] Event Event whose notification function is being > >>> invoked. > >>> + @param[out] Context Pointer to the MTRR_SETTINGS buffer to fill in. > >>> +**/ > >>> +VOID > >>> +EFIAPI > >>> +SaveMtrrsOnEndOfDxe ( > >>> + IN EFI_EVENT Event, > >>> + OUT VOID *Context > >>> + ) > >>> +{ > >>> + DEBUG ((EFI_D_VERBOSE, "%a\n", __FUNCTION__)); > >>> + MtrrGetAllMtrrs (Context); > >>> + > >>> + // > >>> + // Close event, so it will not be invoked again. > >>> + // > >>> + gBS->CloseEvent (Event); > >>> +} > >>> + > >>> +/** > >>> + The entry function of the CpuS3Data driver. > >>> + > >>> + Allocate and initialize all fields of the ACPI_CPU_DATA structure > >>> except the > >>> + MTRR settings. Register an event notification on > >>> gEfiEndOfDxeEventGroupGuid > >>> + to capture the ACPI_CPU_DATA MTRR settings. The PcdCpuS3DataAddress > >>> is set > >>> + to the address that ACPI_CPU_DATA is allocated. > >> > >> (3) I think the last sentence above should go like: > >> > >> [] PcdCpuS3DataAddress is set to the address that ACPI_CPU_DATA is > >> allocated [at]. > >> > >> Can be fixed up at commit time. > >> > >>> + > >>> + @param[in] ImageHandle The firmware allocated handle for the EFI > >>> image. > >>> + @param[in] SystemTable A pointer to the EFI System Table. > >>> + > >>> + @retval EFI_SUCCESS The entry point is executed successfully. > >>> + @retval other Some error occurs when executing this entry > >>> point. > >>> + > >>> +**/ > >>> +EFI_STATUS > >>> +EFIAPI > >>> +CpuS3DataInitialize ( > >>> + IN EFI_HANDLE ImageHandle, > >>> + IN EFI_SYSTEM_TABLE *SystemTable > >>> + ) > >>> +{ > >>> + EFI_STATUS Status; > >>> + ACPI_CPU_DATA_EX *AcpiCpuDataEx; > >>> + ACPI_CPU_DATA *AcpiCpuData; > >>> + EFI_MP_SERVICES_PROTOCOL *MpServices; > >>> + UINTN NumberOfCpus; > >>> + UINTN NumberOfEnabledProcessors; > >>> + VOID *Stack; > >>> + UINTN TableSize; > >>> + CPU_REGISTER_TABLE *RegisterTable; > >>> + UINTN Index; > >>> + EFI_PROCESSOR_INFORMATION ProcessorInfoBuffer; > >>> + UINTN GdtSize; > >>> + UINTN IdtSize; > >>> + VOID *Gdt; > >>> + VOID *Idt; > >>> + EFI_EVENT Event; > >>> + > >>> + // > >>> + // Allocate ACPI NVS memory below 4G memory for use on ACPI S3 resume. > >>> + // > >>> + AcpiCpuDataEx = AllocateAcpiNvsMemoryBelow4G (sizeof > >>> + (ACPI_CPU_DATA_EX)); ASSERT (AcpiCpuDataEx != NULL); > >>> + AcpiCpuData = &AcpiCpuDataEx->AcpuCpuData; > >>> + > >>> + // > >>> + // Get MP Services Protocol > >>> + // > >>> + Status = gBS->LocateProtocol ( > >>> + &gEfiMpServiceProtocolGuid, > >>> + NULL, > >>> + (VOID **)&MpServices > >>> + ); > >>> + ASSERT_EFI_ERROR (Status); > >>> + > >>> + // > >>> + // If there are 1 or more APs, then allocate a 4KB reserved > >>> + page below 1MB // > >> > >> (4) I think this comment should be dropped now. The code is > >> correct; the comment is stale. Can be fixed up when committing the patch. > >> > >>> + AcpiCpuData->StartupVector = BASE_1MB - 1; Status = > >>> + gBS->AllocatePages ( > >>> + AllocateMaxAddress, > >>> + EfiReservedMemoryType, > >>> + 1, > >>> + &AcpiCpuData->StartupVector > >>> + ); > >> > >> (5) The indentation of the function arguments and the closing paren > >> doesn't seem right. Can be fixed up on commit. > >> > >>> + ASSERT_EFI_ERROR (Status); > >>> + > >>> + // > >>> + // Get the number of CPUs > >>> + // > >>> + Status = MpServices->GetNumberOfProcessors ( > >>> + MpServices, > >>> + &NumberOfCpus, > >>> + &NumberOfEnabledProcessors > >>> + ); > >>> + ASSERT_EFI_ERROR (Status); > >>> + AcpiCpuData->NumberOfCpus = (UINT32)NumberOfCpus; > >>> + > >>> + // > >>> + // Initialize ACPI_CPU_DATA fields // > >>> + AcpiCpuData->StackSize = PcdGet32 (PcdCpuApStackSize); > >>> + AcpiCpuData->ApMachineCheckHandlerBase = 0; > >>> + AcpiCpuData->ApMachineCheckHandlerSize = 0; > >>> + AcpiCpuData->GdtrProfile = > >>> + (EFI_PHYSICAL_ADDRESS)(UINTN)&AcpiCpuDataEx->GdtrProfile; > >>> + AcpiCpuData->IdtrProfile = > >>> (EFI_PHYSICAL_ADDRESS)(UINTN)&AcpiCpuDataEx->IdtrProfile; > >>> + AcpiCpuData->MtrrTable = > >>> (EFI_PHYSICAL_ADDRESS)(UINTN)&AcpiCpuDataEx->MtrrTable; > >>> + > >>> + // > >>> + // Allocate stack space for all CPUs // Stack = > >>> + AllocateAcpiNvsMemoryBelow4G (NumberOfCpus * > >>> + AcpiCpuData->StackSize); ASSERT (Stack != NULL); > >>> + AcpiCpuData->StackAddress = (EFI_PHYSICAL_ADDRESS)(UINTN)Stack; > >>> + > >>> + // > >>> + // Get the boot processor's GDT and IDT // AsmReadGdtr > >>> + (&AcpiCpuDataEx->GdtrProfile); AsmReadIdtr > >>> + (&AcpiCpuDataEx->IdtrProfile); > >> > >> Turns out you have removed the casts for v2 -- great, thanks! > >> > >>> + > >>> + // > >>> + // Allocate GDT and IDT in ACPI NVS and copy current GDT and > >>> + IDT contents // GdtSize = AcpiCpuDataEx->GdtrProfile.Limit + > >>> + 1; IdtSize = AcpiCpuDataEx->IdtrProfile.Limit + 1; Gdt = > >>> + AllocateAcpiNvsMemoryBelow4G (GdtSize + IdtSize); ASSERT (Gdt > >>> + != NULL); Idt = (VOID *)((UINTN)Gdt + GdtSize); CopyMem (Gdt, > >>> + (VOID *)AcpiCpuDataEx->GdtrProfile.Base, GdtSize); CopyMem > >>> + (Idt, (VOID *)AcpiCpuDataEx->IdtrProfile.Base, IdtSize); > >>> + AcpiCpuDataEx->GdtrProfile.Base = (UINTN)Gdt; > >>> + AcpiCpuDataEx->IdtrProfile.Base = (UINTN)Idt; > >>> + > >>> + // > >>> + // Allocate buffer for empty RegisterTable and > >>> + PreSmmInitRegisterTable for all CPUs // TableSize = 2 * > >>> + NumberOfCpus * sizeof (CPU_REGISTER_TABLE); RegisterTable = > >>> + (CPU_REGISTER_TABLE *)AllocateAcpiNvsMemoryBelow4G (TableSize); > >>> + ASSERT (RegisterTable != NULL); for (Index = 0; Index < > >>> + NumberOfCpus; Index++) { > >>> + Status = MpServices->GetProcessorInfo ( > >>> + MpServices, > >>> + Index, > >>> + &ProcessorInfoBuffer > >>> + ); > >>> + ASSERT_EFI_ERROR (Status); > >>> + > >>> + RegisterTable[Index].InitialApicId = > >>> (UINT32)ProcessorInfoBuffer.ProcessorId; > >>> + RegisterTable[Index].TableLength = 0; > >>> + RegisterTable[Index].AllocatedSize = 0; > >>> + RegisterTable[Index].RegisterTableEntry = NULL; > >>> + > >>> + RegisterTable[NumberOfCpus + Index].InitialApicId = > >>> (UINT32)ProcessorInfoBuffer.ProcessorId; > >>> + RegisterTable[NumberOfCpus + Index].TableLength = 0; > >>> + RegisterTable[NumberOfCpus + Index].AllocatedSize = 0; > >>> + RegisterTable[NumberOfCpus + Index].RegisterTableEntry = > >>> + NULL; } > >> > >> (6) Because AllocateAcpiNvsMemoryBelow4G() zero-fills the allocated > >> buffer, all field assignments except InitialApicId could be > >> dropped, for further simplification. > >> > >> Not necessary to do, and if you opt to drop the zero / NULL > >> assignments, that can be done on commit. > >> > >> ... On the other hand, if a different package needs to customize > >> this module, they will probably appreciate the field assignments > >> (the left hand sides anyway) already being spelled out -- so I > >> guess this could actually prove helpful down the road. > >> > >> > >> With the above minor tweaks (of which (6) is definitely optional): > >> > >> Reviewed-by: Laszlo Ersek <ler...@redhat.com> > >> > >> In addition, I rebased my series on top of this one. I tested S3 > >> with 32-bit and 64-bit Fedora guests, and also with a 64-bit > >> Windows 8.1 guest (all using 4 VCPUs and running on KVM). Everything > >> worked fine. > >> > >> Series > >> Tested-by: Laszlo Ersek <ler...@redhat.com> > >> > >> I'm ready to post my version 5 series soon after this one gets committed. > >> > >> Thank you! > >> Laszlo > >> > >> > >>> + AcpiCpuData->RegisterTable = > >>> (EFI_PHYSICAL_ADDRESS)(UINTN)RegisterTable; > >>> + AcpiCpuData->PreSmmInitRegisterTable = > >>> + (EFI_PHYSICAL_ADDRESS)(UINTN)(RegisterTable + NumberOfCpus); > >>> + > >>> + // > >>> + // Set PcdCpuS3DataAddress to the base address of the > >>> + ACPI_CPU_DATA structure // Status = PcdSet64S > >>> + (PcdCpuS3DataAddress, (UINT64)(UINTN)AcpiCpuData); > >>> + ASSERT_EFI_ERROR (Status); > >>> + > >>> + // > >>> + // Register EFI_END_OF_DXE_EVENT_GROUP_GUID event. > >>> + // The notification function saves MTRRs for ACPI_CPU_DATA // > >>> + Status = gBS->CreateEventEx ( > >>> + EVT_NOTIFY_SIGNAL, > >>> + TPL_CALLBACK, > >>> + SaveMtrrsOnEndOfDxe, > >>> + &AcpiCpuDataEx->MtrrTable, > >>> + &gEfiEndOfDxeEventGroupGuid, > >>> + &Event > >>> + ); > >>> + ASSERT_EFI_ERROR (Status); > >>> + > >>> + return EFI_SUCCESS; > >>> +} > >>> diff --git a/UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.inf > >>> b/UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.inf > >>> new file mode 100644 > >>> index 0000000..2ef16a7 > >>> --- /dev/null > >>> +++ b/UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.inf > >>> @@ -0,0 +1,64 @@ > >>> +## @file > >>> +# ACPI CPU Data initialization module # # This module > >>> +initializes the ACPI_CPU_DATA structure and registers the address > >>> +# of this structure in the PcdCpuS3DataAddress PCD. This is a > >>> +generic/simple # version of this module. It does not provide a > >>> +machine check handler or CPU # register initialization tables > >>> +for ACPI S3 resume. It also only supports the # number of CPUs > >>> +reported by the MP Services Protocol, so this module does not # > >>> +support hot plug CPUs. This module can be copied into a CPU specific > >>> package # and customized if these additional features are required. > >>> +# > >>> +# Copyright (c) 2013-2015, Intel Corporation. All rights > >>> +reserved.<BR> # Copyright (c) 2015, Red Hat, Inc. > >>> +# > >>> +# This program and the accompanying materials # are licensed > >>> +and made available under the terms and conditions of the BSD > >>> +License # which accompanies this distribution. The full text of > >>> +the license may be found at # > >>> +http://opensource.org/licenses/bsd-license.php > >>> +# > >>> +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" > >>> +BASIS, # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER > >>> EXPRESS OR IMPLIED. > >>> +# > >>> +## > >>> + > >>> +[Defines] > >>> + INF_VERSION = 0x00010005 > >>> + BASE_NAME = CpuS3DataDxe > >>> + FILE_GUID = 4D2E57EE-0E3F-44DD-93C4-D3B57E96945D > >>> + MODULE_TYPE = DXE_DRIVER > >>> + VERSION_STRING = 1.0 > >>> + ENTRY_POINT = CpuS3DataInitialize > >>> + > >>> +# The following information is for reference only and not > >>> +required by the build # tools. > >>> +# > >>> +# VALID_ARCHITECTURES = IA32 X64 > >>> + > >>> +[Sources] > >>> + CpuS3Data.c > >>> + > >>> +[Packages] > >>> + MdePkg/MdePkg.dec > >>> + UefiCpuPkg/UefiCpuPkg.dec > >>> + > >>> +[LibraryClasses] > >>> + UefiDriverEntryPoint > >>> + UefiBootServicesTableLib > >>> + BaseMemoryLib > >>> + DebugLib > >>> + BaseLib > >>> + MtrrLib > >>> + > >>> +[Guids] > >>> + gEfiEndOfDxeEventGroupGuid ## CONSUMES > >>> + > >>> +[Protocols] > >>> + gEfiMpServiceProtocolGuid ## CONSUMES > >>> + > >>> +[Pcd] > >>> + gUefiCpuPkgTokenSpaceGuid.PcdCpuApStackSize ## CONSUMES > >>> + gUefiCpuPkgTokenSpaceGuid.PcdCpuS3DataAddress ## PRODUCES > >>> + > >>> +[Depex] > >>> + gEfiMpServiceProtocolGuid > >>> diff --git a/UefiCpuPkg/UefiCpuPkg.dsc b/UefiCpuPkg/UefiCpuPkg.dsc > >>> index 756645f..4061050 100644 > >>> --- a/UefiCpuPkg/UefiCpuPkg.dsc > >>> +++ b/UefiCpuPkg/UefiCpuPkg.dsc > >>> @@ -101,6 +101,7 @@ > >>> UefiCpuPkg/CpuDxe/CpuDxe.inf > >>> UefiCpuPkg/CpuIo2Smm/CpuIo2Smm.inf > >>> UefiCpuPkg/CpuMpPei/CpuMpPei.inf > >>> + UefiCpuPkg/CpuS3DataDxe/CpuS3DataDxe.inf > >>> UefiCpuPkg/Library/BaseUefiCpuLib/BaseUefiCpuLib.inf > >>> UefiCpuPkg/Library/BaseXApicLib/BaseXApicLib.inf > >>> UefiCpuPkg/Library/BaseXApicX2ApicLib/BaseXApicX2ApicLib.inf > >>> > >> > >> _______________________________________________ > >> edk2-devel mailing list > >> edk2-devel@lists.01.org > >> https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel