Reviewed-by: Ray Ni <ray...@intel.com> Thanks, Ray > -----Original Message----- > From: Tan, Dun <dun....@intel.com> > Sent: Thursday, December 7, 2023 3:32 PM > To: devel@edk2.groups.io > Cc: Dong, Eric <eric.d...@intel.com>; Ni, Ray <ray...@intel.com>; Kumar, > Rahul R <rahul.r.ku...@intel.com>; Gerd Hoffmann <kra...@redhat.com> > Subject: [Patch V2 5/6] UefiCpuPkg: Cache core type in MpInfo2 HOB > > Cache core type in MpInfo2 HOB by CpuMpPei module. > > Signed-off-by: Dun Tan <dun....@intel.com> > Cc: Eric Dong <eric.d...@intel.com> > Cc: Ray Ni <ray...@intel.com> > Cc: Rahul Kumar <rahul1.ku...@intel.com> > Cc: Gerd Hoffmann <kra...@redhat.com> > --- > UefiCpuPkg/CpuMpPei/CpuMpPei.c | 59 > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- > UefiCpuPkg/CpuMpPei/CpuMpPei.h | 2 ++ > 2 files changed, 59 insertions(+), 2 deletions(-) > > diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.c > b/UefiCpuPkg/CpuMpPei/CpuMpPei.c > index 8cacf4ddf5..7e2d7efb6b 100644 > --- a/UefiCpuPkg/CpuMpPei/CpuMpPei.c > +++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.c > @@ -541,6 +541,30 @@ InitializeMpExceptionStackSwitchHandlers ( > FreePages (SwitchStackData, EFI_SIZE_TO_PAGES (NumberOfProcessors * > sizeof (EXCEPTION_STACK_SWITCH_CONTEXT))); > } > > +/** > + Get CPU core type. > + > + @param[in, out] Buffer Argument of the procedure. > +**/ > +VOID > +EFIAPI > +GetProcessorCoreType ( > + IN OUT VOID *Buffer > + ) > +{ > + EFI_STATUS Status; > + UINT8 *CoreTypes; > + CPUID_NATIVE_MODEL_ID_AND_CORE_TYPE_EAX > NativeModelIdAndCoreTypeEax; > + UINTN ProcessorIndex; > + > + Status = MpInitLibWhoAmI (&ProcessorIndex); > + ASSERT_EFI_ERROR (Status); > + > + CoreTypes = (UINT8 *)Buffer; > + AsmCpuidEx (CPUID_HYBRID_INFORMATION, > CPUID_HYBRID_INFORMATION_MAIN_LEAF, > &NativeModelIdAndCoreTypeEax.Uint32, NULL, NULL, NULL); > + CoreTypes[ProcessorIndex] = > (UINT8)NativeModelIdAndCoreTypeEax.Bits.CoreType; > +} > + > /** > Create gMpInformationHobGuid2. > **/ > @@ -558,13 +582,36 @@ BuildMpInformationHob ( > MP_INFORMATION2_HOB_DATA *MpInformation2HobData; > MP_INFORMATION2_ENTRY *MpInformation2Entry; > UINTN Index; > + UINT8 *CoreTypes; > + UINT32 CpuidMaxInput; > + UINTN CoreTypePages; > > ProcessorIndex = 0; > MpInformation2HobData = NULL; > MpInformation2Entry = NULL; > + CoreTypes = NULL; > + CoreTypePages = 0; > > Status = MpInitLibGetNumberOfProcessors (&NumberOfProcessors, > &NumberOfEnabledProcessors); > ASSERT_EFI_ERROR (Status); > + > + // > + // Get Processors CoreType > + // > + AsmCpuid (CPUID_SIGNATURE, &CpuidMaxInput, NULL, NULL, NULL); > + if (CpuidMaxInput >= CPUID_HYBRID_INFORMATION) { > + CoreTypePages = EFI_SIZE_TO_PAGES (sizeof (UINT8) * > NumberOfProcessors); > + CoreTypes = AllocatePages (CoreTypePages); > + ASSERT (CoreTypes != NULL); > + > + Status = MpInitLibStartupAllCPUs ( > + GetProcessorCoreType, > + 0, > + (VOID *)CoreTypes > + ); > + ASSERT_EFI_ERROR (Status); > + } > + > MaxProcessorsPerHob = ((MAX_UINT16 & ~7) - sizeof > (EFI_HOB_GUID_TYPE) - sizeof (MP_INFORMATION2_HOB_DATA)) / sizeof > (MP_INFORMATION2_ENTRY); > NumberOfProcessorsInHob = MaxProcessorsPerHob; > > @@ -597,12 +644,16 @@ BuildMpInformationHob ( > NULL > ); > ASSERT_EFI_ERROR (Status); > + > + MpInformation2Entry->CoreType = (CoreTypes != NULL) ? > CoreTypes[Index + ProcessorIndex] : 0; > + > DEBUG (( > DEBUG_INFO, > - " Processor[%04d]: ProcessorId = 0x%lx, StatusFlag = 0x%x\n", > + " Processor[%04d]: ProcessorId = 0x%lx, StatusFlag = 0x%x, > CoreType = 0x%x\n", > Index + ProcessorIndex, > MpInformation2Entry->ProcessorInfo.ProcessorId, > - MpInformation2Entry->ProcessorInfo.StatusFlag > + MpInformation2Entry->ProcessorInfo.StatusFlag, > + MpInformation2Entry->CoreType > )); > DEBUG (( > DEBUG_INFO, > @@ -625,6 +676,10 @@ BuildMpInformationHob ( > > ProcessorIndex += NumberOfProcessorsInHob; > } > + > + if (CoreTypes != NULL) { > + FreePages (CoreTypes, CoreTypePages); > + } > } > > /** > diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.h > b/UefiCpuPkg/CpuMpPei/CpuMpPei.h > index a40fd2c077..e7d07ffd64 100644 > --- a/UefiCpuPkg/CpuMpPei/CpuMpPei.h > +++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.h > @@ -32,6 +32,8 @@ > > #include <Guid/MpInformation2.h> > > +#include <Register/Cpuid.h> > + > extern EFI_PEI_PPI_DESCRIPTOR mPeiCpuMpPpiDesc; > > /** > -- > 2.31.1.windows.1
-=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#112217): https://edk2.groups.io/g/devel/message/112217 Mute This Topic: https://groups.io/mt/103030295/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/leave/9847357/21656/1706620634/xyzzy [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-