diff --git a/boards/silabs/radio_boards/siwx917_rb4338a/siwx917_rb4338a.dts b/boards/silabs/radio_boards/siwx917_rb4338a/siwx917_rb4338a.dts index 702fd5732bd..d6620b0402a 100644 --- a/boards/silabs/radio_boards/siwx917_rb4338a/siwx917_rb4338a.dts +++ b/boards/silabs/radio_boards/siwx917_rb4338a/siwx917_rb4338a.dts @@ -107,6 +107,10 @@ }; }; +&sysrtc0 { + status = "okay"; +}; + &bt_hci0 { status = "okay"; }; diff --git a/drivers/timer/Kconfig.silabs b/drivers/timer/Kconfig.silabs index 2e9abba8ef6..aa7a013e9c0 100644 --- a/drivers/timer/Kconfig.silabs +++ b/drivers/timer/Kconfig.silabs @@ -3,7 +3,7 @@ config SILABS_SLEEPTIMER_TIMER bool "Silabs Sleeptimer system clock driver" - depends on SOC_FAMILY_SILABS_S2 + depends on SOC_FAMILY_SILABS_S2 || SOC_FAMILY_SILABS_SIWX91X depends on DT_HAS_SILABS_GECKO_STIMER_ENABLED select SOC_SILABS_SLEEPTIMER select TICKLESS_CAPABLE diff --git a/dts/arm/silabs/siwg917.dtsi b/dts/arm/silabs/siwg917.dtsi index 771dc5b0444..d8719b088cc 100644 --- a/dts/arm/silabs/siwg917.dtsi +++ b/dts/arm/silabs/siwg917.dtsi @@ -6,6 +6,7 @@ #include #include +#include / { chosen { @@ -285,6 +286,16 @@ clocks = <&clock0 SIWX91X_CLK_WATCHDOG>; status = "disabled"; }; + + sysrtc0: sysrtc@24048c00 { + compatible = "silabs,gecko-stimer"; + reg = <0x24048c00 0x78>; + interrupts = <22 0>; + interrupt-names = "sysrtc"; + clock-frequency = ; + prescaler = <1>; + status = "disabled"; + }; }; }; diff --git a/modules/hal_silabs/wiseconnect/CMakeLists.txt b/modules/hal_silabs/wiseconnect/CMakeLists.txt index a67820af5e1..7ca5909189b 100644 --- a/modules/hal_silabs/wiseconnect/CMakeLists.txt +++ b/modules/hal_silabs/wiseconnect/CMakeLists.txt @@ -151,5 +151,23 @@ if(CONFIG_WISECONNECT_NETWORK_STACK) ) endif() # CONFIG_WISECONNECT_NETWORK_STACK +if(CONFIG_SOC_SILABS_SLEEPTIMER) + zephyr_include_directories( + ${SISDK_DIR}/platform/service/sleeptimer/inc + ${SISDK_DIR}/platform/service/sleeptimer/src + ${SISDK_DIR}/platform/service/sleeptimer/config + ) + + zephyr_library_sources( + ${SISDK_DIR}/platform/service/sleeptimer/src/sl_sleeptimer.c + ${WISECONNECT_DIR}/components/device/silabs/si91x/mcu/drivers/service/sleeptimer/src/sl_sleeptimer_hal_si91x_sysrtc.c + ) + zephyr_compile_definitions( + SL_CATALOG_SLEEPTIMER_PRESENT + SL_CODE_COMPONENT_SLEEPTIMER=sleeptimer + SL_CODE_COMPONENT_HAL_SYSRTC=hal_sysrtc + ) +endif() # CONFIG_SOC_SILABS_SLEEPTIMER + zephyr_linker_sources(ROM_SECTIONS linker/code_classification_text.ld) zephyr_linker_sources(RAMFUNC_SECTION linker/code_classification_ramfunc.ld) diff --git a/soc/silabs/silabs_siwx91x/Kconfig b/soc/silabs/silabs_siwx91x/Kconfig index a1f7371e9fb..eb696d43d19 100644 --- a/soc/silabs/silabs_siwx91x/Kconfig +++ b/soc/silabs/silabs_siwx91x/Kconfig @@ -9,3 +9,8 @@ config SOC_FAMILY_SILABS_SIWX91X select CPU_HAS_ARM_MPU select HAS_SILABS_WISECONNECT select HAS_SEGGER_RTT if ZEPHYR_SEGGER_MODULE + +config SOC_SILABS_SLEEPTIMER + bool + help + The Sleeptimer HAL module is used for SIWX91X. diff --git a/soc/silabs/silabs_siwx91x/Kconfig.defconfig b/soc/silabs/silabs_siwx91x/Kconfig.defconfig index eeef3b6a753..12aa149ba9d 100644 --- a/soc/silabs/silabs_siwx91x/Kconfig.defconfig +++ b/soc/silabs/silabs_siwx91x/Kconfig.defconfig @@ -3,6 +3,16 @@ if SOC_FAMILY_SILABS_SIWX91X +configdefault SILABS_SLEEPTIMER_TIMER + default y + +configdefault CORTEX_M_SYSTICK + default n if SILABS_SLEEPTIMER_TIMER + +configdefault SYS_CLOCK_TICKS_PER_SEC + default 128 if !TICKLESS_KERNEL && SILABS_SLEEPTIMER_TIMER + default 1024 if SILABS_SLEEPTIMER_TIMER + config WISECONNECT_NETWORK_STACK bool select CMSIS_RTOS_V2 diff --git a/soc/silabs/silabs_siwx91x/siwg917/soc.h b/soc/silabs/silabs_siwx91x/siwg917/soc.h index b96cf08e1a9..43b7088894e 100644 --- a/soc/silabs/silabs_siwx91x/siwg917/soc.h +++ b/soc/silabs/silabs_siwx91x/siwg917/soc.h @@ -7,4 +7,6 @@ #include "si91x_device.h" +#define SYSRTC_IRQHandler IRQ022_Handler + #endif