/* SPDX-License-Identifier: GPL-2.0-only */
/*
* CPU reset routines
*
* Copyright ( C ) 2001 Deep Blue Solutions Ltd .
* Copyright ( C ) 2012 ARM Ltd .
* Copyright ( C ) 2015 Huawei Futurewei Technologies .
*/
#include <linux/linkage.h>
#include <linux/cfi_types.h>
#include <asm/assembler.h>
#include <asm/sysreg.h>
#include <asm/virt.h>
.text
.pushsection .idmap.text, "a"
/*
* cpu_soft_restart ( el2_switch , entry , arg0 , arg1 , arg2 )
*
* @ el2_switch : Flag to indicate a switch to EL2 is needed .
* @ entry : Location to jump to for soft reset .
* arg0 : First argument passed to @ entry . ( relocation list )
* arg1 : Second argument passed to @ entry . ( physical kernel entry )
* arg2 : Third argument passed to @ entry . ( physical dtb address )
*
* Put the CPU into the same state as it would be if it had been reset , and
* branch to what would be the reset vector . It must be executed with the
* flat identity mapping .
*/
SYM_TYPED_FUNC_START(cpu_soft_restart)
mov_q x12, INIT_SCTLR_EL1_MMU_OFF
pre_disable_mmu_workaround
/*
* either disable EL1 & 0 translation regime or disable EL2 & 0 translation
* regime if HCR_EL2 . E2H = = 1
*/
msr sctlr_el1, x12
isb
cbz x0, 1 f // el2_switch?
mov x0, #HVC_SOFT_RESTART
hvc #0 // no return
1 : mov x8, x1 // entry
mov x0, x2 // arg0
mov x1, x3 // arg1
mov x2, x4 // arg2
br x8
SYM_FUNC_END(cpu_soft_restart)
.popsection
Messung V0.5 in Prozent C=96 H=96 G=95
¤ Dauer der Verarbeitung: 0.2 Sekunden
¤
*© Formatika GbR, Deutschland