xref: /arm-trusted-firmware/plat/nxp/common/setup/ls_err.c (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
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