12f2abcf4SHaojian Zhuang/* 22f2abcf4SHaojian Zhuang * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved. 32f2abcf4SHaojian Zhuang * 42f2abcf4SHaojian Zhuang * SPDX-License-Identifier: BSD-3-Clause 52f2abcf4SHaojian Zhuang */ 62f2abcf4SHaojian Zhuang 72f2abcf4SHaojian Zhuang#ifndef __PLAT_MACROS_S__ 82f2abcf4SHaojian Zhuang#define __PLAT_MACROS_S__ 92f2abcf4SHaojian Zhuang 102f2abcf4SHaojian Zhuang#include <cci.h> 112f2abcf4SHaojian Zhuang#include <gic_v2.h> 12*ee1ebbd1SIsla Mitchell#include <hi3660.h> 132f2abcf4SHaojian Zhuang#include <platform_def.h> 142f2abcf4SHaojian Zhuang 152f2abcf4SHaojian Zhuang.section .rodata.gic_reg_name, "aS" 162f2abcf4SHaojian Zhuanggicc_regs: 172f2abcf4SHaojian Zhuang .asciz "gicc_hppir", "gicc_ahppir", "gicc_ctlr", "" 182f2abcf4SHaojian Zhuanggicd_pend_reg: 192f2abcf4SHaojian Zhuang .asciz "gicd_ispendr regs (Offsets 0x200 - 0x278)\n" \ 202f2abcf4SHaojian Zhuang " Offset:\t\t\tvalue\n" 212f2abcf4SHaojian Zhuangnewline: 222f2abcf4SHaojian Zhuang .asciz "\n" 232f2abcf4SHaojian Zhuangspacer: 242f2abcf4SHaojian Zhuang .asciz ":\t\t0x" 252f2abcf4SHaojian Zhuang 262f2abcf4SHaojian Zhuang.section .rodata.cci_reg_name, "aS" 272f2abcf4SHaojian Zhuangcci_iface_regs: 282f2abcf4SHaojian Zhuang .asciz "cci_snoop_ctrl_cluster0", "cci_snoop_ctrl_cluster1" , "" 292f2abcf4SHaojian Zhuang 302f2abcf4SHaojian Zhuang/* --------------------------------------------- 312f2abcf4SHaojian Zhuang * The below macro prints out relevant GIC 322f2abcf4SHaojian Zhuang * registers whenever an unhandled exception is 332f2abcf4SHaojian Zhuang * taken in BL31. 342f2abcf4SHaojian Zhuang * --------------------------------------------- 352f2abcf4SHaojian Zhuang */ 362f2abcf4SHaojian Zhuang.macro plat_crash_print_regs 372f2abcf4SHaojian Zhuang mov_imm x16, GICD_REG_BASE 382f2abcf4SHaojian Zhuang mov_imm x17, GICC_REG_BASE 392f2abcf4SHaojian Zhuang 402f2abcf4SHaojian Zhuang /* Load the gicc reg list to x6 */ 412f2abcf4SHaojian Zhuang adr x6, gicc_regs 422f2abcf4SHaojian Zhuang /* Load the gicc regs to gp regs used by str_in_crash_buf_print */ 432f2abcf4SHaojian Zhuang ldr w8, [x17, #GICC_HPPIR] 442f2abcf4SHaojian Zhuang ldr w9, [x17, #GICC_AHPPIR] 452f2abcf4SHaojian Zhuang ldr w10, [x17, #GICC_CTLR] 462f2abcf4SHaojian Zhuang /* Store to the crash buf and print to cosole */ 472f2abcf4SHaojian Zhuang bl str_in_crash_buf_print 482f2abcf4SHaojian Zhuang 492f2abcf4SHaojian Zhuang /* Print the GICD_ISPENDR regs */ 502f2abcf4SHaojian Zhuang add x7, x16, #GICD_ISPENDR 512f2abcf4SHaojian Zhuang adr x4, gicd_pend_reg 522f2abcf4SHaojian Zhuang bl asm_print_str 532f2abcf4SHaojian Zhuang2: 542f2abcf4SHaojian Zhuang sub x4, x7, x16 552f2abcf4SHaojian Zhuang cmp x4, #0x280 562f2abcf4SHaojian Zhuang b.eq 1f 572f2abcf4SHaojian Zhuang bl asm_print_hex 582f2abcf4SHaojian Zhuang adr x4, spacer 592f2abcf4SHaojian Zhuang bl asm_print_str 602f2abcf4SHaojian Zhuang ldr x4, [x7], #8 612f2abcf4SHaojian Zhuang bl asm_print_hex 622f2abcf4SHaojian Zhuang adr x4, newline 632f2abcf4SHaojian Zhuang bl asm_print_str 642f2abcf4SHaojian Zhuang b 2b 652f2abcf4SHaojian Zhuang1: 662f2abcf4SHaojian Zhuang adr x6, cci_iface_regs 672f2abcf4SHaojian Zhuang /* Store in x7 the base address of the first interface */ 682f2abcf4SHaojian Zhuang mov_imm x7, (CCI400_REG_BASE + SLAVE_IFACE_OFFSET( \ 692f2abcf4SHaojian Zhuang CCI400_SL_IFACE3_CLUSTER_IX)) 702f2abcf4SHaojian Zhuang ldr w8, [x7, #SNOOP_CTRL_REG] 712f2abcf4SHaojian Zhuang /* Store in x7 the base address of the second interface */ 722f2abcf4SHaojian Zhuang mov_imm x7, (CCI400_REG_BASE + SLAVE_IFACE_OFFSET( \ 732f2abcf4SHaojian Zhuang CCI400_SL_IFACE4_CLUSTER_IX)) 742f2abcf4SHaojian Zhuang ldr w9, [x7, #SNOOP_CTRL_REG] 752f2abcf4SHaojian Zhuang /* Store to the crash buf and print to console */ 762f2abcf4SHaojian Zhuang bl str_in_crash_buf_print 772f2abcf4SHaojian Zhuang.endm 782f2abcf4SHaojian Zhuang 792f2abcf4SHaojian Zhuang#endif /* __PLAT_MACROS_S__ */ 80