This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git


The following commit(s) were added to refs/heads/master by this push:
     new 0fab64cd95 hpmicro: hpm6750: keep cpu clock on after "wfi", so that 
mchtmr can work after "wfi"
0fab64cd95 is described below

commit 0fab64cd954c45fb7e33da1b99bd9f0c3f385d87
Author: Zhihong Chen <[email protected]>
AuthorDate: Thu Jul 20 13:28:46 2023 +0800

    hpmicro: hpm6750: keep cpu clock on after "wfi", so that mchtmr can work 
after "wfi"
    
    - keep cpu clock on after "wfi", so that mchtmr can still work after "wfi"
    
    Signed-off-by: Zhihong Chen <[email protected]>
---
 arch/risc-v/src/hpm6750/hardware/hpm6750_sysctl.h | 14 ++++++++++++++
 arch/risc-v/src/hpm6750/hpm6750_clockconfig.c     |  9 +++++++++
 2 files changed, 23 insertions(+)

diff --git a/arch/risc-v/src/hpm6750/hardware/hpm6750_sysctl.h 
b/arch/risc-v/src/hpm6750/hardware/hpm6750_sysctl.h
index 618ef6e3b6..c826316007 100644
--- a/arch/risc-v/src/hpm6750/hardware/hpm6750_sysctl.h
+++ b/arch/risc-v/src/hpm6750/hardware/hpm6750_sysctl.h
@@ -29,6 +29,7 @@
 #define HPM6750_SYSCTL_GROUP0_1           (HPM6750_SYSCTL_BASE + 0x000810)
 #define HPM6750_SYSCTL_GROUP0_2           (HPM6750_SYSCTL_BASE + 0x000820)
 #define HPM6750_SYSCTL_CLOCK_NODE         (HPM6750_SYSCTL_BASE + 0x001800)
+#define HPM6750_SYSCTL_CPU0_LP            (HPM6750_SYSCTL_BASE + 0x002800)
 
 #define HPM6750_SYSCTL_GROUPx_0_AHB                   (1 << 0)
 #define HPM6750_SYSCTL_GROUPx_0_AXI                   (1 << 1)
@@ -166,4 +167,17 @@
 #define SYSCTL_CLOCK_DIV_SET(x) (((uint32_t)(x) << SYSCTL_CLOCK_DIV_SHIFT) & 
SYSCTL_CLOCK_DIV_MASK)
 #define SYSCTL_CLOCK_DIV_GET(x) (((uint32_t)(x) & SYSCTL_CLOCK_DIV_MASK) >> 
SYSCTL_CLOCK_DIV_SHIFT)
 
+/* MODE (RW)
+ *
+ * Low power mode, system behavior after WFI
+ * 00: CPU clock stop after WFI
+ * 01: System enter low power mode after WFI
+ * 10: Keep running after WFI
+ * 11: reserved
+ */
+#define SYSCTL_CPU_LP_MODE_MASK (0x3U)
+#define SYSCTL_CPU_LP_MODE_SHIFT (0U)
+#define SYSCTL_CPU_LP_MODE_SET(x) (((uint32_t)(x) << SYSCTL_CPU_LP_MODE_SHIFT) 
& SYSCTL_CPU_LP_MODE_MASK)
+#define SYSCTL_CPU_LP_MODE_GET(x) (((uint32_t)(x) & SYSCTL_CPU_LP_MODE_MASK) 
>> SYSCTL_CPU_LP_MODE_SHIFT)
+
 #endif /* __ARCH_RISCV_SRC_HPM6750_HARDWARE_HPM6750_SYSCTL_H */
diff --git a/arch/risc-v/src/hpm6750/hpm6750_clockconfig.c 
b/arch/risc-v/src/hpm6750/hpm6750_clockconfig.c
index b57027c50a..3b6779ce59 100644
--- a/arch/risc-v/src/hpm6750/hpm6750_clockconfig.c
+++ b/arch/risc-v/src/hpm6750/hpm6750_clockconfig.c
@@ -82,10 +82,19 @@ static void hpm6750_sysctl_config_clock(clock_node_t 
node_index,
 
 void hpm6750_clockconfig(void)
 {
+  /* Keep cpu clock on after "wfi", so that mchtmr can work after "wfi" */
+
+  modifyreg32(HPM6750_SYSCTL_CPU0_LP, SYSCTL_CPU_LP_MODE_MASK,
+              SYSCTL_CPU_LP_MODE_SET(2));
+
+  /* Add all clocks to group0 */
+
   putreg32(0xffffffffu, HPM6750_SYSCTL_GROUP0_0);
   putreg32(0xffffffffu, HPM6750_SYSCTL_GROUP0_1);
   putreg32(0xffffffffu, HPM6750_SYSCTL_GROUP0_2);
 
+  /* Set clock source */
+
   hpm6750_sysctl_config_clock(clock_node_cpu0, clock_source_pll0_clk0, 1);
   hpm6750_sysctl_config_clock(clock_node_mchtmr0, clock_source_osc0_clk0, 1);
   hpm6750_sysctl_config_clock(clock_node_uart0, clock_source_osc0_clk0, 1);

Reply via email to