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)14u32 __weak reset_flag(void) 15 { 16 return 1; 17 } 18 spl_save_restore_data(void)19void 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