summaryrefslogtreecommitdiff
path: root/src/cpu/x86/smm
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu/x86/smm')
-rw-r--r--src/cpu/x86/smm/smm_stub.S19
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