From d45a0e191907c48a6494ca9d24bd3f6eb5c70b7f Mon Sep 17 00:00:00 2001 From: Flavio Ceolin Date: Wed, 9 Jun 2021 23:03:49 -0700 Subject: [PATCH] pm: Fix weak linkage symbols Define SoC hooks as weak symbols so this way applications can overwritten them defining strong symbols. The problem is that currently SoCs are defining these interfaces as strong symbol inhibiting the possibility of applications bring their own implementation. Signed-off-by: Flavio Ceolin --- soc/arm/microchip_mec/mec1501/power.c | 4 ++-- soc/arm/nordic_nrf/nrf51/power.c | 4 ++-- soc/arm/nordic_nrf/nrf52/power.c | 4 ++-- soc/arm/nordic_nrf/nrf53/power.c | 4 ++-- soc/arm/nordic_nrf/nrf91/power.c | 4 ++-- soc/arm/nuvoton_npcx/common/power.c | 4 ++-- soc/arm/nxp_imx/rt6xx/power.c | 4 ++-- soc/arm/silabs_exx32/common/soc_power.c | 4 ++-- soc/arm/st_stm32/stm32l4/power.c | 4 ++-- soc/arm/st_stm32/stm32l5/power.c | 4 ++-- soc/arm/st_stm32/stm32wb/power.c | 4 ++-- soc/arm/ti_simplelink/cc13x2_cc26x2/power.c | 4 ++-- tests/subsys/pm/power_mgmt/src/main.c | 9 +++------ 13 files changed, 27 insertions(+), 30 deletions(-) diff --git a/soc/arm/microchip_mec/mec1501/power.c b/soc/arm/microchip_mec/mec1501/power.c index af4f2abf01c..98029ba2023 100644 --- a/soc/arm/microchip_mec/mec1501/power.c +++ b/soc/arm/microchip_mec/mec1501/power.c @@ -101,7 +101,7 @@ static void z_power_soc_sleep(void) * For deep sleep pm_system_suspend has executed all the driver * power management call backs. */ -void pm_power_state_set(struct pm_state_info info) +__weak void pm_power_state_set(struct pm_state_info info) { switch (info.state) { case PM_STATE_SUSPEND_TO_IDLE: @@ -123,7 +123,7 @@ void pm_power_state_set(struct pm_state_info info) * an ISR on wake except for faults. We re-enable interrupts by setting PRIMASK * to 0. */ -void pm_power_state_exit_post_ops(struct pm_state_info info) +__weak void pm_power_state_exit_post_ops(struct pm_state_info info) { switch (info.state) { case PM_STATE_SUSPEND_TO_IDLE: diff --git a/soc/arm/nordic_nrf/nrf51/power.c b/soc/arm/nordic_nrf/nrf51/power.c index 7a43a8b214b..dd76e3b06e9 100644 --- a/soc/arm/nordic_nrf/nrf51/power.c +++ b/soc/arm/nordic_nrf/nrf51/power.c @@ -11,7 +11,7 @@ LOG_MODULE_DECLARE(soc, CONFIG_SOC_LOG_LEVEL); /* Invoke Low Power/System Off specific Tasks */ -void pm_power_state_set(struct pm_state_info info) +__weak void pm_power_state_set(struct pm_state_info info) { switch (info.state) { case PM_STATE_SOFT_OFF: @@ -24,7 +24,7 @@ void pm_power_state_set(struct pm_state_info info) } /* Handle SOC specific activity after Low Power Mode Exit */ -void pm_power_state_exit_post_ops(struct pm_state_info info) +__weak void pm_power_state_exit_post_ops(struct pm_state_info info) { switch (info.state) { case PM_STATE_SOFT_OFF: diff --git a/soc/arm/nordic_nrf/nrf52/power.c b/soc/arm/nordic_nrf/nrf52/power.c index 7a43a8b214b..dd76e3b06e9 100644 --- a/soc/arm/nordic_nrf/nrf52/power.c +++ b/soc/arm/nordic_nrf/nrf52/power.c @@ -11,7 +11,7 @@ LOG_MODULE_DECLARE(soc, CONFIG_SOC_LOG_LEVEL); /* Invoke Low Power/System Off specific Tasks */ -void pm_power_state_set(struct pm_state_info info) +__weak void pm_power_state_set(struct pm_state_info info) { switch (info.state) { case PM_STATE_SOFT_OFF: @@ -24,7 +24,7 @@ void pm_power_state_set(struct pm_state_info info) } /* Handle SOC specific activity after Low Power Mode Exit */ -void pm_power_state_exit_post_ops(struct pm_state_info info) +__weak void pm_power_state_exit_post_ops(struct pm_state_info info) { switch (info.state) { case PM_STATE_SOFT_OFF: diff --git a/soc/arm/nordic_nrf/nrf53/power.c b/soc/arm/nordic_nrf/nrf53/power.c index b709217289a..38ee3d439aa 100644 --- a/soc/arm/nordic_nrf/nrf53/power.c +++ b/soc/arm/nordic_nrf/nrf53/power.c @@ -13,7 +13,7 @@ LOG_MODULE_DECLARE(soc, CONFIG_SOC_LOG_LEVEL); /* Invoke Low Power/System Off specific Tasks */ -void pm_power_state_set(struct pm_state_info info) +__weak void pm_power_state_set(struct pm_state_info info) { switch (info.state) { case PM_STATE_SOFT_OFF: @@ -26,7 +26,7 @@ void pm_power_state_set(struct pm_state_info info) } /* Handle SOC specific activity after Low Power Mode Exit */ -void pm_power_state_exit_post_ops(struct pm_state_info info) +__weak void pm_power_state_exit_post_ops(struct pm_state_info info) { switch (info.state) { case PM_STATE_SOFT_OFF: diff --git a/soc/arm/nordic_nrf/nrf91/power.c b/soc/arm/nordic_nrf/nrf91/power.c index f0f52217274..a13631dd2ef 100644 --- a/soc/arm/nordic_nrf/nrf91/power.c +++ b/soc/arm/nordic_nrf/nrf91/power.c @@ -12,7 +12,7 @@ LOG_MODULE_DECLARE(soc, CONFIG_SOC_LOG_LEVEL); /* Invoke Low Power/System Off specific Tasks */ -void pm_power_state_set(struct pm_state_info info) +__weak void pm_power_state_set(struct pm_state_info info) { switch (info.state) { case PM_STATE_SOFT_OFF: @@ -25,7 +25,7 @@ void pm_power_state_set(struct pm_state_info info) } /* Handle SOC specific activity after Low Power Mode Exit */ -void pm_power_state_exit_post_ops(struct pm_state_info info) +__weak void pm_power_state_exit_post_ops(struct pm_state_info info) { switch (info.state) { case PM_STATE_SOFT_OFF: diff --git a/soc/arm/nuvoton_npcx/common/power.c b/soc/arm/nuvoton_npcx/common/power.c index ae8929fb69c..a52d68f4051 100644 --- a/soc/arm/nuvoton_npcx/common/power.c +++ b/soc/arm/nuvoton_npcx/common/power.c @@ -165,7 +165,7 @@ static void npcx_power_enter_system_sleep(int slp_mode, int wk_mode) } /* Invoke when enter "Suspend/Low Power" mode. */ -void pm_power_state_set(struct pm_state_info info) +__weak void pm_power_state_set(struct pm_state_info info) { if (info.state != PM_STATE_SUSPEND_TO_IDLE) { LOG_DBG("Unsupported power state %u", info.state); @@ -194,7 +194,7 @@ void pm_power_state_set(struct pm_state_info info) } /* Handle soc specific activity after exiting "Suspend/Low Power" mode. */ -void pm_power_state_exit_post_ops(struct pm_state_info info) +__weak void pm_power_state_exit_post_ops(struct pm_state_info info) { if (info.state != PM_STATE_SUSPEND_TO_IDLE) { LOG_DBG("Unsupported power state %u", info.state); diff --git a/soc/arm/nxp_imx/rt6xx/power.c b/soc/arm/nxp_imx/rt6xx/power.c index 9e08aaa94a7..1051453d269 100644 --- a/soc/arm/nxp_imx/rt6xx/power.c +++ b/soc/arm/nxp_imx/rt6xx/power.c @@ -22,7 +22,7 @@ LOG_MODULE_DECLARE(soc, CONFIG_SOC_LOG_LEVEL); APP_DEEPSLEEP_RAM_APD, APP_DEEPSLEEP_RAM_PPD})) /* Invoke Low Power/System Off specific Tasks */ -void pm_power_state_set(struct pm_state_info info) +__weak void pm_power_state_set(struct pm_state_info info) { /* FIXME: When this function is entered the Kernel has disabled * interrupts using BASEPRI register. This is incorrect as it prevents @@ -50,7 +50,7 @@ void pm_power_state_set(struct pm_state_info info) } /* Handle SOC specific activity after Low Power Mode Exit */ -void pm_power_state_exit_post_ops(struct pm_state_info info) +__weak void pm_power_state_exit_post_ops(struct pm_state_info info) { ARG_UNUSED(info); diff --git a/soc/arm/silabs_exx32/common/soc_power.c b/soc/arm/silabs_exx32/common/soc_power.c index cacd7c55502..4f77d16745b 100644 --- a/soc/arm/silabs_exx32/common/soc_power.c +++ b/soc/arm/silabs_exx32/common/soc_power.c @@ -18,7 +18,7 @@ LOG_MODULE_DECLARE(soc, CONFIG_SOC_LOG_LEVEL); */ /* Invoke Low Power/System Off specific Tasks */ -void pm_power_state_set(struct pm_state_info info) +__weak void pm_power_state_set(struct pm_state_info info) { LOG_DBG("SoC entering power state %d", info.state); @@ -56,7 +56,7 @@ void pm_power_state_set(struct pm_state_info info) } /* Handle SOC specific activity after Low Power Mode Exit */ -void pm_power_state_exit_post_ops(struct pm_state_info info) +__weak void pm_power_state_exit_post_ops(struct pm_state_info info) { ARG_UNUSED(info); } diff --git a/soc/arm/st_stm32/stm32l4/power.c b/soc/arm/st_stm32/stm32l4/power.c index 84fa2121335..1947e8c4eea 100644 --- a/soc/arm/st_stm32/stm32l4/power.c +++ b/soc/arm/st_stm32/stm32l4/power.c @@ -27,7 +27,7 @@ LOG_MODULE_DECLARE(soc, CONFIG_SOC_LOG_LEVEL); #endif /* Invoke Low Power/System Off specific Tasks */ -void pm_power_state_set(struct pm_state_info info) +__weak void pm_power_state_set(struct pm_state_info info) { if (info.state != PM_STATE_SUSPEND_TO_IDLE) { LOG_DBG("Unsupported power state %u", info.state); @@ -73,7 +73,7 @@ void pm_power_state_set(struct pm_state_info info) } /* Handle SOC specific activity after Low Power Mode Exit */ -void pm_power_state_exit_post_ops(struct pm_state_info info) +__weak void pm_power_state_exit_post_ops(struct pm_state_info info) { if (info.state != PM_STATE_SUSPEND_TO_IDLE) { LOG_DBG("Unsupported power substate-id %u", info.state); diff --git a/soc/arm/st_stm32/stm32l5/power.c b/soc/arm/st_stm32/stm32l5/power.c index 58140b7bb40..40e7baffbcc 100644 --- a/soc/arm/st_stm32/stm32l5/power.c +++ b/soc/arm/st_stm32/stm32l5/power.c @@ -27,7 +27,7 @@ LOG_MODULE_DECLARE(soc, CONFIG_SOC_LOG_LEVEL); #endif /* Invoke Low Power/System Off specific Tasks */ -void pm_power_state_set(struct pm_state_info info) +__weak void pm_power_state_set(struct pm_state_info info) { if (info.state != PM_STATE_SUSPEND_TO_IDLE) { LOG_DBG("Unsupported power state %u", info.state); @@ -73,7 +73,7 @@ void pm_power_state_set(struct pm_state_info info) } /* Handle SOC specific activity after Low Power Mode Exit */ -void pm_power_state_exit_post_ops(struct pm_state_info info) +__weak void pm_power_state_exit_post_ops(struct pm_state_info info) { if (info.state != PM_STATE_SUSPEND_TO_IDLE) { LOG_DBG("Unsupported power substate-id %u", info.state); diff --git a/soc/arm/st_stm32/stm32wb/power.c b/soc/arm/st_stm32/stm32wb/power.c index 6d08ac2104d..3bf744d1cb3 100644 --- a/soc/arm/st_stm32/stm32wb/power.c +++ b/soc/arm/st_stm32/stm32wb/power.c @@ -37,7 +37,7 @@ static void switch_on_hsi(void) } /* Invoke Low Power/System Off specific Tasks */ -void pm_power_state_set(struct pm_state_info info) +__weak void pm_power_state_set(struct pm_state_info info) { if (info.state != PM_STATE_SUSPEND_TO_IDLE) { LOG_DBG("Unsupported power state %u", info.state); @@ -102,7 +102,7 @@ void pm_power_state_set(struct pm_state_info info) } /* Handle SOC specific activity after Low Power Mode Exit */ -void pm_power_state_exit_post_ops(struct pm_state_info info) +__weak void pm_power_state_exit_post_ops(struct pm_state_info info) { /* Implementation of STM32 AN5289 algorithm to enter/exit lowpower */ /* Release ENTRY_STOP_MODE semaphore */ diff --git a/soc/arm/ti_simplelink/cc13x2_cc26x2/power.c b/soc/arm/ti_simplelink/cc13x2_cc26x2/power.c index 59874db8782..06def28784c 100644 --- a/soc/arm/ti_simplelink/cc13x2_cc26x2/power.c +++ b/soc/arm/ti_simplelink/cc13x2_cc26x2/power.c @@ -56,7 +56,7 @@ extern PowerCC26X2_ModuleState PowerCC26X2_module; */ /* Invoke Low Power/System Off specific Tasks */ -void pm_power_state_set(struct pm_state_info info) +__weak void pm_power_state_set(struct pm_state_info info) { uint32_t modeVIMS; uint32_t constraints; @@ -118,7 +118,7 @@ void pm_power_state_set(struct pm_state_info info) } /* Handle SOC specific activity after Low Power Mode Exit */ -void pm_power_state_exit_post_ops(struct pm_state_info info) +__weak void pm_power_state_exit_post_ops(struct pm_state_info info) { /* * System is now in active mode. Reenable interrupts which were disabled diff --git a/tests/subsys/pm/power_mgmt/src/main.c b/tests/subsys/pm/power_mgmt/src/main.c index 9e751799159..d27610bee9d 100644 --- a/tests/subsys/pm/power_mgmt/src/main.c +++ b/tests/subsys/pm/power_mgmt/src/main.c @@ -26,11 +26,8 @@ static bool idle_entered; static const struct device *dev; static struct dummy_driver_api *api; -/* - * Weak power hook functions. Used on systems that have not implemented - * power management. - */ -__weak void pm_power_state_set(struct pm_state_info info) + +void pm_power_state_set(struct pm_state_info info) { /* at this point, notify_pm_state_entry() implemented in * this file has been called and set_pm should have been set @@ -51,7 +48,7 @@ __weak void pm_power_state_set(struct pm_state_info info) "Entering low power state with a wrong parameter"); } -__weak void pm_power_state_exit_post_ops(struct pm_state_info info) +void pm_power_state_exit_post_ops(struct pm_state_info info) { /* pm_system_suspend is entered with irq locked * unlock irq before leave pm_system_suspend