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