diff options
Diffstat (limited to 'src/cpu/x86/smm')
-rw-r--r-- | src/cpu/x86/smm/smm_stub.S | 19 |
1 files changed, 7 insertions, 12 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 |