cpu/x86/lapic: Add Kconfig choice LAPIC_ACCESS_MODE
Allows compile-time optimisation on platforms that do not wish to enable runtime checking of X2APIC. Legacy lapic_cpu_init() is incompatible so there is dependency on PARALLEL_MP. Also stop_this_cpu() is incompatible, so there is dependency on !AP_IN_SIPI_WAIT. Since the code actually lacks enablement of X2APIC (apparently assuming the blob has done it) and the other small flaws pointed out in earlier reviews, X2APIC_RUNTIME is not selected per default on any platform yet. Change-Id: I8269f9639ee3e89a2c2b4178d266ba2dac46db3f Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/55073 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Arthur Heymans <arthur@aheymans.xyz> Reviewed-by: Angel Pons <th3fanbus@gmail.com> Reviewed-by: Wonkyu Kim <wonkyu.kim@intel.com>
This commit is contained in:
parent
4cf65e9cc3
commit
176c8877ce
|
@ -17,6 +17,28 @@ config PARALLEL_MP_AP_WORK
|
||||||
config LEGACY_SMP_INIT
|
config LEGACY_SMP_INIT
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
choice LAPIC_ACCESS_MODE
|
||||||
|
prompt "APIC operation mode"
|
||||||
|
default XAPIC_ONLY
|
||||||
|
|
||||||
|
config XAPIC_ONLY
|
||||||
|
prompt "Set XAPIC mode"
|
||||||
|
bool
|
||||||
|
|
||||||
|
config X2APIC_ONLY
|
||||||
|
prompt "Set X2APIC mode"
|
||||||
|
bool
|
||||||
|
depends on PARALLEL_MP
|
||||||
|
depends on !AP_IN_SIPI_WAIT
|
||||||
|
|
||||||
|
config X2APIC_RUNTIME
|
||||||
|
prompt "Support both XAPIC and X2APIC"
|
||||||
|
bool
|
||||||
|
depends on PARALLEL_MP
|
||||||
|
depends on !AP_IN_SIPI_WAIT
|
||||||
|
|
||||||
|
endchoice
|
||||||
|
|
||||||
config UDELAY_LAPIC
|
config UDELAY_LAPIC
|
||||||
bool
|
bool
|
||||||
default n
|
default n
|
||||||
|
|
|
@ -3,6 +3,10 @@
|
||||||
#include <cpu/x86/lapic.h>
|
#include <cpu/x86/lapic.h>
|
||||||
#include <console/console.h>
|
#include <console/console.h>
|
||||||
|
|
||||||
|
#if !CONFIG(XAPIC_ONLY)
|
||||||
|
#error "BUG: lapic_write_around() needs to be fixed for X2APIC."
|
||||||
|
#endif
|
||||||
|
|
||||||
void lapic_virtual_wire_mode_init(void)
|
void lapic_virtual_wire_mode_init(void)
|
||||||
{
|
{
|
||||||
/* this is so interrupts work. This is very limited scope --
|
/* this is so interrupts work. This is very limited scope --
|
||||||
|
|
|
@ -10,6 +10,12 @@
|
||||||
|
|
||||||
static inline bool is_x2apic_mode(void)
|
static inline bool is_x2apic_mode(void)
|
||||||
{
|
{
|
||||||
|
if (CONFIG(XAPIC_ONLY))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (CONFIG(X2APIC_ONLY))
|
||||||
|
return true;
|
||||||
|
|
||||||
msr_t msr;
|
msr_t msr;
|
||||||
msr = rdmsr(LAPIC_BASE_MSR);
|
msr = rdmsr(LAPIC_BASE_MSR);
|
||||||
return ((msr.lo & LAPIC_BASE_X2APIC_ENABLED) == LAPIC_BASE_X2APIC_ENABLED);
|
return ((msr.lo & LAPIC_BASE_X2APIC_ENABLED) == LAPIC_BASE_X2APIC_ENABLED);
|
||||||
|
|
Loading…
Reference in New Issue