summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyösti Mälkki <kyosti.malkki@gmail.com>2021-05-31 20:26:16 +0300
committerKyösti Mälkki <kyosti.malkki@gmail.com>2021-06-11 07:11:43 +0000
commitdea42e011a126c4fdc9ab62f6d6c449df4740f82 (patch)
tree97896aa5869a5447ecca0310af09d0e122729bfd
parenta96be277e1062796be7109a08a9ab9cdb6bf5d28 (diff)
cpu/x86/lapic: Replace LOCAL_APIC_ADDR references
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 <kyosti.malkki@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/55194 Reviewed-by: Felix Held <felix-coreboot@felixheld.de> Reviewed-by: Arthur Heymans <arthur@aheymans.xyz> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
-rw-r--r--src/arch/x86/cpu.c5
-rw-r--r--src/arch/x86/include/arch/smp/mpspec.h2
-rw-r--r--src/arch/x86/mpspec.c6
-rw-r--r--src/cpu/x86/lapic/lapic.c6
-rw-r--r--src/cpu/x86/smm/smmhandler.S3
-rw-r--r--src/include/cpu/x86/lapic_def.h7
-rw-r--r--src/mainboard/apple/macbook21/mptable.c2
-rw-r--r--src/mainboard/asus/a88xm-e/mptable.c2
-rw-r--r--src/mainboard/asus/p2b/variants/p2b-d/mptable.c2
-rw-r--r--src/mainboard/asus/p2b/variants/p2b-ds/mptable.c2
-rw-r--r--src/mainboard/emulation/qemu-i440fx/northbridge.c2
-rw-r--r--src/mainboard/getac/p470/mptable.c2
-rw-r--r--src/mainboard/ibase/mb899/mptable.c2
-rw-r--r--src/mainboard/intel/d945gclf/mptable.c2
-rw-r--r--src/mainboard/kontron/986lcd-m/mptable.c2
-rw-r--r--src/mainboard/lenovo/t60/mptable.c2
-rw-r--r--src/mainboard/lenovo/x60/mptable.c2
-rw-r--r--src/mainboard/roda/rk886ex/mptable.c2
-rw-r--r--src/soc/amd/cezanne/data_fabric.c2
-rw-r--r--src/soc/amd/picasso/data_fabric.c2
-rw-r--r--src/soc/amd/stoneyridge/northbridge.c2
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 <arch/smp/mpspec.h>
#include <string.h>
#include <arch/cpu.h>
+#include <cpu/cpu.h>
#include <cpu/x86/lapic.h>
#include <drivers/generic/ioapic/chip.h>
/* 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 <cpu/cpu.h>
#include <cpu/x86/lapic.h>
#include <cpu/x86/lapic_def.h>
#include <cpu/x86/msr.h>
@@ -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);