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 <ye...@nxp.com>
---
 arch/arm/cpu/armv8/spl_data.c       | 6 +++---
 arch/arm/mach-socfpga/spl_agilex.c  | 2 +-
 arch/arm/mach-socfpga/spl_agilex5.c | 2 +-
 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);
-- 
2.37.1

Reply via email to