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