summaryrefslogtreecommitdiff
path: root/arch/x86
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2014-11-10 18:00:26 -0700
committerSimon Glass <sjg@chromium.org>2014-11-21 07:24:12 +0100
commit727c1a987147bb55ff41ab62f7e01293a38910b8 (patch)
treed859d062dc842c60c2c941fe38d6467a3319f1d1 /arch/x86
parent003504b6fe2296f581191b77fd2f1e98c4f4720c (diff)
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 <sjg@chromium.org> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Diffstat (limited to 'arch/x86')
-rw-r--r--arch/x86/cpu/coreboot/coreboot.c5
-rw-r--r--arch/x86/cpu/cpu.c22
-rw-r--r--arch/x86/include/asm/cpu.h11
-rw-r--r--arch/x86/include/asm/u-boot-x86.h1
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);