diff --git a/tests/drivers/watchdog/wdt_basic_reset_none/CMakeLists.txt b/tests/drivers/watchdog/wdt_basic_reset_none/CMakeLists.txt new file mode 100644 index 00000000000..09cb03b038c --- /dev/null +++ b/tests/drivers/watchdog/wdt_basic_reset_none/CMakeLists.txt @@ -0,0 +1,10 @@ +# Copyright 2022 NXP +# SPDX-License-Identifier: Apache-2.0 + +cmake_minimum_required(VERSION 3.20.0) + +find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) +project(wdt_basic_reset_none) + +FILE(GLOB app_sources src/*.c) +target_sources(app PRIVATE ${app_sources}) diff --git a/tests/drivers/watchdog/wdt_basic_reset_none/prj.conf b/tests/drivers/watchdog/wdt_basic_reset_none/prj.conf new file mode 100644 index 00000000000..d4844704878 --- /dev/null +++ b/tests/drivers/watchdog/wdt_basic_reset_none/prj.conf @@ -0,0 +1,6 @@ +# Copyright 2022 NXP +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_ZTEST=y +CONFIG_ZTEST_NEW_API=y +CONFIG_WATCHDOG=y diff --git a/tests/drivers/watchdog/wdt_basic_reset_none/src/main.c b/tests/drivers/watchdog/wdt_basic_reset_none/src/main.c new file mode 100644 index 00000000000..eefba77106a --- /dev/null +++ b/tests/drivers/watchdog/wdt_basic_reset_none/src/main.c @@ -0,0 +1,132 @@ +/* + * Copyright 2022 NXP + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include + + +/* + * To use this test, either the devicetree's /aliases must have a + * 'watchdog0' property, or one of the following watchdog compatibles + * must have an enabled node. + */ +#if DT_NODE_HAS_STATUS(DT_ALIAS(watchdog0), okay) +#define WDT_NODE DT_ALIAS(watchdog0) +#elif DT_HAS_COMPAT_STATUS_OKAY(nxp_s32_swt) +#define WDT_NODE DT_INST(0, nxp_s32_swt) +#endif + +#define WDT_FEED_TRIES 2 +#define WDT_MAX_WINDOW 1000 +#define WDT_TIMEOUT K_MSEC(1100) +#define SLEEP_TIME K_MSEC(500) +#define WDT_TEST_CB_TEST_VALUE 0xCB + +static struct wdt_timeout_cfg m_cfg_wdt0; +static volatile int wdt_interrupted_flag; +static volatile int wdt_feed_flag; + + +static void wdt_callback(const struct device *dev, int channel_id) +{ + wdt_interrupted_flag += WDT_TEST_CB_TEST_VALUE; + zassert_equal(WDT_FEED_TRIES, wdt_feed_flag, + "%d: Invalid number of feeding (expected: %d)", + wdt_feed_flag, WDT_FEED_TRIES); +} + +static int test_wdt_callback_reset_none(void) +{ + int err; + const struct device *const wdt = DEVICE_DT_GET(WDT_NODE); + + if (!device_is_ready(wdt)) { + TC_PRINT("WDT device is not ready\n"); + return TC_FAIL; + } + + m_cfg_wdt0.window.min = 0U; + m_cfg_wdt0.window.max = WDT_MAX_WINDOW; + m_cfg_wdt0.flags = WDT_FLAG_RESET_NONE; + m_cfg_wdt0.callback = wdt_callback; + + err = wdt_install_timeout(wdt, &m_cfg_wdt0); + if (err != 0) { + TC_PRINT("Watchdog install error\n"); + return TC_FAIL; + } + + err = wdt_setup(wdt, WDT_OPT_PAUSE_HALTED_BY_DBG); + if (err != 0) { + TC_PRINT("Watchdog setup error\n"); + return TC_FAIL; + } + + TC_PRINT("Feeding watchdog %d times\n", WDT_FEED_TRIES); + wdt_feed_flag = 0; + wdt_interrupted_flag = 0; + for (int i = 0; i < WDT_FEED_TRIES; ++i) { + TC_PRINT("Feeding %d\n", i+1); + wdt_feed(wdt, 0); + wdt_feed_flag++; + k_sleep(SLEEP_TIME); + } + + k_timeout_t timeout = WDT_TIMEOUT; + uint64_t start_time = k_uptime_ticks(); + + while (wdt_interrupted_flag == 0) { + if (k_uptime_ticks() - start_time >= timeout.ticks) { + break; + } + } + + zassert_equal(wdt_interrupted_flag, WDT_TEST_CB_TEST_VALUE, + "wdt callback failed"); + + err = wdt_disable(wdt); + if (err != 0) { + TC_PRINT("Disable watchdog error\n"); + return TC_FAIL; + } + + return TC_PASS; +} + +static int test_wdt_bad_window_max(void) +{ + int err; + const struct device *const wdt = DEVICE_DT_GET(WDT_NODE); + + if (!device_is_ready(wdt)) { + TC_PRINT("WDT device is not ready\n"); + return TC_FAIL; + } + + m_cfg_wdt0.callback = NULL; + m_cfg_wdt0.flags = WDT_FLAG_RESET_NONE; + m_cfg_wdt0.window.max = 0U; + m_cfg_wdt0.window.min = 0U; + err = wdt_install_timeout(wdt, &m_cfg_wdt0); + if (err == -EINVAL) { + return TC_PASS; + } + + return TC_FAIL; +} + + +ZTEST(wdt_basic_reset_none, test_wdt_callback_reset_none) +{ + zassert_true(test_wdt_callback_reset_none() == TC_PASS); +} + +ZTEST(wdt_basic_reset_none, test_wdt_bad_window_max) +{ + zassert_true(test_wdt_bad_window_max() == TC_PASS); +} + +ZTEST_SUITE(wdt_basic_reset_none, NULL, NULL, NULL, NULL, NULL); diff --git a/tests/drivers/watchdog/wdt_basic_reset_none/testcase.yaml b/tests/drivers/watchdog/wdt_basic_reset_none/testcase.yaml new file mode 100644 index 00000000000..ff9db13a653 --- /dev/null +++ b/tests/drivers/watchdog/wdt_basic_reset_none/testcase.yaml @@ -0,0 +1,8 @@ +# Copyright 2022 NXP +# SPDX-License-Identifier: Apache-2.0 + +tests: + drivers.watchdog.reset_none: + platform_allow: s32z270dc2_rtu0_r52 s32z270dc2_rtu1_r52 + tags: drivers watchdog + depends_on: watchdog