1
1
/*
2
2
* Copyright (2) 2019 Vestas Wind Systems A/S
3
+ * Copyright 2025 NXP
3
4
*
4
5
* Based on wdt_mcux_wdog.c, which is:
5
6
* Copyright (c) 2018, NXP
11
12
12
13
#include <zephyr/drivers/watchdog.h>
13
14
#include <zephyr/drivers/clock_control.h>
15
+ #include <zephyr/sys/device_mmio.h>
14
16
#include <fsl_wdog32.h>
15
17
16
18
#define LOG_LEVEL CONFIG_WDT_LOG_LEVEL
@@ -20,8 +22,11 @@ LOG_MODULE_REGISTER(wdt_mcux_wdog32);
20
22
21
23
#define MIN_TIMEOUT 1
22
24
25
+ #define DEV_CFG (_dev ) ((const struct mcux_wdog32_config *)(_dev)->config)
26
+ #define DEV_DATA (_dev ) ((struct mcux_wdog32_data *)(_dev)->data)
27
+
23
28
struct mcux_wdog32_config {
24
- WDOG_Type * base ;
29
+ DEVICE_MMIO_NAMED_ROM ( reg ) ;
25
30
#if DT_NODE_HAS_PROP (DT_INST_PHANDLE (0 , clocks ), clock_frequency )
26
31
uint32_t clock_frequency ;
27
32
#else /* !DT_NODE_HAS_PROP(DT_INST_PHANDLE(0, clocks), clock_frequency) */
@@ -34,16 +39,21 @@ struct mcux_wdog32_config {
34
39
};
35
40
36
41
struct mcux_wdog32_data {
42
+ DEVICE_MMIO_NAMED_RAM (reg );
37
43
wdt_callback_t callback ;
38
44
wdog32_config_t wdog_config ;
39
45
bool timeout_valid ;
40
46
};
41
47
48
+ static inline WDOG_Type * get_base_address (const struct device * dev )
49
+ {
50
+ return (WDOG_Type * )DEVICE_MMIO_NAMED_GET (dev , reg );
51
+ }
52
+
42
53
static int mcux_wdog32_setup (const struct device * dev , uint8_t options )
43
54
{
44
- const struct mcux_wdog32_config * config = dev -> config ;
45
55
struct mcux_wdog32_data * data = dev -> data ;
46
- WDOG_Type * base = config -> base ;
56
+ WDOG_Type * base = get_base_address ( dev ) ;
47
57
48
58
if (!data -> timeout_valid ) {
49
59
LOG_ERR ("No valid timeouts installed" );
@@ -64,9 +74,8 @@ static int mcux_wdog32_setup(const struct device *dev, uint8_t options)
64
74
65
75
static int mcux_wdog32_disable (const struct device * dev )
66
76
{
67
- const struct mcux_wdog32_config * config = dev -> config ;
68
77
struct mcux_wdog32_data * data = dev -> data ;
69
- WDOG_Type * base = config -> base ;
78
+ WDOG_Type * base = get_base_address ( dev ) ;
70
79
71
80
WDOG32_Deinit (base );
72
81
data -> timeout_valid = false;
@@ -140,8 +149,7 @@ static int mcux_wdog32_install_timeout(const struct device *dev,
140
149
141
150
static int mcux_wdog32_feed (const struct device * dev , int channel_id )
142
151
{
143
- const struct mcux_wdog32_config * config = dev -> config ;
144
- WDOG_Type * base = config -> base ;
152
+ WDOG_Type * base = get_base_address (dev );
145
153
146
154
if (channel_id != 0 ) {
147
155
LOG_ERR ("Invalid channel id" );
@@ -156,9 +164,8 @@ static int mcux_wdog32_feed(const struct device *dev, int channel_id)
156
164
157
165
static void mcux_wdog32_isr (const struct device * dev )
158
166
{
159
- const struct mcux_wdog32_config * config = dev -> config ;
160
167
struct mcux_wdog32_data * data = dev -> data ;
161
- WDOG_Type * base = config -> base ;
168
+ WDOG_Type * base = get_base_address ( dev ) ;
162
169
uint32_t flags ;
163
170
164
171
flags = WDOG32_GetStatusFlags (base );
@@ -173,6 +180,9 @@ static int mcux_wdog32_init(const struct device *dev)
173
180
{
174
181
const struct mcux_wdog32_config * config = dev -> config ;
175
182
183
+ /* Map the named MMIO region */
184
+ DEVICE_MMIO_NAMED_MAP (dev , reg , K_MEM_CACHE_NONE | K_MEM_DIRECT_MAP );
185
+
176
186
config -> irq_config_func (dev );
177
187
178
188
return 0 ;
@@ -191,7 +201,7 @@ static DEVICE_API(wdt, mcux_wdog32_api) = {
191
201
static void mcux_wdog32_config_func_0 (const struct device * dev );
192
202
193
203
static const struct mcux_wdog32_config mcux_wdog32_config_0 = {
194
- . base = ( WDOG_Type * ) DT_INST_REG_ADDR ( 0 ),
204
+ DEVICE_MMIO_NAMED_ROM_INIT ( reg , DT_DRV_INST ( 0 ) ),
195
205
#if DT_NODE_HAS_PROP (DT_INST_PHANDLE (0 , clocks ), clock_frequency )
196
206
.clock_frequency = DT_INST_PROP_BY_PHANDLE (0 , clocks , clock_frequency ),
197
207
#else /* !DT_NODE_HAS_PROP(DT_INST_PHANDLE(0, clocks), clock_frequency) */
0 commit comments