diff options
author | Kyösti Mälkki <kyosti.malkki@gmail.com> | 2021-10-16 18:12:53 +0300 |
---|---|---|
committer | Kyösti Mälkki <kyosti.malkki@gmail.com> | 2022-02-05 07:46:50 +0000 |
commit | ceaf959678905f44a54a116f37bd15acab5d4608 (patch) | |
tree | 4f58424657505a2794320e115cbab58d4eb54e2d /src/cpu/x86/smm | |
parent | 2c079fce45e14f853bcc86a836b9b92e26555175 (diff) |
cpu/x86/lapic: Unconditionally use CPUID leaf 0xb if available
Even when we're not in X2APIC mode, the information in CPUID
leaf 0xb will be valid if that leaf is implemented on the CPU.
Change-Id: I0f1f46fe5091ebeab6dfb4c7e151150cf495d0cb
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/58386
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
Reviewed-by: Wonkyu Kim <wonkyu.kim@intel.com>
Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
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 |