From 727c1a987147bb55ff41ab62f7e01293a38910b8 Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Mon, 10 Nov 2014 18:00:26 -0700 Subject: [PATCH] x86: Replace fill_processor_name() with cpu_get_name() This implementation has a 'cpu' prefix and returns a pointer to the string, avoiding the need for copying. Signed-off-by: Simon Glass Reviewed-by: Bin Meng --- arch/x86/cpu/coreboot/coreboot.c | 5 +++++ arch/x86/cpu/cpu.c | 22 ++++++++++------------ arch/x86/include/asm/cpu.h | 11 ++++++++--- arch/x86/include/asm/u-boot-x86.h | 1 + 4 files changed, 24 insertions(+), 15 deletions(-) diff --git a/arch/x86/cpu/coreboot/coreboot.c b/arch/x86/cpu/coreboot/coreboot.c index 5527183a79..c9f83b0e60 100644 --- a/arch/x86/cpu/coreboot/coreboot.c +++ b/arch/x86/cpu/coreboot/coreboot.c @@ -72,6 +72,11 @@ void show_boot_progress(int val) outb(val, 0x80); } +int print_cpuinfo(void) +{ + return default_print_cpuinfo(); +} + int last_stage_init(void) { if (gd->flags & GD_FLG_COLD_BOOT) diff --git a/arch/x86/cpu/cpu.c b/arch/x86/cpu/cpu.c index 358361970f..97c77ba161 100644 --- a/arch/x86/cpu/cpu.c +++ b/arch/x86/cpu/cpu.c @@ -492,14 +492,14 @@ const char *cpu_vendor_name(int vendor) return name; } -void fill_processor_name(char *processor_name) +char *cpu_get_name(char *name) { + unsigned int *name_as_ints = (unsigned int *)name; struct cpuid_result regs; - char temp_processor_name[49]; - char *processor_name_start; - unsigned int *name_as_ints = (unsigned int *)temp_processor_name; + char *ptr; int i; + /* This bit adds up to 48 bytes */ for (i = 0; i < 3; i++) { regs = cpuid(0x80000002 + i); name_as_ints[i * 4 + 0] = regs.eax; @@ -507,19 +507,17 @@ void fill_processor_name(char *processor_name) name_as_ints[i * 4 + 2] = regs.ecx; name_as_ints[i * 4 + 3] = regs.edx; } - - temp_processor_name[48] = 0; + name[CPU_MAX_NAME_LEN - 1] = '\0'; /* Skip leading spaces. */ - processor_name_start = temp_processor_name; - while (*processor_name_start == ' ') - processor_name_start++; + ptr = name; + while (*ptr == ' ') + ptr++; - memset(processor_name, 0, 49); - strcpy(processor_name, processor_name_start); + return ptr; } -int print_cpuinfo(void) +int default_print_cpuinfo(void) { printf("CPU: %s, vendor %s, device %xh\n", cpu_has_64bit() ? "x86_64" : "x86", diff --git a/arch/x86/include/asm/cpu.h b/arch/x86/include/asm/cpu.h index 89b748b392..c8392915f1 100644 --- a/arch/x86/include/asm/cpu.h +++ b/arch/x86/include/asm/cpu.h @@ -179,12 +179,17 @@ int cpu_has_64bit(void); */ const char *cpu_vendor_name(int vendor); +#define CPU_MAX_NAME_LEN 49 + /** - * fill_processor_name() - Get processor name + * cpu_get_name() - Get the name of the current cpu * - * @processor_name: Address to hold the processor name string + * @name: Place to put name, which must be CPU_MAX_NAME_LEN bytes including + * @return pointer to name, which will likely be a few bytes after the start + * of @name + * \0 terminator */ -void fill_processor_name(char *processor_name); +char *cpu_get_name(char *name); /** * cpu_call64() - Jump to a 64-bit Linux kernel (internal function) diff --git a/arch/x86/include/asm/u-boot-x86.h b/arch/x86/include/asm/u-boot-x86.h index 8d5b43891c..0399417e40 100644 --- a/arch/x86/include/asm/u-boot-x86.h +++ b/arch/x86/include/asm/u-boot-x86.h @@ -45,6 +45,7 @@ int x86_init_cache(void); void reset_cpu(ulong addr); ulong board_get_usable_ram_top(ulong total_size); void dram_init_banksize(void); +int default_print_cpuinfo(void); void setup_pcat_compatibility(void); -- 2.39.5