183d290c5STom Rini/* SPDX-License-Identifier: GPL-2.0+ */ 2b45db3b5SHou Zhiqiang/* 3b45db3b5SHou Zhiqiang * Copyright 2016 NXP Semiconductor, Inc. 4b45db3b5SHou Zhiqiang */ 5b45db3b5SHou Zhiqiang 6b45db3b5SHou Zhiqiang#include <config.h> 7b45db3b5SHou Zhiqiang#include <linux/linkage.h> 8b45db3b5SHou Zhiqiang#include <asm/system.h> 9b45db3b5SHou Zhiqiang#include <asm/macro.h> 10b45db3b5SHou Zhiqiang 11b45db3b5SHou ZhiqiangWEAK(_sec_firmware_entry) 12b45db3b5SHou Zhiqiang /* 13b45db3b5SHou Zhiqiang * x0: Secure Firmware entry point 14b45db3b5SHou Zhiqiang * x1: Exception return address Low 15b45db3b5SHou Zhiqiang * x2: Exception return address High 16b45db3b5SHou Zhiqiang */ 17b45db3b5SHou Zhiqiang 18b45db3b5SHou Zhiqiang /* Save stack pointer for EL2 */ 19b45db3b5SHou Zhiqiang mov x3, sp 20b45db3b5SHou Zhiqiang msr sp_el2, x3 21b45db3b5SHou Zhiqiang 22b45db3b5SHou Zhiqiang /* Set exception return address hold pointer */ 23b45db3b5SHou Zhiqiang adr x4, 1f 24b45db3b5SHou Zhiqiang mov x3, x4 250897eb2cSHou Zhiqiang#ifdef CONFIG_ARMV8_SEC_FIRMWARE_ERET_ADDR_REVERT 26b45db3b5SHou Zhiqiang rev w3, w3 27b45db3b5SHou Zhiqiang#endif 28b45db3b5SHou Zhiqiang str w3, [x1] 29b45db3b5SHou Zhiqiang lsr x3, x4, #32 300897eb2cSHou Zhiqiang#ifdef CONFIG_ARMV8_SEC_FIRMWARE_ERET_ADDR_REVERT 31b45db3b5SHou Zhiqiang rev w3, w3 32b45db3b5SHou Zhiqiang#endif 33b45db3b5SHou Zhiqiang str w3, [x2] 34b45db3b5SHou Zhiqiang 35b45db3b5SHou Zhiqiang /* Call SEC monitor */ 36b45db3b5SHou Zhiqiang br x0 37b45db3b5SHou Zhiqiang 38b45db3b5SHou Zhiqiang1: 39b45db3b5SHou Zhiqiang mov x0, #0 40b45db3b5SHou Zhiqiang ret 41b45db3b5SHou ZhiqiangENDPROC(_sec_firmware_entry) 42b45db3b5SHou Zhiqiang 43daa92644SHou Zhiqiang#ifdef CONFIG_SEC_FIRMWARE_ARMV8_PSCI 44b45db3b5SHou ZhiqiangENTRY(_sec_firmware_support_psci_version) 45b45db3b5SHou Zhiqiang mov x0, 0x84000000 46b45db3b5SHou Zhiqiang mov x1, 0x0 47b45db3b5SHou Zhiqiang mov x2, 0x0 48b45db3b5SHou Zhiqiang mov x3, 0x0 49b45db3b5SHou Zhiqiang smc #0 50b45db3b5SHou Zhiqiang ret 51b45db3b5SHou ZhiqiangENDPROC(_sec_firmware_support_psci_version) 523db86f4bSAlison Wang 533db86f4bSAlison Wang/* 543db86f4bSAlison Wang * Switch from AArch64 EL2 to AArch32 EL2 553db86f4bSAlison Wang * @param inputs: 563db86f4bSAlison Wang * x0: argument, zero 573db86f4bSAlison Wang * x1: machine nr 583db86f4bSAlison Wang * x2: fdt address 597c5e1febSAlison Wang * x3: input argument 607c5e1febSAlison Wang * x4: kernel entry point 613db86f4bSAlison Wang * @param outputs for secure firmware: 623db86f4bSAlison Wang * x0: function id 633db86f4bSAlison Wang * x1: kernel entry point 643db86f4bSAlison Wang * x2: machine nr 653db86f4bSAlison Wang * x3: fdt address 663db86f4bSAlison Wang*/ 673db86f4bSAlison WangENTRY(armv8_el2_to_aarch32) 683db86f4bSAlison Wang mov x3, x2 693db86f4bSAlison Wang mov x2, x1 707c5e1febSAlison Wang mov x1, x4 71*339fb297SRajesh Bhagat ldr x0, =0xc200ff17 723db86f4bSAlison Wang smc #0 733db86f4bSAlison Wang ret 743db86f4bSAlison WangENDPROC(armv8_el2_to_aarch32) 75b45db3b5SHou Zhiqiang#endif 76