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