From bdd536a09eaf64dac20b7f347f72de06bdfb49af Mon Sep 17 00:00:00 2001 From: David Leach Date: Thu, 22 Jul 2021 11:02:31 -0500 Subject: [PATCH] watchdog: add watchdog driver support to mimxrt685 platform Add watchdog support to the mimxrt685 platform. The mimxrt685 platform is excluded from the watchdog test case because the test case uses variables in the noinit section that need to be retained through a reset but the rt685 does not retain this memory through a reset. Signed-off-by: David Leach --- boards/arm/mimxrt685_evk/doc/index.rst | 2 ++ .../arm/mimxrt685_evk/mimxrt685_evk_cm33.dts | 5 +++++ .../arm/mimxrt685_evk/mimxrt685_evk_cm33.yaml | 1 + drivers/watchdog/wdt_mcux_wwdt.c | 7 ++++++- dts/arm/nxp/nxp_rt6xx_common.dtsi | 18 ++++++++++++++++++ .../rt6xx/Kconfig.defconfig.mimxrt685_cm33 | 4 ++++ soc/arm/nxp_imx/rt6xx/soc.c | 9 ++++++++- .../watchdog/wdt_basic_api/testcase.yaml | 2 +- west.yml | 2 +- 9 files changed, 46 insertions(+), 4 deletions(-) diff --git a/boards/arm/mimxrt685_evk/doc/index.rst b/boards/arm/mimxrt685_evk/doc/index.rst index 7c39aa12158..0ea84b42ec4 100644 --- a/boards/arm/mimxrt685_evk/doc/index.rst +++ b/boards/arm/mimxrt685_evk/doc/index.rst @@ -89,6 +89,8 @@ features: +-----------+------------+-------------------------------------+ | PWM | on-chip | pwm | +-----------+------------+-------------------------------------+ +| WDT | on-chip | watchdog | ++-----------+------------+-------------------------------------+ The default configuration can be found in the defconfig file: diff --git a/boards/arm/mimxrt685_evk/mimxrt685_evk_cm33.dts b/boards/arm/mimxrt685_evk/mimxrt685_evk_cm33.dts index 344e16c5b58..d5e8aa5e87a 100644 --- a/boards/arm/mimxrt685_evk/mimxrt685_evk_cm33.dts +++ b/boards/arm/mimxrt685_evk/mimxrt685_evk_cm33.dts @@ -26,6 +26,7 @@ green-pwm-led = &green_pwm_led; blue-pwm-led = &blue_pwm_led; red-pwm-led = &red_pwm_led; + watchdog0 = &wwdt0; }; chosen { @@ -265,6 +266,10 @@ i2s1: &flexcomm3 { status = "okay"; }; +&wwdt0 { + status = "okay"; +}; + &user_button_1 { status = "okay"; }; diff --git a/boards/arm/mimxrt685_evk/mimxrt685_evk_cm33.yaml b/boards/arm/mimxrt685_evk/mimxrt685_evk_cm33.yaml index 6629c9bcfb8..37375da3311 100644 --- a/boards/arm/mimxrt685_evk/mimxrt685_evk_cm33.yaml +++ b/boards/arm/mimxrt685_evk/mimxrt685_evk_cm33.yaml @@ -26,3 +26,4 @@ supported: - i2c - i2s - spi + - watchdog diff --git a/drivers/watchdog/wdt_mcux_wwdt.c b/drivers/watchdog/wdt_mcux_wwdt.c index 90ee877d1ed..f92fe927b3d 100644 --- a/drivers/watchdog/wdt_mcux_wwdt.c +++ b/drivers/watchdog/wdt_mcux_wwdt.c @@ -72,7 +72,6 @@ static int mcux_wwdt_disable(const struct device *dev) static int mcux_wwdt_install_timeout(const struct device *dev, const struct wdt_timeout_cfg *cfg) { - const struct mcux_wwdt_config *config = dev->config; struct mcux_wwdt_data *data = dev->data; uint32_t clock_freq; @@ -81,8 +80,14 @@ static int mcux_wwdt_install_timeout(const struct device *dev, return -ENOMEM; } +#if defined(CONFIG_SOC_MIMXRT685S_CM33) + clock_freq = CLOCK_GetWdtClkFreq(0); +#else + const struct mcux_wwdt_config *config = dev->config; + CLOCK_SetClkDiv(kCLOCK_DivWdtClk, config->clk_divider, true); clock_freq = CLOCK_GetWdtClkFreq(); +#endif WWDT_GetDefaultConfig(&data->wwdt_config); diff --git a/dts/arm/nxp/nxp_rt6xx_common.dtsi b/dts/arm/nxp/nxp_rt6xx_common.dtsi index 771f4cb5d09..6fcc003e528 100644 --- a/dts/arm/nxp/nxp_rt6xx_common.dtsi +++ b/dts/arm/nxp/nxp_rt6xx_common.dtsi @@ -250,6 +250,24 @@ label = "SC_TIMER"; #pwm-cells = <2>; }; + + wwdt0: watchdog@e000 { + compatible = "nxp,lpc-wwdt"; + reg = <0xe000 0x1000>; + interrupts = <0 0>; + status = "disabled"; + clk-divider = <1>; + label = "WWDT_0"; + }; + + wwdt1: watchdog@2e000 { + compatible = "nxp,lpc-wwdt"; + reg = <0x2e000 0x1000>; + interrupts = <52 0>; + status = "disabled"; + clk-divider = <1>; + label = "WWDT_1"; + }; }; &nvic { diff --git a/soc/arm/nxp_imx/rt6xx/Kconfig.defconfig.mimxrt685_cm33 b/soc/arm/nxp_imx/rt6xx/Kconfig.defconfig.mimxrt685_cm33 index 7cd7b8224f3..e0d9fed0c58 100644 --- a/soc/arm/nxp_imx/rt6xx/Kconfig.defconfig.mimxrt685_cm33 +++ b/soc/arm/nxp_imx/rt6xx/Kconfig.defconfig.mimxrt685_cm33 @@ -62,4 +62,8 @@ config PWM_MCUX_SCTIMER default y depends on PWM +config WDT_MCUX_WWDT + default y + depends on WATCHDOG + endif # SOC_MIMXRT685S_CM33 diff --git a/soc/arm/nxp_imx/rt6xx/soc.c b/soc/arm/nxp_imx/rt6xx/soc.c index 4b7c23cc883..c2e1c933c43 100644 --- a/soc/arm/nxp_imx/rt6xx/soc.c +++ b/soc/arm/nxp_imx/rt6xx/soc.c @@ -171,7 +171,14 @@ static ALWAYS_INLINE void clock_init(void) /* attach AUDIO PLL clock to FLEXCOMM3 (I2S3) */ CLOCK_AttachClk(kAUDIO_PLL_to_FLEXCOMM3); #endif - +#if (DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(wwdt0), nxp_lpc_wwdt, okay)) + CLOCK_AttachClk(kLPOSC_to_WDT0_CLK); +#else + /* Allowed to select none if not being used for watchdog to + * reduce power + */ + CLOCK_AttachClk(kNONE_to_WDT0_CLK); +#endif #endif /* CONFIG_SOC_MIMXRT685S_CM33 */ } diff --git a/tests/drivers/watchdog/wdt_basic_api/testcase.yaml b/tests/drivers/watchdog/wdt_basic_api/testcase.yaml index c2f9eda2cb9..05f8a48359a 100644 --- a/tests/drivers/watchdog/wdt_basic_api/testcase.yaml +++ b/tests/drivers/watchdog/wdt_basic_api/testcase.yaml @@ -3,7 +3,7 @@ tests: depends_on: watchdog tags: drivers watchdog filter: not (CONFIG_WDT_SAM or dt_compat_enabled("st,stm32-window-watchdog")) - platform_exclude: mec15xxevb_assy6853 + platform_exclude: mec15xxevb_assy6853 mimxrt685_evk_cm33 drivers.watchdog.stm32wwdg: depends_on: watchdog tags: drivers watchdog diff --git a/west.yml b/west.yml index 7d89b15f341..3a9244521b8 100644 --- a/west.yml +++ b/west.yml @@ -92,7 +92,7 @@ manifest: groups: - hal - name: hal_nxp - revision: 4b493d4346e841e786a8daa2eb2ee03cbe5cfd37 + revision: bb97ba1cb3820d5799f53c7af765830d766b56a2 path: modules/hal/nxp groups: - hal