/** @file\r
UEFI Application to display CPUID leaf information.\r
\r
- Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>\r
- This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+ Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
{ 0xEC , "Cache" , "3rd-level cache: 24MByte, 24-way set associative, 64 byte line size" },\r
{ 0xF0 , "Prefetch" , "64-Byte prefetching" },\r
{ 0xF1 , "Prefetch" , "128-Byte prefetching" },\r
+ { 0xFE , "General" , "CPUID leaf 2 does not report TLB descriptor information; use CPUID leaf 18H to query TLB and other address translation parameters." },\r
{ 0xFF , "General" , "CPUID leaf 2 does not report cache descriptor information, use CPUID leaf 4 to query cache parameters" }\r
};\r
\r
PRINT_BIT_FIELD (Eax, HWP_Energy_Performance_Preference);\r
PRINT_BIT_FIELD (Eax, HWP_Package_Level_Request);\r
PRINT_BIT_FIELD (Eax, HDC);\r
+ PRINT_BIT_FIELD (Eax, TurboBoostMaxTechnology30);\r
+ PRINT_BIT_FIELD (Eax, HWPCapabilities);\r
+ PRINT_BIT_FIELD (Eax, HWPPECIOverride);\r
+ PRINT_BIT_FIELD (Eax, FlexibleHWP);\r
+ PRINT_BIT_FIELD (Eax, FastAccessMode);\r
+ PRINT_BIT_FIELD (Eax, IgnoringIdleLogicalProcessorHWPRequest);\r
PRINT_BIT_FIELD (Ebx, InterruptThresholds);\r
PRINT_BIT_FIELD (Ecx, HardwareCoordinationFeedback);\r
PRINT_BIT_FIELD (Ecx, PerformanceEnergyBias);\r
UINT32 Eax;\r
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_EBX Ebx;\r
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_ECX Ecx;\r
+ CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_EDX Edx;\r
UINT32 SubLeaf;\r
\r
if (CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS > gMaximumBasicFunction) {\r
AsmCpuidEx (\r
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS,\r
SubLeaf,\r
- NULL, &Ebx.Uint32, &Ecx.Uint32, NULL\r
+ NULL, &Ebx.Uint32, &Ecx.Uint32, &Edx.Uint32\r
);\r
- if (Ebx.Uint32 != 0 || Ecx.Uint32 != 0) {\r
+ if (Ebx.Uint32 != 0 || Ecx.Uint32 != 0 || Edx.Uint32 != 0) {\r
Print (L"CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS (Leaf %08x, Sub-Leaf %08x)\n", CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS, SubLeaf);\r
- Print (L" EAX:%08x EBX:%08x ECX:%08x EDX:%08x\n", Eax, Ebx.Uint32, Ecx.Uint32, 0);\r
+ Print (L" EAX:%08x EBX:%08x ECX:%08x EDX:%08x\n", Eax, Ebx.Uint32, Ecx.Uint32, Edx.Uint32);\r
PRINT_BIT_FIELD (Ebx, FSGSBASE);\r
PRINT_BIT_FIELD (Ebx, IA32_TSC_ADJUST);\r
PRINT_BIT_FIELD (Ebx, SGX);\r
PRINT_BIT_FIELD (Ebx, DeprecateFpuCsDs);\r
PRINT_BIT_FIELD (Ebx, MPX);\r
PRINT_BIT_FIELD (Ebx, RDT_A);\r
+ PRINT_BIT_FIELD (Ebx, AVX512F);\r
+ PRINT_BIT_FIELD (Ebx, AVX512DQ);\r
PRINT_BIT_FIELD (Ebx, RDSEED);\r
PRINT_BIT_FIELD (Ebx, ADX);\r
PRINT_BIT_FIELD (Ebx, SMAP);\r
+ PRINT_BIT_FIELD (Ebx, AVX512_IFMA);\r
PRINT_BIT_FIELD (Ebx, CLFLUSHOPT);\r
PRINT_BIT_FIELD (Ebx, CLWB);\r
PRINT_BIT_FIELD (Ebx, IntelProcessorTrace);\r
+ PRINT_BIT_FIELD (Ebx, AVX512PF);\r
+ PRINT_BIT_FIELD (Ebx, AVX512ER);\r
+ PRINT_BIT_FIELD (Ebx, AVX512CD);\r
PRINT_BIT_FIELD (Ebx, SHA);\r
+ PRINT_BIT_FIELD (Ebx, AVX512BW);\r
+ PRINT_BIT_FIELD (Ebx, AVX512VL);\r
+\r
PRINT_BIT_FIELD (Ecx, PREFETCHWT1);\r
+ PRINT_BIT_FIELD (Ecx, AVX512_VBMI);\r
PRINT_BIT_FIELD (Ecx, UMIP);\r
PRINT_BIT_FIELD (Ecx, PKU);\r
PRINT_BIT_FIELD (Ecx, OSPKE);\r
+ PRINT_BIT_FIELD (Ecx, AVX512_VPOPCNTDQ);\r
PRINT_BIT_FIELD (Ecx, MAWAU);\r
PRINT_BIT_FIELD (Ecx, RDPID);\r
PRINT_BIT_FIELD (Ecx, SGX_LC);\r
+\r
+ PRINT_BIT_FIELD (Edx, AVX512_4VNNIW);\r
+ PRINT_BIT_FIELD (Edx, AVX512_4FMAPS);\r
+ PRINT_BIT_FIELD (Edx, EnumeratesSupportForIBRSAndIBPB);\r
+ PRINT_BIT_FIELD (Edx, EnumeratesSupportForSTIBP);\r
+ PRINT_BIT_FIELD (Edx, EnumeratesSupportForL1D_FLUSH);\r
+ PRINT_BIT_FIELD (Edx, EnumeratesSupportForCapability);\r
+ PRINT_BIT_FIELD (Edx, EnumeratesSupportForSSBD);\r
}\r
}\r
}\r
PRINT_BIT_FIELD (Ebx, AllBranchMispredictRetired);\r
PRINT_BIT_FIELD (Edx, FixedFunctionPerformanceCounters);\r
PRINT_BIT_FIELD (Edx, FixedFunctionPerformanceCounterWidth);\r
+ PRINT_BIT_FIELD (Edx, AnyThreadDeprecation);\r
}\r
\r
/**\r
**/\r
VOID\r
CpuidExtendedTopology (\r
- VOID\r
+ UINT32 LeafFunction\r
)\r
{\r
CPUID_EXTENDED_TOPOLOGY_EAX Eax;\r
UINT32 Edx;\r
UINT32 LevelNumber;\r
\r
- if (CPUID_EXTENDED_TOPOLOGY > gMaximumBasicFunction) {\r
+ if (LeafFunction > gMaximumBasicFunction) {\r
+ return;\r
+ }\r
+ if ((LeafFunction != CPUID_EXTENDED_TOPOLOGY) && (LeafFunction != CPUID_V2_EXTENDED_TOPOLOGY)) {\r
return;\r
}\r
\r
LevelNumber = 0;\r
- do {\r
+ for (LevelNumber = 0; ; LevelNumber++) {\r
AsmCpuidEx (\r
- CPUID_EXTENDED_TOPOLOGY, LevelNumber,\r
+ LeafFunction, LevelNumber,\r
&Eax.Uint32, &Ebx.Uint32, &Ecx.Uint32, &Edx\r
);\r
- if (Eax.Bits.ApicIdShift != 0) {\r
- Print (L"CPUID_EXTENDED_TOPOLOGY (Leaf %08x, Sub-Leaf %08x)\n", CPUID_EXTENDED_TOPOLOGY, LevelNumber);\r
- Print (L" EAX:%08x EBX:%08x ECX:%08x EDX:%08x\n", Eax.Uint32, Ebx.Uint32, Ecx.Uint32, Edx);\r
- PRINT_BIT_FIELD (Eax, ApicIdShift);\r
- PRINT_BIT_FIELD (Ebx, LogicalProcessors);\r
- PRINT_BIT_FIELD (Ecx, LevelNumber);\r
- PRINT_BIT_FIELD (Ecx, LevelType);\r
- PRINT_VALUE (Edx, x2APIC_ID);\r
+ if (Ecx.Bits.LevelType == CPUID_EXTENDED_TOPOLOGY_LEVEL_TYPE_INVALID) {\r
+ break;\r
}\r
- LevelNumber++;\r
- } while (Eax.Bits.ApicIdShift != 0);\r
+ Print (\r
+ L"%a (Leaf %08x, Sub-Leaf %08x)\n",\r
+ LeafFunction == CPUID_EXTENDED_TOPOLOGY ? "CPUID_EXTENDED_TOPOLOGY" : "CPUID_V2_EXTENDED_TOPOLOGY",\r
+ LeafFunction, LevelNumber\r
+ );\r
+ Print (L" EAX:%08x EBX:%08x ECX:%08x EDX:%08x\n", Eax.Uint32, Ebx.Uint32, Ecx.Uint32, Edx);\r
+ PRINT_BIT_FIELD (Eax, ApicIdShift);\r
+ PRINT_BIT_FIELD (Ebx, LogicalProcessors);\r
+ PRINT_BIT_FIELD (Ecx, LevelNumber);\r
+ PRINT_BIT_FIELD (Ecx, LevelType);\r
+ PRINT_VALUE (Edx, x2APIC_ID);\r
+ }\r
}\r
\r
/**\r
PRINT_BIT_FIELD (Eax, XSAVES);\r
PRINT_VALUE (Ebx, EnabledSaveStateSize_XCR0_IA32_XSS);\r
PRINT_BIT_FIELD (Ecx, XCR0);\r
+ PRINT_BIT_FIELD (Ecx, HWPState);\r
PRINT_BIT_FIELD (Ecx, PT);\r
PRINT_BIT_FIELD (Ecx, XCR0_1);\r
PRINT_VALUE (Edx, IA32_XSS_Supported_32_63);\r
PRINT_BIT_FIELD (Eax, AVX_512);\r
PRINT_BIT_FIELD (Eax, IA32_XSS);\r
PRINT_BIT_FIELD (Eax, PKRU);\r
+ PRINT_BIT_FIELD (Eax, IA32_XSS_2);\r
PRINT_VALUE (Ebx, EnabledSaveStateSize);\r
PRINT_VALUE (Ecx, SupportedSaveStateSize);\r
PRINT_VALUE (Edx, XCR0_Supported_32_63);\r
PRINT_BIT_FIELD (Edx, L3CacheLocalBandwidthMonitoring);\r
}\r
\r
+/**\r
+ Display CPUID_INTEL_RDT_ALLOCATION memory bandwidth allocation technology enumeration\r
+ sub-leaf.\r
+\r
+**/\r
+VOID\r
+CpuidIntelRdtAllocationMemoryBandwidthSubLeaf (\r
+ VOID\r
+ )\r
+{\r
+ CPUID_INTEL_RDT_ALLOCATION_MEMORY_BANDWIDTH_SUB_LEAF_EAX Eax;\r
+ UINT32 Ebx;\r
+ CPUID_INTEL_RDT_ALLOCATION_MEMORY_BANDWIDTH_SUB_LEAF_ECX Ecx;\r
+ CPUID_INTEL_RDT_ALLOCATION_MEMORY_BANDWIDTH_SUB_LEAF_EDX Edx;\r
+\r
+ AsmCpuidEx (\r
+ CPUID_INTEL_RDT_ALLOCATION, CPUID_INTEL_RDT_ALLOCATION_MEMORY_BANDWIDTH_SUB_LEAF,\r
+ &Eax.Uint32, &Ebx, &Ecx.Uint32, &Edx.Uint32\r
+ );\r
+ Print (L"CPUID_INTEL_RDT_ALLOCATION (Leaf %08x, Sub-Leaf %08x)\n", CPUID_INTEL_RDT_ALLOCATION, CPUID_INTEL_RDT_ALLOCATION_MEMORY_BANDWIDTH_SUB_LEAF);\r
+ Print (L" EAX:%08x EBX:%08x ECX:%08x EDX:%08x\n", Eax.Uint32, Ebx, Ecx.Uint32, Edx.Uint32);\r
+ PRINT_BIT_FIELD (Eax, MaximumMBAThrottling);\r
+ PRINT_VALUE (Ebx, AllocationUnitBitMap);\r
+ PRINT_BIT_FIELD (Ecx, Liner);\r
+ PRINT_BIT_FIELD (Edx, HighestCosNumber);\r
+}\r
+\r
/**\r
Display CPUID_INTEL_RDT_ALLOCATION L3 cache allocation technology enumeration\r
sub-leaf.\r
Print (L" EAX:%08x EBX:%08x ECX:%08x EDX:%08x\n", Eax.Uint32, Ebx, Ecx.Uint32, Edx.Uint32);\r
PRINT_BIT_FIELD (Eax, CapacityLength);\r
PRINT_VALUE (Ebx, AllocationUnitBitMap);\r
- PRINT_BIT_FIELD (Ecx, CosUpdatesInfrequent);\r
PRINT_BIT_FIELD (Ecx, CodeDataPrioritization);\r
PRINT_BIT_FIELD (Edx, HighestCosNumber);\r
}\r
Print (L" EAX:%08x EBX:%08x ECX:%08x EDX:%08x\n", 0, Ebx.Uint32, 0, 0);\r
PRINT_BIT_FIELD (Ebx, L3CacheAllocation);\r
PRINT_BIT_FIELD (Ebx, L2CacheAllocation);\r
-\r
+ PRINT_BIT_FIELD (Ebx, MemoryBandwidth);\r
+ CpuidIntelRdtAllocationMemoryBandwidthSubLeaf ();\r
CpuidIntelRdtAllocationL3CacheSubLeaf ();\r
CpuidIntelRdtAllocationL2CacheSubLeaf ();\r
}\r
Print (L" EAX:%08x EBX:%08x ECX:%08x EDX:%08x\n", Eax.Uint32, Ebx, 0, Edx.Uint32);\r
PRINT_BIT_FIELD (Eax, SGX1);\r
PRINT_BIT_FIELD (Eax, SGX2);\r
+ PRINT_BIT_FIELD (Eax, ENCLV);\r
+ PRINT_BIT_FIELD (Eax, ENCLS);\r
PRINT_BIT_FIELD (Edx, MaxEnclaveSize_Not64);\r
PRINT_BIT_FIELD (Edx, MaxEnclaveSize_64);\r
}\r
CPUID_INTEL_SGX_CAPABILITIES_RESOURCES_SUB_LEAF_ECX Ecx;\r
CPUID_INTEL_SGX_CAPABILITIES_RESOURCES_SUB_LEAF_EDX Edx;\r
UINT32 SubLeaf;\r
- \r
+\r
SubLeaf = CPUID_INTEL_SGX_CAPABILITIES_RESOURCES_SUB_LEAF;\r
do {\r
AsmCpuidEx (\r
//\r
return;\r
}\r
- \r
+\r
CpuidEnumerationOfIntelSgxCapabilities0SubLeaf ();\r
CpuidEnumerationOfIntelSgxCapabilities1SubLeaf ();\r
CpuidEnumerationOfIntelSgxResourcesSubLeaf ();\r
CpuidSocVendorBrandString ();\r
}\r
\r
+/**\r
+ Display CPUID_DETERMINISTIC_ADDRESS_TRANSLATION_PARAMETERS main leaf and sub-leafs.\r
+\r
+**/\r
+VOID\r
+CpuidDeterministicAddressTranslationParameters (\r
+ VOID\r
+ )\r
+{\r
+ UINT32 Eax;\r
+ CPUID_DETERMINISTIC_ADDRESS_TRANSLATION_PARAMETERS_EBX Ebx;\r
+ UINT32 Ecx;\r
+ CPUID_DETERMINISTIC_ADDRESS_TRANSLATION_PARAMETERS_EDX Edx;\r
+\r
+ if (CPUID_DETERMINISTIC_ADDRESS_TRANSLATION_PARAMETERS > gMaximumBasicFunction) {\r
+ return;\r
+ }\r
+\r
+ AsmCpuidEx (\r
+ CPUID_DETERMINISTIC_ADDRESS_TRANSLATION_PARAMETERS,\r
+ CPUID_DETERMINISTIC_ADDRESS_TRANSLATION_PARAMETERS_MAIN_LEAF,\r
+ &Eax, &Ebx.Uint32, &Ecx, &Edx.Uint32\r
+ );\r
+ Print (L"CPUID_DETERMINISTIC_ADDRESS_TRANSLATION_PARAMETERS (Leaf %08x, Sub-Leaf %08x)\n", CPUID_DETERMINISTIC_ADDRESS_TRANSLATION_PARAMETERS, CPUID_DETERMINISTIC_ADDRESS_TRANSLATION_PARAMETERS_MAIN_LEAF);\r
+ Print (L" EAX:%08x EBX:%08x ECX:%08x EDX:%08x\n", Eax, Ebx.Uint32, Ecx, Edx.Uint32);\r
+\r
+ PRINT_VALUE (Eax, MaxID_Index);\r
+ PRINT_BIT_FIELD (Ebx, Page4K);\r
+ PRINT_BIT_FIELD (Ebx, Page2M);\r
+ PRINT_BIT_FIELD (Ebx, Page4M);\r
+ PRINT_BIT_FIELD (Ebx, Page1G);\r
+ PRINT_BIT_FIELD (Ebx, Partitioning);\r
+ PRINT_BIT_FIELD (Ebx, Way);\r
+\r
+ PRINT_VALUE (Ecx, NumberOfSets);\r
+\r
+ PRINT_BIT_FIELD (Edx, TranslationCacheType);\r
+ PRINT_BIT_FIELD (Edx, TranslationCacheLevel);\r
+ PRINT_BIT_FIELD (Edx, FullyAssociative);\r
+ PRINT_BIT_FIELD (Edx, MaximumNum);\r
+}\r
+\r
/**\r
Display CPUID_EXTENDED_FUNCTION leaf.\r
\r
CpuidStructuredExtendedFeatureFlags ();\r
CpuidDirectCacheAccessInfo();\r
CpuidArchitecturalPerformanceMonitoring ();\r
- CpuidExtendedTopology ();\r
+ CpuidExtendedTopology (CPUID_EXTENDED_TOPOLOGY);\r
CpuidExtendedStateMainLeaf ();\r
CpuidIntelRdtMonitoringEnumerationSubLeaf ();\r
CpuidIntelRdtMonitoringL3CacheCapabilitySubLeaf ();\r
CpuidTimeStampCounter ();\r
CpuidProcessorFrequency ();\r
CpuidSocVendor ();\r
+ CpuidDeterministicAddressTranslationParameters ();\r
+ CpuidExtendedTopology (CPUID_V2_EXTENDED_TOPOLOGY);\r
CpuidExtendedFunction ();\r
CpuidExtendedCpuSig ();\r
CpuidProcessorBrandString ();\r