From dea42e011a126c4fdc9ab62f6d6c449df4740f82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ky=C3=B6sti=20M=C3=A4lkki?= Date: Mon, 31 May 2021 20:26:16 +0300 Subject: cpu/x86/lapic: Replace LOCAL_APIC_ADDR references MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Note that there are assumptions about LAPIC MMIO location in both AMD and Intel sources in coreboot proper. Change-Id: I2c668f5f9b93d170351c00d77d003c230900e0b4 Signed-off-by: Kyösti Mälkki Reviewed-on: https://review.coreboot.org/c/coreboot/+/55194 Reviewed-by: Felix Held Reviewed-by: Arthur Heymans Tested-by: build bot (Jenkins) --- src/arch/x86/cpu.c | 5 ----- src/arch/x86/include/arch/smp/mpspec.h | 2 +- src/arch/x86/mpspec.c | 6 ++++-- src/cpu/x86/lapic/lapic.c | 6 ++++++ src/cpu/x86/smm/smmhandler.S | 3 ++- src/include/cpu/x86/lapic_def.h | 7 +------ src/mainboard/apple/macbook21/mptable.c | 2 +- src/mainboard/asus/a88xm-e/mptable.c | 2 +- src/mainboard/asus/p2b/variants/p2b-d/mptable.c | 2 +- src/mainboard/asus/p2b/variants/p2b-ds/mptable.c | 2 +- src/mainboard/emulation/qemu-i440fx/northbridge.c | 2 +- src/mainboard/getac/p470/mptable.c | 2 +- src/mainboard/ibase/mb899/mptable.c | 2 +- src/mainboard/intel/d945gclf/mptable.c | 2 +- src/mainboard/kontron/986lcd-m/mptable.c | 2 +- src/mainboard/lenovo/t60/mptable.c | 2 +- src/mainboard/lenovo/x60/mptable.c | 2 +- src/mainboard/roda/rk886ex/mptable.c | 2 +- src/soc/amd/cezanne/data_fabric.c | 2 +- src/soc/amd/picasso/data_fabric.c | 2 +- src/soc/amd/stoneyridge/northbridge.c | 2 +- 21 files changed, 29 insertions(+), 30 deletions(-) diff --git a/src/arch/x86/cpu.c b/src/arch/x86/cpu.c index 07bd7b5ff2..c929e5ea69 100644 --- a/src/arch/x86/cpu.c +++ b/src/arch/x86/cpu.c @@ -340,8 +340,3 @@ int cpu_index(void) } return -1; } - -uintptr_t cpu_get_lapic_addr(void) -{ - return LOCAL_APIC_ADDR; -} diff --git a/src/arch/x86/include/arch/smp/mpspec.h b/src/arch/x86/include/arch/smp/mpspec.h index 25c23e68f5..198d7df4aa 100644 --- a/src/arch/x86/include/arch/smp/mpspec.h +++ b/src/arch/x86/include/arch/smp/mpspec.h @@ -224,7 +224,7 @@ struct mp_exten_compatibility_address_space { */ } __packed; -void mptable_init(struct mp_config_table *mc, u32 lapic_addr); +void mptable_init(struct mp_config_table *mc); void *smp_next_mpc_entry(struct mp_config_table *mc); void *smp_next_mpe_entry(struct mp_config_table *mc); diff --git a/src/arch/x86/mpspec.c b/src/arch/x86/mpspec.c index 15c3c0e1ea..fa29e800c3 100644 --- a/src/arch/x86/mpspec.c +++ b/src/arch/x86/mpspec.c @@ -6,13 +6,15 @@ #include #include #include +#include #include #include /* Initialize the specified "mc" struct with initial values. */ -void mptable_init(struct mp_config_table *mc, u32 lapic_addr) +void mptable_init(struct mp_config_table *mc) { int i; + u32 lapic_addr = cpu_get_lapic_addr(); memset(mc, 0, sizeof(*mc)); @@ -533,7 +535,7 @@ unsigned long __weak write_smp_table(unsigned long addr) v = smp_write_floating_table(addr, 0); mc = (void *)(((char *)v) + SMP_FLOATING_TABLE_LEN); - mptable_init(mc, LOCAL_APIC_ADDR); + mptable_init(mc); smp_write_processors(mc); diff --git a/src/cpu/x86/lapic/lapic.c b/src/cpu/x86/lapic/lapic.c index 9f3cff5834..9aac163d15 100644 --- a/src/cpu/x86/lapic/lapic.c +++ b/src/cpu/x86/lapic/lapic.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0-only */ +#include #include #include #include @@ -25,6 +26,11 @@ void disable_lapic(void) wrmsr(LAPIC_BASE_MSR, msr); } +uintptr_t cpu_get_lapic_addr(void) +{ + return LAPIC_DEFAULT_BASE; +} + /* See if I need to initialize the local APIC */ static int need_lapic_init(void) { diff --git a/src/cpu/x86/smm/smmhandler.S b/src/cpu/x86/smm/smmhandler.S index 4cbfbfdfb1..3750e5224a 100644 --- a/src/cpu/x86/smm/smmhandler.S +++ b/src/cpu/x86/smm/smmhandler.S @@ -126,8 +126,9 @@ untampered_lapic: movw %ax, %fs movw %ax, %gs + /* FIXME: Incompatible with X2APIC_SUPPORT. */ /* Get this CPU's LAPIC ID */ - movl $(LOCAL_APIC_ADDR | LAPIC_ID), %esi + movl $(LAPIC_DEFAULT_BASE | LAPIC_ID), %esi movl (%esi), %ecx shr $24, %ecx diff --git a/src/include/cpu/x86/lapic_def.h b/src/include/cpu/x86/lapic_def.h index d5e863a26c..84a3413ac3 100644 --- a/src/include/cpu/x86/lapic_def.h +++ b/src/include/cpu/x86/lapic_def.h @@ -9,12 +9,7 @@ (LAPIC_BASE_MSR_X2APIC_MODE | LAPIC_BASE_MSR_ENABLE) #define LAPIC_BASE_MSR_ADDR_MASK 0xFFFFF000 -#ifndef LOCAL_APIC_ADDR -#define LOCAL_APIC_ADDR 0xfee00000 -#endif -#ifndef LAPIC_DEFAULT_BASE -#define LAPIC_DEFAULT_BASE LOCAL_APIC_ADDR -#endif +#define LAPIC_DEFAULT_BASE 0xfee00000 #define LAPIC_ID 0x020 #define LAPIC_LVR 0x030 diff --git a/src/mainboard/apple/macbook21/mptable.c b/src/mainboard/apple/macbook21/mptable.c index 67827e2ab7..22c58af108 100644 --- a/src/mainboard/apple/macbook21/mptable.c +++ b/src/mainboard/apple/macbook21/mptable.c @@ -11,7 +11,7 @@ static void *smp_write_config_table(void *v) mc = (void *)(((char *)v) + SMP_FLOATING_TABLE_LEN); - mptable_init(mc, LOCAL_APIC_ADDR); + mptable_init(mc); smp_write_processors(mc); diff --git a/src/mainboard/asus/a88xm-e/mptable.c b/src/mainboard/asus/a88xm-e/mptable.c index b9e743c5f3..1027391d0a 100644 --- a/src/mainboard/asus/a88xm-e/mptable.c +++ b/src/mainboard/asus/a88xm-e/mptable.c @@ -39,7 +39,7 @@ static void *smp_write_config_table(void *v) mc = (void *)(((char *)v) + SMP_FLOATING_TABLE_LEN); - mptable_init(mc, LOCAL_APIC_ADDR); + mptable_init(mc); memcpy(mc->mpc_oem, "AMD ", 8); smp_write_processors(mc); diff --git a/src/mainboard/asus/p2b/variants/p2b-d/mptable.c b/src/mainboard/asus/p2b/variants/p2b-d/mptable.c index 590c8897f2..98525bba26 100644 --- a/src/mainboard/asus/p2b/variants/p2b-d/mptable.c +++ b/src/mainboard/asus/p2b/variants/p2b-d/mptable.c @@ -10,7 +10,7 @@ static void *smp_write_config_table(void *v) mc = (void *)(((char *)v) + SMP_FLOATING_TABLE_LEN); - mptable_init(mc, LOCAL_APIC_ADDR); + mptable_init(mc); smp_write_processors(mc); diff --git a/src/mainboard/asus/p2b/variants/p2b-ds/mptable.c b/src/mainboard/asus/p2b/variants/p2b-ds/mptable.c index b8787c8756..f2d3a8523a 100644 --- a/src/mainboard/asus/p2b/variants/p2b-ds/mptable.c +++ b/src/mainboard/asus/p2b/variants/p2b-ds/mptable.c @@ -10,7 +10,7 @@ static void *smp_write_config_table(void *v) mc = (void *)(((char *)v) + SMP_FLOATING_TABLE_LEN); - mptable_init(mc, LOCAL_APIC_ADDR); + mptable_init(mc); smp_write_processors(mc); diff --git a/src/mainboard/emulation/qemu-i440fx/northbridge.c b/src/mainboard/emulation/qemu-i440fx/northbridge.c index fcff7bcf7f..8579b8f886 100644 --- a/src/mainboard/emulation/qemu-i440fx/northbridge.c +++ b/src/mainboard/emulation/qemu-i440fx/northbridge.c @@ -155,7 +155,7 @@ static void cpu_pci_domain_read_resources(struct device *dev) /* Reserve space for the LAPIC. There's one in every processor, but * the space only needs to be reserved once, so we do it here. */ res = new_resource(dev, 3); - res->base = LOCAL_APIC_ADDR; + res->base = cpu_get_lapic_addr(); res->size = 0x10000UL; res->limit = 0xffffffffUL; res->flags = IORESOURCE_MEM | IORESOURCE_FIXED | IORESOURCE_STORED | diff --git a/src/mainboard/getac/p470/mptable.c b/src/mainboard/getac/p470/mptable.c index 603f1ba9b5..1d259fa4c4 100644 --- a/src/mainboard/getac/p470/mptable.c +++ b/src/mainboard/getac/p470/mptable.c @@ -11,7 +11,7 @@ static void *smp_write_config_table(void *v) mc = (void *)(((char *)v) + SMP_FLOATING_TABLE_LEN); - mptable_init(mc, LOCAL_APIC_ADDR); + mptable_init(mc); smp_write_processors(mc); diff --git a/src/mainboard/ibase/mb899/mptable.c b/src/mainboard/ibase/mb899/mptable.c index 7c632f572d..bfd29ae92b 100644 --- a/src/mainboard/ibase/mb899/mptable.c +++ b/src/mainboard/ibase/mb899/mptable.c @@ -14,7 +14,7 @@ static void *smp_write_config_table(void *v) mc = (void *)(((char *)v) + SMP_FLOATING_TABLE_LEN); - mptable_init(mc, LOCAL_APIC_ADDR); + mptable_init(mc); smp_write_processors(mc); diff --git a/src/mainboard/intel/d945gclf/mptable.c b/src/mainboard/intel/d945gclf/mptable.c index 1b6a1b164d..30b41dcce2 100644 --- a/src/mainboard/intel/d945gclf/mptable.c +++ b/src/mainboard/intel/d945gclf/mptable.c @@ -11,7 +11,7 @@ static void *smp_write_config_table(void *v) mc = (void *)(((char *)v) + SMP_FLOATING_TABLE_LEN); - mptable_init(mc, LOCAL_APIC_ADDR); + mptable_init(mc); smp_write_processors(mc); diff --git a/src/mainboard/kontron/986lcd-m/mptable.c b/src/mainboard/kontron/986lcd-m/mptable.c index 0c4ec67c7b..54faae5c3f 100644 --- a/src/mainboard/kontron/986lcd-m/mptable.c +++ b/src/mainboard/kontron/986lcd-m/mptable.c @@ -13,7 +13,7 @@ static void *smp_write_config_table(void *v) mc = (void *)(((char *)v) + SMP_FLOATING_TABLE_LEN); - mptable_init(mc, LOCAL_APIC_ADDR); + mptable_init(mc); smp_write_processors(mc); diff --git a/src/mainboard/lenovo/t60/mptable.c b/src/mainboard/lenovo/t60/mptable.c index 2dc3a1aba0..fbc239f3a1 100644 --- a/src/mainboard/lenovo/t60/mptable.c +++ b/src/mainboard/lenovo/t60/mptable.c @@ -11,7 +11,7 @@ static void *smp_write_config_table(void *v) mc = (void *)(((char *)v) + SMP_FLOATING_TABLE_LEN); - mptable_init(mc, LOCAL_APIC_ADDR); + mptable_init(mc); smp_write_processors(mc); diff --git a/src/mainboard/lenovo/x60/mptable.c b/src/mainboard/lenovo/x60/mptable.c index 9e2cff101b..9efb2408ce 100644 --- a/src/mainboard/lenovo/x60/mptable.c +++ b/src/mainboard/lenovo/x60/mptable.c @@ -11,7 +11,7 @@ static void *smp_write_config_table(void *v) mc = (void *)(((char *)v) + SMP_FLOATING_TABLE_LEN); - mptable_init(mc, LOCAL_APIC_ADDR); + mptable_init(mc); smp_write_processors(mc); diff --git a/src/mainboard/roda/rk886ex/mptable.c b/src/mainboard/roda/rk886ex/mptable.c index 0ec750c82f..125a050453 100644 --- a/src/mainboard/roda/rk886ex/mptable.c +++ b/src/mainboard/roda/rk886ex/mptable.c @@ -11,7 +11,7 @@ static void *smp_write_config_table(void *v) mc = (void *)(((char *)v) + SMP_FLOATING_TABLE_LEN); - mptable_init(mc, LOCAL_APIC_ADDR); + mptable_init(mc); smp_write_processors(mc); diff --git a/src/soc/amd/cezanne/data_fabric.c b/src/soc/amd/cezanne/data_fabric.c index d603c8a132..1a0f9cb320 100644 --- a/src/soc/amd/cezanne/data_fabric.c +++ b/src/soc/amd/cezanne/data_fabric.c @@ -37,7 +37,7 @@ void data_fabric_set_mmio_np(void) int reg; uint32_t base, limit, ctrl; const uint32_t np_bot = HPET_BASE_ADDRESS >> D18F0_MMIO_SHIFT; - const uint32_t np_top = (LOCAL_APIC_ADDR - 1) >> D18F0_MMIO_SHIFT; + const uint32_t np_top = (LAPIC_DEFAULT_BASE - 1) >> D18F0_MMIO_SHIFT; data_fabric_print_mmio_conf(); diff --git a/src/soc/amd/picasso/data_fabric.c b/src/soc/amd/picasso/data_fabric.c index 700cb84d6b..b5949f028c 100644 --- a/src/soc/amd/picasso/data_fabric.c +++ b/src/soc/amd/picasso/data_fabric.c @@ -37,7 +37,7 @@ void data_fabric_set_mmio_np(void) int reg; uint32_t base, limit, ctrl; const uint32_t np_bot = HPET_BASE_ADDRESS >> D18F0_MMIO_SHIFT; - const uint32_t np_top = (LOCAL_APIC_ADDR - 1) >> D18F0_MMIO_SHIFT; + const uint32_t np_top = (LAPIC_DEFAULT_BASE - 1) >> D18F0_MMIO_SHIFT; data_fabric_print_mmio_conf(); diff --git a/src/soc/amd/stoneyridge/northbridge.c b/src/soc/amd/stoneyridge/northbridge.c index a2e719b978..d80aeb2a09 100644 --- a/src/soc/amd/stoneyridge/northbridge.c +++ b/src/soc/amd/stoneyridge/northbridge.c @@ -340,7 +340,7 @@ void amd_initcpuio(void) /* Non-posted: range(HPET-LAPIC) or 0xfed00000 through 0xfee00000-1 */ base = (HPET_BASE_ADDRESS >> 8) | MMIO_WE | MMIO_RE; - limit = (ALIGN_DOWN(LOCAL_APIC_ADDR - 1, 64 * KiB) >> 8) | MMIO_NP; + limit = (ALIGN_DOWN(LAPIC_DEFAULT_BASE - 1, 64 * KiB) >> 8) | MMIO_NP; pci_write_config32(SOC_ADDR_DEV, NB_MMIO_LIMIT_LO(0), limit); pci_write_config32(SOC_ADDR_DEV, NB_MMIO_BASE_LO(0), base); -- cgit v1.2.3