aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cpu/qemu-x86/Kconfig14
-rw-r--r--src/mainboard/emulation/qemu-i440fx/northbridge.c16
2 files changed, 29 insertions, 1 deletions
diff --git a/src/cpu/qemu-x86/Kconfig b/src/cpu/qemu-x86/Kconfig
index 24029325af..641cea815c 100644
--- a/src/cpu/qemu-x86/Kconfig
+++ b/src/cpu/qemu-x86/Kconfig
@@ -10,6 +10,19 @@ if CPU_QEMU_X86
# coreboot i440fx does not support SMM
choice
+ prompt "AP init"
+ default CPU_QEMU_X86_LAPIC_INIT
+
+config CPU_QEMU_X86_LAPIC_INIT
+ bool "Legacy serial LAPIC init"
+
+config CPU_QEMU_X86_PARALLEL_MP
+ bool "Parallel MP init"
+ select PARALLEL_MP
+
+endchoice
+
+choice
prompt "SMM support"
default CPU_QEMU_X86_ASEG_SMM
depends on BOARD_EMULATION_QEMU_X86_Q35
@@ -20,6 +33,7 @@ config CPU_QEMU_X86_NO_SMM
config CPU_QEMU_X86_ASEG_SMM
bool "SMM in ASEG"
+ depends on !PARALLEL_MP
select SMM_ASEG
#config CPU_QEMU_X86_TSEG_SMM
diff --git a/src/mainboard/emulation/qemu-i440fx/northbridge.c b/src/mainboard/emulation/qemu-i440fx/northbridge.c
index d19d6c8207..f49d47dac9 100644
--- a/src/mainboard/emulation/qemu-i440fx/northbridge.c
+++ b/src/mainboard/emulation/qemu-i440fx/northbridge.c
@@ -3,6 +3,7 @@
#include <console/console.h>
#include <cpu/cpu.h>
#include <cpu/x86/lapic_def.h>
+#include <cpu/x86/mp.h>
#include <arch/io.h>
#include <device/pci_def.h>
#include <device/pci_ops.h>
@@ -244,9 +245,22 @@ static struct device_operations pci_domain_ops = {
#endif
};
+static const struct mp_ops mp_ops_no_smm = {
+ .get_cpu_count = fw_cfg_max_cpus,
+};
+
+void mp_init_cpus(struct bus *cpu_bus)
+{
+ if (mp_init_with_smm(cpu_bus, &mp_ops_no_smm))
+ printk(BIOS_ERR, "MP initialization failure.\n");
+}
+
static void cpu_bus_init(struct device *dev)
{
- initialize_cpus(dev->link_list);
+ if (CONFIG(PARALLEL_MP))
+ mp_cpu_bus_init(dev);
+ else
+ initialize_cpus(dev->link_list);
}
static void cpu_bus_scan(struct device *bus)