1/* SPDX-License-Identifier: GPL-2.0+ */ 2/* 3 * (C) Copyright 2013 4 * David Feng <fenghua@phytium.com.cn> 5 */ 6 7#include <asm-offsets.h> 8#include <config.h> 9#include <linux/linkage.h> 10#include <asm/macro.h> 11 12.pushsection .text.armv8_switch_to_el2, "ax" 13ENTRY(armv8_switch_to_el2) 14 switch_el x6, 1f, 0f, 0f 150: 16 cmp x5, #ES_TO_AARCH64 17 b.eq 2f 18 /* 19 * When loading 32-bit kernel, it will jump 20 * to secure firmware again, and never return. 21 */ 22 bl armv8_el2_to_aarch32 232: 24 /* 25 * x4 is kernel entry point or switch_to_el1 26 * if CONFIG_ARMV8_SWITCH_TO_EL1 is defined. 27 * When running in EL2 now, jump to the 28 * address saved in x4. 29 */ 30 br x4 311: armv8_switch_to_el2_m x4, x5, x6 32ENDPROC(armv8_switch_to_el2) 33.popsection 34 35.pushsection .text.armv8_switch_to_el1, "ax" 36ENTRY(armv8_switch_to_el1) 37 switch_el x6, 0f, 1f, 0f 380: 39 /* x4 is kernel entry point. When running in EL1 40 * now, jump to the address saved in x4. 41 */ 42 br x4 431: armv8_switch_to_el1_m x4, x5, x6 44ENDPROC(armv8_switch_to_el1) 45.popsection 46 47.pushsection .text.armv8_el2_to_aarch32, "ax" 48WEAK(armv8_el2_to_aarch32) 49 ret 50ENDPROC(armv8_el2_to_aarch32) 51.popsection 52