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