In this version I've addressed the feedback I got for v1, plus I've rebased the series on top of Mike's
[edk2] [PATCH 0/7] UefiCpuPkg: Add CPU SMM and SecCore http://news.gmane.org/find-root.php?message_id=1444003040-21292-1-git-send-email-michael.d.kin...@intel.com The following v1 patches have been dropped altogether, thanks to Mike's work, because PiSmmCpuDxeSmm belongs under UefiCpuPkg now: [PATCH 17/58] OvmfPkg: import PiSmmCpuDxeSmm from Quark_EDKII_v1.1.0/IA32FamilyCpuBasePkg [PATCH 19/58] OvmfPkg: PiSmmCpuDxeSmm: eliminate CpuConfigLib linkage dependency [PATCH 21/58] OvmfPkg: import SocketLga775Lib header from Quark_EDKII_v1.1.0/IA32FamilyCpuBasePkg [PATCH 22/58] OvmfPkg: import SmmCpuPlatformHookLibNull from Quark_EDKII_v1.1.0/IA32FamilyCpuBasePkg [PATCH 24/58] OvmfPkg: replace IA32FamilyCpuBasePkg.dec references with OvmfPkg.dec [PATCH 25/58] OvmfPkg: replace gEfiCpuTokenSpaceGuid with gQuarkPortCpuTokenSpaceGuid [PATCH 26/58] OvmfPkg: PiSmmCpuDxeSmm: fix namespace for PcdCpuMaxLogicalProcessorNumber [PATCH 28/58] OvmfPkg: import three protocols from Quark_EDKII_v1.1.0/IA32FamilyCpuBasePkg [PATCH 29/58] OvmfPkg: PiSmmCpuDxeSmm: fix warning about UINT32-to-(VOID*) conversion [PATCH 30/58] OvmfPkg: PiSmmCpuDxeSmm: fix up pathname in include directive [PATCH 32/58] OvmfPkg: QuarkPort: drop ACPI_CPU_DATA.APState [PATCH 38/58] UefiCpuPkg: CpuDxe: optionally save MTRR settings to AcpiNVS memory block [PATCH 41/58] UefiCpuPkg: CpuDxe: provide EFI_MP_SERVICES_PROTOCOL when there's no AP [PATCH 45/58] OvmfPkg: QuarkPort/PiSmmCpuDxeSmm: hard-code CPU class identification The following patches are new in v2: [PATCH v2 01/41] UefiCpuPkg: CpuDxe: Fix ASSERT() when only 1 CPU detected [PATCH v2 18/41] OvmfPkg: resolve CpuExceptionHandlerLib for DXE_SMM_DRIVER modules The other patches have been preserved, with or without changes (significant or otherwise); in such cases, the changes, if any, are noted per patch. Public branch (including Mike's patches): <https://github.com/lersek/edk2/commits/smm3_v2> This version works on the same "functionality level" as v1 -- single VCPU, Ia32, -nx, S3. I tried multiple VCPU as well; unfortunately, it breaks down in different spots, dependent on whether I use TCG or KVM. Namely, with TCG, even the first StartupAllAPs() call (visible in "[PATCH v2 02/41] UefiCpuPkg: CpuDxe: broadcast MTRR changes to APs") gets stuck, whereas with KVM, the SmmRelocateBases() call never completes in "UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.c". Given that KVM gets past the first StartupAllAPs() call, I think TCG's hang may be TCG's fault. And because Mike tested "UefiCpuPkg/PiSmmCpuDxeSmm" on physical MP hardware, I tend to think that KVM getting stuck in SmmRelocateBases() may be a KVM bug. Cc: Paolo Bonzini <pbonz...@redhat.com> Cc: Jordan Justen <jordan.l.jus...@intel.com> Cc: Michael Kinney <michael.d.kin...@intel.com> Thanks Laszlo Laszlo Ersek (40): UefiCpuPkg: CpuDxe: broadcast MTRR changes to APs OvmfPkg: introduce -D SMM_REQUIRE and PcdSmmSmramRequire OvmfPkg: Sec: force reinit of BaseExtractGuidedSectionLib handler table OvmfPkg: Sec: assert the build-time calculated end of the scratch buffer OvmfPkg: decompress FVs on S3 resume if SMM_REQUIRE is set OvmfPkg: PlatformPei: allow caching in AddReservedMemoryBaseSizeHob() OvmfPkg: PlatformPei: account for TSEG size with PcdSmmSmramRequire set OvmfPkg: add PEIM for providing TSEG-as-SMRAM during PEI OvmfPkg: add DXE_DRIVER for providing TSEG-as-SMRAM during boot-time DXE OvmfPkg: implement EFI_SMM_CONTROL2_PROTOCOL with a DXE_RUNTIME_DRIVER OvmfPkg: pull in the SMM IPL and SMM core OvmfPkg: pull in CpuIo2Smm driver OvmfPkg: AcpiS3SaveDxe: don't fake LockBox protocol if SMM_REQUIRE OvmfPkg: LockBox: -D SMM_REQUIRE excludes our fake lockbox OvmfPkg: LockBox: use SMM stack with -D SMM_REQUIRE OvmfPkg: resolve ReportStatusCodeLib for DXE_SMM_DRIVER modules OvmfPkg: resolve CpuExceptionHandlerLib for DXE_SMM_DRIVER modules OvmfPkg: set gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmEnableBspElection to FALSE OvmfPkg: build PiSmmCpuDxeSmm for -D SMM_REQUIRE OvmfPkg: add skeleton QuarkPort/CpuS3DataDxe OvmfPkg: QuarkPort/CpuS3DataDxe: fill in ACPI_CPU_DATA.StartupVector OvmfPkg: QuarkPort/CpuS3DataDxe: handle IDT, GDT and MCE in ACPI_CPU_DATA OvmfPkg: QuarkPort/CpuS3DataDxe: handle StackAddress and StackSize OvmfPkg: import CpuConfigLib header from Quark_EDKII_v1.1.0/IA32FamilyCpuBasePkg OvmfPkg: QuarkPort/CpuS3DataDxe: fill in ACPI_CPU_DATA.NumberOfCpus OvmfPkg: QuarkPort/CpuS3DataDxe: fill in ACPI_CPU_DATA.MtrrTable OvmfPkg: QuarkPort/CpuS3DataDxe: handle register tables in ACPI_CPU_DATA OvmfPkg: QemuFlashFvbServicesRuntimeDxe: strip trailing whitespace OvmfPkg: QemuFlashFvbServicesRuntimeDxe: rewrap source code to 79 chars OvmfPkg: QemuFlashFvbServicesRuntimeDxe: fix VALID_ARCHITECTURES in INF OvmfPkg: QemuFlashFvbServicesRuntimeDxe: remove FvbDevLock field OvmfPkg: QemuFlashFvbServicesRuntimeDxe: remove FvbScratchSpace field OvmfPkg: QemuFlashFvbServicesRuntimeDxe: no dual addressing needed OvmfPkg: QemuFlashFvbServicesRuntimeDxe: split out runtime DXE specifics OvmfPkg: QemuFlashFvbServicesRuntimeDxe: clean up includes and libraries OvmfPkg: QemuFlashFvbServicesRuntimeDxe: add DXE_SMM_DRIVER build OvmfPkg: QemuFlashFvbServicesRuntimeDxe: adhere to -D SMM_REQUIRE OvmfPkg: consolidate variable driver stack in DSC and FDF files OvmfPkg: pull in SMM-based variable driver stack OvmfPkg: README: document SMM status Michael Kinney (1): UefiCpuPkg: CpuDxe: Fix ASSERT() when only 1 CPU detected OvmfPkg/AcpiS3SaveDxe/AcpiS3Save.c | 14 +- OvmfPkg/AcpiS3SaveDxe/AcpiS3SaveDxe.inf | 3 +- OvmfPkg/DecomprScratchEnd.fdf.inc | 72 +++ OvmfPkg/Library/LockBoxLib/LockBoxBaseLib.inf | 3 + OvmfPkg/Library/LockBoxLib/LockBoxDxeLib.inf | 3 + OvmfPkg/Library/LockBoxLib/LockBoxLib.c | 2 + OvmfPkg/OvmfPkg.dec | 29 + OvmfPkg/OvmfPkg.fdf.inc | 2 + OvmfPkg/OvmfPkgIa32.dsc | 111 +++- OvmfPkg/OvmfPkgIa32.fdf | 57 +- OvmfPkg/OvmfPkgIa32X64.dsc | 111 +++- OvmfPkg/OvmfPkgIa32X64.fdf | 57 +- OvmfPkg/OvmfPkgX64.dsc | 111 +++- OvmfPkg/OvmfPkgX64.fdf | 57 +- OvmfPkg/PlatformPei/Fv.c | 27 +- OvmfPkg/PlatformPei/MemDetect.c | 85 ++- OvmfPkg/PlatformPei/Platform.c | 9 +- OvmfPkg/PlatformPei/Platform.h | 3 +- OvmfPkg/PlatformPei/PlatformPei.inf | 5 + OvmfPkg/PlatformPei/Xen.c | 2 +- OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FvbInfo.c | 56 +- OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FvbServicesRuntimeDxe.inf | 44 +- OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.c | 653 ++++++++----------- OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.h | 74 ++- OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockServiceDxe.c | 157 +++++ OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockServiceSmm.c | 69 ++ OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.c | 27 +- OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.h | 9 +- OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlashDxe.c | 28 + OvmfPkg/QemuFlashFvbServicesRuntimeDxe/{FvbServicesRuntimeDxe.inf => FvbServicesSmm.inf} | 53 +- OvmfPkg/QuarkPort/CpuS3DataDxe/Cpu.h | 97 +++ OvmfPkg/QuarkPort/CpuS3DataDxe/CpuS3DataDxe.inf | 102 +++ OvmfPkg/QuarkPort/CpuS3DataDxe/IA32/ArchSpecific.c | 105 +++ OvmfPkg/QuarkPort/CpuS3DataDxe/IA32/ArchSpecificDef.h | 57 ++ OvmfPkg/QuarkPort/CpuS3DataDxe/IA32/CpuAsm.S | 56 ++ OvmfPkg/QuarkPort/CpuS3DataDxe/IA32/CpuAsm.asm | 69 ++ OvmfPkg/QuarkPort/CpuS3DataDxe/MpApic.c | 93 +++ OvmfPkg/QuarkPort/CpuS3DataDxe/MpApic.h | 69 ++ OvmfPkg/QuarkPort/CpuS3DataDxe/MpCommon.c | 298 +++++++++ OvmfPkg/QuarkPort/CpuS3DataDxe/MpCommon.h | 187 ++++++ OvmfPkg/QuarkPort/CpuS3DataDxe/MpService.h | 49 ++ OvmfPkg/QuarkPort/CpuS3DataDxe/ProcessorConfig.c | 335 ++++++++++ OvmfPkg/QuarkPort/Include/Library/CpuConfigLib.h | 671 ++++++++++++++++++++ OvmfPkg/README | 43 ++ OvmfPkg/Sec/SecMain.c | 52 +- OvmfPkg/Sec/SecMain.inf | 6 + OvmfPkg/SmmAccess/SmmAccess2Dxe.c | 156 +++++ OvmfPkg/SmmAccess/SmmAccess2Dxe.inf | 57 ++ OvmfPkg/SmmAccess/SmmAccessPei.c | 446 +++++++++++++ OvmfPkg/SmmAccess/SmmAccessPei.inf | 70 ++ OvmfPkg/SmmAccess/SmramInternal.c | 187 ++++++ OvmfPkg/SmmAccess/SmramInternal.h | 89 +++ OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.c | 365 +++++++++++ OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf | 65 ++ UefiCpuPkg/CpuDxe/CpuDxe.c | 26 + UefiCpuPkg/CpuDxe/CpuMp.c | 36 +- UefiCpuPkg/CpuDxe/CpuMp.h | 13 + 57 files changed, 5145 insertions(+), 587 deletions(-) create mode 100644 OvmfPkg/DecomprScratchEnd.fdf.inc create mode 100644 OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockServiceDxe.c create mode 100644 OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockServiceSmm.c create mode 100644 OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlashDxe.c copy OvmfPkg/QemuFlashFvbServicesRuntimeDxe/{FvbServicesRuntimeDxe.inf => FvbServicesSmm.inf} (59%) create mode 100644 OvmfPkg/QuarkPort/CpuS3DataDxe/Cpu.h create mode 100644 OvmfPkg/QuarkPort/CpuS3DataDxe/CpuS3DataDxe.inf create mode 100644 OvmfPkg/QuarkPort/CpuS3DataDxe/IA32/ArchSpecific.c create mode 100644 OvmfPkg/QuarkPort/CpuS3DataDxe/IA32/ArchSpecificDef.h create mode 100644 OvmfPkg/QuarkPort/CpuS3DataDxe/IA32/CpuAsm.S create mode 100644 OvmfPkg/QuarkPort/CpuS3DataDxe/IA32/CpuAsm.asm create mode 100644 OvmfPkg/QuarkPort/CpuS3DataDxe/MpApic.c create mode 100644 OvmfPkg/QuarkPort/CpuS3DataDxe/MpApic.h create mode 100644 OvmfPkg/QuarkPort/CpuS3DataDxe/MpCommon.c create mode 100644 OvmfPkg/QuarkPort/CpuS3DataDxe/MpCommon.h create mode 100644 OvmfPkg/QuarkPort/CpuS3DataDxe/MpService.h create mode 100644 OvmfPkg/QuarkPort/CpuS3DataDxe/ProcessorConfig.c create mode 100644 OvmfPkg/QuarkPort/Include/Library/CpuConfigLib.h create mode 100644 OvmfPkg/SmmAccess/SmmAccess2Dxe.c create mode 100644 OvmfPkg/SmmAccess/SmmAccess2Dxe.inf create mode 100644 OvmfPkg/SmmAccess/SmmAccessPei.c create mode 100644 OvmfPkg/SmmAccess/SmmAccessPei.inf create mode 100644 OvmfPkg/SmmAccess/SmramInternal.c create mode 100644 OvmfPkg/SmmAccess/SmramInternal.h create mode 100644 OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.c create mode 100644 OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf -- 1.8.3.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel