mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 20:51:03 +02:00
tools/x86/kcpuid: Dump the CPUID function in detailed view
Sometimes it is useful to know which CPUID leaf contains the fields so add it to -d output so that it looks like this: CPUID_0x8000001e_ECX[0x0]: extended_apic_id : 0x8 - Extended APIC ID core_id : 0x4 - Identifies the logical core ID threads_per_core : 0x1 - The number of threads per core is threads_per_core + 1 node_id : 0x0 - Node ID nodes_per_processor : 0x0 - Nodes per processor { 0: 1 node, else reserved } CPUID_0x8000001f_ECX[0x0]: sme - Secure Memory Encryption ... Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> Signed-off-by: Terry Bowman <terry.bowman@amd.com> Reviewed-by: Feng Tang <feng.tang@intel.com> Link: https://lore.kernel.org/r/20230206141832.4162264-4-terry.bowman@amd.com
This commit is contained in:
@@ -33,7 +33,7 @@ struct reg_desc {
|
||||
struct bits_desc descs[32];
|
||||
};
|
||||
|
||||
enum {
|
||||
enum cpuid_reg {
|
||||
R_EAX = 0,
|
||||
R_EBX,
|
||||
R_ECX,
|
||||
@@ -41,6 +41,10 @@ enum {
|
||||
NR_REGS
|
||||
};
|
||||
|
||||
static const char * const reg_names[] = {
|
||||
"EAX", "EBX", "ECX", "EDX",
|
||||
};
|
||||
|
||||
struct subleaf {
|
||||
u32 index;
|
||||
u32 sub;
|
||||
@@ -428,12 +432,18 @@ static void parse_text(void)
|
||||
|
||||
|
||||
/* Decode every eax/ebx/ecx/edx */
|
||||
static void decode_bits(u32 value, struct reg_desc *rdesc)
|
||||
static void decode_bits(u32 value, struct reg_desc *rdesc, enum cpuid_reg reg)
|
||||
{
|
||||
struct bits_desc *bdesc;
|
||||
int start, end, i;
|
||||
u32 mask;
|
||||
|
||||
if (!rdesc->nr) {
|
||||
if (show_details)
|
||||
printf("\t %s: 0x%08x\n", reg_names[reg], value);
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < rdesc->nr; i++) {
|
||||
bdesc = &rdesc->descs[i];
|
||||
|
||||
@@ -468,13 +478,21 @@ static void show_leaf(struct subleaf *leaf)
|
||||
if (!leaf)
|
||||
return;
|
||||
|
||||
if (show_raw)
|
||||
if (show_raw) {
|
||||
leaf_print_raw(leaf);
|
||||
} else {
|
||||
if (show_details)
|
||||
printf("CPUID_0x%x_ECX[0x%x]:\n",
|
||||
leaf->index, leaf->sub);
|
||||
}
|
||||
|
||||
decode_bits(leaf->eax, &leaf->info[R_EAX]);
|
||||
decode_bits(leaf->ebx, &leaf->info[R_EBX]);
|
||||
decode_bits(leaf->ecx, &leaf->info[R_ECX]);
|
||||
decode_bits(leaf->edx, &leaf->info[R_EDX]);
|
||||
decode_bits(leaf->eax, &leaf->info[R_EAX], R_EAX);
|
||||
decode_bits(leaf->ebx, &leaf->info[R_EBX], R_EBX);
|
||||
decode_bits(leaf->ecx, &leaf->info[R_ECX], R_ECX);
|
||||
decode_bits(leaf->edx, &leaf->info[R_EDX], R_EDX);
|
||||
|
||||
if (!show_raw && show_details)
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
static void show_func(struct cpuid_func *func)
|
||||
|
Reference in New Issue
Block a user