1 /*
2  * Copyright (c) 2020 Nuvoton Technology Corporation.
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #ifndef _NUVOTON_NPCX_REG_DEF_H
8 #define _NUVOTON_NPCX_REG_DEF_H
9 
10 #include <stdint.h>
11 
12 #include <zephyr/devicetree.h>
13 #include <zephyr/sys/__assert.h>
14 #include <zephyr/sys/util_macro.h>
15 #include <zephyr/toolchain.h>
16 
17 /*
18  * NPCX register structure size/offset checking macro function to mitigate
19  * the risk of unexpected compiling results. All addresses of NPCX registers
20  * must meet the alignment requirement of cortex-m4.
21  * DO NOT use 'packed' attribute if module contains different length ie.
22  * 8/16/32 bits registers.
23  */
24 #define NPCX_REG_SIZE_CHECK(reg_def, size) \
25 	BUILD_ASSERT(sizeof(struct reg_def) == size, \
26 		"Failed in size check of register structure!")
27 #define NPCX_REG_OFFSET_CHECK(reg_def, member, offset) \
28 	BUILD_ASSERT(offsetof(struct reg_def, member) == offset, \
29 		"Failed in offset check of register structure member!")
30 
31 /*
32  * NPCX register access checking via structure macro function to mitigate the
33  * risk of unexpected compiling results if module contains different length
34  * registers. For example, a word register access might break into two byte
35  * register accesses by adding 'packed' attribute.
36  *
37  * For example, add this macro for word register 'PRSC' of PWM module in its
38  * device init function for checking violation. Once it occurred, core will be
39  * stalled forever and easy to find out what happens.
40  */
41 #define NPCX_REG_WORD_ACCESS_CHECK(reg, val) { \
42 		uint16_t placeholder = reg; \
43 		reg = val; \
44 		__ASSERT(reg == val, "16-bit reg access failed!"); \
45 		reg = placeholder; \
46 	}
47 #define NPCX_REG_DWORD_ACCESS_CHECK(reg, val) { \
48 		uint32_t placeholder = reg; \
49 		reg = val; \
50 		__ASSERT(reg == val, "32-bit reg access failed!"); \
51 		reg = placeholder; \
52 	}
53 /*
54  * Core Domain Clock Generator (CDCG) device registers
55  */
56 struct cdcg_reg {
57 	/* High Frequency Clock Generator (HFCG) registers */
58 	/* 0x000: HFCG Control */
59 	volatile uint8_t HFCGCTRL;
60 	volatile uint8_t reserved1;
61 	/* 0x002: HFCG M Low Byte Value */
62 	volatile uint8_t HFCGML;
63 	volatile uint8_t reserved2;
64 	/* 0x004: HFCG M High Byte Value */
65 	volatile uint8_t HFCGMH;
66 	volatile uint8_t reserved3;
67 	/* 0x006: HFCG N Value */
68 	volatile uint8_t HFCGN;
69 	volatile uint8_t reserved4;
70 	/* 0x008: HFCG Prescaler */
71 	volatile uint8_t HFCGP;
72 	volatile uint8_t reserved5[7];
73 	/* 0x010: HFCG Bus Clock Dividers */
74 	volatile uint8_t HFCBCD;
75 	volatile uint8_t reserved6;
76 	/* 0x012: HFCG Bus Clock Dividers */
77 	volatile uint8_t HFCBCD1;
78 	volatile uint8_t reserved7;
79 	/* 0x014: HFCG Bus Clock Dividers */
80 	volatile uint8_t HFCBCD2;
81 	volatile uint8_t reserved12[8];
82 	/* 0x01d: HFCG Bus Clock Dividers */
83 	volatile uint8_t HFCBCD3;
84 	volatile uint8_t reserved8[226];
85 
86 	/* Low Frequency Clock Generator (LFCG) registers */
87 	/* 0x100: LFCG Control */
88 	volatile uint8_t  LFCGCTL;
89 	volatile uint8_t reserved9;
90 	/* 0x102: High-Frequency Reference Divisor I */
91 	volatile uint16_t HFRDI;
92 	/* 0x104: High-Frequency Reference Divisor F */
93 	volatile uint16_t HFRDF;
94 	/* 0x106: FRCLK Clock Divisor */
95 	volatile uint16_t FRCDIV;
96 	/* 0x108: Divisor Correction Value 1 */
97 	volatile uint16_t DIVCOR1;
98 	/* 0x10A: Divisor Correction Value 2 */
99 	volatile uint16_t DIVCOR2;
100 	volatile uint8_t reserved10[8];
101 	/* 0x114: LFCG Control 2 */
102 	volatile uint8_t  LFCGCTL2;
103 	volatile uint8_t  reserved11;
104 };
105 
106 /* CDCG register fields */
107 #define NPCX_HFCGCTRL_LOAD                    0
108 #define NPCX_HFCGCTRL_LOCK                    2
109 #define NPCX_HFCGCTRL_CLK_CHNG                7
110 
111 #define NPCX_LFCGCTL2_XT_OSC_SL_EN            6
112 
113 /*
114  * Power Management Controller (PMC) device registers
115  */
116 struct pmc_reg {
117 	/* 0x000: Power Management Controller */
118 	volatile uint8_t PMCSR;
119 	volatile uint8_t reserved1[2];
120 	/* 0x003: Enable in Sleep Control */
121 	volatile uint8_t ENIDL_CTL;
122 	/* 0x004: Disable in Idle Control */
123 	volatile uint8_t DISIDL_CTL;
124 	/* 0x005: Disable in Idle Control 1 */
125 	volatile uint8_t DISIDL_CTL1;
126 	volatile uint8_t reserved2[2];
127 	/* 0x008 - 0D: Power-Down Control 1 - 6 */
128 	volatile uint8_t PWDWN_CTL1[6];
129 	volatile uint8_t reserved3[18];
130 	/* 0x020 - 21: Power-Down Control 1 - 2 */
131 	volatile uint8_t RAM_PD[2];
132 	volatile uint8_t reserved4[2];
133 	/* 0x024: Power-Down Control 7 */
134 	volatile uint8_t PWDWN_CTL7[1];
135 };
136 
137 /* PMC internal inline functions for multi-registers */
npcx_pwdwn_ctl_offset(uint32_t ctl_no)138 static inline uint32_t npcx_pwdwn_ctl_offset(uint32_t ctl_no)
139 {
140 	if (ctl_no < 6) {
141 		return 0x008 + ctl_no;
142 	} else {
143 		return 0x024 + ctl_no - 6;
144 	}
145 }
146 
147 /* Macro functions for PMC multi-registers */
148 #define NPCX_PWDWN_CTL(base, n) (*(volatile uint8_t *)(base + \
149 						npcx_pwdwn_ctl_offset(n)))
150 
151 /* PMC register fields */
152 #define NPCX_PMCSR_DI_INSTW                   0
153 #define NPCX_PMCSR_DHF                        1
154 #define NPCX_PMCSR_IDLE                       2
155 #define NPCX_PMCSR_NWBI                       3
156 #define NPCX_PMCSR_OHFC                       6
157 #define NPCX_PMCSR_OLFC                       7
158 #define NPCX_DISIDL_CTL_RAM_DID               5
159 #define NPCX_ENIDL_CTL_ADC_LFSL               7
160 #define NPCX_ENIDL_CTL_LP_WK_CTL              6
161 #define NPCX_ENIDL_CTL_PECI_ENI               2
162 #define NPCX_ENIDL_CTL_ADC_ACC_DIS            1
163 
164 /* Macro functions for Development and Debugger Interface (DDI) registers */
165 #define NPCX_DBGCTRL(base)   (*(volatile uint8_t *)(base + 0x004))
166 #define NPCX_DBGFRZEN1(base) (*(volatile uint8_t *)(base + 0x006))
167 #define NPCX_DBGFRZEN2(base) (*(volatile uint8_t *)(base + 0x007))
168 #define NPCX_DBGFRZEN3(base) (*(volatile uint8_t *)(base + 0x008))
169 #define NPCX_DBGFRZEN4(base) (*(volatile uint8_t *)(base + 0x009))
170 
171 /* DDI register fields */
172 #define NPCX_DBGCTRL_CCDEV_SEL		FIELD(6, 2)
173 #define NPCX_DBGCTRL_CCDEV_DIR		5
174 #define NPCX_DBGCTRL_SEQ_WK_EN		4
175 #define NPCX_DBGCTRL_FRCLK_SEL_DIS	3
176 #define NPCX_DBGFRZEN1_SPIFEN		7
177 #define NPCX_DBGFRZEN1_HIFEN		6
178 #define NPCX_DBGFRZEN1_ESPISEN		5
179 #define NPCX_DBGFRZEN1_UART1FEN		4
180 #define NPCX_DBGFRZEN1_SMB3FEN		3
181 #define NPCX_DBGFRZEN1_SMB2FEN		2
182 #define NPCX_DBGFRZEN1_MFT2FEN		1
183 #define NPCX_DBGFRZEN1_MFT1FEN		0
184 #define NPCX_DBGFRZEN2_ITIM6FEN		7
185 #define NPCX_DBGFRZEN2_ITIM5FEN		6
186 #define NPCX_DBGFRZEN2_ITIM4FEN		5
187 #define NPCX_DBGFRZEN2_ITIM64FEN	3
188 #define NPCX_DBGFRZEN2_SMB1FEN		2
189 #define NPCX_DBGFRZEN2_SMB0FEN		1
190 #define NPCX_DBGFRZEN2_MFT3FEN		0
191 #define NPCX_DBGFRZEN3_GLBL_FRZ_DIS	7
192 #define NPCX_DBGFRZEN3_ITIM3FEN		6
193 #define NPCX_DBGFRZEN3_ITIM2FEN		5
194 #define NPCX_DBGFRZEN3_ITIM1FEN		4
195 #define NPCX_DBGFRZEN3_I3CFEN		2
196 #define NPCX_DBGFRZEN3_SMB4FEN		1
197 #define NPCX_DBGFRZEN3_SHMFEN		0
198 #define NPCX_DBGFRZEN4_UART2FEN		6
199 #define NPCX_DBGFRZEN4_UART3FEN		5
200 #define NPCX_DBGFRZEN4_UART4FEN		4
201 #define NPCX_DBGFRZEN4_LCTFEN		3
202 #define NPCX_DBGFRZEN4_SMB7FEN		2
203 #define NPCX_DBGFRZEN4_SMB6FEN		1
204 #define NPCX_DBGFRZEN4_SMB5FEN		0
205 
206 /*
207  * System Configuration (SCFG) device registers
208  */
209 struct scfg_reg {
210 	/* 0x000: Device Control */
211 	volatile uint8_t DEVCNT;
212 	/* 0x001: Straps Status */
213 	volatile uint8_t STRPST;
214 	/* 0x002: Reset Control and Status */
215 	volatile uint8_t RSTCTL;
216 	volatile uint8_t reserved1;
217 	/* 0x004: Device Control 3*/
218 	volatile uint8_t DEV_CTL3;
219 	volatile uint8_t reserved2;
220 	/* 0x006: Device Control 4 */
221 	volatile uint8_t DEV_CTL4;
222 	volatile uint8_t reserved3[9];
223 	/* 0x010 - 1F: Device Alternate Function 0 - F */
224 	volatile uint8_t DEVALT0[16];
225 	volatile uint8_t reserved4[6];
226 	/* 0x026: Low-Voltage GPIO Pins Control 5 */
227 	volatile uint8_t LV_GPIO_CTL5[1];
228 	volatile uint8_t reserved5;
229 	/* 0x028: Pull-Up/Pull-Down Enable 0 */
230 	volatile uint8_t PUPD_EN0;
231 	/* 0x029: Pull-Up/Pull-Down Enable 1 */
232 	volatile uint8_t PUPD_EN1;
233 	/* 0x02A - 2E: Low-Voltage GPIO Pins Control 0 - 4 */
234 	volatile uint8_t LV_GPIO_CTL0[5];
235 };
236 
237 /* Macro functions for SCFG multi-registers */
238 #define NPCX_DEV_CTL(base, n) \
239 	(*(volatile uint8_t *)(base + n))
240 #define NPCX_DEVALT(base, n) \
241 	(*(volatile uint8_t *)(base + NPCX_DEVALT_OFFSET(n)))
242 #define NPCX_DEVALT_LK(base, n) \
243 	(*(volatile uint8_t *)(base + NPCX_DEVALT_LK_OFFSET(n)))
244 #define NPCX_PUPD_EN(base, n) \
245 	(*(volatile uint8_t *)(base + NPCX_PUPD_EN_OFFSET(n)))
246 #define NPCX_LV_GPIO_CTL(base, n) \
247 	(*(volatile uint8_t *)(base + NPCX_LV_GPIO_CTL_OFFSET(n)))
248 
249 #define NPCX_JEN_CTL1_OFFSET 0x120
250 #define NPCX_JEN_CTL1(base) (*(volatile uint8_t *)(base + (NPCX_JEN_CTL1_OFFSET)))
251 
252 #define NPCX_JEN_CTL1_JEN_EN       FIELD(0, 4)
253 #define NPCX_JEN_CTL1_JEN_HEN      FIELD(4, 4)
254 #define NPCX_JEN_CTL1_JEN_ENABLE   0x9
255 #define NPCX_JEN_CTL1_JEN_DISABLE  0x6
256 
257 /* SCFG register fields */
258 #define NPCX_DEVCNT_F_SPI_TRIS                6
259 #define NPCX_DEVCNT_HIF_TYP_SEL_FIELD         FIELD(2, 2)
260 #define NPCX_DEVCNT_JEN1_HEN                  5
261 #define NPCX_DEVCNT_JEN0_HEN                  4
262 #define NPCX_STRPST_TRIST                     1
263 #define NPCX_STRPST_TEST                      2
264 #define NPCX_STRPST_JEN1                      4
265 #define NPCX_STRPST_JEN0                      5
266 #define NPCX_STRPST_SPI_COMP                  7
267 #define NPCX_RSTCTL_VCC1_RST_STS              0
268 #define NPCX_RSTCTL_DBGRST_STS                1
269 #define NPCX_RSTCTL_VCC1_RST_SCRATCH          3
270 #define NPCX_RSTCTL_LRESET_PLTRST_MODE        5
271 #define NPCX_RSTCTL_HIPRST_MODE               6
272 #define NPCX_DEV_CTL3_RNGINT_MD               1
273 #define NPCX_DEV_CTL3_FVCC1_PURST_EN          2
274 #define NPCX_DEV_CTL3_I3C1_MS                 3
275 #define NPCX_DEV_CTL3_I3C2_MS                 4
276 #define NPCX_DEV_CTL3_I3C3_MS                 5
277 #define NPCX_DEV_CTL3_SIO_CLK_SEL             FIELD(6, 2)
278 #define NPCX_DEV_CTL4_F_SPI_SLLK              2
279 #define NPCX_DEV_CTL4_SPI_SP_SEL              4
280 #define NPCX_DEV_CTL4_WP_IF                   5
281 #define NPCX_DEV_CTL4_VCC1_RST_LK             6
282 #define NPCX_DEVPU0_I2C0_0_PUE                0
283 #define NPCX_DEVPU0_I2C0_1_PUE                1
284 #define NPCX_DEVPU0_I2C1_0_PUE                2
285 #define NPCX_DEVPU0_I2C2_0_PUE                4
286 #define NPCX_DEVPU0_I2C3_0_PUE                6
287 #define NPCX_DEVPU1_F_SPI_PUD_EN              7
288 
289 #if defined(CONFIG_SOC_SERIES_NPCX4)
290 /* I3C module controller, target mode for the MDMA module operation */
291 #define NPCX_DEV_CTL3_I3C_MODE_BIT(inst_id) BIT(inst_id + 3)
292 #endif /* End of CONFIG_SOC_SERIES_NPCX4 */
293 
294 /* Supported host interface type for HIF_TYP_SEL FILED in DEVCNT register. */
295 enum npcx_hif_type {
296 	NPCX_HIF_TYPE_NONE,
297 	NPCX_HIF_TYPE_LPC,
298 	NPCX_HIF_TYPE_ESPI_SHI,
299 };
300 
301 /* Supported VOSCCLK frequency for SIO_CLK_SEL FILED in DEV_CTL3 register. */
302 enum npcx_voscclk_type {
303 	NPCX_VOSCCLK_96MHz,
304 	NPCX_VOSCCLK_100MHz,
305 	NPCX_VOSCCLK_120MHz,
306 	NPCX_VOSCCLK_90MHz,
307 };
308 
309 /*
310  * System Glue (GLUE) device registers
311  */
312 struct glue_reg {
313 	volatile uint8_t reserved1[2];
314 	/* 0x002: SMBus Start Bit Detection */
315 	volatile uint8_t SMB_SBD;
316 	/* 0x003: SMBus Event Enable */
317 	volatile uint8_t SMB_EEN;
318 	volatile uint8_t reserved2[12];
319 	/* 0x010: Simple Debug Port Data 0 */
320 	volatile uint8_t SDPD0;
321 	volatile uint8_t reserved3;
322 	/* 0x012: Simple Debug Port Data 1 */
323 	volatile uint8_t SDPD1;
324 	volatile uint8_t reserved4;
325 	/* 0x014: Simple Debug Port Control and Status */
326 	volatile uint8_t SDP_CTS;
327 	volatile uint8_t reserved5[12];
328 	/* 0x021: SMBus Bus Select */
329 	volatile uint8_t SMB_SEL;
330 	volatile uint8_t reserved6[5];
331 	/* 0x027: PSL Control and Status */
332 	volatile uint8_t PSL_CTS;
333 };
334 
335 /* GLUE register fields */
336 /* PSL input detection mode is configured by bits 7:4 of PSL_CTS */
337 #define NPCX_PSL_CTS_MODE_BIT(bit) BIT(bit + 4)
338 /* PSL input assertion events are reported by bits 3:0 of PSL_CTS */
339 #define NPCX_PSL_CTS_EVENT_BIT(bit) BIT(bit)
340 
341 /*
342  * Universal Asynchronous Receiver-Transmitter (UART) device registers
343  */
344 struct uart_reg {
345 	/* 0x000: Transmit Data Buffer */
346 	volatile uint8_t UTBUF;
347 	volatile uint8_t reserved1;
348 	/* 0x002: Receive Data Buffer */
349 	volatile uint8_t URBUF;
350 	volatile uint8_t reserved2;
351 	/* 0x004: Interrupt Control */
352 	volatile uint8_t UICTRL;
353 	volatile uint8_t reserved3;
354 	/* 0x006: Status */
355 	volatile uint8_t USTAT;
356 	volatile uint8_t reserved4;
357 	/* 0x008: Frame Select */
358 	volatile uint8_t UFRS;
359 	volatile uint8_t reserved5;
360 	/* 0x00A: Mode Select */
361 	volatile uint8_t UMDSL;
362 	volatile uint8_t reserved6;
363 	/* 0x00C: Baud Rate Divisor */
364 	volatile uint8_t UBAUD;
365 	volatile uint8_t reserved7;
366 	/* 0x00E: Baud Rate Prescaler */
367 	volatile uint8_t UPSR;
368 	volatile uint8_t reserved8[17];
369 	/* 0x020: FIFO Mode Transmit Status */
370 	volatile uint8_t UFTSTS;
371 	volatile uint8_t reserved9;
372 	/* 0x022: FIFO Mode Receive Status */
373 	volatile uint8_t UFRSTS;
374 	volatile uint8_t reserved10;
375 	/* 0x024: FIFO Mode Transmit Control */
376 	volatile uint8_t UFTCTL;
377 	volatile uint8_t reserved11;
378 	/* 0x026: FIFO Mode Receive Control */
379 	volatile uint8_t UFRCTL;
380 };
381 
382 /* UART register fields */
383 #define NPCX_UICTRL_TBE                       0
384 #define NPCX_UICTRL_RBF                       1
385 #define NPCX_UICTRL_ETI                       5
386 #define NPCX_UICTRL_ERI                       6
387 #define NPCX_UICTRL_EEI                       7
388 #define NPCX_USTAT_PE                         0
389 #define NPCX_USTAT_FE                         1
390 #define NPCX_USTAT_DOE                        2
391 #define NPCX_USTAT_ERR                        3
392 #define NPCX_USTAT_BKD                        4
393 #define NPCX_USTAT_RB9                        5
394 #define NPCX_USTAT_XMIP                       6
395 #define NPCX_UFRS_CHAR_FIELD                  FIELD(0, 2)
396 #define NPCX_UFRS_STP                         2
397 #define NPCX_UFRS_XB9                         3
398 #define NPCX_UFRS_PSEL_FIELD                  FIELD(4, 2)
399 #define NPCX_UFRS_PEN                         6
400 #define NPCX_UMDSL_FIFO_MD                    0
401 #define NPCX_UMDSL_ETD                        4
402 #define NPCX_UMDSL_ERD                        5
403 
404 #define NPCX_UFTSTS_TEMPTY_LVL                FIELD(0, 5)
405 #define NPCX_UFTSTS_TEMPTY_LVL_STS            5
406 #define NPCX_UFTSTS_TFIFO_EMPTY_STS           6
407 #define NPCX_UFTSTS_NXMIP                     7
408 #define NPCX_UFRSTS_RFULL_LVL_STS             5
409 #define NPCX_UFRSTS_RFIFO_NEMPTY_STS          6
410 #define NPCX_UFRSTS_ERR                       7
411 #define NPCX_UFTCTL_TEMPTY_LVL_SEL            FIELD(0, 5)
412 #define NPCX_UFTCTL_TEMPTY_LVL_EN             5
413 #define NPCX_UFTCTL_TEMPTY_EN                 6
414 #define NPCX_UFTCTL_NXMIP_EN                  7
415 #define NPCX_UFRCTL_RFULL_LVL_SEL             FIELD(0, 5)
416 #define NPCX_UFRCTL_RFULL_LVL_EN              5
417 #define NPCX_UFRCTL_RNEMPTY_EN                6
418 #define NPCX_UFRCTL_ERR_EN                    7
419 
420 /* Macro functions for MIWU multi-registers */
421 #define NPCX_WKEDG(base, group) \
422 	(*(volatile uint8_t *)(base +  NPCX_WKEDG_OFFSET(group)))
423 #define NPCX_WKAEDG(base, group) \
424 	(*(volatile uint8_t *)(base + NPCX_WKAEDG_OFFSET(group)))
425 #define NPCX_WKPND(base, group) \
426 	(*(volatile uint8_t *)(base + NPCX_WKPND_OFFSET(group)))
427 #define NPCX_WKPCL(base, group) \
428 	(*(volatile uint8_t *)(base + NPCX_WKPCL_OFFSET(group)))
429 #define NPCX_WKEN(base, group) \
430 	(*(volatile uint8_t *)(base + NPCX_WKEN_OFFSET(group)))
431 #define NPCX_WKINEN(base, group) \
432 	(*(volatile uint8_t *)(base + NPCX_WKINEN_OFFSET(group)))
433 #define NPCX_WKMOD(base, group) \
434 	(*(volatile uint8_t *)(base + NPCX_WKMOD_OFFSET(group)))
435 #define NPCX_WKST(base, group) \
436 	(*(volatile uint8_t *)(base + NPCX_WKST_OFFSET(group)))
437 
438 /*
439  * General-Purpose I/O (GPIO) device registers
440  */
441 struct gpio_reg {
442 	/* 0x000: Port GPIOx Data Out */
443 	volatile uint8_t PDOUT;
444 	/* 0x001: Port GPIOx Data In */
445 	volatile uint8_t PDIN;
446 	/* 0x002: Port GPIOx Direction */
447 	volatile uint8_t PDIR;
448 	/* 0x003: Port GPIOx Pull-Up or Pull-Down Enable */
449 	volatile uint8_t PPULL;
450 	/* 0x004: Port GPIOx Pull-Up/Down Selection */
451 	volatile uint8_t PPUD;
452 	/* 0x005: Port GPIOx Drive Enable by VDD Present */
453 	volatile uint8_t PENVDD;
454 	/* 0x006: Port GPIOx Output Type */
455 	volatile uint8_t PTYPE;
456 	/* 0x007: Port GPIOx Lock Control */
457 	volatile uint8_t PLOCK_CTL;
458 };
459 
460 /*
461  * Pulse Width Modulator (PWM) device registers
462  */
463 struct pwm_reg {
464 	/* 0x000: Clock Prescaler */
465 	volatile uint16_t PRSC;
466 	/* 0x002: Cycle Time */
467 	volatile uint16_t CTR;
468 	/* 0x004: PWM Control */
469 	volatile uint8_t PWMCTL;
470 	volatile uint8_t reserved1;
471 	/* 0x006: Duty Cycle */
472 	volatile uint16_t DCR;
473 	volatile uint8_t reserved2[4];
474 	/* 0x00C: PWM Control Extended */
475 	volatile uint8_t PWMCTLEX;
476 	volatile uint8_t reserved3;
477 };
478 
479 /* PWM register fields */
480 #define NPCX_PWMCTL_INVP                      0
481 #define NPCX_PWMCTL_CKSEL                     1
482 #define NPCX_PWMCTL_HB_DC_CTL_FIELD           FIELD(2, 2)
483 #define NPCX_PWMCTL_PWR                       7
484 #define NPCX_PWMCTLEX_FCK_SEL_FIELD           FIELD(4, 2)
485 #define NPCX_PWMCTLEX_OD_OUT                  7
486 
487 /*
488  * Analog-To-Digital Converter (ADC) device registers
489  */
490 struct adc_reg {
491 	/* 0x000: ADC Status */
492 	volatile uint16_t ADCSTS;
493 	/* 0x002: ADC Configuration */
494 	volatile uint16_t ADCCNF;
495 	/* 0x004: ADC Timing Control */
496 	volatile uint16_t ATCTL;
497 	/* 0x006: ADC Single Channel Address */
498 	volatile uint16_t ASCADD;
499 	/* 0x008: ADC Scan Channels Select */
500 	volatile uint16_t ADCCS;
501 	/* 0x00A: ADC Scan Channels Select 2 */
502 	volatile uint16_t ADCCS2;
503 	volatile uint8_t reserved1[14];
504 	/* 0x01A:  Threshold Status */
505 	volatile uint16_t THRCTS;
506 	volatile uint8_t reserved2[4];
507 	/* 0x020: Internal register 1 for ADC Speed */
508 	volatile uint16_t ADCCNF2;
509 	/* 0x022: Internal register 2 for ADC Speed */
510 	volatile uint16_t GENDLY;
511 	volatile uint8_t reserved3[2];
512 	/* 0x026: Internal register 3 for ADC Speed */
513 	volatile uint16_t MEAST;
514 };
515 
516 /* ADC internal inline functions for multi-registers */
517 #define CHNDAT(base, ch) \
518 	(*(volatile uint16_t *)((base) + NPCX_CHNDAT_OFFSET(ch)))
519 #define THRCTL(base, ctrl) \
520 	(*(volatile uint16_t *)(base + NPCX_THRCTL_OFFSET(ctrl)))
521 
522 /* ADC register fields */
523 #define NPCX_ATCTL_SCLKDIV_FIELD              FIELD(0, 6)
524 #define NPCX_ATCTL_DLY_FIELD                  FIELD(8, 3)
525 #define NPCX_ASCADD_SADDR_FIELD               FIELD(0, 5)
526 #define NPCX_ADCSTS_EOCEV                     0
527 #define NPCX_ADCSTS_EOCCEV                    1
528 #define NPCX_ADCCNF_ADCEN                     0
529 #define NPCX_ADCCNF_ADCMD_FIELD               FIELD(1, 2)
530 #define NPCX_ADCCNF_ADCRPTC                   3
531 #define NPCX_ADCCNF_START                     4
532 #define NPCX_ADCCNF_ADCTTE                    5
533 #define NPCX_ADCCNF_INTECEN                   6
534 #define NPCX_ADCCNF_INTECCEN                  7
535 #define NPCX_ADCCNF_INTETCEN                  8
536 #define NPCX_ADCCNF_INTOVFEN                  9
537 #define NPCX_ADCCNF_STOP                      11
538 #define NPCX_CHNDAT_CHDAT_FIELD               FIELD(0, 10)
539 #define NPCX_CHNDAT_NEW                       15
540 #define NPCX_THRCTS_ADC_WKEN                  15
541 #define NPCX_THRCTS_THR3_IEN                  10
542 #define NPCX_THRCTS_THR2_IEN                  9
543 #define NPCX_THRCTS_THR1_IEN                  8
544 #define NPCX_THRCTS_ADC_EVENT                 7
545 #define NPCX_THRCTS_THR3_STS                  2
546 #define NPCX_THRCTS_THR2_STS                  1
547 #define NPCX_THRCTS_THR1_STS                  0
548 #define NPCX_THR_DCTL_THRD_EN                 15
549 #define NPCX_THR_DCTL_THR_DVAL                FIELD(0, 10)
550 
551 /*
552  * Timer Watchdog (TWD) device registers
553  */
554 struct twd_reg {
555 	/* 0x000: Timer and Watchdog Configuration */
556 	volatile uint8_t TWCFG;
557 	volatile uint8_t reserved1;
558 	/* 0x002: Timer and Watchdog Clock Prescaler */
559 	volatile uint8_t TWCP;
560 	volatile uint8_t reserved2;
561 	/* 0x004: TWD Timer 0 */
562 	volatile uint16_t TWDT0;
563 	/* 0x006: TWDT0 Control and Status */
564 	volatile uint8_t T0CSR;
565 	volatile uint8_t reserved3;
566 	/* 0x008: Watchdog Count */
567 	volatile uint8_t WDCNT;
568 	volatile uint8_t reserved4;
569 	/* 0x00A: Watchdog Service Data Match */
570 	volatile uint8_t WDSDM;
571 	volatile uint8_t reserved5;
572 	/* 0x00C: TWD Timer 0 Counter */
573 	volatile uint16_t TWMT0;
574 	/* 0x00E: Watchdog Counter */
575 	volatile uint8_t TWMWD;
576 	volatile uint8_t reserved6;
577 	/* 0x010: Watchdog Clock Prescaler */
578 	volatile uint8_t WDCP;
579 	volatile uint8_t reserved7;
580 };
581 
582 /* TWD register fields */
583 #define NPCX_TWCFG_LTWCFG                      0
584 #define NPCX_TWCFG_LTWCP                       1
585 #define NPCX_TWCFG_LTWDT0                      2
586 #define NPCX_TWCFG_LWDCNT                      3
587 #define NPCX_TWCFG_WDCT0I                      4
588 #define NPCX_TWCFG_WDSDME                      5
589 #define NPCX_T0CSR_RST                         0
590 #define NPCX_T0CSR_TC                          1
591 #define NPCX_T0CSR_WDLTD                       3
592 #define NPCX_T0CSR_WDRST_STS                   4
593 #define NPCX_T0CSR_WD_RUN                      5
594 #define NPCX_T0CSR_TESDIS                      7
595 
596 /*
597  * Enhanced Serial Peripheral Interface (eSPI) device registers
598  */
599 struct espi_reg {
600 	/* 0x000: eSPI Identification */
601 	volatile uint32_t ESPIID;
602 	/* 0x004: eSPI Configuration */
603 	volatile uint32_t ESPICFG;
604 	/* 0x008: eSPI Status */
605 	volatile uint32_t ESPISTS;
606 	/* 0x00C: eSPI Interrupt Enable */
607 	volatile uint32_t ESPIIE;
608 	/* 0x010: eSPI Wake-Up Enable */
609 	volatile uint32_t ESPIWE;
610 	/* 0x014: Virtual Wire Register Index */
611 	volatile uint32_t VWREGIDX;
612 	/* 0x018: Virtual Wire Register Data */
613 	volatile uint32_t VWREGDATA;
614 	/* 0x01C: OOB Receive Buffer Read Head */
615 	volatile uint32_t OOBRXRDHEAD;
616 	/* 0x020: OOB Transmit Buffer Write Head */
617 	volatile uint32_t OOBTXWRHEAD;
618 	/* 0x024: OOB Channel Control */
619 	volatile uint32_t OOBCTL;
620 	/* 0x028: Flash Receive Buffer Read Head */
621 	volatile uint32_t FLASHRXRDHEAD;
622 	/* 0x02C: Flash Transmit Buffer Write Head */
623 	volatile uint32_t FLASHTXWRHEAD;
624 	volatile uint32_t reserved1;
625 	/* 0x034: Flash Channel Configuration */
626 	volatile uint32_t FLASHCFG;
627 	/* 0x038: Flash Channel Control */
628 	volatile uint32_t FLASHCTL;
629 	/* 0x03C: eSPI Error Status */
630 	volatile uint32_t ESPIERR;
631 	/* 0x040: Peripheral Bus Master Receive Buffer Read Head */
632 	volatile uint32_t PBMRXRDHEAD;
633 	/* 0x044: Peripheral Bus Master Transmit Buffer Write Head */
634 	volatile uint32_t PBMTXWRHEAD;
635 	/* 0x048: Peripheral Channel Configuration */
636 	volatile uint32_t PERCFG;
637 	/* 0x04C: Peripheral Channel Control */
638 	volatile uint32_t PERCTL;
639 	/* 0x050: Status Image Register */
640 	volatile uint16_t STATUS_IMG;
641 	volatile uint16_t reserved2[79];
642 	/* 0x0F0: NPCX specific eSPI Register1 */
643 	volatile uint8_t NPCX_ONLY_ESPI_REG1;
644 	/* 0x0F1: NPCX specific eSPI Register2 */
645 	volatile uint8_t NPCX_ONLY_ESPI_REG2;
646 	volatile uint16_t reserved3[7];
647 	/* 0x100 - 127: Virtual Wire Event Slave-to-Master 0 - 9 */
648 	volatile uint32_t VWEVSM[10];
649 	volatile uint32_t reserved4[6];
650 	/* 0x140 - 16F: Virtual Wire Event Master-to-Slave 0 - 11 */
651 	volatile uint32_t VWEVMS[12];
652 	volatile uint32_t reserved5[4];
653 	/* 0x180 - 1BF: Virtual Wire GPIO Event Master-to-Slave 0 - 15 */
654 	volatile uint32_t VWGPSM[16];
655 	volatile uint32_t reserved6[79];
656 	/* 0x2FC: Virtual Wire Channel Control */
657 	volatile uint32_t VWCTL;
658 	/* 0x300 - 34F: OOB Receive Buffer 0 - 19 */
659 	volatile uint32_t OOBRXBUF[20];
660 	volatile uint32_t reserved7[12];
661 	/* 0x380 - 3CF: OOB Transmit Buffer 0-19 */
662 	volatile uint32_t OOBTXBUF[20];
663 	volatile uint32_t reserved8[11];
664 	/* 0x3FC: OOB Channel Control used in 'direct' mode */
665 	volatile uint32_t OOBCTL_DIRECT;
666 	/* 0x400 - 443: Flash Receive Buffer 0-17 */
667 	volatile uint32_t FLASHRXBUF[18];
668 	volatile uint32_t reserved9[14];
669 	/* 0x480 - 497: Flash Transmit Buffer 0-16 */
670 	volatile uint32_t FLASHTXBUF[17];
671 	volatile uint32_t reserved10[14];
672 	/* 0x4FC: Flash Channel Control used in 'direct' mode */
673 	volatile uint32_t FLASHCTL_DIRECT;
674 	volatile uint32_t reserved12[64];
675 	/* 0x600 - 63F */
676 	volatile uint32_t FLASH_PRTR_BADDR[16];
677 	/* 0x640 - 67F */
678 	volatile uint32_t FLASH_PRTR_HADDR[16];
679 	/* 0x680 - 6BF */
680 	volatile uint32_t FLASH_RGN_TAG_OVR[16];
681 	volatile uint32_t reserved13[80];
682 	/* 0x800 */
683 	volatile uint32_t FLASH_RPMC_CFG_1;
684 	/* 0x804 */
685 	volatile uint32_t FLASH_RPMC_CFG_2;
686 	/* 0x808 */
687 	volatile uint32_t RMAP_FLASH_OFFS;
688 	/* 0x80C */
689 	volatile uint32_t RMAP_DST_BASE;
690 	/* 0x810 */
691 	volatile uint32_t RMAP_WIN_SIZE;
692 	/* 0x814 */
693 	volatile uint32_t FLASHBASE;
694 	volatile uint32_t reserved14[58];
695 };
696 
697 /* eSPI register fields */
698 #define NPCX_ESPICFG_PCHANEN             0
699 #define NPCX_ESPICFG_VWCHANEN            1
700 #define NPCX_ESPICFG_OOBCHANEN           2
701 #define NPCX_ESPICFG_FLASHCHANEN         3
702 #define NPCX_ESPICFG_HPCHANEN            4
703 #define NPCX_ESPICFG_HVWCHANEN           5
704 #define NPCX_ESPICFG_HOOBCHANEN          6
705 #define NPCX_ESPICFG_HFLASHCHANEN        7
706 #define NPCX_ESPICFG_CHANS_FIELD         FIELD(0, 4)
707 #define NPCX_ESPICFG_HCHANS_FIELD        FIELD(4, 4)
708 #define NPCX_ESPICFG_IOMODE_FIELD        FIELD(8, 2)
709 #define NPCX_ESPICFG_MAXFREQ_FIELD       FIELD(10, 3)
710 #define NPCX_ESPICFG_FLCHANMODE          16
711 #define NPCX_ESPICFG_PCCHN_SUPP          24
712 #define NPCX_ESPICFG_VWCHN_SUPP          25
713 #define NPCX_ESPICFG_OOBCHN_SUPP         26
714 #define NPCX_ESPICFG_FLASHCHN_SUPP       27
715 #define NPCX_ESPIIE_IBRSTIE              0
716 #define NPCX_ESPIIE_CFGUPDIE             1
717 #define NPCX_ESPIIE_BERRIE               2
718 #define NPCX_ESPIIE_OOBRXIE              3
719 #define NPCX_ESPIIE_FLASHRXIE            4
720 #define NPCX_ESPIIE_FLNACSIE             5
721 #define NPCX_ESPIIE_PERACCIE             6
722 #define NPCX_ESPIIE_DFRDIE               7
723 #define NPCX_ESPIIE_VWUPDIE              8
724 #define NPCX_ESPIIE_ESPIRSTIE            9
725 #define NPCX_ESPIIE_PLTRSTIE             10
726 #define NPCX_ESPIIE_AMERRIE              15
727 #define NPCX_ESPIIE_AMDONEIE             16
728 #define NPCX_ESPIIE_BMTXDONEIE           19
729 #define NPCX_ESPIIE_PBMRXIE              20
730 #define NPCX_ESPIIE_PMSGRXIE             21
731 #define NPCX_ESPIIE_BMBURSTERRIE         22
732 #define NPCX_ESPIIE_BMBURSTDONEIE        23
733 #define NPCX_ESPIWE_IBRSTWE              0
734 #define NPCX_ESPIWE_CFGUPDWE             1
735 #define NPCX_ESPIWE_BERRWE               2
736 #define NPCX_ESPIWE_OOBRXWE              3
737 #define NPCX_ESPIWE_FLASHRXWE            4
738 #define NPCX_ESPIWE_FLNACSWE             5
739 #define NPCX_ESPIWE_PERACCWE             6
740 #define NPCX_ESPIWE_DFRDWE               7
741 #define NPCX_ESPIWE_VWUPDWE              8
742 #define NPCX_ESPIWE_ESPIRSTWE            9
743 #define NPCX_ESPIWE_PBMRXWE              20
744 #define NPCX_ESPIWE_PMSGRXWE             21
745 #define NPCX_ESPISTS_IBRST               0
746 #define NPCX_ESPISTS_CFGUPD              1
747 #define NPCX_ESPISTS_BERR                2
748 #define NPCX_ESPISTS_OOBRX               3
749 #define NPCX_ESPISTS_FLASHRX             4
750 #define NPCX_ESPISTS_FLNACS              5
751 #define NPCX_ESPISTS_PERACC              6
752 #define NPCX_ESPISTS_DFRD                7
753 #define NPCX_ESPISTS_VWUPD               8
754 #define NPCX_ESPISTS_ESPIRST             9
755 #define NPCX_ESPISTS_PLTRST              10
756 #define NPCX_ESPISTS_FLAUTORDREQ         14
757 #define NPCX_ESPISTS_AMERR               15
758 #define NPCX_ESPISTS_AMDONE              16
759 #define NPCX_ESPISTS_VWUPDW              17
760 #define NPCX_ESPISTS_BMTXDONE            19
761 #define NPCX_ESPISTS_PBMRX               20
762 #define NPCX_ESPISTS_PMSGRX              21
763 #define NPCX_ESPISTS_BMBURSTERR          22
764 #define NPCX_ESPISTS_BMBURSTDONE         23
765 #define NPCX_ESPISTS_ESPIRST_LVL         24
766 #define NPCX_ESPISTS_AUTO_RD_DIS_STS     29
767 #define NPCX_VWSWIRQ_IRQ_NUM             FIELD(0, 7)
768 #define NPCX_VWSWIRQ_IRQ_LVL             7
769 #define NPCX_VWSWIRQ_INDEX               FIELD(8, 7)
770 #define NPCX_VWSWIRQ_INDEX_EN            15
771 #define NPCX_VWSWIRQ_DIRTY               16
772 #define NPCX_VWSWIRQ_ENPLTRST            17
773 #define NPCX_VWSWIRQ_ENCDRST             19
774 #define NPCX_VWSWIRQ_EDGE_IRQ            28
775 #define NPCX_VWEVMS_WIRE                 FIELD(0, 4)
776 #define NPCX_VWEVMS_VALID                FIELD(4, 4)
777 #define NPCX_VWEVMS_INDEX                FIELD(8, 7)
778 #define NPCX_VWEVMS_INDEX_EN             15
779 #define NPCX_VWEVMS_IE                   18
780 #define NPCX_VWEVMS_ENESPIRST            19
781 #define NPCX_VWEVMS_WE                   20
782 #define NPCX_VWEVSM_WIRE                 FIELD(0, 4)
783 #define NPCX_VWEVSM_VALID                FIELD(4, 4)
784 #define NPCX_VWEVSM_INDEX                FIELD(8, 7)
785 #define NPCX_VWEVSM_INDEX_EN             15
786 #define NPCX_VWEVSM_BIT_VALID(n)         (4+n)
787 #define NPCX_VWEVSM_HW_WIRE              FIELD(24, 4)
788 #define NPCX_VWGPSM_INDEX_EN             15
789 #define NPCX_OOBCTL_OOB_FREE             0
790 #define NPCX_OOBCTL_OOB_AVAIL            1
791 #define NPCX_OOBCTL_RSTBUFHEADS          2
792 #define NPCX_OOBCTL_OOBPLSIZE            FIELD(10, 3)
793 #define NPCX_FLASHCFG_FLASHBLERSSIZE     FIELD(7, 3)
794 #define NPCX_FLASHCFG_FLASHPLSIZE        FIELD(10, 3)
795 #define NPCX_FLASHCFG_FLASHREQSIZE       FIELD(13, 3)
796 #define NPCX_FLASHCFG_FLCAPA             FIELD(24, 2)
797 #define NPCX_FLASHCFG_TRGFLEBLKSIZE      FIELD(16, 8)
798 #define NPCX_FLASHCFG_FLREQSUP           FIELD(0, 3)
799 #define NPCX_FLASHCTL_FLASH_NP_FREE      0
800 #define NPCX_FLASHCTL_FLASH_TX_AVAIL     1
801 #define NPCX_FLASHCTL_STRPHDR            2
802 #define NPCX_FLASHCTL_DMATHRESH          FIELD(3, 2)
803 #define NPCX_FLASHCTL_AMTSIZE            FIELD(5, 8)
804 #define NPCX_FLASHCTL_RSTBUFHEADS        13
805 #define NPCX_FLASHCTL_CRCEN              14
806 #define NPCX_FLASHCTL_CHKSUMSEL          15
807 #define NPCX_FLASHCTL_AMTEN              16
808 #define NPCX_FLASHCTL_SAF_AUTO_READ      18
809 #define NPCX_FLASHCTL_AUTO_RD_DIS_CTL    19
810 #define NPCX_FLASHCTL_BLK_FLASH_NP_FREE  20
811 #define NPCX_FLASHBASE_FLBASE_ADDR       FIELD(12, 15)
812 #define NPCX_FLASH_PRTR_BADDR            FIELD(12, 15)
813 #define NPCX_FRGN_WPR                    29
814 #define SAF_PROT_LCK                     31
815 #define NPCX_FRGN_RPR                    30
816 #define NPCX_FLASH_PRTR_HADDR            FIELD(12, 15)
817 #define NPCX_FLASH_TAG_OVR_RPR           FIELD(16, 16)
818 #define NPCX_FLASH_TAG_OVR_WPR           FIELD(0, 16)
819 #define NPCX_FLASH_RPMC_CFG1_CNTR        FIELD(0, 4)
820 #define NPCX_FLASH_RPMC_CFG1_OP1         FIELD(4, 8)
821 #define NPCX_FLASH_RPMC_CFG1_TRGRPMCSUP  FIELD(26, 6)
822 #define NPCX_ONLY_ESPI_REG1_UNLOCK_REG2         0x55
823 #define NPCX_ONLY_ESPI_REG1_LOCK_REG2           0
824 #define NPCX_ONLY_ESPI_REG2_TRANS_END_CONFIG    4
825 
826 /*
827  * Mobile System Wake-Up Control (MSWC) device registers
828  */
829 struct mswc_reg {
830 	/* 0x000: MSWC Control Status 1 */
831 	volatile uint8_t MSWCTL1;
832 	volatile uint8_t reserved1;
833 	/* 0x002: MSWC Control Status 2 */
834 	volatile uint8_t MSWCTL2;
835 	volatile uint8_t reserved2[5];
836 	/* 0x008: Host Configuration Base Address Low */
837 	volatile uint8_t HCBAL;
838 	volatile uint8_t reserved3;
839 	/* 0x00A: Host Configuration Base Address High */
840 	volatile uint8_t HCBAH;
841 	volatile uint8_t reserved4;
842 	/* 0X00C: MSWC INTERRUPT ENABLE 2 */
843 	volatile uint8_t MSIEN2;
844 	volatile uint8_t reserved5;
845 	/* 0x00E: MSWC Host Event Status 0 */
846 	volatile uint8_t MSHES0;
847 	volatile uint8_t reserved6;
848 	/* 0x010: MSWC Host Event Interrupt Enable */
849 	volatile uint8_t MSHEIE0;
850 	volatile uint8_t reserved7;
851 	/* 0x012: Host Control */
852 	volatile uint8_t HOST_CTL;
853 	volatile uint8_t reserved8;
854 	/* 0x014: SMI Pulse Length */
855 	volatile uint8_t SMIP_LEN;
856 	volatile uint8_t reserved9;
857 	/* 0x016: SCI Pulse Length */
858 	volatile uint8_t SCIP_LEN;
859 	volatile uint8_t reserved10[5];
860 	/* 0x01C: SRID Core Access */
861 	volatile uint8_t SRID_CR;
862 	volatile uint8_t reserved11[3];
863 	/* 0x020: SID Core Access */
864 	volatile uint8_t SID_CR;
865 	volatile uint8_t reserved12;
866 	/* 0x022: DEVICE_ID Core Access */
867 	volatile uint8_t DEVICE_ID_CR;
868 	volatile uint8_t reserved13[5];
869 	/* 0x028: Chip Revision Core Access */
870 	volatile uint8_t CHPREV_CR;
871 	volatile uint8_t reserved14[5];
872 	/* 0x02E: Virtual Wire Sleep States */
873 	volatile uint8_t VW_SLPST1;
874 	volatile uint8_t reserved15;
875 };
876 
877 /* MSWC register fields */
878 #define NPCX_MSWCTL1_HRSTOB              0
879 #define NPCS_MSWCTL1_HWPRON              1
880 #define NPCX_MSWCTL1_PLTRST_ACT          2
881 #define NPCX_MSWCTL1_VHCFGA              3
882 #define NPCX_MSWCTL1_HCFGLK              4
883 #define NPCX_MSWCTL1_PWROFFB             6
884 #define NPCX_MSWCTL1_A20MB               7
885 
886 /*
887  * Shared Memory (SHM) device registers
888  */
889 struct shm_reg {
890 	/* 0x000: Shared Memory Core Status */
891 	volatile uint8_t SMC_STS;
892 	/* 0x001: Shared Memory Core Control */
893 	volatile uint8_t SMC_CTL;
894 	/* 0x002: Shared Memory Host Control */
895 	volatile uint8_t SHM_CTL;
896 	volatile uint8_t reserved1[2];
897 	/* 0x005: Indirect Memory Access Window Size */
898 	volatile uint8_t IMA_WIN_SIZE;
899 	volatile uint8_t reserved2;
900 	/* 0x007: Shared Access Windows Size */
901 	volatile uint8_t WIN_SIZE;
902 	/* 0x008: Shared Access Window 1, Semaphore */
903 	volatile uint8_t SHAW1_SEM;
904 	/* 0x009: Shared Access Window 2, Semaphore */
905 	volatile uint8_t SHAW2_SEM;
906 	volatile uint8_t reserved3;
907 	/* 0x00B: Indirect Memory Access, Semaphore */
908 	volatile uint8_t IMA_SEM;
909 	volatile uint8_t reserved4[2];
910 	/* 0x00E: Shared Memory Configuration */
911 	volatile uint16_t SHCFG;
912 	/* 0x010: Shared Access Window 1 Write Protect */
913 	volatile uint8_t WIN1_WR_PROT;
914 	/* 0x011: Shared Access Window 1 Read Protect */
915 	volatile uint8_t WIN1_RD_PROT;
916 	/* 0x012: Shared Access Window 2 Write Protect */
917 	volatile uint8_t WIN2_WR_PROT;
918 	/* 0x013: Shared Access Window 2 Read Protect */
919 	volatile uint8_t WIN2_RD_PROT;
920 	volatile uint8_t reserved5[2];
921 	/* 0x016: Indirect Memory Access Write Protect */
922 	volatile uint8_t IMA_WR_PROT;
923 	/* 0x017: Indirect Memory Access Read Protect */
924 	volatile uint8_t IMA_RD_PROT;
925 	volatile uint8_t reserved6[8];
926 	/* 0x020: Shared Access Window 1 Base */
927 	volatile uint32_t WIN_BASE1;
928 	/* 0x024: Shared Access Window 2 Base */
929 	volatile uint32_t WIN_BASE2;
930 	volatile uint32_t reserved7;
931 	/* 0x02C: Indirect Memory Access Base */
932 	volatile uint32_t IMA_BASE;
933 	volatile uint8_t reserved8[10];
934 	/* 0x03A: Reset Configuration */
935 	volatile uint8_t RST_CFG;
936 	volatile uint8_t reserved9[5];
937 	/* 0x040: Debug Port 80 Buffered Data */
938 	volatile uint16_t DP80BUF;
939 	/* 0x042: Debug Port 80 Status */
940 	volatile uint8_t DP80STS;
941 	volatile uint8_t reserved10;
942 	/* 0x044: Debug Port 80 Control */
943 	volatile uint8_t DP80CTL;
944 	volatile uint8_t reserved11[3];
945 	/* 0x048: Host_Offset in Windows 1, 2 Status */
946 	volatile uint8_t HOFS_STS;
947 	/* 0x049: Host_Offset in Windows 1, 2 Control */
948 	volatile uint8_t HOFS_CTL;
949 	/* 0x04A: Core_Offset in Window 2 Address */
950 	volatile uint16_t COFS2;
951 	/* 0x04C: Core_Offset in Window 1 Address */
952 	volatile uint16_t COFS1;
953 	volatile uint16_t reserved12;
954 };
955 
956 /* SHM register fields */
957 #define NPCX_SMC_STS_HRERR               0
958 #define NPCX_SMC_STS_HWERR               1
959 #define NPCX_SMC_STS_HSEM1W              4
960 #define NPCX_SMC_STS_HSEM2W              5
961 #define NPCX_SMC_STS_SHM_ACC             6
962 #define NPCX_SMC_CTL_HERR_IE             2
963 #define NPCX_SMC_CTL_HSEM1_IE            3
964 #define NPCX_SMC_CTL_HSEM2_IE            4
965 #define NPCX_SMC_CTL_ACC_IE              5
966 #define NPCX_SMC_CTL_PREF_EN             6
967 #define NPCX_SMC_CTL_HOSTWAIT            7
968 #define NPCX_FLASH_SIZE_STALL_HOST       6
969 #define NPCX_FLASH_SIZE_RD_BURST         7
970 #define NPCX_WIN_SIZE_RWIN1_SIZE_FIELD   FIELD(0, 4)
971 #define NPCX_WIN_SIZE_RWIN2_SIZE_FIELD   FIELD(4, 4)
972 #define NPCX_WIN_PROT_RW1L_RP            0
973 #define NPCX_WIN_PROT_RW1L_WP            1
974 #define NPCX_WIN_PROT_RW1H_RP            2
975 #define NPCX_WIN_PROT_RW1H_WP            3
976 #define NPCX_WIN_PROT_RW2L_RP            4
977 #define NPCX_WIN_PROT_RW2L_WP            5
978 #define NPCX_WIN_PROT_RW2H_RP            6
979 #define NPCX_WIN_PROT_RW2H_WP            7
980 #define NPCX_PWIN_SIZEI_RPROT            13
981 #define NPCX_PWIN_SIZEI_WPROT            14
982 #define NPCX_CSEM2                       6
983 #define NPCX_CSEM3                       7
984 #define NPCX_DP80STS_FWR                 5
985 #define NPCX_DP80STS_FNE                 6
986 #define NPCX_DP80STS_FOR                 7
987 #define NPCX_DP80CTL_DP80EN              0
988 #define NPCX_DP80CTL_SYNCEN              1
989 #define NPCX_DP80CTL_ADV                 2
990 #define NPCX_DP80CTL_RAA                 3
991 #define NPCX_DP80CTL_RFIFO               4
992 #define NPCX_DP80CTL_CIEN                5
993 #define NPCX_DP80CTL_DP80_HF_CFG         7
994 #define NPCX_DP80BUF_OFFS_FIELD          FIELD(8, 3)
995 
996 /*
997  * Keyboard and Mouse Controller (KBC) device registers
998  */
999 struct kbc_reg {
1000 	/* 0x000h: Host Interface Control */
1001 	volatile uint8_t HICTRL;
1002 	volatile uint8_t reserved1;
1003 	/* 0x002h: Host Interface IRQ Control */
1004 	volatile uint8_t HIIRQC;
1005 	volatile uint8_t reserved2;
1006 	/* 0x004h: Host Interface Keyboard/Mouse Status */
1007 	volatile uint8_t HIKMST;
1008 	volatile uint8_t reserved3;
1009 	/* 0x006h: Host Interface Keyboard Data Out Buffer */
1010 	volatile uint8_t HIKDO;
1011 	volatile uint8_t reserved4;
1012 	/* 0x008h: Host Interface Mouse Data Out Buffer */
1013 	volatile uint8_t HIMDO;
1014 	volatile uint8_t reserved5;
1015 	/* 0x00Ah: Host Interface Keyboard/Mouse Data In Buffer */
1016 	volatile uint8_t HIKMDI;
1017 	/* 0x00Bh: Host Interface Keyboard/Mouse Shadow Data In Buffer */
1018 	volatile uint8_t SHIKMDI;
1019 };
1020 
1021 /* KBC register field */
1022 #define NPCX_HICTRL_OBFKIE               0
1023 #define NPCX_HICTRL_OBFMIE               1
1024 #define NPCX_HICTRL_OBECIE               2
1025 #define NPCX_HICTRL_IBFCIE               3
1026 #define NPCX_HICTRL_PMIHIE               4
1027 #define NPCX_HICTRL_PMIOCIE              5
1028 #define NPCX_HICTRL_PMICIE               6
1029 #define NPCX_HICTRL_FW_OBF               7
1030 #define NPCX_HIKMST_OBF                  0
1031 #define NPCX_HIKMST_IBF                  1
1032 #define NPCX_HIKMST_F0                   2
1033 #define NPCX_HIKMST_A2                   3
1034 #define NPCX_HIKMST_ST0                  4
1035 #define NPCX_HIKMST_ST1                  5
1036 #define NPCX_HIKMST_ST2                  6
1037 #define NPCX_HIKMST_ST3                  7
1038 
1039 /*
1040  * Power Management Channel (PMCH) device registers
1041  */
1042 
1043 struct pmch_reg {
1044 	/* 0x000: Host Interface PM Status */
1045 	volatile uint8_t HIPMST;
1046 	volatile uint8_t reserved1;
1047 	/* 0x002: Host Interface PM Data Out Buffer */
1048 	volatile uint8_t HIPMDO;
1049 	volatile uint8_t reserved2;
1050 	/* 0x004: Host Interface PM Data In Buffer */
1051 	volatile uint8_t HIPMDI;
1052 	/* 0x005: Host Interface PM Shadow Data In Buffer */
1053 	volatile uint8_t SHIPMDI;
1054 	/* 0x006: Host Interface PM Data Out Buffer with SCI */
1055 	volatile uint8_t HIPMDOC;
1056 	volatile uint8_t reserved3;
1057 	/* 0x008: Host Interface PM Data Out Buffer with SMI */
1058 	volatile uint8_t HIPMDOM;
1059 	volatile uint8_t reserved4;
1060 	/* 0x00A: Host Interface PM Data In Buffer with SCI */
1061 	volatile uint8_t HIPMDIC;
1062 	volatile uint8_t reserved5;
1063 	/* 0x00C: Host Interface PM Control */
1064 	volatile uint8_t HIPMCTL;
1065 	/* 0x00D: Host Interface PM Control 2 */
1066 	volatile uint8_t HIPMCTL2;
1067 	/* 0x00E: Host Interface PM Interrupt Control */
1068 	volatile uint8_t HIPMIC;
1069 	volatile uint8_t reserved6;
1070 	/* 0x010: Host Interface PM Interrupt Enable */
1071 	volatile uint8_t HIPMIE;
1072 	volatile uint8_t reserved7;
1073 };
1074 
1075 /* PMCH register field */
1076 #define NPCX_HIPMIE_SCIE                 1
1077 #define NPCX_HIPMIE_SMIE                 2
1078 #define NPCX_HIPMCTL_IBFIE               0
1079 #define NPCX_HIPMCTL_OBEIE               1
1080 #define NPCX_HIPMCTL_SCIPOL              6
1081 #define NPCX_HIPMST_OBF                  0
1082 #define NPCX_HIPMST_IBF                  1
1083 #define NPCX_HIPMST_F0                   2
1084 #define NPCX_HIPMST_CMD                  3
1085 #define NPCX_HIPMST_ST0                  4
1086 #define NPCX_HIPMST_ST1                  5
1087 #define NPCX_HIPMST_ST2                  6
1088 #define NPCX_HIPMIC_SMIB                 1
1089 #define NPCX_HIPMIC_SCIB                 2
1090 #define NPCX_HIPMIC_SMIPOL               6
1091 
1092 /*
1093  * Core Access to Host (C2H) device registers
1094  */
1095 struct c2h_reg {
1096 	/* 0x000: Indirect Host I/O Address */
1097 	volatile uint16_t IHIOA;
1098 	/* 0x002: Indirect Host Data */
1099 	volatile uint8_t IHD;
1100 	volatile uint8_t reserved1;
1101 	/* 0x004: Lock Host Access */
1102 	volatile uint16_t LKSIOHA;
1103 	/* 0x006: Access Lock Violation */
1104 	volatile uint16_t SIOLV;
1105 	/* 0x008: Core-to-Host Modules Access Enable */
1106 	volatile uint16_t CRSMAE;
1107 	/* 0x00A: Module Control */
1108 	volatile uint8_t SIBCTRL;
1109 	volatile uint8_t reserved3;
1110 };
1111 
1112 /* C2H register fields */
1113 #define NPCX_LKSIOHA_LKCFG               0
1114 #define NPCX_LKSIOHA_LKSPHA              2
1115 #define NPCX_LKSIOHA_LKHIKBD             11
1116 #define NPCX_CRSMAE_CFGAE                0
1117 #define NPCX_CRSMAE_HIKBDAE              11
1118 #define NPCX_SIOLV_SPLV                  2
1119 #define NPCX_SIBCTRL_CSAE                0
1120 #define NPCX_SIBCTRL_CSRD                1
1121 #define NPCX_SIBCTRL_CSWR                2
1122 
1123 /*
1124  * SMBUS (SMB) device registers
1125  */
1126 struct smb_reg {
1127 	/* 0x000: SMB Serial Data */
1128 	volatile uint8_t SMBSDA;
1129 	volatile uint8_t reserved1;
1130 	/* 0x002: SMB Status */
1131 	volatile uint8_t SMBST;
1132 	volatile uint8_t reserved2;
1133 	/* 0x004: SMB Control Status */
1134 	volatile uint8_t SMBCST;
1135 	volatile uint8_t reserved3;
1136 	/* 0x006: SMB Control 1 */
1137 	volatile uint8_t SMBCTL1;
1138 	volatile uint8_t reserved4;
1139 	/* 0x008: SMB Own Address */
1140 	volatile uint8_t SMBADDR1;
1141 	volatile uint8_t reserved5;
1142 	/* 0x00A: SMB Control 2 */
1143 	volatile uint8_t SMBCTL2;
1144 	volatile uint8_t reserved6;
1145 	/* 0x00C: SMB Own Address */
1146 	volatile uint8_t SMBADDR2;
1147 	volatile uint8_t reserved7;
1148 	/* 0x00E: SMB Control 3 */
1149 	volatile uint8_t SMBCTL3;
1150 	/* 0x00F: SMB Bus Timeout */
1151 	volatile uint8_t SMBT_OUT;
1152 	union {
1153 		/* Bank 0 */
1154 		struct {
1155 			/* 0x010: SMB Own Address 3 */
1156 			volatile uint8_t SMBADDR3;
1157 			/* 0x011: SMB Own Address 7 */
1158 			volatile uint8_t SMBADDR7;
1159 			/* 0x012: SMB Own Address 4 */
1160 			volatile uint8_t SMBADDR4;
1161 			/* 0x013: SMB Own Address 8 */
1162 			volatile uint8_t SMBADDR8;
1163 			/* 0x014: SMB Own Address 5 */
1164 			volatile uint8_t SMBADDR5;
1165 			volatile uint8_t reserved8;
1166 			/* 0x016: SMB Own Address 6 */
1167 			volatile uint8_t SMBADDR6;
1168 			volatile uint8_t reserved9;
1169 			/* 0x018: SMB Control Status 2 */
1170 			volatile uint8_t SMBCST2;
1171 			/* 0x019: SMB Control Status 3 */
1172 			volatile uint8_t SMBCST3;
1173 			/* 0x01A: SMB Control 4 */
1174 			volatile uint8_t SMBCTL4;
1175 			volatile uint8_t reserved10;
1176 			/* 0x01C: SMB SCL Low Time */
1177 			volatile uint8_t SMBSCLLT;
1178 			/* 0x01D: SMB FIFO Control */
1179 			volatile uint8_t SMBFIF_CTL;
1180 			/* 0x01E: SMB SCL High Time */
1181 			volatile uint8_t SMBSCLHT;
1182 			volatile uint8_t reserved11;
1183 		};
1184 		/* Bank 1 */
1185 		struct {
1186 			/* 0x010: SMB FIFO Control */
1187 			volatile uint8_t SMBFIF_CTS;
1188 			volatile uint8_t reserved12;
1189 			/* 0x012: SMB Tx-FIFO Control */
1190 			volatile uint8_t SMBTXF_CTL;
1191 			volatile uint8_t reserved13;
1192 			/* 0x014: SMB Bus Timeout */
1193 			volatile uint8_t SMB_T_OUT;
1194 			volatile uint8_t reserved14[3];
1195 			/* 0x018: SMB Control Status 2 (FIFO) */
1196 			volatile uint8_t SMBCST2_FIFO;
1197 			/* 0x019: SMB Control Status 3 (FIFO) */
1198 			volatile uint8_t SMBCST3_FIFO;
1199 			/* 0x01A: SMB Tx-FIFO Status */
1200 			volatile uint8_t SMBTXF_STS;
1201 			volatile uint8_t reserved15;
1202 			/* 0x01C: SMB Rx-FIFO Status */
1203 			volatile uint8_t SMBRXF_STS;
1204 			volatile uint8_t reserved16;
1205 			/* 0x01E: SMB Rx-FIFO Control */
1206 			volatile uint8_t SMBRXF_CTL;
1207 			volatile uint8_t reserved17[1];
1208 		};
1209 	};
1210 };
1211 
1212 /* SMB register fields */
1213 #define NPCX_SMBST_XMIT                  0
1214 #define NPCX_SMBST_MASTER                1
1215 #define NPCX_SMBST_NMATCH                2
1216 #define NPCX_SMBST_STASTR                3
1217 #define NPCX_SMBST_NEGACK                4
1218 #define NPCX_SMBST_BER                   5
1219 #define NPCX_SMBST_SDAST                 6
1220 #define NPCX_SMBST_SLVSTP                7
1221 #define NPCX_SMBCST_BUSY                 0
1222 #define NPCX_SMBCST_BB                   1
1223 #define NPCX_SMBCST_MATCH                2
1224 #define NPCX_SMBCST_GCMATCH              3
1225 #define NPCX_SMBCST_TSDA                 4
1226 #define NPCX_SMBCST_TGSCL                5
1227 #define NPCX_SMBCST_MATCHAF              6
1228 #define NPCX_SMBCST_ARPMATCH             7
1229 #define NPCX_SMBCST2_MATCHA1F            0
1230 #define NPCX_SMBCST2_MATCHA2F            1
1231 #define NPCX_SMBCST2_MATCHA3F            2
1232 #define NPCX_SMBCST2_MATCHA4F            3
1233 #define NPCX_SMBCST2_MATCHA5F            4
1234 #define NPCX_SMBCST2_MATCHA6F            5
1235 #define NPCX_SMBCST2_MATCHA7F            6
1236 #define NPCX_SMBCST2_INTSTS              7
1237 #define NPCX_SMBCST3_MATCHA8F            0
1238 #define NPCX_SMBCST3_MATCHA9F            1
1239 #define NPCX_SMBCST3_MATCHA10F           2
1240 #define NPCX_SMBCTL1_START               0
1241 #define NPCX_SMBCTL1_STOP                1
1242 #define NPCX_SMBCTL1_INTEN               2
1243 #define NPCX_SMBCTL1_ACK                 4
1244 #define NPCX_SMBCTL1_GCMEN               5
1245 #define NPCX_SMBCTL1_NMINTE              6
1246 #define NPCX_SMBCTL1_STASTRE             7
1247 #define NPCX_SMBCTL2_ENABLE              0
1248 #define NPCX_SMBCTL2_SCLFRQ0_6_FIELD     FIELD(1, 7)
1249 #define NPCX_SMBCTL3_ARPMEN              2
1250 #define NPCX_SMBCTL3_SCLFRQ7_8_FIELD     FIELD(0, 2)
1251 #define NPCX_SMBCTL3_IDL_START           3
1252 #define NPCX_SMBCTL3_400K                4
1253 #define NPCX_SMBCTL3_BNK_SEL             5
1254 #define NPCX_SMBCTL3_SDA_LVL             6
1255 #define NPCX_SMBCTL3_SCL_LVL             7
1256 #define NPCX_SMBCTL4_HLDT_FIELD          FIELD(0, 6)
1257 #define NPCX_SMBCTL4_LVL_WE              7
1258 #define NPCX_SMBADDR1_SAEN               7
1259 #define NPCX_SMBADDR2_SAEN               7
1260 #define NPCX_SMBADDR3_SAEN               7
1261 #define NPCX_SMBADDR4_SAEN               7
1262 #define NPCX_SMBADDR5_SAEN               7
1263 #define NPCX_SMBADDR6_SAEN               7
1264 #define NPCX_SMBADDR7_SAEN               7
1265 #define NPCX_SMBADDR8_SAEN               7
1266 #define NPCX_SMBSEL_SMB4SEL              4
1267 #define NPCX_SMBSEL_SMB5SEL              5
1268 #define NPCX_SMBSEL_SMB6SEL              6
1269 #define NPCX_SMBFIF_CTS_RXF_TXE          1
1270 #define NPCX_SMBFIF_CTS_CLR_FIFO         6
1271 #define NPCX_SMBFIF_CTL_FIFO_EN          4
1272 #define NPCX_SMBRXF_STS_RX_THST          6
1273 
1274 /* RX FIFO threshold */
1275 #define NPCX_SMBRXF_CTL_RX_THR           FIELD(0, 6)
1276 #define NPCX_SMBRXF_CTL_LAST             7
1277 
1278 /*
1279  * Internal 32-bit Timer (ITIM32) device registers
1280  */
1281 struct itim32_reg {
1282 	volatile uint8_t reserved1;
1283 	/* 0x001: Internal 32-bit Timer Prescaler */
1284 	volatile uint8_t ITPRE32;
1285 	volatile uint8_t reserved2[2];
1286 	/* 0x004: Internal 32-bit Timer Control and Status */
1287 	volatile uint8_t ITCTS32;
1288 	volatile uint8_t reserved3[3];
1289 	/* 0x008: Internal 32-Bit Timer Counter */
1290 	volatile uint32_t ITCNT32;
1291 };
1292 
1293 /*
1294  * Internal 64-bit Timer (ITIM54) device registers
1295  */
1296 struct itim64_reg {
1297 	volatile uint8_t reserved1;
1298 	/* 0x001: Internal 64-bit Timer Prescaler */
1299 	volatile uint8_t ITPRE64;
1300 	volatile uint8_t reserved2[2];
1301 	/* 0x004: Internal 64-bit Timer Control and Status */
1302 	volatile uint8_t ITCTS64;
1303 	volatile uint8_t reserved3[3];
1304 	/* 0x008: Internal 32-Bit Timer Counter */
1305 	volatile uint32_t ITCNT64L;
1306 	/* 0x00C: Internal 32-Bit Timer Counter */
1307 	volatile uint32_t ITCNT64H;
1308 };
1309 
1310 /* ITIM register fields */
1311 #define NPCX_ITCTSXX_TO_STS              0
1312 #define NPCX_ITCTSXX_TO_IE               2
1313 #define NPCX_ITCTSXX_TO_WUE              3
1314 #define NPCX_ITCTSXX_CKSEL               4
1315 #define NPCX_ITCTSXX_ITEN                7
1316 
1317 /*
1318  * Tachometer (TACH) Sensor device registers
1319  */
1320 struct tach_reg {
1321 	/* 0x000: Timer/Counter 1 */
1322 	volatile uint16_t TCNT1;
1323 	/* 0x002: Reload/Capture A */
1324 	volatile uint16_t TCRA;
1325 	/* 0x004: Reload/Capture B */
1326 	volatile uint16_t TCRB;
1327 	/* 0x006: Timer/Counter 2 */
1328 	volatile uint16_t TCNT2;
1329 	/* 0x008: Clock Prescaler */
1330 	volatile uint8_t TPRSC;
1331 	volatile uint8_t reserved1;
1332 	/* 0x00A: Clock Unit Control */
1333 	volatile uint8_t TCKC;
1334 	volatile uint8_t reserved2;
1335 	/* 0x00C: Timer Mode Control */
1336 	volatile uint8_t TMCTRL;
1337 	volatile uint8_t reserved3;
1338 	/* 0x00E: Timer Event Control */
1339 	volatile uint8_t TECTRL;
1340 	volatile uint8_t reserved4;
1341 	/* 0x010: Timer Event Clear */
1342 	volatile uint8_t TECLR;
1343 	volatile uint8_t reserved5;
1344 	/* 0x012: Timer Interrupt Enable */
1345 	volatile uint8_t TIEN;
1346 	volatile uint8_t reserved6;
1347 	/* 0x014: Compare A */
1348 	volatile uint16_t TCPA;
1349 	/* 0x016: Compare B */
1350 	volatile uint16_t TCPB;
1351 	/* 0x018: Compare Configuration */
1352 	volatile uint8_t TCPCFG;
1353 	volatile uint8_t reserved7;
1354 	/* 0x01A: Timer Wake-Up Enable */
1355 	volatile uint8_t TWUEN;
1356 	volatile uint8_t reserved8;
1357 	/* 0x01C: Timer Configuration */
1358 	volatile uint8_t TCFG;
1359 	volatile uint8_t reserved9;
1360 };
1361 
1362 /* TACH register fields */
1363 #define NPCX_TCKC_LOW_PWR                7
1364 #define NPCX_TCKC_PLS_ACC_CLK            6
1365 #define NPCX_TCKC_C1CSEL_FIELD           FIELD(0, 3)
1366 #define NPCX_TCKC_C2CSEL_FIELD           FIELD(3, 3)
1367 #define NPCX_TMCTRL_MDSEL_FIELD          FIELD(0, 3)
1368 #define NPCX_TMCTRL_TAEN                 5
1369 #define NPCX_TMCTRL_TBEN                 6
1370 #define NPCX_TMCTRL_TAEDG                3
1371 #define NPCX_TMCTRL_TBEDG                4
1372 #define NPCX_TCFG_TADBEN                 6
1373 #define NPCX_TCFG_TBDBEN                 7
1374 #define NPCX_TECTRL_TAPND                0
1375 #define NPCX_TECTRL_TBPND                1
1376 #define NPCX_TECTRL_TCPND                2
1377 #define NPCX_TECTRL_TDPND                3
1378 #define NPCX_TECLR_TACLR                 0
1379 #define NPCX_TECLR_TBCLR                 1
1380 #define NPCX_TECLR_TCCLR                 2
1381 #define NPCX_TECLR_TDCLR                 3
1382 #define NPCX_TIEN_TAIEN                  0
1383 #define NPCX_TIEN_TBIEN                  1
1384 #define NPCX_TIEN_TCIEN                  2
1385 #define NPCX_TIEN_TDIEN                  3
1386 #define NPCX_TWUEN_TAWEN                 0
1387 #define NPCX_TWUEN_TBWEN                 1
1388 #define NPCX_TWUEN_TCWEN                 2
1389 #define NPCX_TWUEN_TDWEN                 3
1390 
1391 /* Debug Interface registers */
1392 struct dbg_reg {
1393 	/* 0x000: Debug Control */
1394 	volatile uint8_t DBGCTRL;
1395 	volatile uint8_t reserved1;
1396 	/* 0x002: Debug Freeze Enable 1 */
1397 	volatile uint8_t DBGFRZEN1;
1398 	/* 0x003: Debug Freeze Enable 2 */
1399 	volatile uint8_t DBGFRZEN2;
1400 	/* 0x004: Debug Freeze Enable 3 */
1401 	volatile uint8_t DBGFRZEN3;
1402 	/* 0x005: Debug Freeze Enable 4 */
1403 	volatile uint8_t DBGFRZEN4;
1404 };
1405 /* Debug Interface registers fields */
1406 #define NPCX_DBGFRZEN3_GLBL_FRZ_DIS      7
1407 
1408 /* PS/2 Interface registers */
1409 struct ps2_reg {
1410 	/* 0x000: PS/2 Data */
1411 	volatile uint8_t PSDAT;
1412 	volatile uint8_t reserved1;
1413 	/* 0x002: PS/2 Status */
1414 	volatile uint8_t PSTAT;
1415 	volatile uint8_t reserved2;
1416 	/* 0x004: PS/2 Control */
1417 	volatile uint8_t PSCON;
1418 	volatile uint8_t reserved3;
1419 	/* 0x006: PS/2 Output Signal */
1420 	volatile uint8_t PSOSIG;
1421 	volatile uint8_t reserved4;
1422 	/* 0x008: PS/2 Input Signal */
1423 	volatile uint8_t PSISIG;
1424 	volatile uint8_t reserved5;
1425 	/* 0x00A: PS/2 Interrupt Enable */
1426 	volatile uint8_t PSIEN;
1427 	volatile uint8_t reserved6;
1428 };
1429 
1430 /* PS/2 Interface registers fields */
1431 #define NPCX_PSTAT_SOT                   0
1432 #define NPCX_PSTAT_EOT                   1
1433 #define NPCX_PSTAT_PERR                  2
1434 #define NPCX_PSTAT_ACH                   FIELD(3, 3)
1435 #define NPCX_PSTAT_RFERR                 6
1436 
1437 #define NPCX_PSCON_EN                    0
1438 #define NPCX_PSCON_XMT                   1
1439 #define NPCX_PSCON_HDRV                  FIELD(2, 2)
1440 #define NPCX_PSCON_IDB                   FIELD(4, 3)
1441 #define NPCX_PSCON_WPUED                 7
1442 
1443 #define NPCX_PSOSIG_WDAT0                0
1444 #define NPCX_PSOSIG_WDAT1                1
1445 #define NPCX_PSOSIG_WDAT2                2
1446 #define NPCX_PSOSIG_CLK0                 3
1447 #define NPCX_PSOSIG_CLK1                 4
1448 #define NPCX_PSOSIG_CLK2                 5
1449 #define NPCX_PSOSIG_WDAT3                6
1450 #define NPCX_PSOSIG_CLK3                 7
1451 #define NPCX_PSOSIG_CLK(n)               (((n) < 3) ? ((n) + 3) : 7)
1452 #define NPCX_PSOSIG_WDAT(n)              (((n) < 3) ? ((n) + 0) : 6)
1453 #define NPCX_PSOSIG_CLK_MASK_ALL \
1454 					 (BIT(NPCX_PSOSIG_CLK0) | \
1455 					  BIT(NPCX_PSOSIG_CLK1) | \
1456 					  BIT(NPCX_PSOSIG_CLK2) | \
1457 					  BIT(NPCX_PSOSIG_CLK3))
1458 
1459 #define NPCX_PSIEN_SOTIE                 0
1460 #define NPCX_PSIEN_EOTIE                 1
1461 #define NPCX_PSIEN_PS2_WUE               4
1462 #define NPCX_PSIEN_PS2_CLK_SEL           7
1463 
1464 /* Flash Interface Unit (FIU) device registers */
1465 struct fiu_reg {
1466 	volatile uint8_t reserved1;
1467 	/* 0x001: Burst Configuration */
1468 	volatile uint8_t BURST_CFG;
1469 	/* 0x002: FIU Response Configuration */
1470 	volatile uint8_t RESP_CFG;
1471 	volatile uint8_t reserved2[17];
1472 	/* 0x014: SPI Flash Configuration */
1473 	volatile uint8_t SPI_FL_CFG;
1474 	volatile uint8_t reserved3;
1475 	/* 0x016: UMA Code Byte */
1476 	volatile uint8_t UMA_CODE;
1477 	/* 0x017: UMA Address Byte 0 */
1478 	volatile uint8_t UMA_AB0;
1479 	/* 0x018: UMA Address Byte 1 */
1480 	volatile uint8_t UMA_AB1;
1481 	/* 0x019: UMA Address Byte 2 */
1482 	volatile uint8_t UMA_AB2;
1483 	/* 0x01A: UMA Data Byte 0 */
1484 	volatile uint8_t UMA_DB0;
1485 	/* 0x01B: UMA Data Byte 1 */
1486 	volatile uint8_t UMA_DB1;
1487 	/* 0x01C: UMA Data Byte 2 */
1488 	volatile uint8_t UMA_DB2;
1489 	/* 0x01D: UMA Data Byte 3 */
1490 	volatile uint8_t UMA_DB3;
1491 	/* 0x01E: UMA Control and Status */
1492 	volatile uint8_t UMA_CTS;
1493 	/* 0x01F: UMA Extended Control and Status */
1494 	volatile uint8_t UMA_ECTS;
1495 	/* 0x020: UMA Data Bytes 0-3 */
1496 	volatile uint32_t UMA_DB0_3;
1497 	volatile uint8_t reserved4[2];
1498 	/* 0x026: CRC Control Register */
1499 	volatile uint8_t CRCCON;
1500 	/* 0x027: CRC Entry Register */
1501 	volatile uint8_t CRCENT;
1502 	/* 0x028: CRC Initialization and Result Register */
1503 	volatile uint32_t CRCRSLT;
1504 	volatile uint8_t reserved5[4];
1505 	/* 0x030: FIU Read Command */
1506 	volatile uint8_t FIU_RD_CMD;
1507 	volatile uint8_t reserved6;
1508 	/* 0x032: FIU Dummy Cycles */
1509 	volatile uint8_t FIU_DMM_CYC;
1510 	/* 0x033: FIU Extended Configuration */
1511 	volatile uint8_t FIU_EXT_CFG;
1512 #if defined(CONFIG_SOC_SERIES_NPCX9)
1513 	/* 0x034: UMA address byte 0-3 */
1514 	volatile uint32_t UMA_AB0_3;
1515 	/* 0x038-0x3C */
1516 	volatile uint8_t reserved8[5];
1517 	/* 0x03D: SPI Device */
1518 	volatile uint8_t SPI1_DEV;
1519 	/* 0x03E-0x3F */
1520 	volatile uint8_t reserved9[2];
1521 #elif defined(CONFIG_SOC_SERIES_NPCX4)
1522 	/* 0x034: UMA address byte 0-3 */
1523 	volatile uint32_t UMA_AB0_3;
1524 	/* 0x038-0x3B */
1525 	volatile uint8_t reserved8[4];
1526 	/* 0x03C: SPI Device */
1527 	volatile uint8_t SPI_DEV;
1528 	/* 0x03D */
1529 	volatile uint8_t reserved9;
1530 	/* 0x03E */
1531 	volatile uint8_t SPI_DEV_SIZE;
1532 	/* 0x03F */
1533 	volatile uint8_t reserved10;
1534 #endif
1535 };
1536 
1537 /* FIU register fields */
1538 #define NPCX_BURST_CFG_SPI_DEV_SEL       FIELD(4, 2)
1539 #define NPCX_RESP_CFG_IAD_EN             0
1540 #define NPCX_RESP_CFG_DEV_SIZE_EX        2
1541 #define NPCX_RESP_CFG_QUAD_EN            3
1542 #define NPCX_SPI_FL_CFG_RD_MODE          FIELD(6, 2)
1543 #define NPCX_UMA_CTS_A_SIZE              3
1544 #define NPCX_UMA_CTS_C_SIZE              4
1545 #define NPCX_UMA_CTS_RD_WR               5
1546 #define NPCX_UMA_CTS_DEV_NUM             6
1547 #define NPCX_UMA_CTS_EXEC_DONE           7
1548 #define NPCX_UMA_ECTS_SW_CS0             0
1549 #define NPCX_UMA_ECTS_SW_CS1             1
1550 #define NPCX_UMA_ECTS_SEC_CS             2
1551 #define NPCX_UMA_ECTS_UMA_LOCK           3
1552 #define NPCX_UMA_ECTS_UMA_ADDR_SIZE      FIELD(4, 3)
1553 #define NPCX_SPI1_DEV_FOUR_BADDR_CS10    6
1554 #define NPCX_SPI1_DEV_FOUR_BADDR_CS11    7
1555 #define NPCX_SPI1_DEV_SPI1_LO_DEV_SIZE   FIELD(0, 4)
1556 #define NPCX_FIU_EXT_CFG_SET_DMM_EN      2
1557 #define NPCX_FIU_EXT_CFG_SET_CMD_EN      1
1558 #define NPCX_SPI_DEV_NADDRB              FIELD(5, 3)
1559 
1560 #define NPCX_MSR_IE_CFG_UMA_BLOCK        3
1561 
1562 /* UMA fields selections */
1563 #define UMA_FLD_ADDR     BIT(NPCX_UMA_CTS_A_SIZE)  /* 3-bytes ADR field */
1564 #define UMA_FLD_NO_CMD   BIT(NPCX_UMA_CTS_C_SIZE)  /* No 1-Byte CMD field */
1565 #define UMA_FLD_WRITE    BIT(NPCX_UMA_CTS_RD_WR)   /* Write transaction */
1566 #define UMA_FLD_SHD_SL   BIT(NPCX_UMA_CTS_DEV_NUM) /* Shared flash selected */
1567 #define UMA_FLD_EXEC     BIT(NPCX_UMA_CTS_EXEC_DONE)
1568 
1569 #define UMA_FIELD_DATA_1 0x01
1570 #define UMA_FIELD_DATA_2 0x02
1571 #define UMA_FIELD_DATA_3 0x03
1572 #define UMA_FIELD_DATA_4 0x04
1573 
1574 /* UMA code for transaction */
1575 #define UMA_CODE_CMD_ONLY       (UMA_FLD_EXEC | UMA_FLD_SHD_SL)
1576 #define UMA_CODE_CMD_ADR        (UMA_FLD_EXEC | UMA_FLD_ADDR | \
1577 					UMA_FLD_SHD_SL)
1578 #define UMA_CODE_CMD_RD_BYTE(n) (UMA_FLD_EXEC | UMA_FIELD_DATA_##n | \
1579 					UMA_FLD_SHD_SL)
1580 #define UMA_CODE_RD_BYTE(n)     (UMA_FLD_EXEC | UMA_FLD_NO_CMD | \
1581 					UMA_FIELD_DATA_##n | UMA_FLD_SHD_SL)
1582 #define UMA_CODE_CMD_WR_ONLY    (UMA_FLD_EXEC | UMA_FLD_WRITE | \
1583 					UMA_FLD_SHD_SL)
1584 #define UMA_CODE_CMD_WR_BYTE(n) (UMA_FLD_EXEC | UMA_FLD_WRITE | \
1585 					UMA_FIELD_DATA_##n | UMA_FLD_SHD_SL)
1586 #define UMA_CODE_CMD_WR_ADR     (UMA_FLD_EXEC | UMA_FLD_WRITE | UMA_FLD_ADDR | \
1587 				UMA_FLD_SHD_SL)
1588 
1589 #define UMA_CODE_CMD_ADR_WR_BYTE(n) (UMA_FLD_EXEC | UMA_FLD_WRITE | \
1590 					UMA_FLD_ADDR | UMA_FIELD_DATA_##n | \
1591 					UMA_FLD_SHD_SL)
1592 
1593 /* Platform Environment Control Interface (PECI) device registers */
1594 struct peci_reg {
1595 	/* 0x000: PECI Control Status */
1596 	volatile uint8_t PECI_CTL_STS;
1597 	/* 0x001: PECI Read Length */
1598 	volatile uint8_t PECI_RD_LENGTH;
1599 	/* 0x002: PECI Address */
1600 	volatile uint8_t PECI_ADDR;
1601 	/* 0x003: PECI Command */
1602 	volatile uint8_t PECI_CMD;
1603 	/* 0x004: PECI Control 2 */
1604 	volatile uint8_t PECI_CTL2;
1605 	/* 0x005: PECI Index */
1606 	volatile uint8_t PECI_INDEX;
1607 	/* 0x006: PECI Index Data */
1608 	volatile uint8_t PECI_IDATA;
1609 	/* 0x007: PECI Write Length */
1610 	volatile uint8_t PECI_WR_LENGTH;
1611 	volatile uint8_t reserved1[3];
1612 	/* 0x00B: PECI Write FCS */
1613 	volatile uint8_t PECI_WR_FCS;
1614 	/* 0x00C: PECI Read FCS */
1615 	volatile uint8_t PECI_RD_FCS;
1616 	/* 0x00D: PECI Assured Write FCS */
1617 	volatile uint8_t PECI_AW_FCS;
1618 	volatile uint8_t reserved2;
1619 	/* 0x00F: PECI Transfer Rate */
1620 	volatile uint8_t PECI_RATE;
1621 	/* 0x010 - 0x04F: PECI Data In/Out */
1622 	union {
1623 		volatile uint8_t PECI_DATA_IN[64];
1624 		volatile uint8_t PECI_DATA_OUT[64];
1625 	};
1626 };
1627 
1628 /* PECI register fields */
1629 #define NPCX_PECI_CTL_STS_START_BUSY     0
1630 #define NPCX_PECI_CTL_STS_DONE           1
1631 #define NPCX_PECI_CTL_STS_CRC_ERR        3
1632 #define NPCX_PECI_CTL_STS_ABRT_ERR       4
1633 #define NPCX_PECI_CTL_STS_AWFCS_EB       5
1634 #define NPCX_PECI_CTL_STS_DONE_EN        6
1635 #define NPCX_PECI_RATE_MAX_BIT_RATE      FIELD(0, 5)
1636 #define NPCX_PECI_RATE_MAX_BIT_RATE_MASK 0x1F
1637 /* The minimal valid value of NPCX_PECI_RATE_MAX_BIT_RATE field */
1638 #define PECI_MAX_BIT_RATE_VALID_MIN      0x05
1639 #define PECI_HIGH_SPEED_MIN_VAL          0x07
1640 
1641 #define NPCX_PECI_RATE_EHSP              6
1642 
1643 /* KBS (Keyboard Scan) device registers */
1644 struct kbs_reg {
1645 	volatile uint8_t reserved1[4];
1646 	/* 0x004: Keyboard Scan In */
1647 	volatile uint8_t KBSIN;
1648 	/* 0x005: Keyboard Scan In Pull-Up Enable */
1649 	volatile uint8_t KBSINPU;
1650 	/* 0x006: Keyboard Scan Out 0 */
1651 	volatile uint16_t KBSOUT0;
1652 	/* 0x008: Keyboard Scan Out 1 */
1653 	volatile uint16_t KBSOUT1;
1654 	/* 0x00A: Keyboard Scan Buffer Index */
1655 	volatile uint8_t KBS_BUF_INDX;
1656 	/* 0x00B: Keyboard Scan Buffer Data */
1657 	volatile uint8_t KBS_BUF_DATA;
1658 	/* 0x00C: Keyboard Scan Event */
1659 	volatile uint8_t KBSEVT;
1660 	/* 0x00D: Keyboard Scan Control */
1661 	volatile uint8_t KBSCTL;
1662 	/* 0x00E: Keyboard Scan Configuration Index */
1663 	volatile uint8_t KBS_CFG_INDX;
1664 	/* 0x00F: Keyboard Scan Configuration Data */
1665 	volatile uint8_t KBS_CFG_DATA;
1666 };
1667 
1668 /* KBS register fields */
1669 #define NPCX_KBSBUFINDX                  0
1670 #define NPCX_KBSEVT_KBSDONE              0
1671 #define NPCX_KBSEVT_KBSERR               1
1672 #define NPCX_KBSCTL_START                0
1673 #define NPCX_KBSCTL_KBSMODE              1
1674 #define NPCX_KBSCTL_KBSIEN               2
1675 #define NPCX_KBSCTL_KBSINC               3
1676 #define NPCX_KBSCTL_KBHDRV_FIELD         FIELD(6, 2)
1677 #define NPCX_KBSCFGINDX                  0
1678 /* Index of 'Automatic Scan' configuration register */
1679 #define KBS_CFG_INDX_DLY1                0 /* Keyboard Scan Delay T1 Byte */
1680 #define KBS_CFG_INDX_DLY2                1 /* Keyboard Scan Delay T2 Byte */
1681 #define KBS_CFG_INDX_RTYTO               2 /* Keyboard Scan Retry Timeout */
1682 #define KBS_CFG_INDX_CNUM                3 /* Keyboard Scan Columns Number */
1683 #define KBS_CFG_INDX_CDIV                4 /* Keyboard Scan Clock Divisor */
1684 
1685 /* SHI (Serial Host Interface) registers */
1686 struct shi_reg {
1687 	volatile uint8_t reserved1;
1688 	/* 0x001: SHI Configuration 1 */
1689 	volatile uint8_t SHICFG1;
1690 	/* 0x002: SHI Configuration 2 */
1691 	volatile uint8_t SHICFG2;
1692 	volatile uint8_t reserved2[2];
1693 	/* 0x005: Event Enable */
1694 	volatile uint8_t EVENABLE;
1695 	/* 0x006: Event Status */
1696 	volatile uint8_t EVSTAT;
1697 	/* 0x007: SHI Capabilities */
1698 	volatile uint8_t CAPABILITY;
1699 	/* 0x008: Status */
1700 	volatile uint8_t STATUS;
1701 	volatile uint8_t reserved3;
1702 	/* 0x00A: Input Buffer Status */
1703 	volatile uint8_t IBUFSTAT;
1704 	/* 0x00B: Output Buffer Status */
1705 	volatile uint8_t OBUFSTAT;
1706 	/* 0x00C: SHI Configuration 3 */
1707 	volatile uint8_t SHICFG3;
1708 	/* 0x00D: SHI Configuration 4 */
1709 	volatile uint8_t SHICFG4;
1710 	/* 0x00E: SHI Configuration 5 */
1711 	volatile uint8_t SHICFG5;
1712 	/* 0x00F: Event Status 2 */
1713 	volatile uint8_t EVSTAT2;
1714 	/* 0x010: Event Enable 2 */
1715 	volatile uint8_t EVENABLE2;
1716 	/* 0x011: SHI Configuration 6 - only in chips which support enhanced buffer mode */
1717 	volatile uint8_t SHICFG6;
1718 	/* 0x012: Single Byte Output Buffer - only in chips which support enhanced buffer mode */
1719 	volatile uint8_t SBOBUF;
1720 	volatile uint8_t reserved4[13];
1721 	/* 0x20~0x9F: Output Buffer */
1722 	volatile uint8_t OBUF[128];
1723 	/* 0xA0~0x11F: Input Buffer */
1724 	volatile uint8_t IBUF[128];
1725 };
1726 
1727 /* SHI register fields */
1728 #define NPCX_SHICFG1_EN                  0
1729 #define NPCX_SHICFG1_MODE                1
1730 #define NPCX_SHICFG1_WEN                 2
1731 #define NPCX_SHICFG1_AUTIBF              3
1732 #define NPCX_SHICFG1_AUTOBE              4
1733 #define NPCX_SHICFG1_DAS                 5
1734 #define NPCX_SHICFG1_CPOL                6
1735 #define NPCX_SHICFG1_IWRAP               7
1736 #define NPCX_SHICFG2_SIMUL               0
1737 #define NPCX_SHICFG2_BUSY                1
1738 #define NPCX_SHICFG2_ONESHOT             2
1739 #define NPCX_SHICFG2_SLWU                3
1740 #define NPCX_SHICFG2_REEN                4
1741 #define NPCX_SHICFG2_RESTART             5
1742 #define NPCX_SHICFG2_REEVEN              6
1743 #define NPCX_EVENABLE_OBEEN              0
1744 #define NPCX_EVENABLE_OBHEEN             1
1745 #define NPCX_EVENABLE_IBFEN              2
1746 #define NPCX_EVENABLE_IBHFEN             3
1747 #define NPCX_EVENABLE_EOREN              4
1748 #define NPCX_EVENABLE_EOWEN              5
1749 #define NPCX_EVENABLE_STSREN             6
1750 #define NPCX_EVENABLE_IBOREN             7
1751 #define NPCX_EVSTAT_OBE                  0
1752 #define NPCX_EVSTAT_OBHE                 1
1753 #define NPCX_EVSTAT_IBF                  2
1754 #define NPCX_EVSTAT_IBHF                 3
1755 #define NPCX_EVSTAT_EOR                  4
1756 #define NPCX_EVSTAT_EOW                  5
1757 #define NPCX_EVSTAT_STSR                 6
1758 #define NPCX_EVSTAT_IBOR                 7
1759 #define NPCX_STATUS_OBES                 6
1760 #define NPCX_STATUS_IBFS                 7
1761 #define NPCX_SHICFG3_OBUFLVLDIS          7
1762 #define NPCX_SHICFG4_IBUFLVLDIS          7
1763 #define NPCX_SHICFG5_IBUFLVL2            FIELD(0, 6)
1764 #define NPCX_SHICFG5_IBUFLVL2DIS         7
1765 #define NPCX_EVSTAT2_IBHF2               0
1766 #define NPCX_EVSTAT2_CSNRE               1
1767 #define NPCX_EVSTAT2_CSNFE               2
1768 #define NPCX_EVENABLE2_IBHF2EN           0
1769 #define NPCX_EVENABLE2_CSNREEN           1
1770 #define NPCX_EVENABLE2_CSNFEEN           2
1771 #define NPCX_SHICFG6_EBUFMD              0
1772 #define NPCX_SHICFG6_OBUF_SL             1
1773 
1774 #define IBF_IBHF_EN_MASK                 (BIT(NPCX_EVENABLE_IBFEN) | BIT(NPCX_EVENABLE_IBHFEN))
1775 
1776 /* SPIP (SPI Peripheral Interface) registers */
1777 struct spip_reg {
1778 	/* 0x000: SPIP Data In/Out */
1779 	volatile uint16_t SPIP_DATA;
1780 	/* 0x002: SPIP Control 1 */
1781 	volatile uint16_t SPIP_CTL1;
1782 	/* 0x004: SPIP Status */
1783 	volatile uint8_t SPIP_STAT;
1784 	volatile uint8_t reserved1;
1785 };
1786 
1787 #define NPCX_SPIP_CTL1_SPIEN            0
1788 #define NPCX_SPIP_CTL1_MOD              2
1789 #define NPCX_SPIP_CTL1_EIR              5
1790 #define NPCX_SPIP_CTL1_EIW              6
1791 #define NPCX_SPIP_CTL1_SCM              7
1792 #define NPCX_SPIP_CTL1_SCIDL            8
1793 #define NPCX_SPIP_CTL1_SCDV             FIELD(9, 7)
1794 #define NPCX_SPIP_STAT_BSY              0
1795 #define NPCX_SPIP_STAT_RBF              1
1796 
1797 /* Software-triggered Pheripheral Reset Controller Register */
1798 struct swrst_reg {
1799 	/* 0x000: Software Reset Trigger */
1800 	volatile uint16_t SWRST_TRG;
1801 	volatile uint8_t reserved1[2];
1802 	volatile uint32_t SWRST_CTL[4];
1803 };
1804 
1805 /* Improved Inter Integrated Circuit  (I3C) device registers */
1806 struct i3c_reg {
1807 	/* 0x000: Controller Configuration */
1808 	volatile uint32_t MCONFIG;
1809 	/* 0x004: Target Configuration */
1810 	volatile uint32_t CONFIG;
1811 	/* 0x008: Target Status */
1812 	volatile uint32_t STATUS;
1813 	/* 0x00C: Target Control  */
1814 	volatile uint32_t CTRL;
1815 	/* 0x010: Target Interrupt Enable Set  */
1816 	volatile uint32_t INTSET;
1817 	/* 0x014: Target Interrupt Enable Clear */
1818 	volatile uint32_t INTCLR;
1819 	/* 0x018: Target Interrupt Masked */
1820 	volatile uint32_t INTMASKED;
1821 	/* 0x01C: Target Error and Warning */
1822 	volatile uint32_t ERRWARN;
1823 	/* 0x020: Target DMA Control */
1824 	volatile uint32_t DMACTRL;
1825 	/* 0x024-0x02B: reserved */
1826 	volatile uint32_t reserved0[2];
1827 	/* 0x02C: Target Data Control */
1828 	volatile uint32_t DATACTRL;
1829 	/* 0x030: Target Write Byte Data */
1830 	volatile uint32_t WDATAB;
1831 	/* 0x034: Target Write Byte Data as End */
1832 	volatile uint32_t WDATABE;
1833 	/* 0x038: Target Write Half-Word Data */
1834 	volatile uint32_t WDATAH;
1835 	/* 0x03C: Target Write Half-Word Data as End */
1836 	volatile uint32_t WDATAHE;
1837 	/* 0x040: Target Read Byte Data */
1838 	volatile uint32_t RDATAB;
1839 	/* 0x044: reserved */
1840 	volatile uint32_t reserved1;
1841 	/* 0x048: Target Read Half-Word Data */
1842 	volatile uint32_t RDATAH;
1843 	/* 0x04C-0x05B: reserved */
1844 	volatile uint32_t reserved2[4];
1845 	/* 0x05C: Target Capabilities 2 */
1846 	volatile uint32_t CCAPABILITIES2;
1847 	/* 0x060: Target Capabilities */
1848 	volatile uint32_t CCAPABILITIES;
1849 	/* 0x064: Target Dynamic Address */
1850 	volatile uint32_t DYNADDR;
1851 	/* 0x068: Target Maximum Limits */
1852 	volatile uint32_t MAXLIMITS;
1853 	/* 0x06C: Target Part Number */
1854 	volatile uint32_t PARTNO;
1855 	/* 0x070: Target ID Extension */
1856 	volatile uint32_t IDEXT;
1857 	/* 0x074: Target Vendor ID */
1858 	volatile uint32_t VENDORID;
1859 	/* 0x078: Target Timing Control Clock */
1860 	volatile uint32_t TCCLOCK;
1861 	/* 0x07C: Target Matching Address Index */
1862 	volatile uint32_t MSGLAST;
1863 	/* 0x080: reserved */
1864 	volatile uint32_t reserved3;
1865 	/* 0x084: Controller Control  */
1866 	volatile uint32_t MCTRL;
1867 	/* 0x088: Controller Status */
1868 	volatile uint32_t MSTATUS;
1869 	/* 0x08C: IBI Registry and Rules */
1870 	volatile uint32_t IBIRULES;
1871 	/* 0x090: Controller Interrupt Enable Set  */
1872 	volatile uint32_t MINTSET;
1873 	/* 0x094: Controller Interrupt Enable Clear */
1874 	volatile uint32_t MINTCLR;
1875 	/* 0x098: Controller Interrupt Masked */
1876 	volatile uint32_t MINTMASKED;
1877 	/* 0x09C: Controller Error and Warning */
1878 	volatile uint32_t MERRWARN;
1879 	/* 0x0A0: Controller DMA Control */
1880 	volatile uint32_t MDMACTRL;
1881 	/* 0x0A0-0x0AB: reserved */
1882 	volatile uint32_t reserved4[2];
1883 	/* 0x0AC: Controller Data Control */
1884 	volatile uint32_t MDATACTRL;
1885 	/* 0x0B0: Controller Write Byte Data */
1886 	volatile uint32_t MWDATAB;
1887 	/* 0x0B4: Controller Write Byte Data as End */
1888 	volatile uint32_t MWDATABE;
1889 	/* 0x0B8: Controller Write Half-Word Data */
1890 	volatile uint32_t MWDATAH;
1891 	/* 0x0BC: Controller Write Half-Word Data as End */
1892 	volatile uint32_t MWDATAHE;
1893 	/* 0x0C0: Controller Read Byte Data */
1894 	volatile uint32_t MRDATAB;
1895 	/* 0x0C4: reserved */
1896 	volatile uint32_t reserved5;
1897 	/* 0x0C8: Controller Read Half-Word Data */
1898 	volatile uint32_t MRDATAH;
1899 	/* 0x0CC-0x0D7: reserved */
1900 	volatile uint32_t reserved6[3];
1901 	/* 0x0D8: Start or Continue DDR Message */
1902 	volatile uint32_t MWMSG_DDR;
1903 	/* 0x0DC: Read DDR Message Data */
1904 	volatile uint32_t MRMSG_DDR;
1905 	/* 0x0E0: reserved */
1906 	volatile uint32_t reserved7;
1907 	/* 0x0E4: Controller Dynamic Address */
1908 	volatile uint32_t MDYNADDR;
1909 	/* 0x0E8-0x0FF reserved */
1910 	volatile uint32_t reserved8[6];
1911 	/* 0x100: Target Reset Recovery Time */
1912 	volatile uint32_t RSTACTTIME;
1913 	/* 0x104: reserved */
1914 	volatile uint32_t reserved9;
1915 	/* 0x108: Target HDR Command Byte */
1916 	volatile uint32_t HDRCMD;
1917 	/* 0x10C-0x113: reserved */
1918 	volatile uint32_t reserved10[2];
1919 	/* 0x114: Target Group Definition */
1920 	volatile uint32_t GROUPDEF;
1921 	/* 0x118: reserved */
1922 	volatile uint32_t reserved11;
1923 	/* 0x11C: Target Map Control 0 */
1924 	volatile uint32_t MAPCTRL0;
1925 	/* 0x120: Target Map Control 1 */
1926 	volatile uint32_t MAPCTRL1;
1927 	/* 0x124: Target Map Control 2 */
1928 	volatile uint32_t MAPCTRL2;
1929 	/* 0x128: Target Map Control 3 */
1930 	volatile uint32_t MAPCTRL3;
1931 	/* 0x12C: Target Map Control 4 */
1932 	volatile uint32_t MAPCTRL4;
1933 	/* 0x130: Target Map Control 5 */
1934 	volatile uint32_t MAPCTRL5;
1935 	/* 0x134: Target Map Control 6 */
1936 	volatile uint32_t MAPCTRL6;
1937 	/* 0x138: Target Map Control 7 */
1938 	volatile uint32_t MAPCTRL7;
1939 	/* 0x13C: Target Map Control 8 */
1940 	volatile uint32_t MAPCTRL8;
1941 	/* 0x140: Target Extended IBI Data 1 */
1942 	volatile uint32_t IBIEXT1;
1943 	/* 0x144: Target Extended IBI Data 2 */
1944 	volatile uint32_t IBIEXT2;
1945 };
1946 
1947 /* I3C controller register fields */
1948 #define NPCX_I3C_MCONFIG_CTRENA         FIELD(0, 2)
1949 #define NPCX_I3C_MCONFIG_DISTO          3
1950 #define NPCX_I3C_MCONFIG_HKEEP          FIELD(4, 2) /* Must be '11' */
1951 #define NPCX_I3C_MCONFIG_ODSTOP         6
1952 #define NPCX_I3C_MCONFIG_PPBAUD         FIELD(8, 4)
1953 #define NPCX_I3C_MCONFIG_PPLOW          FIELD(12, 4)
1954 #define NPCX_I3C_MCONFIG_ODBAUD         FIELD(16, 8)
1955 #define NPCX_I3C_MCONFIG_ODHPP          24
1956 #define NPCX_I3C_MCONFIG_SKEW           FIELD(25, 3)
1957 #define NPCX_I3C_MCONFIG_I2CBAUD        FIELD(28, 4)
1958 #define NPCX_I3C_MCTRL_REQUEST          FIELD(0, 3)
1959 #define NPCX_I3C_MCTRL_TYPE             FIELD(4, 2)
1960 #define NPCX_I3C_MCTRL_IBIRESP          FIELD(6, 2)
1961 #define NPCX_I3C_MCTRL_DIR              8
1962 #define NPCX_I3C_MCTRL_ADDR             FIELD(9, 7)
1963 #define NPCX_I3C_MCTRL_RDTERM           FIELD(16, 8)
1964 #define NPCX_I3C_MSTATUS_STATE          FIELD(0, 3)
1965 #define NPCX_I3C_MSTATUS_BETWEEN        4
1966 #define NPCX_I3C_MSTATUS_NACKED         5
1967 #define NPCX_I3C_MSTATUS_IBITYPE        FIELD(6, 2)
1968 #define NPCX_I3C_MSTATUS_TGTSTART       8
1969 #define NPCX_I3C_MSTATUS_MCTRLDONE      9
1970 #define NPCX_I3C_MSTATUS_COMPLETE       10
1971 #define NPCX_I3C_MSTATUS_RXPEND         11
1972 #define NPCX_I3C_MSTATUS_TXNOTFULL      12
1973 #define NPCX_I3C_MSTATUS_IBIWON         13
1974 #define NPCX_I3C_MSTATUS_ERRWARN        15
1975 #define NPCX_I3C_MSTATUS_NOWCNTLR       19
1976 #define NPCX_I3C_MSTATUS_IBIADDR        FIELD(24, 7)
1977 #define NPCX_I3C_IBIRULES_MSB0          30
1978 #define NPCX_I3C_IBIRULES_NOBYTE        31
1979 #define NPCX_I3C_MINTSET_TGTSTART       8
1980 #define NPCX_I3C_MINTSET_MCTRLDONE      9
1981 #define NPCX_I3C_MINTSET_COMPLETE       10
1982 #define NPCX_I3C_MINTSET_RXPEND         11
1983 #define NPCX_I3C_MINTSET_TXNOTFULL      12
1984 #define NPCX_I3C_MINTSET_IBIWON         13
1985 #define NPCX_I3C_MINTSET_ERRWARN        15
1986 #define NPCX_I3C_MINTSET_NOWCNTLR       19
1987 #define NPCX_I3C_MINTCLR_TGTSTART       8
1988 #define NPCX_I3C_MINTCLR_MCTRLDONE      9
1989 #define NPCX_I3C_MINTCLR_COMPLETE       10
1990 #define NPCX_I3C_MINTCLR_RXPEND         11
1991 #define NPCX_I3C_MINTCLR_TXNOTFULL      12
1992 #define NPCX_I3C_MINTCLR_IBIWON         13
1993 #define NPCX_I3C_MINTCLR_ERRWARN        15
1994 #define NPCX_I3C_MINTCLR_NOWCNTLR       19
1995 #define NPCX_I3C_MINTMASKED_NOWCNTLR    19
1996 #define NPCX_I3C_MDATACTRL_FLUSHTB      0
1997 #define NPCX_I3C_MDATACTRL_FLUSHFB      1
1998 #define NPCX_I3C_MDATACTRL_UNLOCK       3
1999 #define NPCX_I3C_MDATACTRL_TXTRIG       FIELD(4, 2)
2000 #define NPCX_I3C_MDATACTRL_RXTRIG       FIELD(6, 2)
2001 #define NPCX_I3C_MDATACTRL_TXCOUNT      FIELD(16, 5)
2002 #define NPCX_I3C_MDATACTRL_RXCOUNT      FIELD(24, 5)
2003 #define NPCX_I3C_MDATACTRL_TXFULL       30
2004 #define NPCX_I3C_MDATACTRL_RXEMPTY      31
2005 #define NPCX_I3C_MERRWARN_NACK          2
2006 #define NPCX_I3C_MERRWARN_WRABT         3
2007 #define NPCX_I3C_MERRWARN_TERM          4
2008 #define NPCX_I3C_MERRWARN_HPAR          9
2009 #define NPCX_I3C_MERRWARN_HCRC          10
2010 #define NPCX_I3C_MERRWARN_OREAD         16
2011 #define NPCX_I3C_MERRWARN_OWRITE        17
2012 #define NPCX_I3C_MERRWARN_MSGERR        18
2013 #define NPCX_I3C_MERRWARN_INVERQ        19
2014 #define NPCX_I3C_MERRWARN_TIMEOUT       20
2015 #define NPCX_I3C_MDMACTRL_DMAFB         FIELD(0, 2)
2016 #define NPCX_I3C_MDMACTRL_DMATB         FIELD(2, 2)
2017 
2018 /* I3C target register fields */
2019 #define NPCX_I3C_CONFIG_TGTENA          0
2020 #define NPCX_I3C_CONFIG_MATCHSS         2
2021 #define NPCX_I3C_CONFIG_S0IGNORE        3
2022 #define NPCX_I3C_CONFIG_IDRAND          8
2023 #define NPCX_I3C_CONFIG_OFFLINE         9
2024 #define NPCX_I3C_CONFIG_HDRCMD          FIELD(10, 2)
2025 #define NPCX_I3C_CONFIG_BAMATCH         FIELD(16, 7)
2026 #define NPCX_I3C_CONFIG_SADDR           FIELD(25, 7)
2027 #define NPCX_I3C_STATUS_STNOTSTOP       0
2028 #define NPCX_I3C_STATUS_STMSG           1
2029 #define NPCX_I3C_STATUS_STCCCH          2
2030 #define NPCX_I3C_STATUS_STREQRD         3
2031 #define NPCX_I3C_STATUS_STREQWR         4
2032 #define NPCX_I3C_STATUS_STDAA           5
2033 #define NPCX_I3C_STATUS_STHDR           6
2034 #define NPCX_I3C_STATUS_START           8
2035 #define NPCX_I3C_STATUS_MATCHED         9
2036 #define NPCX_I3C_STATUS_STOP            10
2037 #define NPCX_I3C_STATUS_RXPEND          11
2038 #define NPCX_I3C_STATUS_TXNOTFULL       12
2039 #define NPCX_I3C_STATUS_DACHG           13
2040 #define NPCX_I3C_STATUS_CCC             14
2041 #define NPCX_I3C_STATUS_ERRWARN         15
2042 #define NPCX_I3C_STATUS_HDRMATCH        16
2043 #define NPCX_I3C_STATUS_CHANDLED        17
2044 #define NPCX_I3C_STATUS_EVENT           18
2045 #define NPCX_I3C_STATUS_TGTRST          19
2046 #define NPCX_I3C_STATUS_EVDET           FIELD(20, 2)
2047 #define NPCX_I3C_STATUS_IBIDIS          24
2048 #define NPCX_I3C_STATUS_MRDIS           25
2049 #define NPCX_I3C_STATUS_HJDIS           27
2050 #define NPCX_I3C_STATUS_ACTSTATE        FIELD(28, 2)
2051 #define NPCX_I3C_STATUS_TIMECTRL        FIELD(30, 2)
2052 #define NPCX_I3C_CTRL_EVENT             FIELD(0, 2)
2053 #define NPCX_I3C_CTRL_EXTDATA           3
2054 #define NPCX_I3C_CTRL_MAPIDX            FIELD(4, 4)
2055 #define NPCX_I3C_CTRL_IBIDATA           FIELD(8, 8)
2056 #define NPCX_I3C_CTRL_PENDINT           FIELD(16, 4)
2057 #define NPCX_I3C_CTRL_ACTSTATE          FIELD(20, 2)
2058 #define NPCX_I3C_CTRL_VENDINFO          FIELD(24, 8)
2059 #define NPCX_I3C_INTSET_START           8
2060 #define NPCX_I3C_INTSET_MATCHED         9
2061 #define NPCX_I3C_INTSET_STOP            10
2062 #define NPCX_I3C_INTSET_RXPEND          11
2063 #define NPCX_I3C_INTSET_TXNOTFULL       12
2064 #define NPCX_I3C_INTSET_DACHG           13
2065 #define NPCX_I3C_INTSET_CCC             14
2066 #define NPCX_I3C_INTSET_ERRWARN         15
2067 #define NPCX_I3C_INTSET_HDRMATCH        16
2068 #define NPCX_I3C_INTSET_CHANDLED        17
2069 #define NPCX_I3C_INTSET_EVENT           18
2070 #define NPCX_I3C_INTSET_TGTRST          19
2071 #define NPCX_I3C_INTCLR_START           8
2072 #define NPCX_I3C_INTCLR_MATCHED         9
2073 #define NPCX_I3C_INTCLR_STOP            10
2074 #define NPCX_I3C_INTCLR_RXPEND          11
2075 #define NPCX_I3C_INTCLR_TXNOTFULL       12
2076 #define NPCX_I3C_INTCLR_DACHG           13
2077 #define NPCX_I3C_INTCLR_CCC             14
2078 #define NPCX_I3C_INTCLR_ERRWARN         15
2079 #define NPCX_I3C_INTCLR_HDRMATCH        16
2080 #define NPCX_I3C_INTCLR_CHANDLED        17
2081 #define NPCX_I3C_INTCLR_EVENT           18
2082 #define NPCX_I3C_INTCLR_TGTRST          19
2083 #define NPCX_I3C_INTMASKED_START        8
2084 #define NPCX_I3C_INTMASKED_MATCHED      9
2085 #define NPCX_I3C_INTMASKED_STOP         10
2086 #define NPCX_I3C_INTMASKED_RXPEND       11
2087 #define NPCX_I3C_INTMASKED_TXNOTFULL    12
2088 #define NPCX_I3C_INTMASKED_DACHG        13
2089 #define NPCX_I3C_INTMASKED_CCC          14
2090 #define NPCX_I3C_INTMASKED_ERRWARN      15
2091 #define NPCX_I3C_INTMASKED_HDRMATCH     16
2092 #define NPCX_I3C_INTMASKED_CHANDLED     17
2093 #define NPCX_I3C_INTMASKED_EVENT        18
2094 #define NPCX_I3C_INTMASKED_TGTRST       19
2095 #define NPCX_I3C_ERRWARN_ORUN           0
2096 #define NPCX_I3C_ERRWARN_URUN           1
2097 #define NPCX_I3C_ERRWARN_URUNNACK       2
2098 #define NPCX_I3C_ERRWARN_TERM           3
2099 #define NPCX_I3C_ERRWARN_INVSTART       4
2100 #define NPCX_I3C_ERRWARN_SPAR           8
2101 #define NPCX_I3C_ERRWARN_HPAR           9
2102 #define NPCX_I3C_ERRWARN_HCRC           10
2103 #define NPCX_I3C_ERRWARN_S0S1           11
2104 #define NPCX_I3C_ERRWARN_OREAD          16
2105 #define NPCX_I3C_ERRWARN_OWRITE         17
2106 #define NPCX_I3C_DMACTRL_DMAFB          FIELD(0, 2)
2107 #define NPCX_I3C_DMACTRL_DMATB          FIELD(2, 2)
2108 #define NPCX_I3C_DATACTRL_FLUSHTB       0
2109 #define NPCX_I3C_DATACTRL_FLUSHFB       1
2110 #define NPCX_I3C_DATACTRL_UNLOCK        3
2111 #define NPCX_I3C_DATACTRL_TXTRIG        FIELD(4, 2)
2112 #define NPCX_I3C_DATACTRL_RXTRIG        FIELD(6, 2)
2113 #define NPCX_I3C_DATACTRL_TXCOUNT       FIELD(16, 6)
2114 #define NPCX_I3C_DATACTRL_RXCOUNT       FIELD(24, 6)
2115 #define NPCX_I3C_DATACTRL_TXFULL        30
2116 #define NPCX_I3C_DATACTRL_RXEMPTY       31
2117 #define NPCX_I3C_WDATAB_DATA            FIELD(0, 8)
2118 #define NPCX_I3C_WDATAB_END_B           8
2119 #define NPCX_I3C_WDATAB_END_A           16
2120 #define NPCX_I3C_WDATABE_DATA           FIELD(0, 8)
2121 #define NPCX_I3C_WDATAH_DATA0           FIELD(0, 8)
2122 #define NPCX_I3C_WDATAH_DATA1           FIELD(8, 8)
2123 #define NPCX_I3C_WDATAH_END             16
2124 #define NPCX_I3C_WDATAHE_DATA0          FIELD(0, 8)
2125 #define NPCX_I3C_WDATAHE_DATA1          FIELD(8, 8)
2126 #define NPCX_I3C_RDATAB_DATA            FIELD(0, 8)
2127 #define NPCX_I3C_RDATAH_DATA0           FIELD(0, 8)
2128 #define NPCX_I3C_RDATAH_DATA1           FIELD(8, 8)
2129 #define NPCX_I3C_CAPABILITIES2_MAPCNT   FIELD(0, 4)
2130 #define NPCX_I3C_CAPABILITIES2_I2C10B   4
2131 #define NPCX_I3C_CAPABILITIES2_I2CRST   5
2132 #define NPCX_I3C_CAPABILITIES2_I2CDEVID 6
2133 #define NPCX_I3C_CAPABILITIES2_DATA32   7
2134 #define NPCX_I3C_CAPABILITIES2_IBIEXT   8
2135 #define NPCX_I3C_CAPABILITIES2_IBIXREG  9
2136 #define NPCX_I3C_CAPABILITIES2_SMLANE   FIELD(12, 2)
2137 #define NPCX_I3C_CAPABILITIES2_V1_1     16
2138 #define NPCX_I3C_CAPABILITIES2_TGTRST   17
2139 #define NPCX_I3C_CAPABILITIES2_GROUP    FIELD(18, 2)
2140 #define NPCX_I3C_CAPABILITIES2_AASA     21
2141 #define NPCX_I3C_CAPABILITIES2_SSTSUB   22
2142 #define NPCX_I3C_CAPABILITIES2_SSTWR    23
2143 #define NPCX_I3C_CAPABILITIES_IDENA     FIELD(0, 2)
2144 #define NPCX_I3C_CAPABILITIES_IDREG     FIELD(2, 4)
2145 #define NPCX_I3C_CAPABILITIES_HDRSUPP   FIELD(6, 3)
2146 #define NPCX_I3C_CAPABILITIES_CNTLR     9
2147 #define NPCX_I3C_CAPABILITIES_SADDR     FIELD(10, 2)
2148 #define NPCX_I3C_CAPABILITIES_CCCHANDLE FIELD(12, 4)
2149 #define NPCX_I3C_CAPABILITIES_IBI_MR_HJ FIELD(16, 5)
2150 #define NPCX_I3C_CAPABILITIES_TIMECTRL  21
2151 #define NPCX_I3C_CAPABILITIES_EXTFIFO   FIELD(23, 3)
2152 #define NPCX_I3C_CAPABILITIES_FIFOTX    FIELD(26, 2)
2153 #define NPCX_I3C_CAPABILITIES_FIFORX    FIELD(28, 2)
2154 #define NPCX_I3C_CAPABILITIES_INT       30
2155 #define NPCX_I3C_CAPABILITIES_DMA       31
2156 #define NPCX_I3C_DYNADDR_DAVALID        0
2157 #define NPCX_I3C_DYNADDR_DADDR          FIELD(1, 7)
2158 #define NPCX_I3C_DYNADDR_CAUSE          FIELD(8, 3)
2159 #define NPCX_I3C_MAXLIMITS_MAXRD        FIELD(0, 12)
2160 #define NPCX_I3C_MAXLIMITS_MAXWR        FIELD(16, 12)
2161 #define NPCX_I3C_IDEXT_DCR              FIELD(8, 8)
2162 #define NPCX_I3C_IDEXT_BCR              FIELD(16, 8)
2163 #define NPCX_I3C_VENDORID_VID           FIELD(0, 15)
2164 #define NPCX_I3C_TCCLOCK_ACCURACY       FIELD(0, 8)
2165 #define NPCX_I3C_TCCLOCK_FREQ           FIELD(8, 8)
2166 #define NPCX_I3C_MSGLAST_MAPLAST        FIELD(0, 4)
2167 #define NPCX_I3C_MSGLAST_LASTSTATIC     4
2168 #define NPCX_I3C_MSGLAST_LASTGROUP      5
2169 #define NPCX_I3C_MSGLAST_LASTMODE       FIELD(6, 2)
2170 #define NPCX_I3C_MSGLAST_MAPLASTM1      FIELD(8, 4)
2171 #define NPCX_I3C_MSGLAST_LASTGROUPM1    13
2172 #define NPCX_I3C_MSGLAST_LASTMODE1      FIELD(14, 2)
2173 #define NPCX_I3C_MSGLAST_MAPLASTM2      FIELD(16, 4)
2174 #define NPCX_I3C_MSGLAST_LASTGROUPM2    21
2175 #define NPCX_I3C_MSGLAST_LASTMODE2      FIELD(22, 2)
2176 #define NPCX_I3C_RSTACTTIME_PERRSTTIM   FIELD(0, 8)
2177 #define NPCX_I3C_RSTACTTIME_SYSRSTTIM   FIELD(8, 8)
2178 #define NPCX_I3C_HDRCMD_CMD0            FIELD(0, 8)
2179 #define NPCX_I3C_HDRCMD_OVFL            30
2180 #define NPCX_I3C_HDRCMD_NEWCMD          31
2181 #define NPCX_I3C_GROUPDEF_GRP0ENA       0
2182 #define NPCX_I3C_GROUPDEF_GRP0DA        FIELD(1, 7)
2183 #define NPCX_I3C_GROUPDEF_GRP1ENA       8
2184 #define NPCX_I3C_GROUPDEF_GRP1DA        FIELD(9, 7)
2185 #define NPCX_I3C_GROUPDEF_GRP2ENA       16
2186 #define NPCX_I3C_GROUPDEF_GRP2DA        FIELD(17, 7)
2187 #define NPCX_I3C_MAPCTRL0_ENA           0
2188 #define NPCX_I3C_MAPCTRL0_DA            FIELD(1, 7)
2189 #define NPCX_I3C_MAPCTRL0_CAUSE         FIELD(8, 3)
2190 #define NPCX_I3C_MAPCTRLn_ENA           0
2191 #define NPCX_I3C_MAPCTRLn_ADDR          FIELD(1, 7)
2192 #define NPCX_I3C_MAPCTRLn_MAPSA         8
2193 #define NPCX_I3C_MAPCTRLn_NACK          12
2194 #define NPCX_I3C_MAPCTRLn_AUTO          13
2195 #define NPCX_I3C_MAPCTRLn_SLOT_PID      FIELD(14, 5)
2196 #define NPCX_I3C_IBIEXT1_CNT            FIELD(0, 3)
2197 #define NPCX_I3C_IBIEXT1_EXT1           FIELD(8, 8)
2198 #define NPCX_I3C_IBIEXT1_EXT2           FIELD(16, 8)
2199 #define NPCX_I3C_IBIEXT1_EXT3           FIELD(24, 8)
2200 #define NPCX_I3C_IBIEXT2_EXT4           FIELD(0, 8)
2201 #define NPCX_I3C_IBIEXT2_EXT5           FIELD(8, 8)
2202 #define NPCX_I3C_IBIEXT2_EXT6           FIELD(16, 8)
2203 #define NPCX_I3C_IBIEXT2_EXT7           FIELD(24, 8)
2204 
2205 /* MDMA Controller registers */
2206 struct mdma_reg {
2207 	/* Channel 0 */
2208 	/* 0x000: Channel 0 Control */
2209 	volatile uint32_t MDMA_CTL0;
2210 	/* 0x004: Channel 0 Source Base Address */
2211 	volatile uint32_t MDMA_SRCB0;
2212 	/* 0x008: Channel 0 Destination Base Address */
2213 	volatile uint32_t MDMA_DSTB0;
2214 	/* 0x00C: Channel 0 Transfer Count */
2215 	volatile uint32_t MDMA_TCNT0;
2216 	/* 0x010: reserved1 */
2217 	volatile uint32_t reserved1;
2218 	/* 0x014: Channel 0 Current Destination */
2219 	volatile uint32_t MDMA_CDST0;
2220 	/* 0x018: Channel 0 Current Transfer Count */
2221 	volatile uint32_t MDMA_CTCNT0;
2222 	/* 0x01C: reserved2 */
2223 	volatile uint32_t reserved2;
2224 
2225 	/* Channel 1 */
2226 	/* 0x020: Channel 1 Control */
2227 	volatile uint32_t MDMA_CTL1;
2228 	/* 0x024: Channel 1 Source Base Address */
2229 	volatile uint32_t MDMA_SRCB1;
2230 	/* 0x028: Channel 1 Destination Base Address */
2231 	volatile uint32_t MDMA_DSTB1;
2232 	/* 0x02C: Channel 1 Transfer Count */
2233 	volatile uint32_t MDMA_TCNT1;
2234 	/* 0x030: Channel 1 Current Source */
2235 	volatile uint32_t MDMA_CSRC1;
2236 	/* 0x034: reserved3 */
2237 	volatile uint32_t reserved3;
2238 	/* 0x038: Channel 1 Current Transfer Count */
2239 	volatile uint32_t MDMA_CTCNT1;
2240 };
2241 
2242 /* MDMA register fields */
2243 #define NPCX_MDMA_CTL_MDMAEN 0
2244 #define NPCX_MDMA_CTL_MPD    1
2245 #define NPCX_MDMA_CTL_SIEN   8
2246 #define NPCX_MDMA_CTL_MPS    14
2247 #define NPCX_MDMA_CTL_TC     18
2248 
2249 /* Channel 0/1 Transfer Count Register (MDMA_TCNT0/MDMA_TCNT1) */
2250 #define NPCX_MDMA_TCNT_TFR_CNT FIELD(0, 13)
2251 
2252 /* Channel 0/1 Current Transfer Count Register (MDMA_CTCNT0/MDMA_CTCNT1) */
2253 #define NPCX_MDMA_CTCNT_CURRENT_TFR_CNT FIELD(0, 13)
2254 
2255 #endif /* _NUVOTON_NPCX_REG_DEF_H */
2256