diff --git a/plat/st/stm32mp1/include/stm32mp1_context.h b/plat/st/stm32mp1/include/stm32mp1_context.h
index 21214d35af5e43c278aa628e556bc12a955ae9b5..ed9a3dc72dfd468cef18a723eaac3f174742287e 100644
--- a/plat/st/stm32mp1/include/stm32mp1_context.h
+++ b/plat/st/stm32mp1/include/stm32mp1_context.h
@@ -10,10 +10,14 @@
 #include <stdbool.h>
 #include <stdint.h>
 
+#include <drivers/st/stm32_rtc.h>
+
 #define DDR_CRC_GRANULE		32
 
 void stm32_clean_context(void);
-int stm32_save_context(uint32_t zq0cr0_zdata);
+int stm32_save_context(uint32_t zq0cr0_zdata,
+		       struct stm32_rtc_calendar *rtc_time,
+		       unsigned long long stgen_cnt);
 int stm32_restore_context(void);
 unsigned long long stm32_get_stgen_from_context(void);
 int stm32_restore_backup_reg(void);
diff --git a/plat/st/stm32mp1/stm32mp1_context.c b/plat/st/stm32mp1/stm32mp1_context.c
index 2ab2fe9ca3f61cc750303c2a463e4f30822a8a61..9f8ead182d37d5905deda6beabe013454088fa4c 100644
--- a/plat/st/stm32mp1/stm32mp1_context.c
+++ b/plat/st/stm32mp1/stm32mp1_context.c
@@ -158,7 +158,9 @@ void stm32mp1_pm_restore_clock_cfg(size_t offset, uint8_t *data, size_t size)
 	stm32mp_clk_disable(BKPSRAM);
 }
 
-int stm32_save_context(uint32_t zq0cr0_zdata)
+int stm32_save_context(uint32_t zq0cr0_zdata,
+		       struct stm32_rtc_calendar *rtc_time,
+		       unsigned long long stgen_cnt)
 {
 	void *smc_context;
 	void *cpu_context;
@@ -185,8 +187,8 @@ int stm32_save_context(uint32_t zq0cr0_zdata)
 
 	backup_data->zq0cr0_zdata = zq0cr0_zdata;
 
-	stm32_rtc_get_calendar(&backup_data->rtc);
-	backup_data->stgen = stm32mp_stgen_get_counter();
+	memcpy(&backup_data->rtc, rtc_time, sizeof(struct stm32_rtc_calendar));
+	backup_data->stgen = stgen_cnt;
 
 	stm32mp1_clk_lp_save_opp_pll1_settings(backup_data->pll1_settings,
 					sizeof(backup_data->pll1_settings));
diff --git a/plat/st/stm32mp1/stm32mp1_low_power.c b/plat/st/stm32mp1/stm32mp1_low_power.c
index 0eda7b74f1954a944fa4c57f92366a5fad9830c8..1dda6725c02994ff3a618ae6b5780f3153fca948 100644
--- a/plat/st/stm32mp1/stm32mp1_low_power.c
+++ b/plat/st/stm32mp1/stm32mp1_low_power.c
@@ -38,6 +38,7 @@ static unsigned int gicc_pmr;
 static struct stm32_rtc_calendar sleep_time;
 static bool enter_cstop_done;
 static uint32_t int_stack[STM32MP_INT_STACK_SIZE];
+static unsigned long long stgen_cnt;
 
 extern void wfi_svc_int_enable(uintptr_t stack_addr);
 
@@ -196,6 +197,9 @@ static void enter_cstop(uint32_t mode, uint32_t nsec_addr)
 
 	stm32mp1_clock_stopmode_save();
 
+	stm32_rtc_get_calendar(&sleep_time);
+	stgen_cnt = stm32mp_stgen_get_counter();
+
 	if (mode == STM32_PM_CSTOP_ALLOW_STANDBY_DDR_SR) {
 		/*
 		 * Save non-secure world entrypoint after standby in Backup
@@ -205,7 +209,8 @@ static void enter_cstop(uint32_t mode, uint32_t nsec_addr)
 		mmio_write_32(bkpr_core1_magic,
 			      BOOT_API_A7_CORE0_MAGIC_NUMBER);
 
-		if (stm32_save_context(zq0cr0_zdata) != 0) {
+		if (stm32_save_context(zq0cr0_zdata, &sleep_time,
+				       stgen_cnt) != 0) {
 			panic();
 		}
 
@@ -227,8 +232,6 @@ static void enter_cstop(uint32_t mode, uint32_t nsec_addr)
 
 	stm32mp_clk_disable(RTCAPB);
 
-	stm32_rtc_get_calendar(&sleep_time);
-
 	enter_cstop_done = true;
 }
 
@@ -275,8 +278,7 @@ void stm32_exit_cstop(void)
 
 	stdby_time_in_ms = stm32_rtc_diff_calendar(&current_calendar,
 						   &sleep_time);
-	stm32mp_stgen_restore_counter(stm32_get_stgen_from_context(),
-				      stdby_time_in_ms);
+	stm32mp_stgen_restore_counter(stgen_cnt, stdby_time_in_ms);
 
 	stm32mp1_syscfg_enable_io_compensation();