summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYe Li <[email protected]>2025-09-12 17:41:11 +0800
committerTom Rini <[email protected]>2025-09-13 17:59:23 -0600
commit2dbde3f9b08771b8182fcbf0bb0309acaff6c2e1 (patch)
treeb944d6f2b9dc339981fd3bad2b0a9ebfbdfe30fd
parent210702ae6ce820713773549c4e102b37f09d7cc5 (diff)
arm: armv8: Fix spl recover data section broken
SPL recover data section is broken which causes reboot failure on some i.MX platforms (iMX8QM/iMX95). The global variable cold_reboot_flag is assigned to weak reset_flag function which always return 1, so restore never been executed in warm reboot. Fixes: 1c37e59bfbba ("arm: armv8: Improve SPL data save and restore implementation") Signed-off-by: Ye Li <[email protected]> Reviewed-by: Fabio Estevam <[email protected]> Reviewed-by: Peng Fan <[email protected]>
-rw-r--r--arch/arm/cpu/armv8/spl_data.c6
-rw-r--r--arch/arm/mach-socfpga/spl_agilex.c2
-rw-r--r--arch/arm/mach-socfpga/spl_agilex5.c2
3 files changed, 5 insertions, 5 deletions
diff --git a/arch/arm/cpu/armv8/spl_data.c b/arch/arm/cpu/armv8/spl_data.c
index 492353c93df..f4009e89a98 100644
--- a/arch/arm/cpu/armv8/spl_data.c
+++ b/arch/arm/cpu/armv8/spl_data.c
@@ -11,15 +11,15 @@ char __data_save_end[0] __section(".__data_save_end");
u32 cold_reboot_flag = 1;
-u32 __weak reset_flag(void)
+u32 __weak reset_flag(u32 flag)
{
- return 1;
+ return flag;
}
void spl_save_restore_data(void)
{
u32 data_size = __data_save_end - __data_save_start;
- cold_reboot_flag = reset_flag();
+ cold_reboot_flag = reset_flag(cold_reboot_flag);
if (cold_reboot_flag == 1) {
/* Save data section to data_save section */
diff --git a/arch/arm/mach-socfpga/spl_agilex.c b/arch/arm/mach-socfpga/spl_agilex.c
index 351848f16e6..48f258a37b4 100644
--- a/arch/arm/mach-socfpga/spl_agilex.c
+++ b/arch/arm/mach-socfpga/spl_agilex.c
@@ -24,7 +24,7 @@
DECLARE_GLOBAL_DATA_PTR;
-u32 reset_flag(void)
+u32 reset_flag(u32 flag)
{
/* Check rstmgr.stat for warm reset status */
u32 status = readl(SOCFPGA_RSTMGR_ADDRESS);
diff --git a/arch/arm/mach-socfpga/spl_agilex5.c b/arch/arm/mach-socfpga/spl_agilex5.c
index 2e3597e97eb..1be347360f5 100644
--- a/arch/arm/mach-socfpga/spl_agilex5.c
+++ b/arch/arm/mach-socfpga/spl_agilex5.c
@@ -21,7 +21,7 @@
DECLARE_GLOBAL_DATA_PTR;
-u32 reset_flag(void)
+u32 reset_flag(u32 flag)
{
/* Check rstmgr.stat for warm reset status */
u32 status = readl(SOCFPGA_RSTMGR_ADDRESS);