diff --git a/arch/x86/cpu.c b/arch/x86/cpu.c index 1e326a26b..fe6a3f5a3 100644 --- a/arch/x86/cpu.c +++ b/arch/x86/cpu.c @@ -308,6 +308,27 @@ static void set_fs_base(void) } #endif +static void get_cpu_name(void) +{ + cpuid(CPUID_EXTEND_FUNCTION_2, + (uint32_t *)(boot_cpu_data.model_name), + (uint32_t *)(boot_cpu_data.model_name + 4), + (uint32_t *)(boot_cpu_data.model_name + 8), + (uint32_t *)(boot_cpu_data.model_name + 12)); + cpuid(CPUID_EXTEND_FUNCTION_3, + (uint32_t *)(boot_cpu_data.model_name + 16), + (uint32_t *)(boot_cpu_data.model_name + 20), + (uint32_t *)(boot_cpu_data.model_name + 24), + (uint32_t *)(boot_cpu_data.model_name + 28)); + cpuid(CPUID_EXTEND_FUNCTION_4, + (uint32_t *)(boot_cpu_data.model_name + 32), + (uint32_t *)(boot_cpu_data.model_name + 36), + (uint32_t *)(boot_cpu_data.model_name + 40), + (uint32_t *)(boot_cpu_data.model_name + 44)); + + boot_cpu_data.model_name[48] = '\0'; +} + void bsp_boot_init(void) { uint64_t start_tsc = rdtsc(); @@ -375,6 +396,8 @@ void bsp_boot_init(void) */ get_cpu_capabilities(); + get_cpu_name(); + /* Initialize the hypervisor paging */ init_paging(); @@ -434,6 +457,8 @@ void bsp_boot_init(void) printf("API version %d.%d\r\n", HV_API_MAJOR_VERSION, HV_API_MINOR_VERSION); + printf("Detect processor: %s\n", boot_cpu_data.model_name); + pr_dbg("Core %d is up", CPU_BOOT_ID); /* Warn for security feature not ready */ diff --git a/include/arch/x86/cpu.h b/include/arch/x86/cpu.h index 744da1cc9..c34b1cba6 100644 --- a/include/arch/x86/cpu.h +++ b/include/arch/x86/cpu.h @@ -236,6 +236,7 @@ struct cpuinfo_x86 { uint8_t x86, x86_model; uint64_t physical_address_mask; uint32_t cpuid_leaves[FEATURE_WORDS]; + char model_name[64]; }; extern struct cpuinfo_x86 boot_cpu_data; diff --git a/include/arch/x86/cpuid.h b/include/arch/x86/cpuid.h index be0702cd4..c918a48bc 100644 --- a/include/arch/x86/cpuid.h +++ b/include/arch/x86/cpuid.h @@ -115,6 +115,9 @@ #define CPUID_EXTEND_FEATURE 7 #define CPUID_MAX_EXTENDED_FUNCTION 0x80000000 #define CPUID_EXTEND_FUNCTION_1 0x80000001 +#define CPUID_EXTEND_FUNCTION_2 0x80000002 +#define CPUID_EXTEND_FUNCTION_3 0x80000003 +#define CPUID_EXTEND_FUNCTION_4 0x80000004 #define CPUID_EXTEND_ADDRESS_SIZE 0x80000008 static inline void __cpuid(uint32_t *eax, uint32_t *ebx,