xref: /rk3399_ARM-atf/plat/amlogic/common/include/plat_macros.S (revision 5b7436987177fd35ab8c8fc9f69d743f0a577813)
1*5b743698SCarlo Caione/*
2*5b743698SCarlo Caione * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
3*5b743698SCarlo Caione *
4*5b743698SCarlo Caione * SPDX-License-Identifier: BSD-3-Clause
5*5b743698SCarlo Caione */
6*5b743698SCarlo Caione
7*5b743698SCarlo Caione#ifndef PLAT_MACROS_S
8*5b743698SCarlo Caione#define PLAT_MACROS_S
9*5b743698SCarlo Caione
10*5b743698SCarlo Caione#include <drivers/arm/gicv2.h>
11*5b743698SCarlo Caione#include <platform_def.h>
12*5b743698SCarlo Caione
13*5b743698SCarlo Caione.section .rodata.gic_reg_name, "aS"
14*5b743698SCarlo Caione
15*5b743698SCarlo Caionegicc_regs:
16*5b743698SCarlo Caione	.asciz "gicc_hppir", "gicc_ahppir", "gicc_ctlr", ""
17*5b743698SCarlo Caionegicd_pend_reg:
18*5b743698SCarlo Caione	.asciz "gicd_ispendr regs (Offsets 0x200 - 0x278)\n Offset:\t\t\tvalue\n"
19*5b743698SCarlo Caionenewline:
20*5b743698SCarlo Caione	.asciz "\n"
21*5b743698SCarlo Caionespacer:
22*5b743698SCarlo Caione	.asciz ":\t\t0x"
23*5b743698SCarlo Caione
24*5b743698SCarlo Caione	/* ---------------------------------------------
25*5b743698SCarlo Caione	 * The below required platform porting macro
26*5b743698SCarlo Caione	 * prints out relevant GIC and CCI registers
27*5b743698SCarlo Caione	 * whenever an unhandled exception is taken in
28*5b743698SCarlo Caione	 * BL31.
29*5b743698SCarlo Caione	 * Clobbers: x0 - x10, x16, x17, sp
30*5b743698SCarlo Caione	 * ---------------------------------------------
31*5b743698SCarlo Caione	 */
32*5b743698SCarlo Caione	.macro plat_crash_print_regs
33*5b743698SCarlo Caione
34*5b743698SCarlo Caione	/* GICC registers */
35*5b743698SCarlo Caione
36*5b743698SCarlo Caione	mov_imm	x17, GXBB_GICC_BASE
37*5b743698SCarlo Caione
38*5b743698SCarlo Caione	adr	x6, gicc_regs
39*5b743698SCarlo Caione	ldr	w8, [x17, #GICC_HPPIR]
40*5b743698SCarlo Caione	ldr	w9, [x17, #GICC_AHPPIR]
41*5b743698SCarlo Caione	ldr	w10, [x17, #GICC_CTLR]
42*5b743698SCarlo Caione	bl	str_in_crash_buf_print
43*5b743698SCarlo Caione
44*5b743698SCarlo Caione	/* GICD registers */
45*5b743698SCarlo Caione
46*5b743698SCarlo Caione	mov_imm	x16, GXBB_GICD_BASE
47*5b743698SCarlo Caione
48*5b743698SCarlo Caione	add	x7, x16, #GICD_ISPENDR
49*5b743698SCarlo Caione	adr	x4, gicd_pend_reg
50*5b743698SCarlo Caione	bl	asm_print_str
51*5b743698SCarlo Caione
52*5b743698SCarlo Caionegicd_ispendr_loop:
53*5b743698SCarlo Caione	sub	x4, x7, x16
54*5b743698SCarlo Caione	cmp	x4, #0x280
55*5b743698SCarlo Caione	b.eq	exit_print_gic_regs
56*5b743698SCarlo Caione	bl	asm_print_hex
57*5b743698SCarlo Caione
58*5b743698SCarlo Caione	adr	x4, spacer
59*5b743698SCarlo Caione	bl	asm_print_str
60*5b743698SCarlo Caione
61*5b743698SCarlo Caione	ldr	x4, [x7], #8
62*5b743698SCarlo Caione	bl	asm_print_hex
63*5b743698SCarlo Caione
64*5b743698SCarlo Caione	adr	x4, newline
65*5b743698SCarlo Caione	bl	asm_print_str
66*5b743698SCarlo Caione	b	gicd_ispendr_loop
67*5b743698SCarlo Caioneexit_print_gic_regs:
68*5b743698SCarlo Caione
69*5b743698SCarlo Caione	.endm
70*5b743698SCarlo Caione
71*5b743698SCarlo Caione#endif /* PLAT_MACROS_S */
72