28 lines
673 B
ArmAsm
28 lines
673 B
ArmAsm
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#include <linux/linkage.h>
|
|
#include <asm/nospec-branch.h>
|
|
#include <asm/page_types.h>
|
|
#include <asm/processor-flags.h>
|
|
|
|
.text
|
|
.align PAGE_SIZE
|
|
|
|
/*
|
|
* asm_acpi_mp_play_dead() - Hand over control of the CPU to the BIOS
|
|
*
|
|
* rdi: Address of the ACPI MADT MPWK ResetVector
|
|
* rsi: PGD of the identity mapping
|
|
*/
|
|
SYM_FUNC_START(asm_acpi_mp_play_dead)
|
|
/* Turn off global entries. Following CR3 write will flush them. */
|
|
movq %cr4, %rdx
|
|
andq $~(X86_CR4_PGE), %rdx
|
|
movq %rdx, %cr4
|
|
|
|
/* Switch to identity mapping */
|
|
movq %rsi, %cr3
|
|
|
|
/* Jump to reset vector */
|
|
ANNOTATE_RETPOLINE_SAFE
|
|
jmp *%rdi
|
|
SYM_FUNC_END(asm_acpi_mp_play_dead)
|