[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