[coreboot-gerrit] New patch to review for coreboot: ACPI S3: Move SMP trampoline recovery
Kyösti Mälkki (kyosti.malkki@gmail.com)
gerrit at coreboot.org
Sat Jun 18 12:39:36 CEST 2016
Kyösti Mälkki (kyosti.malkki at gmail.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/15241
-gerrit
commit d105e03c129603d383dbbf9c88a49c9aefb7d344
Author: Kyösti Mälkki <kyosti.malkki at gmail.com>
Date: Thu Jun 16 00:40:16 2016 +0300
ACPI S3: Move SMP trampoline recovery
Hide those details from ACPI.
Change-Id: Ic08b6d70c7895b094afdb3c77e020ff37ad632a1
Signed-off-by: Kyösti Mälkki <kyosti.malkki at gmail.com>
---
src/arch/x86/acpi.c | 16 ++--------------
src/cpu/x86/lapic/lapic_cpu_init.c | 13 ++++++++++---
src/include/cpu/x86/lapic.h | 3 +++
3 files changed, 15 insertions(+), 17 deletions(-)
diff --git a/src/arch/x86/acpi.c b/src/arch/x86/acpi.c
index cc6d2ad..c81c0ec 100644
--- a/src/arch/x86/acpi.c
+++ b/src/arch/x86/acpi.c
@@ -41,6 +41,7 @@
#include <arch/acpigen.h>
#include <device/pci.h>
#include <cbmem.h>
+#include <cpu/x86/lapic.h>
#include <cpu/x86/lapic_def.h>
#include <cpu/cpu.h>
#include <cbfs.h>
@@ -1127,12 +1128,6 @@ void *acpi_find_wakeup_vector(void)
return wake_vec;
}
-#if CONFIG_SMP
-extern char *lowmem_backup;
-extern char *lowmem_backup_ptr;
-extern int lowmem_backup_size;
-#endif
-
#define WAKEUP_BASE 0x600
void (*acpi_do_wakeup)(uintptr_t vector, u32 backup_source, u32 backup_target,
@@ -1155,14 +1150,7 @@ void acpi_jump_to_wakeup(void *vector)
}
}
-#if CONFIG_SMP
- // FIXME: This should go into the ACPI backup memory, too. No pork sausages.
- /*
- * Just restore the SMP trampoline and continue with wakeup on
- * assembly level.
- */
- memcpy(lowmem_backup_ptr, lowmem_backup, lowmem_backup_size);
-#endif
+ lowmem_recovery();
/* Copy wakeup trampoline in place. */
memcpy((void *)WAKEUP_BASE, &__wakeup, __wakeup_size);
diff --git a/src/cpu/x86/lapic/lapic_cpu_init.c b/src/cpu/x86/lapic/lapic_cpu_init.c
index bf63517..20d17a9 100644
--- a/src/cpu/x86/lapic/lapic_cpu_init.c
+++ b/src/cpu/x86/lapic/lapic_cpu_init.c
@@ -47,9 +47,9 @@
#define AP_SIPI_VECTOR 0x1000
#if CONFIG_HAVE_ACPI_RESUME
-char *lowmem_backup;
-char *lowmem_backup_ptr;
-int lowmem_backup_size;
+static char *lowmem_backup;
+static char *lowmem_backup_ptr;
+static int lowmem_backup_size;
#endif
static inline void setup_secondary_gdt(void)
@@ -95,6 +95,13 @@ static void copy_secondary_start_to_lowest_1M(void)
(long unsigned int)AP_SIPI_VECTOR, code_size);
}
+void lowmem_recovery(void)
+{
+#if CONFIG_HAVE_ACPI_RESUME
+ memcpy(lowmem_backup_ptr, lowmem_backup, lowmem_backup_size);
+#endif
+}
+
static int lapic_start_cpu(unsigned long apicid)
{
int timeout;
diff --git a/src/include/cpu/x86/lapic.h b/src/include/cpu/x86/lapic.h
index 16bc42d..36f4824 100644
--- a/src/include/cpu/x86/lapic.h
+++ b/src/include/cpu/x86/lapic.h
@@ -148,6 +148,9 @@ void setup_lapic(void);
#if CONFIG_SMP
struct device;
int start_cpu(struct device *cpu);
+void lowmem_recovery(void);
+#else
+static inline void lowmem_recovery(void) { };
#endif /* CONFIG_SMP */
#endif /* !__PRE_RAM__ */
More information about the coreboot-gerrit
mailing list