summaryrefslogtreecommitdiff
path: root/src/cpu/x86
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu/x86')
-rw-r--r--src/cpu/x86/car/copy_and_run.c2
-rw-r--r--src/cpu/x86/lapic/lapic_cpu_init.c14
2 files changed, 11 insertions, 5 deletions
diff --git a/src/cpu/x86/car/copy_and_run.c b/src/cpu/x86/car/copy_and_run.c
index ac2b7b0ca7..bd2662e0c0 100644
--- a/src/cpu/x86/car/copy_and_run.c
+++ b/src/cpu/x86/car/copy_and_run.c
@@ -72,7 +72,7 @@ static void copy_and_run(unsigned cpu_reset)
__asm__ volatile (
"cli\n\t"
"leal _iseg, %edi\n\t"
- "jmp %edi\n\t"
+ "jmp *%edi\n\t"
);
}
diff --git a/src/cpu/x86/lapic/lapic_cpu_init.c b/src/cpu/x86/lapic/lapic_cpu_init.c
index 022d3722be..033f789442 100644
--- a/src/cpu/x86/lapic/lapic_cpu_init.c
+++ b/src/cpu/x86/lapic/lapic_cpu_init.c
@@ -437,6 +437,10 @@ static void wait_other_cpus_stop(struct bus *cpu_bus)
#define cpus_ready_for_init() do {} while(0)
#endif
+#if HAVE_SMI_HANDLER
+void smm_init(void);
+#endif
+
void initialize_cpus(struct bus *cpu_bus)
{
struct device_path cpu_path;
@@ -457,14 +461,18 @@ void initialize_cpus(struct bus *cpu_bus)
cpu_path.type = DEVICE_PATH_CPU;
cpu_path.u.cpu.id = 0;
#endif
-
+
/* Find the device structure for the boot cpu */
info->cpu = alloc_find_dev(cpu_bus, &cpu_path);
#if CONFIG_SMP == 1
copy_secondary_start_to_1m_below(); // why here? In case some day we can start core1 in amd_sibling_init
#endif
-
+
+#if HAVE_SMI_HANDLER
+ smm_init();
+#endif
+
cpus_ready_for_init();
#if CONFIG_SMP == 1
@@ -477,7 +485,6 @@ void initialize_cpus(struct bus *cpu_bus)
/* Initialize the bootstrap processor */
cpu_initialize();
-
#if CONFIG_SMP == 1
#if SERIAL_CPU_INIT == 1
start_other_cpus(cpu_bus, info->cpu);
@@ -486,6 +493,5 @@ void initialize_cpus(struct bus *cpu_bus)
/* Now wait the rest of the cpus stop*/
wait_other_cpus_stop(cpu_bus);
#endif
-
}