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 Tigadolivoid 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