sandbox: add test of wdt_gpio driver

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.

Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Stefan Roese <sr@denx.de>
Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
This commit is contained in:
Rasmus Villemoes 2021-08-19 11:57:05 +02:00 committed by Stefan Roese
parent 2ac8490412
commit a9346b93b4
4 changed files with 43 additions and 1 deletions

View file

@ -793,6 +793,12 @@
}; };
}; };
gpio-wdt {
gpios = <&gpio_a 7 0>;
compatible = "linux,wdt-gpio";
always-running;
};
mbox: mbox { mbox: mbox {
compatible = "sandbox,mbox"; compatible = "sandbox,mbox";
#mbox-cells = <1>; #mbox-cells = <1>;

View file

@ -225,6 +225,7 @@ CONFIG_SPLASH_SCREEN_ALIGN=y
CONFIG_VIDEO_BMP_RLE8=y CONFIG_VIDEO_BMP_RLE8=y
# CONFIG_WATCHDOG_AUTOSTART is not set # CONFIG_WATCHDOG_AUTOSTART is not set
CONFIG_WDT=y CONFIG_WDT=y
CONFIG_WDT_GPIO=y
CONFIG_WDT_SANDBOX=y CONFIG_WDT_SANDBOX=y
CONFIG_FS_CBFS=y CONFIG_FS_CBFS=y
CONFIG_FS_CRAMFS=y CONFIG_FS_CRAMFS=y

View file

@ -283,6 +283,7 @@ CONFIG_W1_EEPROM=y
CONFIG_W1_EEPROM_SANDBOX=y CONFIG_W1_EEPROM_SANDBOX=y
# CONFIG_WATCHDOG_AUTOSTART is not set # CONFIG_WATCHDOG_AUTOSTART is not set
CONFIG_WDT=y CONFIG_WDT=y
CONFIG_WDT_GPIO=y
CONFIG_WDT_SANDBOX=y CONFIG_WDT_SANDBOX=y
CONFIG_FS_CBFS=y CONFIG_FS_CBFS=y
CONFIG_FS_CRAMFS=y CONFIG_FS_CRAMFS=y

View file

@ -6,6 +6,7 @@
#include <common.h> #include <common.h>
#include <dm.h> #include <dm.h>
#include <wdt.h> #include <wdt.h>
#include <asm/gpio.h>
#include <asm/state.h> #include <asm/state.h>
#include <asm/test.h> #include <asm/test.h>
#include <dm/test.h> #include <dm/test.h>
@ -19,7 +20,8 @@ static int dm_test_wdt_base(struct unit_test_state *uts)
struct udevice *dev; struct udevice *dev;
const u64 timeout = 42; 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_assertnonnull(dev);
ut_asserteq(0, state->wdt.counter); ut_asserteq(0, state->wdt.counter);
ut_asserteq(false, state->wdt.running); ut_asserteq(false, state->wdt.running);
@ -39,3 +41,35 @@ static int dm_test_wdt_base(struct unit_test_state *uts)
return 0; return 0;
} }
DM_TEST(dm_test_wdt_base, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT); 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);