mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-18 18:44:22 +00:00
Dump platform-defined regs in crash reporting
It is up to the platform to implement the new plat_crash_print_regs macro to report all relevant platform registers helpful for troubleshooting. plat_crash_print_regs merges or calls previously defined plat_print_gic_regs and plat_print_interconnect_regs macros for each existing platforms. NOTE: THIS COMMIT REQUIRES ALL PLATFORMS THAT ENABLE THE `CRASH_REPORTING` BUILD FLAG TO MIGRATE TO USE THE NEW `plat_crash_print_regs()` MACRO. BY DEFAULT, `CRASH_REPORTING` IS ENABLED IN DEBUG BUILDS FOR ALL PLATFORMS. Fixes: arm-software/tf-issues#373 Signed-off-by: Gerald Lejeune <gerald.lejeune@st.com>
This commit is contained in:
parent
df03c6ed42
commit
9ff67fa6f2
10 changed files with 49 additions and 76 deletions
|
@ -346,11 +346,8 @@ func do_crash_reporting
|
||||||
bl do_cpu_reg_dump
|
bl do_cpu_reg_dump
|
||||||
bl str_in_crash_buf_print
|
bl str_in_crash_buf_print
|
||||||
|
|
||||||
/* Print the gic registers */
|
/* Print some platform registers */
|
||||||
plat_print_gic_regs
|
plat_crash_print_regs
|
||||||
|
|
||||||
/* Print the interconnect registers */
|
|
||||||
plat_print_interconnect_regs
|
|
||||||
|
|
||||||
/* Done reporting */
|
/* Done reporting */
|
||||||
bl plat_panic_handler
|
bl plat_panic_handler
|
||||||
|
|
|
@ -489,20 +489,15 @@ Each platform must ensure a file of this name is in the system include path with
|
||||||
the following macro defined. In the ARM development platforms, this file is
|
the following macro defined. In the ARM development platforms, this file is
|
||||||
found in `plat/arm/board/<plat_name>/include/plat_macros.S`.
|
found in `plat/arm/board/<plat_name>/include/plat_macros.S`.
|
||||||
|
|
||||||
* **Macro : plat_print_gic_regs**
|
* **Macro : plat_crash_print_regs**
|
||||||
|
|
||||||
This macro allows the crash reporting routine to print GIC registers
|
This macro allows the crash reporting routine to print relevant platform
|
||||||
in case of an unhandled exception in BL31. This aids in debugging and
|
|
||||||
this macro can be defined to be empty in case GIC register reporting is
|
|
||||||
not desired.
|
|
||||||
|
|
||||||
* **Macro : plat_print_interconnect_regs**
|
|
||||||
|
|
||||||
This macro allows the crash reporting routine to print interconnect
|
|
||||||
registers in case of an unhandled exception in BL31. This aids in debugging
|
registers in case of an unhandled exception in BL31. This aids in debugging
|
||||||
and this macro can be defined to be empty in case interconnect register
|
and this macro can be defined to be empty in case register reporting is not
|
||||||
reporting is not desired. In ARM standard platforms, the CCI snoop
|
desired.
|
||||||
control registers are reported.
|
|
||||||
|
For instance, GIC or interconnect registers may be helpful for
|
||||||
|
troubleshooting.
|
||||||
|
|
||||||
|
|
||||||
2.2 Handling Reset
|
2.2 Handling Reset
|
||||||
|
|
|
@ -44,7 +44,7 @@ cci_iface_regs:
|
||||||
* Clobbers: x0 - x9, sp
|
* Clobbers: x0 - x9, sp
|
||||||
* ------------------------------------------------
|
* ------------------------------------------------
|
||||||
*/
|
*/
|
||||||
.macro plat_print_interconnect_regs
|
.macro print_cci_regs
|
||||||
adr x6, cci_iface_regs
|
adr x6, cci_iface_regs
|
||||||
/* Store in x7 the base address of the first interface */
|
/* Store in x7 the base address of the first interface */
|
||||||
mov_imm x7, (PLAT_ARM_CCI_BASE + SLAVE_IFACE_OFFSET( \
|
mov_imm x7, (PLAT_ARM_CCI_BASE + SLAVE_IFACE_OFFSET( \
|
||||||
|
|
|
@ -40,7 +40,7 @@
|
||||||
* Clobbers: x0 - x10, x16, x17, sp
|
* Clobbers: x0 - x10, x16, x17, sp
|
||||||
* ---------------------------------------------
|
* ---------------------------------------------
|
||||||
*/
|
*/
|
||||||
.macro plat_print_gic_regs
|
.macro css_print_gic_regs
|
||||||
mov_imm x16, PLAT_ARM_GICD_BASE
|
mov_imm x16, PLAT_ARM_GICD_BASE
|
||||||
mov_imm x17, PLAT_ARM_GICC_BASE
|
mov_imm x17, PLAT_ARM_GICC_BASE
|
||||||
arm_print_gic_regs
|
arm_print_gic_regs
|
||||||
|
|
|
@ -37,12 +37,13 @@
|
||||||
|
|
||||||
/* ---------------------------------------------
|
/* ---------------------------------------------
|
||||||
* The below required platform porting macro
|
* The below required platform porting macro
|
||||||
* prints out relevant GIC registers whenever an
|
* prints out relevant GIC and CCI registers
|
||||||
* unhandled exception is taken in BL31.
|
* whenever an unhandled exception is taken in
|
||||||
|
* BL31.
|
||||||
* Clobbers: x0 - x10, x16, x17, sp
|
* Clobbers: x0 - x10, x16, x17, sp
|
||||||
* ---------------------------------------------
|
* ---------------------------------------------
|
||||||
*/
|
*/
|
||||||
.macro plat_print_gic_regs
|
.macro plat_crash_print_regs
|
||||||
/*
|
/*
|
||||||
* Detect if we're using the base memory map or
|
* Detect if we're using the base memory map or
|
||||||
* the legacy VE memory map
|
* the legacy VE memory map
|
||||||
|
@ -63,6 +64,7 @@ use_ve_mmap:
|
||||||
mov_imm x16, VE_GICD_BASE
|
mov_imm x16, VE_GICD_BASE
|
||||||
print_gic_regs:
|
print_gic_regs:
|
||||||
arm_print_gic_regs
|
arm_print_gic_regs
|
||||||
|
print_cci_regs
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
#endif /* __PLAT_MACROS_S__ */
|
#endif /* __PLAT_MACROS_S__ */
|
||||||
|
|
|
@ -33,10 +33,16 @@
|
||||||
#include <cci_macros.S>
|
#include <cci_macros.S>
|
||||||
#include <css_macros.S>
|
#include <css_macros.S>
|
||||||
|
|
||||||
/*
|
/* ---------------------------------------------
|
||||||
* Required platform porting macros
|
* The below required platform porting macro
|
||||||
* (Provided by included headers)
|
* prints out relevant platform registers
|
||||||
*/
|
* whenever an unhandled exception is taken in
|
||||||
|
* BL31.
|
||||||
|
* ---------------------------------------------
|
||||||
|
*/
|
||||||
|
.macro plat_crash_print_regs
|
||||||
|
css_print_gic_regs
|
||||||
|
print_cci_regs
|
||||||
|
.endm
|
||||||
|
|
||||||
#endif /* __PLAT_MACROS_S__ */
|
#endif /* __PLAT_MACROS_S__ */
|
||||||
|
|
|
@ -43,14 +43,18 @@ newline:
|
||||||
spacer:
|
spacer:
|
||||||
.asciz ":\t\t0x"
|
.asciz ":\t\t0x"
|
||||||
|
|
||||||
|
.section .rodata.cci_reg_name, "aS"
|
||||||
|
cci_iface_regs:
|
||||||
|
.asciz "cci_snoop_ctrl_cluster0", "cci_snoop_ctrl_cluster1" , ""
|
||||||
|
|
||||||
/* ---------------------------------------------
|
/* ---------------------------------------------
|
||||||
* The below macro prints out relevant GIC
|
* The below macro prints out relevant GIC and
|
||||||
* registers whenever an unhandled exception is
|
* CCI registers whenever an unhandled exception
|
||||||
* taken in BL3-1.
|
* is taken in BL3-1.
|
||||||
* Clobbers: x0 - x10, x16, x17, sp
|
* Clobbers: x0 - x10, x16, x17, sp
|
||||||
* ---------------------------------------------
|
* ---------------------------------------------
|
||||||
*/
|
*/
|
||||||
.macro plat_print_gic_regs
|
.macro plat_crash_print_regs
|
||||||
mov_imm x16, BASE_GICD_BASE
|
mov_imm x16, BASE_GICD_BASE
|
||||||
mov_imm x17, BASE_GICC_BASE
|
mov_imm x17, BASE_GICC_BASE
|
||||||
/* Load the gicc reg list to x6 */
|
/* Load the gicc reg list to x6 */
|
||||||
|
@ -82,20 +86,7 @@ gicd_ispendr_loop:
|
||||||
bl asm_print_str
|
bl asm_print_str
|
||||||
b gicd_ispendr_loop
|
b gicd_ispendr_loop
|
||||||
exit_print_gic_regs:
|
exit_print_gic_regs:
|
||||||
.endm
|
|
||||||
|
|
||||||
.section .rodata.cci_reg_name, "aS"
|
|
||||||
cci_iface_regs:
|
|
||||||
.asciz "cci_snoop_ctrl_cluster0", "cci_snoop_ctrl_cluster1" , ""
|
|
||||||
|
|
||||||
/* ------------------------------------------------
|
|
||||||
* The below macro prints out relevant interconnect
|
|
||||||
* registers whenever an unhandled exception is
|
|
||||||
* taken in BL3-1.
|
|
||||||
* Clobbers: x0 - x9, sp
|
|
||||||
* ------------------------------------------------
|
|
||||||
*/
|
|
||||||
.macro plat_print_interconnect_regs
|
|
||||||
adr x6, cci_iface_regs
|
adr x6, cci_iface_regs
|
||||||
/* Store in x7 the base address of the first interface */
|
/* Store in x7 the base address of the first interface */
|
||||||
mov_imm x7, (PLAT_MT_CCI_BASE + SLAVE_IFACE_OFFSET( \
|
mov_imm x7, (PLAT_MT_CCI_BASE + SLAVE_IFACE_OFFSET( \
|
||||||
|
|
|
@ -50,7 +50,7 @@ spacer:
|
||||||
* taken in BL31.
|
* taken in BL31.
|
||||||
* ---------------------------------------------
|
* ---------------------------------------------
|
||||||
*/
|
*/
|
||||||
.macro plat_print_gic_regs
|
.macro plat_crash_print_regs
|
||||||
mov_imm x16, TEGRA_GICC_BASE
|
mov_imm x16, TEGRA_GICC_BASE
|
||||||
cbz x16, 1f
|
cbz x16, 1f
|
||||||
/* gicc base address is now in x16 */
|
/* gicc base address is now in x16 */
|
||||||
|
@ -81,14 +81,4 @@ spacer:
|
||||||
1:
|
1:
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
/* ------------------------------------------------
|
|
||||||
* The below required platform porting macro prints
|
|
||||||
* out relevant interconnect registers whenever an
|
|
||||||
* unhandled exception is taken in BL3-1.
|
|
||||||
* ------------------------------------------------
|
|
||||||
*/
|
|
||||||
.macro plat_print_interconnect_regs
|
|
||||||
nop
|
|
||||||
.endm
|
|
||||||
|
|
||||||
#endif /* __PLAT_MACROS_S__ */
|
#endif /* __PLAT_MACROS_S__ */
|
||||||
|
|
|
@ -54,15 +54,19 @@ newline:
|
||||||
spacer:
|
spacer:
|
||||||
.asciz ":\t\t0x"
|
.asciz ":\t\t0x"
|
||||||
|
|
||||||
|
.section .rodata.cci_reg_name, "aS"
|
||||||
|
cci_iface_regs:
|
||||||
|
.asciz "cci_snoop_ctrl_cluster0", "cci_snoop_ctrl_cluster1" , ""
|
||||||
|
|
||||||
/* ---------------------------------------------
|
/* ---------------------------------------------
|
||||||
* The below utility macro prints out relevant GIC
|
* The below utility macro prints out relevant GIC
|
||||||
* registers whenever an unhandled exception is
|
* and CCI registers whenever an unhandled
|
||||||
* taken in BL31 on ARM standard platforms.
|
* exception is taken in BL31.
|
||||||
* Expects: GICD base in x16, GICC base in x17
|
* Expects: GICD base in x16, GICC base in x17
|
||||||
* Clobbers: x0 - x10, sp
|
* Clobbers: x0 - x10, sp
|
||||||
* ---------------------------------------------
|
* ---------------------------------------------
|
||||||
*/
|
*/
|
||||||
.macro plat_print_gic_regs
|
.macro plat_crash_print_regs
|
||||||
|
|
||||||
mov_imm x16, PLAT_RK_GICD_BASE
|
mov_imm x16, PLAT_RK_GICD_BASE
|
||||||
mov_imm x17, PLAT_RK_GICC_BASE
|
mov_imm x17, PLAT_RK_GICC_BASE
|
||||||
|
@ -119,20 +123,7 @@ gicd_ispendr_loop:
|
||||||
bl asm_print_str
|
bl asm_print_str
|
||||||
b gicd_ispendr_loop
|
b gicd_ispendr_loop
|
||||||
exit_print_gic_regs:
|
exit_print_gic_regs:
|
||||||
.endm
|
|
||||||
|
|
||||||
.section .rodata.cci_reg_name, "aS"
|
|
||||||
cci_iface_regs:
|
|
||||||
.asciz "cci_snoop_ctrl_cluster0", "cci_snoop_ctrl_cluster1" , ""
|
|
||||||
|
|
||||||
/* ------------------------------------------------
|
|
||||||
* The below macro prints out relevant interconnect
|
|
||||||
* registers whenever an unhandled exception is
|
|
||||||
* taken in BL3-1.
|
|
||||||
* Clobbers: x0 - x9, sp
|
|
||||||
* ------------------------------------------------
|
|
||||||
*/
|
|
||||||
.macro plat_print_interconnect_regs
|
|
||||||
#if PLATFORM_CLUSTER_COUNT > 1
|
#if PLATFORM_CLUSTER_COUNT > 1
|
||||||
adr x6, cci_iface_regs
|
adr x6, cci_iface_regs
|
||||||
/* Store in x7 the base address of the first interface */
|
/* Store in x7 the base address of the first interface */
|
||||||
|
|
|
@ -36,16 +36,17 @@
|
||||||
|
|
||||||
/* ---------------------------------------------
|
/* ---------------------------------------------
|
||||||
* The below required platform porting macro
|
* The below required platform porting macro
|
||||||
* prints out relevant GIC registers whenever an
|
* prints out relevant GIC and CCI registers
|
||||||
* unhandled exception is taken in BL31.
|
* whenever an unhandled exception is taken in
|
||||||
* Clobbers: x0 - x10, x16, sp
|
* BL31.
|
||||||
|
* Clobbers: x0 - x10, x16, x17, sp
|
||||||
* ---------------------------------------------
|
* ---------------------------------------------
|
||||||
*/
|
*/
|
||||||
.macro plat_print_gic_regs
|
.macro plat_crash_print_regs
|
||||||
mov_imm x17, BASE_GICC_BASE
|
mov_imm x17, BASE_GICC_BASE
|
||||||
mov_imm x16, BASE_GICD_BASE
|
mov_imm x16, BASE_GICD_BASE
|
||||||
arm_print_gic_regs
|
arm_print_gic_regs
|
||||||
mov x0, x1
|
print_cci_regs
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
#endif /* __PLAT_MACROS_S__ */
|
#endif /* __PLAT_MACROS_S__ */
|
||||||
|
|
Loading…
Add table
Reference in a new issue