xref: /rk3399_ARM-atf/plat/arm/common/arm_err.c (revision c3cf06f1a3a9b9ee8ac7a0ae505f95c45f7dca84)
1 /*
2  * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #include <arch_helpers.h>
8 #include <console.h>
9 #include <debug.h>
10 #include <errno.h>
11 #include <plat_arm.h>
12 #include <platform.h>
13 #include <platform_def.h>
14 #include <stdint.h>
15 #include <v2m_flash.h>
16 
17 #pragma weak plat_arm_error_handler
18 
19 /*
20  * ARM common implementation for error handler
21  */
22 void __dead2 plat_arm_error_handler(int err)
23 {
24 	int ret;
25 
26 	switch (err) {
27 	case -ENOENT:
28 	case -EAUTH:
29 		/* Image load or authentication error. Erase the ToC */
30 		INFO("Erasing FIP ToC from flash...\n");
31 		(void)nor_unlock(PLAT_ARM_FIP_BASE);
32 		ret = nor_word_program(PLAT_ARM_FIP_BASE, 0);
33 		if (ret != 0) {
34 			ERROR("Cannot erase ToC\n");
35 		} else {
36 			INFO("Done\n");
37 		}
38 		break;
39 	default:
40 		/* Unexpected error */
41 		break;
42 	}
43 
44 	(void)console_flush();
45 
46 	/* Loop until the watchdog resets the system */
47 	for (;;)
48 		wfi();
49 }
50 
51 void __dead2 plat_error_handler(int err)
52 {
53 	plat_arm_error_handler(err);
54 }
55