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