There were number of issues in wakeup sequence: - Wakeup stack was placed in hardcoded address. - NX bit in EFER was not enabled. - Initialization incorrectly set physical address of secondary_startup_64. - Some alignment issues. This patch fixes these issues and in addition: - Unifies coding conventions in .S files. - Sets alignments of code and data right. Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@intel.com> Link: http://lkml.kernel.org/r/1336501366-28617-18-git-send-email-jarkko.sakkinen@intel.com Originally-by: H. Peter Anvin <hpa@linux.intel.com> Cc: Rafael J. Wysocki <rjw@sisk.pl> Cc: Len Brown <len.brown@intel.com> Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
36 lines
763 B
ArmAsm
36 lines
763 B
ArmAsm
/*
|
|
* Real-mode blob header; this should match realmode.h and be
|
|
* readonly; for mutable data instead add pointers into the .data
|
|
* or .bss sections as appropriate.
|
|
*/
|
|
|
|
#include <linux/linkage.h>
|
|
#include <asm/page_types.h>
|
|
|
|
.section ".header", "a"
|
|
|
|
GLOBAL(real_mode_header)
|
|
.long pa_text_start
|
|
.long pa_ro_end
|
|
.long pa_end
|
|
#ifdef CONFIG_X86_32
|
|
.long pa_machine_real_restart_asm
|
|
#endif
|
|
/* SMP trampoline */
|
|
.long pa_trampoline_data
|
|
.long pa_trampoline_status
|
|
#ifdef CONFIG_X86_32
|
|
.long pa_startup_32_smp
|
|
.long pa_boot_gdt
|
|
#else
|
|
.long pa_startup_64_smp
|
|
.long pa_level3_ident_pgt
|
|
.long pa_level3_kernel_pgt
|
|
#endif
|
|
/* ACPI sleep */
|
|
#ifdef CONFIG_ACPI_SLEEP
|
|
.long pa_wakeup_start
|
|
.long pa_wakeup_header
|
|
#endif
|
|
END(real_mode_header)
|