1*50a3056aSZelalem Aweke/* 2*50a3056aSZelalem Aweke * Copyright (c) 2021, Arm Limited. All rights reserved. 3*50a3056aSZelalem Aweke * 4*50a3056aSZelalem Aweke * SPDX-License-Identifier: BSD-3-Clause 5*50a3056aSZelalem Aweke */ 6*50a3056aSZelalem Aweke 7*50a3056aSZelalem Aweke#include <asm_macros.S> 8*50a3056aSZelalem Aweke#include <services/gtsi_svc.h> 9*50a3056aSZelalem Aweke#include <services/rmi_svc.h> 10*50a3056aSZelalem Aweke#include "trp_private.h" 11*50a3056aSZelalem Aweke 12*50a3056aSZelalem Aweke.global trp_head 13*50a3056aSZelalem Aweke.global trp_smc 14*50a3056aSZelalem Aweke 15*50a3056aSZelalem Aweke.section ".head.text", "ax" 16*50a3056aSZelalem Aweke 17*50a3056aSZelalem Aweke /* --------------------------------------------- 18*50a3056aSZelalem Aweke * Populate the params in x0-x7 from the pointer 19*50a3056aSZelalem Aweke * to the smc args structure in x0. 20*50a3056aSZelalem Aweke * --------------------------------------------- 21*50a3056aSZelalem Aweke */ 22*50a3056aSZelalem Aweke .macro restore_args_call_smc 23*50a3056aSZelalem Aweke ldp x6, x7, [x0, #TRP_ARG6] 24*50a3056aSZelalem Aweke ldp x4, x5, [x0, #TRP_ARG4] 25*50a3056aSZelalem Aweke ldp x2, x3, [x0, #TRP_ARG2] 26*50a3056aSZelalem Aweke ldp x0, x1, [x0, #TRP_ARG0] 27*50a3056aSZelalem Aweke smc #0 28*50a3056aSZelalem Aweke .endm 29*50a3056aSZelalem Aweke 30*50a3056aSZelalem Aweke /* --------------------------------------------- 31*50a3056aSZelalem Aweke * Entry point for TRP 32*50a3056aSZelalem Aweke * --------------------------------------------- 33*50a3056aSZelalem Aweke */ 34*50a3056aSZelalem Aweketrp_head: 35*50a3056aSZelalem Aweke bl plat_set_my_stack 36*50a3056aSZelalem Aweke bl plat_is_my_cpu_primary 37*50a3056aSZelalem Aweke cbz x0, trp_secondary_cpu_entry 38*50a3056aSZelalem Aweke 39*50a3056aSZelalem Aweke /* --------------------------------------------- 40*50a3056aSZelalem Aweke * Zero out BSS section 41*50a3056aSZelalem Aweke * --------------------------------------------- 42*50a3056aSZelalem Aweke */ 43*50a3056aSZelalem Aweke ldr x0, =__BSS_START__ 44*50a3056aSZelalem Aweke ldr x1, =__BSS_SIZE__ 45*50a3056aSZelalem Aweke bl zeromem 46*50a3056aSZelalem Aweke 47*50a3056aSZelalem Aweke bl trp_setup 48*50a3056aSZelalem Aweke 49*50a3056aSZelalem Aweke bl trp_main 50*50a3056aSZelalem Aweketrp_secondary_cpu_entry: 51*50a3056aSZelalem Aweke mov_imm x0, RMI_RMM_REQ_COMPLETE 52*50a3056aSZelalem Aweke mov x1, xzr 53*50a3056aSZelalem Aweke smc #0 54*50a3056aSZelalem Aweke b trp_handler 55*50a3056aSZelalem Aweke 56*50a3056aSZelalem Aweke /* --------------------------------------------- 57*50a3056aSZelalem Aweke * Direct SMC call to BL31 service provided by 58*50a3056aSZelalem Aweke * RMM Dispatcher 59*50a3056aSZelalem Aweke * --------------------------------------------- 60*50a3056aSZelalem Aweke */ 61*50a3056aSZelalem Awekefunc trp_smc 62*50a3056aSZelalem Aweke restore_args_call_smc 63*50a3056aSZelalem Aweke ret 64*50a3056aSZelalem Awekeendfunc trp_smc 65*50a3056aSZelalem Aweke 66*50a3056aSZelalem Aweke /* --------------------------------------------- 67*50a3056aSZelalem Aweke * RMI call handler 68*50a3056aSZelalem Aweke * --------------------------------------------- 69*50a3056aSZelalem Aweke */ 70*50a3056aSZelalem Awekefunc trp_handler 71*50a3056aSZelalem Aweke bl trp_rmi_handler 72*50a3056aSZelalem Aweke restore_args_call_smc 73*50a3056aSZelalem Aweke b trp_handler 74*50a3056aSZelalem Awekeendfunc trp_handler 75