1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Copyright 2017 Google, Inc
4  */
5 
6 #include <common.h>
7 #include <dm.h>
8 #include <wdt.h>
9 #include <asm/state.h>
10 
11 static int sandbox_wdt_start(struct udevice *dev, u64 timeout, ulong flags)
12 {
13 	struct sandbox_state *state = state_get_current();
14 
15 	state->wdt.counter = timeout;
16 	state->wdt.running = true;
17 
18 	return 0;
19 }
20 
21 static int sandbox_wdt_stop(struct udevice *dev)
22 {
23 	struct sandbox_state *state = state_get_current();
24 
25 	state->wdt.running = false;
26 
27 	return 0;
28 }
29 
30 static int sandbox_wdt_reset(struct udevice *dev)
31 {
32 	struct sandbox_state *state = state_get_current();
33 
34 	state->wdt.reset_count++;
35 
36 	return 0;
37 }
38 
39 static int sandbox_wdt_expire_now(struct udevice *dev, ulong flags)
40 {
41 	sandbox_wdt_start(dev, 1, flags);
42 
43 	return 0;
44 }
45 
46 static const struct wdt_ops sandbox_wdt_ops = {
47 	.start = sandbox_wdt_start,
48 	.reset = sandbox_wdt_reset,
49 	.stop = sandbox_wdt_stop,
50 	.expire_now = sandbox_wdt_expire_now,
51 };
52 
53 static const struct udevice_id sandbox_wdt_ids[] = {
54 	{ .compatible = "sandbox,wdt" },
55 	{}
56 };
57 
58 U_BOOT_DRIVER(wdt_sandbox) = {
59 	.name = "wdt_sandbox",
60 	.id = UCLASS_WDT,
61 	.of_match = sandbox_wdt_ids,
62 	.ops = &sandbox_wdt_ops,
63 };
64