Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions boards/infineon/cyw920829m2evk_02/cyw920829m2evk_02.dts
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,10 @@ uart2: &scb2 {
status = "okay";
};

&mcwdt0 {
status = "okay";
};

&bluetooth {
status = "okay";
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
#

# General configuration
CONFIG_CORTEX_M_SYSTICK=y
CONFIG_BUILD_OUTPUT_HEX=y
CONFIG_BUILD_OUTPUT_BIN=y

Expand Down
15 changes: 15 additions & 0 deletions dts/arm/infineon/cat1b/cyw20829/cyw20829.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,21 @@
device_type = "cpu";
compatible = "arm,cortex-m33";
reg = <0>;
cpu-power-states = <&idle &suspend_to_ram>;
};

power-states {
idle: idle {
compatible = "zephyr,power-state";
power-state-name = "suspend-to-idle";
min-residency-us = <1000000>;
};

suspend_to_ram: suspend_to_ram {
compatible = "zephyr,power-state";
power-state-name = "suspend-to-ram";
min-residency-us = <2000000>;
};
};
};

Expand Down
2 changes: 2 additions & 0 deletions modules/hal_infineon/mtb-pdl-cat1/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@ if(CONFIG_SOC_FAMILY_INFINEON_CAT1B)
zephyr_library_sources(${pdl_drv_dir}/source/cy_systick_v2.c)
zephyr_library_sources(${pdl_drv_dir}/source/cy_syspm_v2.c)
zephyr_library_sources(${pdl_drv_dir}/source/cy_syspm_btss.c)
zephyr_library_sources(${pdl_drv_dir}/source/cy_syspm_ppu.c)
zephyr_library_sources(${pdl_drv_dir}/source/ppu_v1.c)
endif()
zephyr_library_sources(${pdl_drv_dir}/source/cy_syslib.c)
zephyr_library_sources(${pdl_drv_dir}/source/cy_syspm.c)
Expand Down
2 changes: 2 additions & 0 deletions soc/infineon/cat1b/cyw20829/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ zephyr_sources(soc.c)
zephyr_sources(app_header.c)
zephyr_include_directories(.)

zephyr_sources_ifdef(CONFIG_PM power.c)

# CAT1B family defines
zephyr_compile_definitions_ifdef(CONFIG_SOC_FAMILY_INFINEON_CAT1 CY_USING_HAL)
zephyr_compile_definitions_ifdef(CONFIG_SOC_FAMILY_INFINEON_CAT1B COMPONENT_CAT1B)
Expand Down
1 change: 1 addition & 0 deletions soc/infineon/cat1b/cyw20829/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@ config SOC_SERIES_CYW20829
select CPU_HAS_FPU
select DYNAMIC_INTERRUPTS
select HAS_SEGGER_RTT if ZEPHYR_SEGGER_MODULE
select HAS_PM
6 changes: 6 additions & 0 deletions soc/infineon/cat1b/cyw20829/Kconfig.defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@

if SOC_DIE_CYW20829

config INFINEON_CAT1_LP_TIMER
bool

config CORTEX_M_SYSTICK
default n if INFINEON_CAT1_LP_TIMER

config NUM_IRQS
default 70

Expand Down
73 changes: 73 additions & 0 deletions soc/infineon/cat1b/cyw20829/power.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
/*
* Copyright (c) 2021 Cypress Semiconductor Corporation (an Infineon company) or
* an affiliate of Cypress Semiconductor Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/

#include <zephyr/kernel.h>
#include <zephyr/device.h>
#include <zephyr/pm/pm.h>
#include <zephyr/logging/log.h>

#include <cyhal_syspm.h>
#include <cyhal_lptimer.h>

LOG_MODULE_REGISTER(soc_power, CONFIG_SOC_LOG_LEVEL);

/*
* Called from pm_system_suspend(int32_t ticks) in subsys/power.c
* For deep sleep pm_system_suspend has executed all the driver
* power management call backs.
*/
void pm_state_set(enum pm_state state, uint8_t substate_id)
{
ARG_UNUSED(substate_id);

/* Set BASEPRI to 0 */
irq_unlock(0);

switch (state) {
case PM_STATE_SUSPEND_TO_IDLE:
LOG_DBG("Entering PM state suspend to idle");
cyhal_syspm_sleep();
break;
case PM_STATE_SUSPEND_TO_RAM:
LOG_DBG("Entering PM state suspend to RAM");
cyhal_syspm_deepsleep();

/*
* The HAL function doesn't clear this bit. It is a problem
* if the Zephyr idle function executes the wfi instruction
* with this bit set. We will always clear it here to avoid
* that situation.
*/
SCB_SCR &= (uint32_t)~SCB_SCR_SLEEPDEEP_Msk;
break;
default:
LOG_DBG("Unsupported power state %u", state);
break;
}
}

void pm_state_exit_post_ops(enum pm_state state, uint8_t substate_id)
{
ARG_UNUSED(substate_id);

switch (state) {
case PM_STATE_SUSPEND_TO_IDLE:
case PM_STATE_SUSPEND_TO_RAM:
break;

default:
break;
}
}

int ifx_pm_init(void)
{
/* System Domain Idle Power Mode Configuration */
Cy_SysPm_SetDeepSleepMode(CY_SYSPM_MODE_DEEPSLEEP);

return cyhal_syspm_init();
}
10 changes: 10 additions & 0 deletions soc/infineon/cat1b/cyw20829/soc.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,13 @@
#include <zephyr/device.h>
#include <zephyr/init.h>
#include <zephyr/kernel.h>

#include <cy_sysint.h>
#include <system_cat1b.h>
#include "cy_pdl.h"

extern int ifx_pm_init(void);

cy_en_sysint_status_t Cy_SysInt_Init(const cy_stc_sysint_t *config, cy_israddress userIsr)
{
CY_ASSERT_L3(CY_SYSINT_IS_PRIORITY_VALID(config->intrPriority));
Expand Down Expand Up @@ -94,3 +97,10 @@ static int init_cycfg_platform_wrapper(void)
}

SYS_INIT(init_cycfg_platform_wrapper, PRE_KERNEL_1, 0);

#ifdef CONFIG_PM
void soc_early_init_hook(void)
{
ifx_pm_init();
}
#endif
Loading