1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Copyright 2020 NXP
4  */
5 
6 #include <spl.h>
7 
8 char __data_start[0] __section(".__data_start");
9 char __data_save_start[0] __section(".__data_save_start");
10 char __data_save_end[0] __section(".__data_save_end");
11 
12 u32 cold_reboot_flag = 1;
13 
reset_flag(void)14 u32 __weak reset_flag(void)
15 {
16 	return 1;
17 }
18 
spl_save_restore_data(void)19 void spl_save_restore_data(void)
20 {
21 	u32 data_size = __data_save_end - __data_save_start;
22 	cold_reboot_flag = reset_flag();
23 
24 	if (cold_reboot_flag == 1) {
25 		/* Save data section to data_save section */
26 		memcpy(__data_save_start, __data_start, data_size);
27 	} else {
28 		/* Restore the data_save section to data section */
29 		memcpy(__data_start, __data_save_start, data_size);
30 	}
31 
32 	cold_reboot_flag++;
33 }
34