From c9b4474d509aaa696a1de1c1c75218dac53aa15a Mon Sep 17 00:00:00 2001 From: Chun-Chieh Li Date: Mon, 16 Sep 2019 18:19:40 +0800 Subject: [PATCH] [M2351] Merge secure idle/powerdown sequences into one Merge SYS_UnlockReg_S()/CLK_Idle_S() or CLK_PowerDown_S()/SYS_LockReg_S() into nu_idle_s() or nu_powerdown_s() when they are available. --- targets/TARGET_NUVOTON/TARGET_M2351/sleep.c | 30 ++++++++++++++++----- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/targets/TARGET_NUVOTON/TARGET_M2351/sleep.c b/targets/TARGET_NUVOTON/TARGET_M2351/sleep.c index 069ed0dde9..2c6046678c 100644 --- a/targets/TARGET_NUVOTON/TARGET_M2351/sleep.c +++ b/targets/TARGET_NUVOTON/TARGET_M2351/sleep.c @@ -22,8 +22,18 @@ #include "device.h" #include "objects.h" #include "PeripheralPins.h" +#include "platform/mbed_toolchain.h" #include +/* Merge SYS_UnlockReg_S()/CLK_Idle_S() or CLK_PowerDown_S()/SYS_LockReg_S() + * into nu_idle_s() or nu_powerdown_s() + * + * These APIs are secure calls. For performance, merge them into one when + * nu_idle_s() and nu_powerdown_s() are available. + */ +MBED_WEAK void nu_idle_s(void); +MBED_WEAK void nu_powerdown_s(void); + #if DEVICE_SERIAL bool serial_can_deep_sleep(void); #endif @@ -38,9 +48,13 @@ void hal_sleep(void) CLK_Idle(); SYS_LockReg(); #else - SYS_UnlockReg_S(); - CLK_Idle_S(); - SYS_LockReg_S(); + if (nu_idle_s) { + nu_idle_s(); + } else { + SYS_UnlockReg_S(); + CLK_Idle_S(); + SYS_LockReg_S(); + } #endif } @@ -60,9 +74,13 @@ void hal_deepsleep(void) CLK_PowerDown(); SYS_LockReg(); #else - SYS_UnlockReg_S(); - CLK_PowerDown_S(); - SYS_LockReg_S(); + if (nu_powerdown_s) { + nu_powerdown_s(); + } else { + SYS_UnlockReg_S(); + CLK_PowerDown_S(); + SYS_LockReg_S(); + } #endif }