Message ID | 20210527220017.1266765-10-rasmus.villemoes@prevas.dk |
---|---|
State | Superseded |
Delegated to: | Stefan Roese |
Headers | show |
Series | handling all DM watchdogs in watchdog_reset() | expand |
On Thu, 27 May 2021 at 16:00, Rasmus Villemoes <rasmus.villemoes@prevas.dk> wrote: > > It seems that no other test has claimed gpio_a:7 yet, so use that. > > The only small wrinkle is modifying the existing wdt test to use > uclass_get_device_by_driver() since we now have two UCLASS_WDT > instances in play, so it's a little more robust to fetch the device by > driver and not merely uclass+index. > > Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk> > --- > arch/sandbox/dts/test.dts | 6 ++++++ > configs/sandbox64_defconfig | 1 + > configs/sandbox_defconfig | 1 + > test/dm/wdt.c | 36 +++++++++++++++++++++++++++++++++++- > 4 files changed, 43 insertions(+), 1 deletion(-) Reviewed-by: Simon Glass <sjg@chromium.org> (you could get the device by alias also, I suppose)
On 28.05.21 00:00, Rasmus Villemoes wrote: > It seems that no other test has claimed gpio_a:7 yet, so use that. > > The only small wrinkle is modifying the existing wdt test to use > uclass_get_device_by_driver() since we now have two UCLASS_WDT > instances in play, so it's a little more robust to fetch the device by > driver and not merely uclass+index. > > Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk> Reviewed-by: Stefan Roese <sr@denx.de> Thanks, Stefan > --- > arch/sandbox/dts/test.dts | 6 ++++++ > configs/sandbox64_defconfig | 1 + > configs/sandbox_defconfig | 1 + > test/dm/wdt.c | 36 +++++++++++++++++++++++++++++++++++- > 4 files changed, 43 insertions(+), 1 deletion(-) > > diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts > index 5ca3bc502a..cee5b14ecb 100644 > --- a/arch/sandbox/dts/test.dts > +++ b/arch/sandbox/dts/test.dts > @@ -755,6 +755,12 @@ > }; > }; > > + gpio-wdt { > + gpios = <&gpio_a 7 0>; > + compatible = "linux,wdt-gpio"; > + always-running; > + }; > + > mbox: mbox { > compatible = "sandbox,mbox"; > #mbox-cells = <1>; > diff --git a/configs/sandbox64_defconfig b/configs/sandbox64_defconfig > index 8b934698b5..3e4ee6e8e1 100644 > --- a/configs/sandbox64_defconfig > +++ b/configs/sandbox64_defconfig > @@ -225,6 +225,7 @@ CONFIG_SPLASH_SCREEN_ALIGN=y > CONFIG_VIDEO_BMP_RLE8=y > # CONFIG_WATCHDOG_AUTOSTART is not set > CONFIG_WDT=y > +CONFIG_WDT_GPIO=y > CONFIG_WDT_SANDBOX=y > CONFIG_FS_CBFS=y > CONFIG_FS_CRAMFS=y > diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig > index 8911463d58..faea4d763c 100644 > --- a/configs/sandbox_defconfig > +++ b/configs/sandbox_defconfig > @@ -272,6 +272,7 @@ CONFIG_W1_EEPROM=y > CONFIG_W1_EEPROM_SANDBOX=y > # CONFIG_WATCHDOG_AUTOSTART is not set > CONFIG_WDT=y > +CONFIG_WDT_GPIO=y > CONFIG_WDT_SANDBOX=y > CONFIG_FS_CBFS=y > CONFIG_FS_CRAMFS=y > diff --git a/test/dm/wdt.c b/test/dm/wdt.c > index 24b991dff6..abff853a02 100644 > --- a/test/dm/wdt.c > +++ b/test/dm/wdt.c > @@ -6,6 +6,7 @@ > #include <common.h> > #include <dm.h> > #include <wdt.h> > +#include <asm/gpio.h> > #include <asm/state.h> > #include <asm/test.h> > #include <dm/test.h> > @@ -19,7 +20,8 @@ static int dm_test_wdt_base(struct unit_test_state *uts) > struct udevice *dev; > const u64 timeout = 42; > > - ut_assertok(uclass_get_device(UCLASS_WDT, 0, &dev)); > + ut_assertok(uclass_get_device_by_driver(UCLASS_WDT, > + DM_DRIVER_GET(wdt_sandbox), &dev)); > ut_assertnonnull(dev); > ut_asserteq(0, state->wdt.counter); > ut_asserteq(false, state->wdt.running); > @@ -39,3 +41,35 @@ static int dm_test_wdt_base(struct unit_test_state *uts) > return 0; > } > DM_TEST(dm_test_wdt_base, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT); > + > +static int dm_test_wdt_gpio(struct unit_test_state *uts) > +{ > + /* > + * The sandbox wdt gpio is "connected" to gpio bank a, offset > + * 7. Use the sandbox back door to verify that the gpio-wdt > + * driver behaves as expected. > + */ > + struct udevice *wdt, *gpio; > + const u64 timeout = 42; > + const int offset = 7; > + int val; > + > + ut_assertok(uclass_get_device_by_driver(UCLASS_WDT, > + DM_DRIVER_GET(wdt_gpio), &wdt)); > + ut_assertnonnull(wdt); > + > + ut_assertok(uclass_get_device_by_name(UCLASS_GPIO, "base-gpios", &gpio)); > + ut_assertnonnull(gpio); > + ut_assertok(wdt_start(wdt, timeout, 0)); > + > + val = sandbox_gpio_get_value(gpio, offset); > + ut_assertok(wdt_reset(wdt)); > + ut_asserteq(!val, sandbox_gpio_get_value(gpio, offset)); > + ut_assertok(wdt_reset(wdt)); > + ut_asserteq(val, sandbox_gpio_get_value(gpio, offset)); > + > + ut_asserteq(-ENOSYS, wdt_stop(wdt)); > + > + return 0; > +} > +DM_TEST(dm_test_wdt_gpio, UT_TESTF_SCAN_FDT); > Viele Grüße, Stefan
diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts index 5ca3bc502a..cee5b14ecb 100644 --- a/arch/sandbox/dts/test.dts +++ b/arch/sandbox/dts/test.dts @@ -755,6 +755,12 @@ }; }; + gpio-wdt { + gpios = <&gpio_a 7 0>; + compatible = "linux,wdt-gpio"; + always-running; + }; + mbox: mbox { compatible = "sandbox,mbox"; #mbox-cells = <1>; diff --git a/configs/sandbox64_defconfig b/configs/sandbox64_defconfig index 8b934698b5..3e4ee6e8e1 100644 --- a/configs/sandbox64_defconfig +++ b/configs/sandbox64_defconfig @@ -225,6 +225,7 @@ CONFIG_SPLASH_SCREEN_ALIGN=y CONFIG_VIDEO_BMP_RLE8=y # CONFIG_WATCHDOG_AUTOSTART is not set CONFIG_WDT=y +CONFIG_WDT_GPIO=y CONFIG_WDT_SANDBOX=y CONFIG_FS_CBFS=y CONFIG_FS_CRAMFS=y diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig index 8911463d58..faea4d763c 100644 --- a/configs/sandbox_defconfig +++ b/configs/sandbox_defconfig @@ -272,6 +272,7 @@ CONFIG_W1_EEPROM=y CONFIG_W1_EEPROM_SANDBOX=y # CONFIG_WATCHDOG_AUTOSTART is not set CONFIG_WDT=y +CONFIG_WDT_GPIO=y CONFIG_WDT_SANDBOX=y CONFIG_FS_CBFS=y CONFIG_FS_CRAMFS=y diff --git a/test/dm/wdt.c b/test/dm/wdt.c index 24b991dff6..abff853a02 100644 --- a/test/dm/wdt.c +++ b/test/dm/wdt.c @@ -6,6 +6,7 @@ #include <common.h> #include <dm.h> #include <wdt.h> +#include <asm/gpio.h> #include <asm/state.h> #include <asm/test.h> #include <dm/test.h> @@ -19,7 +20,8 @@ static int dm_test_wdt_base(struct unit_test_state *uts) struct udevice *dev; const u64 timeout = 42; - ut_assertok(uclass_get_device(UCLASS_WDT, 0, &dev)); + ut_assertok(uclass_get_device_by_driver(UCLASS_WDT, + DM_DRIVER_GET(wdt_sandbox), &dev)); ut_assertnonnull(dev); ut_asserteq(0, state->wdt.counter); ut_asserteq(false, state->wdt.running); @@ -39,3 +41,35 @@ static int dm_test_wdt_base(struct unit_test_state *uts) return 0; } DM_TEST(dm_test_wdt_base, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT); + +static int dm_test_wdt_gpio(struct unit_test_state *uts) +{ + /* + * The sandbox wdt gpio is "connected" to gpio bank a, offset + * 7. Use the sandbox back door to verify that the gpio-wdt + * driver behaves as expected. + */ + struct udevice *wdt, *gpio; + const u64 timeout = 42; + const int offset = 7; + int val; + + ut_assertok(uclass_get_device_by_driver(UCLASS_WDT, + DM_DRIVER_GET(wdt_gpio), &wdt)); + ut_assertnonnull(wdt); + + ut_assertok(uclass_get_device_by_name(UCLASS_GPIO, "base-gpios", &gpio)); + ut_assertnonnull(gpio); + ut_assertok(wdt_start(wdt, timeout, 0)); + + val = sandbox_gpio_get_value(gpio, offset); + ut_assertok(wdt_reset(wdt)); + ut_asserteq(!val, sandbox_gpio_get_value(gpio, offset)); + ut_assertok(wdt_reset(wdt)); + ut_asserteq(val, sandbox_gpio_get_value(gpio, offset)); + + ut_asserteq(-ENOSYS, wdt_stop(wdt)); + + return 0; +} +DM_TEST(dm_test_wdt_gpio, UT_TESTF_SCAN_FDT);
It seems that no other test has claimed gpio_a:7 yet, so use that. The only small wrinkle is modifying the existing wdt test to use uclass_get_device_by_driver() since we now have two UCLASS_WDT instances in play, so it's a little more robust to fetch the device by driver and not merely uclass+index. Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk> --- arch/sandbox/dts/test.dts | 6 ++++++ configs/sandbox64_defconfig | 1 + configs/sandbox_defconfig | 1 + test/dm/wdt.c | 36 +++++++++++++++++++++++++++++++++++- 4 files changed, 43 insertions(+), 1 deletion(-)