diff --git a/soc/arm/st_stm32/stm32u5/CMakeLists.txt b/soc/arm/st_stm32/stm32u5/CMakeLists.txt index 59be7817eab..8f4b837538d 100644 --- a/soc/arm/st_stm32/stm32u5/CMakeLists.txt +++ b/soc/arm/st_stm32/stm32u5/CMakeLists.txt @@ -8,3 +8,5 @@ zephyr_sources( zephyr_sources_ifdef(CONFIG_PM power.c ) + +zephyr_sources_ifdef(CONFIG_POWEROFF poweroff.c) diff --git a/soc/arm/st_stm32/stm32u5/Kconfig.series b/soc/arm/st_stm32/stm32u5/Kconfig.series index 99835997a6a..81094811b38 100644 --- a/soc/arm/st_stm32/stm32u5/Kconfig.series +++ b/soc/arm/st_stm32/stm32u5/Kconfig.series @@ -16,5 +16,6 @@ config SOC_SERIES_STM32U5X select CPU_CORTEX_M_HAS_DWT select HAS_STM32CUBE select HAS_PM + select HAS_POWEROFF help Enable support for STM32U5 MCU series diff --git a/soc/arm/st_stm32/stm32u5/power.c b/soc/arm/st_stm32/stm32u5/power.c index 4d6034a8c47..f880ffa1d08 100644 --- a/soc/arm/st_stm32/stm32u5/power.c +++ b/soc/arm/st_stm32/stm32u5/power.c @@ -54,13 +54,6 @@ void set_mode_standby(uint8_t substate_id) LL_PWR_SetPowerMode(LL_PWR_STANDBY_MODE); } -void set_mode_shutdown(uint8_t substate_id) -{ - ARG_UNUSED(substate_id); - /* Select shutdown mode */ - LL_PWR_SetPowerMode(LL_PWR_SHUTDOWN_MODE); -} - /* Invoke Low Power/System Off specific Tasks */ void pm_state_set(enum pm_state state, uint8_t substate_id) { @@ -72,9 +65,6 @@ void pm_state_set(enum pm_state state, uint8_t substate_id) /* To be tested */ set_mode_standby(substate_id); break; - case PM_STATE_SOFT_OFF: - set_mode_shutdown(substate_id); - break; default: LOG_DBG("Unsupported power state %u", state); return; @@ -102,9 +92,6 @@ void pm_state_exit_post_ops(enum pm_state state, uint8_t substate_id) case PM_STATE_STANDBY: /* To be tested */ LL_LPM_EnableSleep(); - case PM_STATE_SOFT_OFF: - /* We should not get there */ - __fallthrough; case PM_STATE_SUSPEND_TO_RAM: __fallthrough; case PM_STATE_SUSPEND_TO_DISK: diff --git a/soc/arm/st_stm32/stm32u5/poweroff.c b/soc/arm/st_stm32/stm32u5/poweroff.c new file mode 100644 index 00000000000..191230be523 --- /dev/null +++ b/soc/arm/st_stm32/stm32u5/poweroff.c @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2023 Nordic Semiconductor ASA + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include + +#include +#include + +void z_sys_poweroff(void) +{ + LL_PWR_SetPowerMode(LL_PWR_SHUTDOWN_MODE); + LL_LPM_EnableDeepSleep(); + + k_cpu_idle(); + + CODE_UNREACHABLE; +}