[PATCH v1 02/15] dm: Simple Watchdog uclass

Simon Glass sjg at chromium.org
Wed Apr 19 10:11:29 AEST 2017


Hi Maxim,

On 17 April 2017 at 13:00, Maxim Sloyko <maxims at google.com> wrote:
> This is a simple uclass for Watchdog Timers. It has four operations:
> start, restart, reset, stop. Drivers must implement start, restart and
> stop operations, while implementing reset is optional: It's default
> implementation expires watchdog timer in one clock tick.
>
> Signed-off-by: Maxim Sloyko <maxims at google.com>
> ---
>
> Changes in v1:
> - Rename wdt_reset to wdt_expire_now
> - Rename wdt_restart to wdt_reset
> - Clarified function documentation in few cases
> - Add Sandbox WDT driver and unit tests
>
>
> ---
>  arch/sandbox/dts/test.dts        |   4 ++
>  arch/sandbox/include/asm/state.h |   9 ++++
>  configs/sandbox_defconfig        |   2 +
>  drivers/watchdog/Kconfig         |  21 ++++++++
>  drivers/watchdog/Makefile        |   2 +
>  drivers/watchdog/sandbox_wdt.c   |  76 +++++++++++++++++++++++++++
>  drivers/watchdog/wdt-uclass.c    |  72 ++++++++++++++++++++++++++
>  include/dm/uclass-id.h           |   1 +
>  include/wdt.h                    | 107 +++++++++++++++++++++++++++++++++++++++
>  test/dm/Makefile                 |   1 +
>  test/dm/wdt.c                    |  40 +++++++++++++++
>  11 files changed, 335 insertions(+)
>  create mode 100644 drivers/watchdog/sandbox_wdt.c
>  create mode 100644 drivers/watchdog/wdt-uclass.c
>  create mode 100644 include/wdt.h
>  create mode 100644 test/dm/wdt.c

Reviewed-by: Simon Glass <sjg at chromium.org>

nits below

[...]

> diff --git a/drivers/watchdog/sandbox_wdt.c b/drivers/watchdog/sandbox_wdt.c
> new file mode 100644
> index 0000000000..34d90bee7e
> --- /dev/null
> +++ b/drivers/watchdog/sandbox_wdt.c
> @@ -0,0 +1,76 @@
> +/*
> + * Copyright 2017 Google, Inc
> + *
> + * SPDX-License-Identifier:    GPL-2.0+
> + */
> +
> +#include <common.h>
> +#include <dm.h>
> +#include <asm/state.h>

Put this after wt.h

> +#include <wdt.h>
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +static int sandbox_wdt_start(struct udevice *dev, u64 timeout, ulong flags)
> +{
> +       struct sandbox_state *state = state_get_current();
> +
> +       state->wdt.counter = timeout;
> +       state->wdt.running = true;
> +
> +       return 0;
> +}
> +
> +static int sandbox_wdt_stop(struct udevice *dev)
> +{
> +       struct sandbox_state *state = state_get_current();
> +
> +       state->wdt.running = false;
> +
> +       return 0;
> +}
> +
> +static int sandbox_wdt_reset(struct udevice *dev)
> +{
> +       struct sandbox_state *state = state_get_current();
> +
> +       state->wdt.reset_count++;
> +
> +       return 0;
> +}
> +
> +static int sandbox_wdt_expire_now(struct udevice *dev, ulong flags)
> +{
> +       sandbox_wdt_start(dev, 1, flags);
> +
> +       return 0;
> +}
> +
> +static int sandbox_wdt_probe(struct udevice *dev)
> +{
> +       struct sandbox_state *state = state_get_current();
> +
> +       memset(&state->wdt, 0, sizeof(state->wdt));

Driver model does this for you so this function is not needed.

> +
> +       return 0;
> +}
> +
> +static const struct wdt_ops sandbox_wdt_ops = {
> +       .start = sandbox_wdt_start,
> +       .reset = sandbox_wdt_reset,
> +       .stop = sandbox_wdt_stop,
> +       .expire_now = sandbox_wdt_expire_now,
> +};
> +
> +static const struct udevice_id sandbox_wdt_ids[] = {
> +       { .compatible = "sandbox,wdt" },
> +       {}
> +};
> +
> +U_BOOT_DRIVER(wdt_sandbox) = {
> +       .name = "wdt_sandbox",
> +       .id = UCLASS_WDT,
> +       .of_match = sandbox_wdt_ids,
> +       .ops = &sandbox_wdt_ops,
> +       .probe = sandbox_wdt_probe,
> +};

[...]


More information about the openbmc mailing list