diff --git a/soc/nordic/nrf54h/pm_s2ram.c b/soc/nordic/nrf54h/pm_s2ram.c index 88529c4bb75..20c28e42df5 100644 --- a/soc/nordic/nrf54h/pm_s2ram.c +++ b/soc/nordic/nrf54h/pm_s2ram.c @@ -111,18 +111,15 @@ int soc_s2ram_suspend(pm_s2ram_system_off_fn_t system_off) { int ret; - __disable_irq(); nvic_suspend(&backup_data.nvic_context); mpu_suspend(&backup_data.mpu_context); ret = arch_pm_s2ram_suspend(system_off); if (ret < 0) { - __enable_irq(); return ret; } mpu_resume(&backup_data.mpu_context); nvic_resume(&backup_data.nvic_context); - __enable_irq(); return ret; } diff --git a/soc/nordic/nrf54h/power.c b/soc/nordic/nrf54h/power.c index 07a49609151..a3b39a4c5fe 100644 --- a/soc/nordic/nrf54h/power.c +++ b/soc/nordic/nrf54h/power.c @@ -174,15 +174,19 @@ static void s2ram_enter(void) void pm_state_set(enum pm_state state, uint8_t substate_id) { if (state == PM_STATE_SUSPEND_TO_IDLE) { + __disable_irq(); s2idle_enter(substate_id); /* Resume here. */ s2idle_exit(substate_id); + __enable_irq(); } #if defined(CONFIG_PM_S2RAM) else if (state == PM_STATE_SUSPEND_TO_RAM) { + __disable_irq(); s2ram_enter(); /* On resuming or error we return exactly *HERE* */ s2ram_exit(); + __enable_irq(); } #endif else {