diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/cpu/x86/smm/smm_stub.S | 19 | ||||
-rw-r--r-- | src/include/cpu/x86/lapic.h | 2 |
2 files changed, 8 insertions, 13 deletions
diff --git a/src/cpu/x86/smm/smm_stub.S b/src/cpu/x86/smm/smm_stub.S index c83839cc01..25a35aabbe 100644 --- a/src/cpu/x86/smm/smm_stub.S +++ b/src/cpu/x86/smm/smm_stub.S @@ -101,30 +101,25 @@ smm_trampoline32: * the OS can manipulate the APIC id use the non-changing cpuid result * for APIC id (eax). A table is used to handle a discontiguous * APIC id space. */ -apic_id: - mov $LAPIC_BASE_MSR, %ecx - rdmsr - and $LAPIC_BASE_X2APIC_ENABLED, %eax - cmp $LAPIC_BASE_X2APIC_ENABLED, %eax - jne xapic -x2apic: + mov $0, %eax + cpuid + cmp $0xb, %eax + jc 1f mov $0xb, %eax mov $0, %ecx cpuid mov %edx, %eax - jmp apicid_end - -xapic: + jmp 2f +1: mov $1, %eax cpuid mov %ebx, %eax shr $24, %eax +2: -apicid_end: mov $(apic_to_cpu_num), %ebx xor %ecx, %ecx - 1: cmp (%ebx, %ecx, 2), %ax je 1f diff --git a/src/include/cpu/x86/lapic.h b/src/include/cpu/x86/lapic.h index 05d096e318..537fa97afe 100644 --- a/src/include/cpu/x86/lapic.h +++ b/src/include/cpu/x86/lapic.h @@ -126,7 +126,7 @@ static __always_inline int lapic_busy(void) static __always_inline unsigned int initial_lapicid(void) { uint32_t lapicid; - if (is_x2apic_mode() && cpuid_get_max_func() >= 0xb) + if (cpuid_get_max_func() >= 0xb) lapicid = cpuid_ext(0xb, 0).edx; else lapicid = cpuid_ebx(1) >> 24; |