1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright 2018-2020 NXP 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu * 6*91f16700Schasinglulu */ 7*91f16700Schasinglulu 8*91f16700Schasinglulu #include <errno.h> 9*91f16700Schasinglulu #include <stdbool.h> 10*91f16700Schasinglulu #include <stdint.h> 11*91f16700Schasinglulu 12*91f16700Schasinglulu #include <arch_helpers.h> 13*91f16700Schasinglulu #include <common/debug.h> 14*91f16700Schasinglulu 15*91f16700Schasinglulu #if TRUSTED_BOARD_BOOT 16*91f16700Schasinglulu #include <dcfg.h> 17*91f16700Schasinglulu #include <snvs.h> 18*91f16700Schasinglulu #endif 19*91f16700Schasinglulu 20*91f16700Schasinglulu #include "plat_common.h" 21*91f16700Schasinglulu 22*91f16700Schasinglulu /* 23*91f16700Schasinglulu * Error handler 24*91f16700Schasinglulu */ 25*91f16700Schasinglulu void plat_error_handler(int err) 26*91f16700Schasinglulu { 27*91f16700Schasinglulu #if TRUSTED_BOARD_BOOT 28*91f16700Schasinglulu uint32_t mode; 29*91f16700Schasinglulu bool sb = check_boot_mode_secure(&mode); 30*91f16700Schasinglulu #endif 31*91f16700Schasinglulu 32*91f16700Schasinglulu switch (err) { 33*91f16700Schasinglulu case -ENOENT: 34*91f16700Schasinglulu case -EAUTH: 35*91f16700Schasinglulu printf("Authentication failure\n"); 36*91f16700Schasinglulu #if TRUSTED_BOARD_BOOT 37*91f16700Schasinglulu /* For SB production mode i.e ITS = 1 */ 38*91f16700Schasinglulu if (sb == true) { 39*91f16700Schasinglulu if (mode == 1U) { 40*91f16700Schasinglulu transition_snvs_soft_fail(); 41*91f16700Schasinglulu } else { 42*91f16700Schasinglulu transition_snvs_non_secure(); 43*91f16700Schasinglulu } 44*91f16700Schasinglulu } 45*91f16700Schasinglulu #endif 46*91f16700Schasinglulu break; 47*91f16700Schasinglulu default: 48*91f16700Schasinglulu /* Unexpected error */ 49*91f16700Schasinglulu break; 50*91f16700Schasinglulu } 51*91f16700Schasinglulu 52*91f16700Schasinglulu /* Loop until the watchdog resets the system */ 53*91f16700Schasinglulu for (;;) 54*91f16700Schasinglulu wfi(); 55*91f16700Schasinglulu } 56