File tree Expand file tree Collapse file tree 4 files changed +24
-34
lines changed Expand file tree Collapse file tree 4 files changed +24
-34
lines changed Original file line number Diff line number Diff line change 1212#include <zephyr/dt-bindings/pwm/pwm.h>
1313#include <mem.h>
1414#include <zephyr/dt-bindings/i2c/i2c.h>
15+ #include <freq.h>
1516
1617/ {
1718 cpus {
2122 cpu0: cpu@0 {
2223 compatible = "arm,cortex-m33f";
2324 reg = <0>;
24- cpu-power-states = <&idle &suspend_to_ram >;
25+ cpu-power-states = <&idle>;
2526 };
2627
2728 power-states {
3132 min-residency-us = <100000000>;
3233 };
3334
34- suspend_to_ram: suspend_to_ram {
35- compatible = "zephyr,power-state";
36- power-state-name = "suspend-to-ram";
37- min-residency-us = <250000000>;
38- };
3935 };
4036 };
4137
Original file line number Diff line number Diff line change 1111#include <reg/reg_system.h>
1212#include "device_power.h"
1313
14- #define RTS5912_SCCON_REG_BASE ((SYSTEM_Type *)(DT_REG_ADDR(DT_NODELABEL(sccon))))
15-
1614static void realtek_WFI (void )
1715{
1816 __DSB ();
1917 __WFI ();
2018}
2119
22- static void rts5912_light_sleep (void )
23- {
24- SYSTEM_Type * sys_reg = RTS5912_SCCON_REG_BASE ;
25-
26- before_rts5912_sleep ();
27-
28- sys_reg -> SLPCTRL &= ~SYSTEM_SLPCTRL_SLPMDSEL_Msk ;
29-
30- realtek_WFI ();
31-
32- after_rts5912_sleep ();
33- }
34-
3520static void rts5912_heavy_sleep (void )
3621{
3722 SYSTEM_Type * sys_reg = RTS5912_SCCON_REG_BASE ;
@@ -50,7 +35,7 @@ static void rts5912_heavy_sleep(void)
5035 sys_reg -> SYSCLK |= SYSTEM_SYSCLK_SRC_Msk ; /* Switch system clock to PLL */
5136 }
5237
53- sys_reg -> SLPCTRL |= SYSTEM_SLPCTRL_SLPMDSEL_Msk ; /* Heavy Sleep mode */
38+ sys_reg -> SLPCTRL |= ( SYSTEM_SLPCTRL_SLPMDSEL_Msk | SYSTEM_SLPCTRL_GPIOWKEN_Msk );
5439
5540 realtek_WFI ();
5641
@@ -69,9 +54,6 @@ void pm_state_set(enum pm_state state, uint8_t substate_id)
6954
7055 switch (state ) {
7156 case PM_STATE_SUSPEND_TO_IDLE :
72- rts5912_light_sleep ();
73- break ;
74- case PM_STATE_SUSPEND_TO_RAM :
7557 rts5912_heavy_sleep ();
7658 break ;
7759 default :
@@ -83,6 +65,4 @@ void pm_state_exit_post_ops(enum pm_state state, uint8_t substate_id)
8365{
8466 ARG_UNUSED (state );
8567 ARG_UNUSED (substate_id );
86-
87- irq_unlock (0 );
8868}
Original file line number Diff line number Diff line change @@ -334,4 +334,10 @@ typedef struct {
334334
335335#define RTS5912_SCCON_REG_BASE ((SYSTEM_Type *)(DT_REG_ADDR(DT_NODELABEL(sccon))))
336336
337+ #define RTS5912_PUF_ADDRESS 0x40010800UL
338+ #define RTS5912_TRNG_OFFSET 0x600UL
339+ #define RTS5912_OTP_OFFSET 0x680UL
340+ #define RTS5912_CFG_PDSTB (RTS5912_PUF_ADDRESS + RTS5912_OTP_OFFSET + 0x0024UL)
341+ #define RTS5912_RNG_RUN (RTS5912_PUF_ADDRESS + RTS5912_TRNG_OFFSET + 0x0020UL)
342+
337343#endif /* ZEPHYR_SOC_REALTEK_RTS5912_REG_SYSTEM_H */
Original file line number Diff line number Diff line change 88#include <zephyr/kernel.h>
99#include <zephyr/device.h>
1010#include <zephyr/init.h>
11+ #include <zephyr/pm/policy.h>
1112#include <zephyr/logging/log.h>
1213#include "debug_swj.h"
14+ #include <reg/reg_system.h>
1315
1416LOG_MODULE_REGISTER (soc , CONFIG_SOC_LOG_LEVEL );
1517
@@ -28,15 +30,21 @@ bool z_arm_on_enter_cpu_idle(void)
2830 */
2931void soc_early_init_hook (void )
3032{
31- if (!IS_ENABLED (CONFIG_RTS5912_DEBUG_SWJ )) {
32- return ;
33- }
34-
33+ SYSTEM_Type * sys_reg = RTS5912_SCCON_REG_BASE ;
3534 int ret ;
3635
3736 /* Apply device related preinit configuration */
38- ret = swj_connector_init ();
39- if (ret < 0 ) {
40- LOG_ERR ("SWJ init failed" );
37+ if (IS_ENABLED (CONFIG_RTS5912_DEBUG_SWJ )) {
38+ ret = swj_connector_init ();
39+ if (ret < 0 ) {
40+ LOG_ERR ("SWJ init failed %d" , ret );
41+ }
42+ }
43+
44+ if (IS_ENABLED (CONFIG_PM )) {
45+ /* turn off TRNG/ OTP/ LDO3 power */
46+ sys_write32 (0ul , RTS5912_RNG_RUN );
47+ sys_write32 (0ul , RTS5912_CFG_PDSTB );
48+ sys_reg -> LDOCTRL &= ~SYSTEM_LDOCTRL_LDO3EN_Msk ;
4149 }
4250}
You can’t perform that action at this time.
0 commit comments