xref: /rk3399_ARM-atf/plat/amlogic/common/include/plat_macros.S (revision 9af73b36883010a4dc4f0b0640dcc7dced895770)
15b743698SCarlo Caione/*
2*821781f3SCarlo Caione * Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved.
35b743698SCarlo Caione *
45b743698SCarlo Caione * SPDX-License-Identifier: BSD-3-Clause
55b743698SCarlo Caione */
65b743698SCarlo Caione
75b743698SCarlo Caione#ifndef PLAT_MACROS_S
85b743698SCarlo Caione#define PLAT_MACROS_S
95b743698SCarlo Caione
105b743698SCarlo Caione#include <drivers/arm/gicv2.h>
115b743698SCarlo Caione#include <platform_def.h>
125b743698SCarlo Caione
135b743698SCarlo Caione.section .rodata.gic_reg_name, "aS"
145b743698SCarlo Caione
155b743698SCarlo Caionegicc_regs:
165b743698SCarlo Caione	.asciz "gicc_hppir", "gicc_ahppir", "gicc_ctlr", ""
175b743698SCarlo Caionegicd_pend_reg:
185b743698SCarlo Caione	.asciz "gicd_ispendr regs (Offsets 0x200 - 0x278)\n Offset:\t\t\tvalue\n"
195b743698SCarlo Caionenewline:
205b743698SCarlo Caione	.asciz "\n"
215b743698SCarlo Caionespacer:
225b743698SCarlo Caione	.asciz ":\t\t0x"
235b743698SCarlo Caione
245b743698SCarlo Caione	/* ---------------------------------------------
255b743698SCarlo Caione	 * The below required platform porting macro
265b743698SCarlo Caione	 * prints out relevant GIC and CCI registers
275b743698SCarlo Caione	 * whenever an unhandled exception is taken in
285b743698SCarlo Caione	 * BL31.
295b743698SCarlo Caione	 * Clobbers: x0 - x10, x16, x17, sp
305b743698SCarlo Caione	 * ---------------------------------------------
315b743698SCarlo Caione	 */
325b743698SCarlo Caione	.macro plat_crash_print_regs
335b743698SCarlo Caione
345b743698SCarlo Caione	/* GICC registers */
355b743698SCarlo Caione
36*821781f3SCarlo Caione	mov_imm	x17, AML_GICC_BASE
375b743698SCarlo Caione
385b743698SCarlo Caione	adr	x6, gicc_regs
395b743698SCarlo Caione	ldr	w8, [x17, #GICC_HPPIR]
405b743698SCarlo Caione	ldr	w9, [x17, #GICC_AHPPIR]
415b743698SCarlo Caione	ldr	w10, [x17, #GICC_CTLR]
425b743698SCarlo Caione	bl	str_in_crash_buf_print
435b743698SCarlo Caione
445b743698SCarlo Caione	/* GICD registers */
455b743698SCarlo Caione
46*821781f3SCarlo Caione	mov_imm	x16, AML_GICD_BASE
475b743698SCarlo Caione
485b743698SCarlo Caione	add	x7, x16, #GICD_ISPENDR
495b743698SCarlo Caione	adr	x4, gicd_pend_reg
505b743698SCarlo Caione	bl	asm_print_str
515b743698SCarlo Caione
525b743698SCarlo Caionegicd_ispendr_loop:
535b743698SCarlo Caione	sub	x4, x7, x16
545b743698SCarlo Caione	cmp	x4, #0x280
555b743698SCarlo Caione	b.eq	exit_print_gic_regs
565b743698SCarlo Caione	bl	asm_print_hex
575b743698SCarlo Caione
585b743698SCarlo Caione	adr	x4, spacer
595b743698SCarlo Caione	bl	asm_print_str
605b743698SCarlo Caione
615b743698SCarlo Caione	ldr	x4, [x7], #8
625b743698SCarlo Caione	bl	asm_print_hex
635b743698SCarlo Caione
645b743698SCarlo Caione	adr	x4, newline
655b743698SCarlo Caione	bl	asm_print_str
665b743698SCarlo Caione	b	gicd_ispendr_loop
675b743698SCarlo Caioneexit_print_gic_regs:
685b743698SCarlo Caione
695b743698SCarlo Caione	.endm
705b743698SCarlo Caione
715b743698SCarlo Caione#endif /* PLAT_MACROS_S */
72