mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-10-01 00:50:43 +09:00
x86: Display basic CPU information on boot
Display the type of CPU (x86 or x86_64) when starting up. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
dc68584b42
commit
92cc94a1fe
@ -275,3 +275,67 @@ void cpu_disable_paging_pae(void)
|
||||
:
|
||||
: "eax");
|
||||
}
|
||||
|
||||
static bool has_cpuid(void)
|
||||
{
|
||||
unsigned long flag;
|
||||
|
||||
asm volatile("pushf\n" \
|
||||
"pop %%eax\n"
|
||||
"mov %%eax, %%ecx\n" /* ecx = flags */
|
||||
"xor %1, %%eax\n"
|
||||
"push %%eax\n"
|
||||
"popf\n" /* flags ^= $2 */
|
||||
"pushf\n"
|
||||
"pop %%eax\n" /* eax = flags */
|
||||
"push %%ecx\n"
|
||||
"popf\n" /* flags = ecx */
|
||||
"xor %%ecx, %%eax\n"
|
||||
"mov %%eax, %0"
|
||||
: "=r" (flag)
|
||||
: "i" (1 << 21)
|
||||
: "eax", "ecx", "memory");
|
||||
|
||||
return flag != 0;
|
||||
}
|
||||
|
||||
static bool can_detect_long_mode(void)
|
||||
{
|
||||
unsigned long flag;
|
||||
|
||||
asm volatile("mov $0x80000000, %%eax\n"
|
||||
"cpuid\n"
|
||||
"mov %%eax, %0"
|
||||
: "=r" (flag)
|
||||
:
|
||||
: "eax", "ebx", "ecx", "edx", "memory");
|
||||
|
||||
return flag > 0x80000000UL;
|
||||
}
|
||||
|
||||
static bool has_long_mode(void)
|
||||
{
|
||||
unsigned long flag;
|
||||
|
||||
asm volatile("mov $0x80000001, %%eax\n"
|
||||
"cpuid\n"
|
||||
"mov %%edx, %0"
|
||||
: "=r" (flag)
|
||||
:
|
||||
: "eax", "ebx", "ecx", "edx", "memory");
|
||||
|
||||
return flag & (1 << 29) ? true : false;
|
||||
}
|
||||
|
||||
int cpu_has_64bit(void)
|
||||
{
|
||||
return has_cpuid() && can_detect_long_mode() &&
|
||||
has_long_mode();
|
||||
}
|
||||
|
||||
int print_cpuinfo(void)
|
||||
{
|
||||
printf("CPU: %s\n", cpu_has_64bit() ? "x86_64" : "x86");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -19,4 +19,11 @@ void cpu_enable_paging_pae(ulong cr3);
|
||||
*/
|
||||
void cpu_disable_paging_pae(void);
|
||||
|
||||
/**
|
||||
* cpu_has_64bit() - Check if the CPU has 64-bit support
|
||||
*
|
||||
* @return 1 if this CPU supports long mode (64-bit), 0 if not
|
||||
*/
|
||||
int cpu_has_64bit(void);
|
||||
|
||||
#endif
|
||||
|
@ -26,6 +26,7 @@
|
||||
#define CONFIG_PHYSMEM
|
||||
#define CONFIG_SYS_EARLY_PCI_INIT
|
||||
#define CONFIG_DISPLAY_BOARDINFO_LATE
|
||||
#define CONFIG_DISPLAY_CPUINFO
|
||||
|
||||
#define CONFIG_DM
|
||||
#define CONFIG_CMD_DM
|
||||
|
Loading…
Reference in New Issue
Block a user