From: Tom Lendacky <thomas.lenda...@amd.com> BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=2198
Provide an MP finalization function that can be called from the CPU protocol finalization function. Cc: Eric Dong <eric.d...@intel.com> Cc: Ray Ni <ray...@intel.com> Cc: Laszlo Ersek <ler...@redhat.com> Signed-off-by: Tom Lendacky <thomas.lenda...@amd.com> --- UefiCpuPkg/Include/Library/MpInitLib.h | 14 ++++++++++++++ UefiCpuPkg/Library/MpInitLib/MpLib.h | 11 +++++++++++ UefiCpuPkg/Library/MpInitLib/DxeMpLib.c | 18 ++++++++++++++++++ UefiCpuPkg/Library/MpInitLib/MpLib.c | 23 +++++++++++++++++++++++ UefiCpuPkg/Library/MpInitLib/PeiMpLib.c | 16 ++++++++++++++++ 5 files changed, 82 insertions(+) diff --git a/UefiCpuPkg/Include/Library/MpInitLib.h b/UefiCpuPkg/Include/Library/MpInitLib.h index 31eb227f1209..f9beeefca78e 100644 --- a/UefiCpuPkg/Include/Library/MpInitLib.h +++ b/UefiCpuPkg/Include/Library/MpInitLib.h @@ -378,4 +378,18 @@ MpInitLibStartupAllCPUs ( IN VOID *ProcedureArgument OPTIONAL ); +/** + This service allows users of MpLib to make any finalization changes + before transferring control out of UEFI + + @retval EFI_SUCCESS MP initialization succeeds. + @retval Others MP initialization fails. + +**/ +EFI_STATUS +EFIAPI +MpLibFinalize ( + VOID + ); + #endif diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.h b/UefiCpuPkg/Library/MpInitLib/MpLib.h index 4cfb93ee4f77..5966510d4a1b 100644 --- a/UefiCpuPkg/Library/MpInitLib/MpLib.h +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.h @@ -654,5 +654,16 @@ EnableDebugAgent ( VOID ); +/** + Perform MpLib finalization before transferring control out of UEFI + + @param[in] CpuMpData The pointer to CPU MP Data structure. + +**/ +EFI_STATUS +MpFinalize ( + IN CPU_MP_DATA *CpuMpData + ); + #endif diff --git a/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c b/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c index 8df5b6d919e6..16603ef3f20e 100644 --- a/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c @@ -884,3 +884,21 @@ MpInitLibEnableDisableAP ( return Status; } + +/** + MP finalization + + @param[in] CpuMpData The pointer to CPU MP Data structure. +**/ +EFI_STATUS +MpFinalize ( + IN CPU_MP_DATA *CpuMpData + ) +{ + // + // DXE phase will do this transition, but just return EFI_SUCCESS for now. + // + return EFI_SUCCESS; +} + + diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c b/UefiCpuPkg/Library/MpInitLib/MpLib.c index 43aa9c0a4950..7fd478f735fb 100644 --- a/UefiCpuPkg/Library/MpInitLib/MpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c @@ -1728,6 +1728,29 @@ CheckAllAPs ( return EFI_NOT_READY; } +/** + MP finalization + + This service allows users of MpLib to make any finalization changes + before transferring control out of UEFI. + + This service must be invoked before exiting boot services. + + @retval EFI_SUCCESS MP finalization succeeds. + +**/ +EFI_STATUS +EFIAPI +MpLibFinalize ( + VOID + ) +{ + CPU_MP_DATA *CpuMpData; + + CpuMpData = GetCpuMpData (); + return MpFinalize (CpuMpData); +} + /** MP Initialize Library initialization. diff --git a/UefiCpuPkg/Library/MpInitLib/PeiMpLib.c b/UefiCpuPkg/Library/MpInitLib/PeiMpLib.c index 56956a615b6b..793d26b1bf12 100644 --- a/UefiCpuPkg/Library/MpInitLib/PeiMpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/PeiMpLib.c @@ -604,4 +604,20 @@ MpInitLibEnableDisableAP ( return EnableDisableApWorker (ProcessorNumber, EnableAP, HealthFlag); } +/** + MP finalization + + @param[in] CpuMpData The pointer to CPU MP Data structure. +**/ +EFI_STATUS +MpFinalize ( + IN CPU_MP_DATA *CpuMpData + ) +{ + // + // PEI phase shouldn't do such a transition. So simply return EFI_SUCCESS. + // + return EFI_SUCCESS; +} + -- 2.17.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#47718): https://edk2.groups.io/g/devel/message/47718 Mute This Topic: https://groups.io/mt/34230274/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-