1 /*
2  * Copyright (c) 2006-2025, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #ifndef DRV_WDT_H_
8 #define DRV_WDT_H_
9 
10 #include <drivers/dev_watchdog.h>
11 #include <sys/ioctl.h>
12 
13 #define DEFUALT_TIMEOUT     30*1000 /* ms */
14 #define KD_WDT_NUM_TOPS     16
15 #define KD_WDT_FIX_TOP(_idx)    (1U << (16 + _idx))
16 #define KD_WDT_RMOD_RESET   1
17 #define KD_WDT_RMOD_IRQ     2
18 
19 #define KD_DEVICE_CTRL_WDT_GET_TIMEOUT    _IOW('W', 1, int) /* get timeout(in seconds) */
20 #define KD_DEVICE_CTRL_WDT_SET_TIMEOUT    _IOW('W', 2, int) /* set timeout(in seconds) */
21 #define KD_DEVICE_CTRL_WDT_GET_TIMELEFT   _IOW('W', 3, int) /* get the left time before reboot(in seconds) */
22 #define KD_DEVICE_CTRL_WDT_KEEPALIVE      _IOW('W', 4, int) /* refresh watchdog */
23 #define KD_DEVICE_CTRL_WDT_START          _IOW('W', 5, int) /* start watchdog */
24 #define KD_DEVICE_CTRL_WDT_STOP           _IOW('W', 6, int) /* stop watchdog */
25 
26 struct k230_wdt_timeout {
27     rt_uint32_t top_val;
28     rt_uint32_t sec;
29     rt_uint32_t msec;
30 };
31 
32 #define swap(a, b) \
33     do { struct k230_wdt_timeout __tmp = (a); (a) = (b); (b) = __tmp; } while (0)
34 
35 /* wdt register map */
36 typedef struct _wdt
37 {
38     /* WDT Control Register                     (0x00) */
39     volatile uint32_t cr;
40     /* WDT Timeout Range Register               (0x04) */
41     volatile uint32_t torr;
42     /* WDT Current Counter Value Register       (0x08) */
43     volatile uint32_t ccvr;
44     /* WDT Counter Restart Register             (0x0c) */
45     volatile uint32_t crr;
46     /* WDT Interrupt Status Register            (0x10) */
47     volatile uint32_t stat;
48     /* WDT Interrupt Clear Register             (0x14) */
49     volatile uint32_t eoi;
50     /* reserverd                                (0x18) */
51     volatile uint32_t resv1;
52     /* WDT Protection level Register            (0x1c) */
53     volatile uint32_t prot_level;
54     /* reserved                                 (0x20-0xe0) */
55     volatile uint32_t resv4[49];
56     /* WDT Component Parameters Register 5      (0xe4) */
57     volatile uint32_t comp_param_5;
58     /* WDT Component Parameters Register 4      (0xe8) */
59     volatile uint32_t comp_param_4;
60     /* WDT Component Parameters Register 3      (0xec) */
61     volatile uint32_t comp_param_3;
62     /* WDT Component Parameters Register 2      (0xf0) */
63     volatile uint32_t comp_param_2;
64     /* WDT Component Parameters Register 1      (0xf4) */
65     volatile uint32_t comp_param_1;
66     /* WDT Component Version Register           (0xf8) */
67     volatile uint32_t comp_version;
68     /* WDT Component Type Register              (0xfc) */
69     volatile uint32_t comp_type;
70 } __attribute__((packed, aligned(4))) k230_wdt_t;
71 
72 
73 #endif /* DRV_WDT_H_ */