xref: /arm-trusted-firmware/plat/arm/board/fvp_r/fvp_r_debug.S (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu/*
2*91f16700Schasinglulu * Copyright (c) 2021, ARM Limited and Contributors. All rights reserved.
3*91f16700Schasinglulu *
4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu */
6*91f16700Schasinglulu
7*91f16700Schasinglulu#include <arch.h>
8*91f16700Schasinglulu#include <asm_macros.S>
9*91f16700Schasinglulu#include <common/debug.h>
10*91f16700Schasinglulu
11*91f16700Schasinglulu	.globl el2_panic
12*91f16700Schasinglulu
13*91f16700Schasinglulu	/***********************************************************
14*91f16700Schasinglulu	 * The common implementation of el3_panic for all BL stages
15*91f16700Schasinglulu	 ***********************************************************/
16*91f16700Schasinglulu
17*91f16700Schasinglulu.section .rodata.panic_str, "aS"
18*91f16700Schasinglulu	panic_msg: .asciz "PANIC at PC : 0x"
19*91f16700Schasinglulu
20*91f16700Schasinglulu/*
21*91f16700Schasinglulu * el2_panic will be redefined by the
22*91f16700Schasinglulu * crash reporting mechanism (if enabled)
23*91f16700Schasinglulu */
24*91f16700Schasingluluel2_panic:
25*91f16700Schasinglulu	mov	x6, x30
26*91f16700Schasinglulu	bl	plat_crash_console_init
27*91f16700Schasinglulu
28*91f16700Schasinglulu	/* Check if the console is initialized */
29*91f16700Schasinglulu	cbz	x0, _panic_handler
30*91f16700Schasinglulu
31*91f16700Schasinglulu	/* The console is initialized */
32*91f16700Schasinglulu	adr	x4, panic_msg
33*91f16700Schasinglulu	bl	asm_print_str
34*91f16700Schasinglulu	mov	x4, x6
35*91f16700Schasinglulu
36*91f16700Schasinglulu	/* The panic location is lr -4 */
37*91f16700Schasinglulu	sub	x4, x4, #4
38*91f16700Schasinglulu	bl	asm_print_hex
39*91f16700Schasinglulu
40*91f16700Schasinglulu	bl	plat_crash_console_flush
41*91f16700Schasinglulu
42*91f16700Schasinglulu_panic_handler:
43*91f16700Schasinglulu	/* Pass to plat_panic_handler the address from where el2_panic was
44*91f16700Schasinglulu	 * called, not the address of the call from el2_panic.
45*91f16700Schasinglulu	 */
46*91f16700Schasinglulu	mov	x30, x6
47*91f16700Schasinglulu	b	plat_panic_handler
48