xref: /rk3399_ARM-atf/services/std_svc/rmmd/trp/trp_entry.S (revision 319fb08438d10d60eb8bd013d052a55b9472c548)
150a3056aSZelalem Aweke/*
2*319fb084SSoby Mathew * Copyright (c) 2021-2022, 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>
8*319fb084SSoby Mathew#include <services/rmmd_svc.h>
950a3056aSZelalem Aweke#include "trp_private.h"
1050a3056aSZelalem Aweke
1150a3056aSZelalem Aweke.global trp_head
1250a3056aSZelalem Aweke.global trp_smc
1350a3056aSZelalem Aweke
1450a3056aSZelalem Aweke.section ".head.text", "ax"
1550a3056aSZelalem Aweke
1650a3056aSZelalem Aweke	/* ---------------------------------------------
1750a3056aSZelalem Aweke	 * Populate the params in x0-x7 from the pointer
1850a3056aSZelalem Aweke	 * to the smc args structure in x0.
1950a3056aSZelalem Aweke	 * ---------------------------------------------
2050a3056aSZelalem Aweke	 */
2150a3056aSZelalem Aweke	.macro restore_args_call_smc
2250a3056aSZelalem Aweke	ldp	x6, x7, [x0, #TRP_ARG6]
2350a3056aSZelalem Aweke	ldp	x4, x5, [x0, #TRP_ARG4]
2450a3056aSZelalem Aweke	ldp	x2, x3, [x0, #TRP_ARG2]
2550a3056aSZelalem Aweke	ldp	x0, x1, [x0, #TRP_ARG0]
2650a3056aSZelalem Aweke	smc	#0
2750a3056aSZelalem Aweke	.endm
2850a3056aSZelalem Aweke
2950a3056aSZelalem Aweke	/* ---------------------------------------------
3050a3056aSZelalem Aweke	 * Entry point for TRP
3150a3056aSZelalem Aweke	 * ---------------------------------------------
3250a3056aSZelalem Aweke	 */
3350a3056aSZelalem Aweketrp_head:
3450a3056aSZelalem Aweke	bl	plat_set_my_stack
3500e81131SMark Dykes
3600e81131SMark Dykes	/*
3700e81131SMark Dykes	 * Find out whether this is a cold or warm boot
3800e81131SMark Dykes	 */
3900e81131SMark Dykes	ldr	x1, cold_boot_flag
4000e81131SMark Dykes	cbz	x1, warm_boot
4100e81131SMark Dykes
4200e81131SMark Dykes	/*
4300e81131SMark Dykes	 * Update cold boot flag to indicate cold boot is done
4400e81131SMark Dykes	 */
4500e81131SMark Dykes	adr	x2, cold_boot_flag
4600e81131SMark Dykes	str	xzr, [x2]
4700e81131SMark Dykes
4850a3056aSZelalem Aweke
4950a3056aSZelalem Aweke	/* ---------------------------------------------
5050a3056aSZelalem Aweke	 * Zero out BSS section
5150a3056aSZelalem Aweke	 * ---------------------------------------------
5250a3056aSZelalem Aweke	 */
5350a3056aSZelalem Aweke	ldr	x0, =__BSS_START__
5450a3056aSZelalem Aweke	ldr	x1, =__BSS_SIZE__
5550a3056aSZelalem Aweke	bl	zeromem
5650a3056aSZelalem Aweke
5750a3056aSZelalem Aweke	bl	trp_setup
5850a3056aSZelalem Aweke
5950a3056aSZelalem Aweke	bl	trp_main
6000e81131SMark Dykeswarm_boot:
61*319fb084SSoby Mathew	mov_imm	x0, RMMD_RMI_REQ_COMPLETE
6250a3056aSZelalem Aweke	mov	x1, xzr
6350a3056aSZelalem Aweke	smc	#0
6450a3056aSZelalem Aweke	b	trp_handler
6550a3056aSZelalem Aweke
6600e81131SMark Dykes	/*
6700e81131SMark Dykes	 * Flag to mark if it is a cold boot.
6800e81131SMark Dykes	 * 1: cold boot, 0: warmboot.
6900e81131SMark Dykes	 */
7000e81131SMark Dykes.align 3
7100e81131SMark Dykescold_boot_flag:
7200e81131SMark Dykes	.dword		1
7300e81131SMark Dykes
7450a3056aSZelalem Aweke	/* ---------------------------------------------
7550a3056aSZelalem Aweke	 *   Direct SMC call to BL31 service provided by
7650a3056aSZelalem Aweke	 *   RMM Dispatcher
7750a3056aSZelalem Aweke	 * ---------------------------------------------
7850a3056aSZelalem Aweke	 */
7950a3056aSZelalem Awekefunc trp_smc
8050a3056aSZelalem Aweke	restore_args_call_smc
8150a3056aSZelalem Aweke	ret
8250a3056aSZelalem Awekeendfunc trp_smc
8350a3056aSZelalem Aweke
8450a3056aSZelalem Aweke	/* ---------------------------------------------
8550a3056aSZelalem Aweke	 * RMI call handler
8650a3056aSZelalem Aweke	 * ---------------------------------------------
8750a3056aSZelalem Aweke	 */
8850a3056aSZelalem Awekefunc trp_handler
8950a3056aSZelalem Aweke	bl	trp_rmi_handler
9050a3056aSZelalem Aweke	restore_args_call_smc
9150a3056aSZelalem Aweke	b	trp_handler
9250a3056aSZelalem Awekeendfunc trp_handler
93