[PATCH v6 12/12] sandbox: add test of wdt-uclass' watchdog_reset()
Stefan Roese
sr at denx.de
Tue Aug 31 10:17:57 CEST 2021
Hi Rasmus,
I've pulled this patchset now into next [1] and have run it through
CI via Azure. Here an error occurs:
https://dev.azure.com/sr0718/u-boot/_build/results?buildId=109&view=logs&j=50449d1b-398e-53ae-48fa-6bf338edeb51&t=97605dd2-f5a5-5dd7-2118-315ffdc8bcd6&l=533
Could you please take a look at this?
Thanks,
Stefan
[1] https://source.denx.de/u-boot/custodians/u-boot-marvell/-/commits/next
On 19.08.21 11:57, Rasmus Villemoes wrote:
> Check that the watchdog_reset() implementation in wdt-uclass behaves
> as expected:
>
> - resets all activated watchdog devices
> - leaves unactivated/stopped devices alone
> - that the rate-limiting works, with a per-device threshold
>
> Reviewed-by: Simon Glass <sjg at chromium.org>
> Reviewed-by: Stefan Roese <sr at denx.de>
> Signed-off-by: Rasmus Villemoes <rasmus.villemoes at prevas.dk>
> ---
> arch/sandbox/dts/test.dts | 2 ++
> test/dm/wdt.c | 54 +++++++++++++++++++++++++++++++++++++++
> 2 files changed, 56 insertions(+)
>
> diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts
> index fe5ac6ecd9..bafc2e9494 100644
> --- a/arch/sandbox/dts/test.dts
> +++ b/arch/sandbox/dts/test.dts
> @@ -782,6 +782,7 @@
> gpio-wdt {
> gpios = <&gpio_a 7 0>;
> compatible = "linux,wdt-gpio";
> + hw_margin_ms = <100>;
> always-running;
> };
>
> @@ -1264,6 +1265,7 @@
>
> wdt0: wdt at 0 {
> compatible = "sandbox,wdt";
> + hw_margin_ms = <200>;
> };
>
> axi: axi at 0 {
> diff --git a/test/dm/wdt.c b/test/dm/wdt.c
> index abff853a02..ee615f0e14 100644
> --- a/test/dm/wdt.c
> +++ b/test/dm/wdt.c
> @@ -12,6 +12,8 @@
> #include <dm/test.h>
> #include <test/test.h>
> #include <test/ut.h>
> +#include <linux/delay.h>
> +#include <watchdog.h>
>
> /* Test that watchdog driver functions are called */
> static int dm_test_wdt_base(struct unit_test_state *uts)
> @@ -73,3 +75,55 @@ static int dm_test_wdt_gpio(struct unit_test_state *uts)
> return 0;
> }
> DM_TEST(dm_test_wdt_gpio, UT_TESTF_SCAN_FDT);
> +
> +static int dm_test_wdt_watchdog_reset(struct unit_test_state *uts)
> +{
> + struct sandbox_state *state = state_get_current();
> + struct udevice *gpio_wdt, *sandbox_wdt;
> + struct udevice *gpio;
> + const u64 timeout = 42;
> + const int offset = 7;
> + uint reset_count;
> + int val;
> +
> + ut_assertok(uclass_get_device_by_driver(UCLASS_WDT,
> + DM_DRIVER_GET(wdt_gpio), &gpio_wdt));
> + ut_assertnonnull(gpio_wdt);
> + ut_assertok(uclass_get_device_by_driver(UCLASS_WDT,
> + DM_DRIVER_GET(wdt_sandbox), &sandbox_wdt));
> + ut_assertnonnull(sandbox_wdt);
> + ut_assertok(uclass_get_device_by_name(UCLASS_GPIO, "base-gpios", &gpio));
> + ut_assertnonnull(gpio);
> +
> + /* Neither device should be "started", so watchdog_reset() should be a no-op. */
> + reset_count = state->wdt.reset_count;
> + val = sandbox_gpio_get_value(gpio, offset);
> + watchdog_reset();
> + ut_asserteq(reset_count, state->wdt.reset_count);
> + ut_asserteq(val, sandbox_gpio_get_value(gpio, offset));
> +
> + /* Start both devices. */
> + ut_assertok(wdt_start(gpio_wdt, timeout, 0));
> + ut_assertok(wdt_start(sandbox_wdt, timeout, 0));
> +
> + /* Make sure both devices have just been pinged. */
> + timer_test_add_offset(100);
> + watchdog_reset();
> + reset_count = state->wdt.reset_count;
> + val = sandbox_gpio_get_value(gpio, offset);
> +
> + /* The gpio watchdog should be pinged, the sandbox one not. */
> + timer_test_add_offset(30);
> + watchdog_reset();
> + ut_asserteq(reset_count, state->wdt.reset_count);
> + ut_asserteq(!val, sandbox_gpio_get_value(gpio, offset));
> +
> + /* After another ~30ms, both devices should get pinged. */
> + timer_test_add_offset(30);
> + watchdog_reset();
> + ut_asserteq(reset_count + 1, state->wdt.reset_count);
> + ut_asserteq(val, sandbox_gpio_get_value(gpio, offset));
> +
> + return 0;
> +}
> +DM_TEST(dm_test_wdt_watchdog_reset, UT_TESTF_SCAN_FDT);
>
Viele Grüße,
Stefan
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr at denx.de
More information about the U-Boot
mailing list