Coverage Report

Created: 2026-03-11 06:21

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/u-boot/drivers/watchdog/sandbox_alarm-wdt.c
Line
Count
Source
1
#include <dm.h>
2
#include <os.h>
3
#include <wdt.h>
4
5
struct alarm_wdt_priv {
6
  unsigned int timeout_sec;
7
};
8
9
static void alarm_handler(int sig)
10
0
{
11
0
  const char *msg = "!!! ALARM !!!\n";
12
13
0
  os_write(2, msg, strlen(msg));
14
0
  os_fd_restore();
15
0
  os_set_alarm_handler(NULL);
16
0
  os_raise_sigalrm();
17
0
}
18
19
static int alarm_wdt_start(struct udevice *dev, u64 timeout, ulong flags)
20
0
{
21
0
  struct alarm_wdt_priv *priv = dev_get_priv(dev);
22
0
  unsigned int sec;
23
24
0
  timeout = DIV_ROUND_UP(timeout, 1000);
25
0
  sec = min_t(u64, UINT_MAX, timeout);
26
0
  priv->timeout_sec = sec;
27
28
0
  os_alarm(0);
29
0
  os_set_alarm_handler(alarm_handler);
30
0
  os_alarm(sec);
31
32
0
  return 0;
33
0
}
34
35
static int alarm_wdt_stop(struct udevice *dev)
36
0
{
37
0
  os_alarm(0);
38
0
  os_set_alarm_handler(NULL);
39
40
0
  return 0;
41
0
}
42
43
static int alarm_wdt_reset(struct udevice *dev)
44
0
{
45
0
  struct alarm_wdt_priv *priv = dev_get_priv(dev);
46
47
0
  os_alarm(priv->timeout_sec);
48
49
0
  return 0;
50
0
}
51
52
static int alarm_wdt_expire_now(struct udevice *dev, ulong flags)
53
0
{
54
0
  alarm_handler(0);
55
56
0
  return 0;
57
0
}
58
59
static const struct wdt_ops alarm_wdt_ops = {
60
  .start = alarm_wdt_start,
61
  .reset = alarm_wdt_reset,
62
  .stop = alarm_wdt_stop,
63
  .expire_now = alarm_wdt_expire_now,
64
};
65
66
static const struct udevice_id alarm_wdt_ids[] = {
67
  { .compatible = "sandbox,alarm-wdt" },
68
  {}
69
};
70
71
U_BOOT_DRIVER(alarm_wdt_sandbox) = {
72
  .name = "alarm_wdt_sandbox",
73
  .id = UCLASS_WDT,
74
  .of_match = alarm_wdt_ids,
75
  .ops = &alarm_wdt_ops,
76
  .priv_auto = sizeof(struct alarm_wdt_priv),
77
};