xref: /aosp_15_r20/external/arm-trusted-firmware/plat/brcm/board/common/err.c (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong Park /*
2*54fd6939SJiyong Park  * Copyright (c) 2016 - 2020, Broadcom
3*54fd6939SJiyong Park  *
4*54fd6939SJiyong Park  * SPDX-License-Identifier: BSD-3-Clause
5*54fd6939SJiyong Park  */
6*54fd6939SJiyong Park 
7*54fd6939SJiyong Park #include <stdint.h>
8*54fd6939SJiyong Park 
9*54fd6939SJiyong Park #include <arch_helpers.h>
10*54fd6939SJiyong Park #include <common/debug.h>
11*54fd6939SJiyong Park #include <drivers/console.h>
12*54fd6939SJiyong Park #include <lib/mmio.h>
13*54fd6939SJiyong Park 
14*54fd6939SJiyong Park #include <platform_def.h>
15*54fd6939SJiyong Park 
16*54fd6939SJiyong Park #define L0_RESET 0x2
17*54fd6939SJiyong Park 
18*54fd6939SJiyong Park /*
19*54fd6939SJiyong Park  * Brcm error handler
20*54fd6939SJiyong Park  */
plat_error_handler(int err)21*54fd6939SJiyong Park void plat_error_handler(int err)
22*54fd6939SJiyong Park {
23*54fd6939SJiyong Park 	INFO("L0 reset...\n");
24*54fd6939SJiyong Park 
25*54fd6939SJiyong Park 	/* Ensure the characters are flushed out */
26*54fd6939SJiyong Park 	console_flush();
27*54fd6939SJiyong Park 
28*54fd6939SJiyong Park 	mmio_write_32(CRMU_SOFT_RESET_CTRL, L0_RESET);
29*54fd6939SJiyong Park 
30*54fd6939SJiyong Park 	/*
31*54fd6939SJiyong Park 	 * In case we get here:
32*54fd6939SJiyong Park 	 * Loop until the watchdog resets the system
33*54fd6939SJiyong Park 	 */
34*54fd6939SJiyong Park 	while (1) {
35*54fd6939SJiyong Park 		wfi();
36*54fd6939SJiyong Park 	}
37*54fd6939SJiyong Park }
38