xref: /rk3399_ARM-atf/plat/nxp/common/setup/ls_err.c (revision 9719e19a977df3e8bf7567b3c0e1d6b2ebc5b46f)
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 Gupta void 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