xref: /rk3399_ARM-atf/services/std_svc/rmmd/trp/trp_entry.S (revision 00e8113145aa12d89db72068bdd3157f08575d14)
150a3056aSZelalem Aweke/*
250a3056aSZelalem Aweke * Copyright (c) 2021, Arm Limited. All rights reserved.
350a3056aSZelalem Aweke *
450a3056aSZelalem Aweke * SPDX-License-Identifier: BSD-3-Clause
550a3056aSZelalem Aweke */
650a3056aSZelalem Aweke
750a3056aSZelalem Aweke#include <asm_macros.S>
850a3056aSZelalem Aweke#include <services/gtsi_svc.h>
950a3056aSZelalem Aweke#include <services/rmi_svc.h>
1050a3056aSZelalem Aweke#include "trp_private.h"
1150a3056aSZelalem Aweke
1250a3056aSZelalem Aweke.global trp_head
1350a3056aSZelalem Aweke.global trp_smc
1450a3056aSZelalem Aweke
1550a3056aSZelalem Aweke.section ".head.text", "ax"
1650a3056aSZelalem Aweke
1750a3056aSZelalem Aweke	/* ---------------------------------------------
1850a3056aSZelalem Aweke	 * Populate the params in x0-x7 from the pointer
1950a3056aSZelalem Aweke	 * to the smc args structure in x0.
2050a3056aSZelalem Aweke	 * ---------------------------------------------
2150a3056aSZelalem Aweke	 */
2250a3056aSZelalem Aweke	.macro restore_args_call_smc
2350a3056aSZelalem Aweke	ldp	x6, x7, [x0, #TRP_ARG6]
2450a3056aSZelalem Aweke	ldp	x4, x5, [x0, #TRP_ARG4]
2550a3056aSZelalem Aweke	ldp	x2, x3, [x0, #TRP_ARG2]
2650a3056aSZelalem Aweke	ldp	x0, x1, [x0, #TRP_ARG0]
2750a3056aSZelalem Aweke	smc	#0
2850a3056aSZelalem Aweke	.endm
2950a3056aSZelalem Aweke
3050a3056aSZelalem Aweke	/* ---------------------------------------------
3150a3056aSZelalem Aweke	 * Entry point for TRP
3250a3056aSZelalem Aweke	 * ---------------------------------------------
3350a3056aSZelalem Aweke	 */
3450a3056aSZelalem Aweketrp_head:
3550a3056aSZelalem Aweke	bl	plat_set_my_stack
36*00e81131SMark Dykes
37*00e81131SMark Dykes	/*
38*00e81131SMark Dykes	 * Find out whether this is a cold or warm boot
39*00e81131SMark Dykes	 */
40*00e81131SMark Dykes	ldr	x1, cold_boot_flag
41*00e81131SMark Dykes	cbz	x1, warm_boot
42*00e81131SMark Dykes
43*00e81131SMark Dykes	/*
44*00e81131SMark Dykes	 * Update cold boot flag to indicate cold boot is done
45*00e81131SMark Dykes	 */
46*00e81131SMark Dykes	adr	x2, cold_boot_flag
47*00e81131SMark Dykes	str	xzr, [x2]
48*00e81131SMark Dykes
4950a3056aSZelalem Aweke
5050a3056aSZelalem Aweke	/* ---------------------------------------------
5150a3056aSZelalem Aweke	 * Zero out BSS section
5250a3056aSZelalem Aweke	 * ---------------------------------------------
5350a3056aSZelalem Aweke	 */
5450a3056aSZelalem Aweke	ldr	x0, =__BSS_START__
5550a3056aSZelalem Aweke	ldr	x1, =__BSS_SIZE__
5650a3056aSZelalem Aweke	bl	zeromem
5750a3056aSZelalem Aweke
5850a3056aSZelalem Aweke	bl	trp_setup
5950a3056aSZelalem Aweke
6050a3056aSZelalem Aweke	bl	trp_main
61*00e81131SMark Dykeswarm_boot:
6250a3056aSZelalem Aweke	mov_imm	x0, RMI_RMM_REQ_COMPLETE
6350a3056aSZelalem Aweke	mov	x1, xzr
6450a3056aSZelalem Aweke	smc	#0
6550a3056aSZelalem Aweke	b	trp_handler
6650a3056aSZelalem Aweke
67*00e81131SMark Dykes	/*
68*00e81131SMark Dykes	 * Flag to mark if it is a cold boot.
69*00e81131SMark Dykes	 * 1: cold boot, 0: warmboot.
70*00e81131SMark Dykes	 */
71*00e81131SMark Dykes.align 3
72*00e81131SMark Dykescold_boot_flag:
73*00e81131SMark Dykes	.dword		1
74*00e81131SMark Dykes
7550a3056aSZelalem Aweke	/* ---------------------------------------------
7650a3056aSZelalem Aweke	 *   Direct SMC call to BL31 service provided by
7750a3056aSZelalem Aweke	 *   RMM Dispatcher
7850a3056aSZelalem Aweke	 * ---------------------------------------------
7950a3056aSZelalem Aweke	 */
8050a3056aSZelalem Awekefunc trp_smc
8150a3056aSZelalem Aweke	restore_args_call_smc
8250a3056aSZelalem Aweke	ret
8350a3056aSZelalem Awekeendfunc trp_smc
8450a3056aSZelalem Aweke
8550a3056aSZelalem Aweke	/* ---------------------------------------------
8650a3056aSZelalem Aweke	 * RMI call handler
8750a3056aSZelalem Aweke	 * ---------------------------------------------
8850a3056aSZelalem Aweke	 */
8950a3056aSZelalem Awekefunc trp_handler
9050a3056aSZelalem Aweke	bl	trp_rmi_handler
9150a3056aSZelalem Aweke	restore_args_call_smc
9250a3056aSZelalem Aweke	b	trp_handler
9350a3056aSZelalem Awekeendfunc trp_handler
94