1 /*
2  * Copyright (c) 2021 Nuvoton Technology Corporation.
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #include <zephyr/device.h>
8 #include <soc.h>
9 
10 /* CDCG register structure check */
11 NPCX_REG_SIZE_CHECK(cdcg_reg, 0x116);
12 NPCX_REG_OFFSET_CHECK(cdcg_reg, HFCBCD, 0x010);
13 NPCX_REG_OFFSET_CHECK(cdcg_reg, HFCBCD2, 0x014);
14 NPCX_REG_OFFSET_CHECK(cdcg_reg, LFCGCTL, 0x100);
15 NPCX_REG_OFFSET_CHECK(cdcg_reg, LFCGCTL2, 0x114);
16 
17 /* PMC register structure check */
18 NPCX_REG_SIZE_CHECK(pmc_reg, 0x025);
19 NPCX_REG_OFFSET_CHECK(pmc_reg, ENIDL_CTL, 0x003);
20 NPCX_REG_OFFSET_CHECK(pmc_reg, PWDWN_CTL1, 0x008);
21 NPCX_REG_OFFSET_CHECK(pmc_reg, PWDWN_CTL7, 0x024);
22 
23 /* SCFG register structure check */
24 NPCX_REG_SIZE_CHECK(scfg_reg, 0x02f);
25 NPCX_REG_OFFSET_CHECK(scfg_reg, DEV_CTL4, 0x006);
26 NPCX_REG_OFFSET_CHECK(scfg_reg, DEVALT0, 0x010);
27 NPCX_REG_OFFSET_CHECK(scfg_reg, LV_GPIO_CTL0, 0x02a);
28 
29 /* GLUE register structure check */
30 NPCX_REG_SIZE_CHECK(glue_reg, 0x028);
31 NPCX_REG_OFFSET_CHECK(glue_reg, SMB_EEN, 0x003);
32 NPCX_REG_OFFSET_CHECK(glue_reg, SDPD0, 0x010);
33 NPCX_REG_OFFSET_CHECK(glue_reg, SMB_SEL, 0x021);
34 NPCX_REG_OFFSET_CHECK(glue_reg, PSL_CTS, 0x027);
35 
36 /* UART register structure check */
37 NPCX_REG_SIZE_CHECK(uart_reg, 0x027);
38 NPCX_REG_OFFSET_CHECK(uart_reg, UPSR, 0x00e);
39 NPCX_REG_OFFSET_CHECK(uart_reg, UFTSTS, 0x020);
40 NPCX_REG_OFFSET_CHECK(uart_reg, UFRCTL, 0x026);
41 
42 /* GPIO register structure check */
43 NPCX_REG_SIZE_CHECK(gpio_reg, 0x008);
44 NPCX_REG_OFFSET_CHECK(gpio_reg, PLOCK_CTL, 0x007);
45 
46 /* PWM register structure check */
47 NPCX_REG_SIZE_CHECK(pwm_reg, 0x00e);
48 NPCX_REG_OFFSET_CHECK(pwm_reg, PWMCTL, 0x004);
49 NPCX_REG_OFFSET_CHECK(pwm_reg, DCR, 0x006);
50 NPCX_REG_OFFSET_CHECK(pwm_reg, PWMCTLEX, 0x00c);
51 
52 /* ADC register structure check */
53 NPCX_REG_SIZE_CHECK(adc_reg, 0x028);
54 NPCX_REG_OFFSET_CHECK(adc_reg, THRCTS, 0x01a);
55 NPCX_REG_OFFSET_CHECK(adc_reg, ADCCNF2, 0x020);
56 NPCX_REG_OFFSET_CHECK(adc_reg, MEAST, 0x026);
57 
58 /* TWD register structure check */
59 NPCX_REG_SIZE_CHECK(twd_reg, 0x012);
60 NPCX_REG_OFFSET_CHECK(twd_reg, T0CSR, 0x006);
61 NPCX_REG_OFFSET_CHECK(twd_reg, TWMWD, 0x00e);
62 NPCX_REG_OFFSET_CHECK(twd_reg, WDCP, 0x010);
63 
64 /* ESPI register structure check */
65 NPCX_REG_SIZE_CHECK(espi_reg, 0x900);
66 NPCX_REG_OFFSET_CHECK(espi_reg, FLASHCFG, 0x034);
67 NPCX_REG_OFFSET_CHECK(espi_reg, NPCX_ONLY_ESPI_REG1, 0x0f0);
68 NPCX_REG_OFFSET_CHECK(espi_reg, VWEVMS, 0x140);
69 NPCX_REG_OFFSET_CHECK(espi_reg, VWGPSM, 0x180);
70 NPCX_REG_OFFSET_CHECK(espi_reg, VWCTL, 0x2fc);
71 NPCX_REG_OFFSET_CHECK(espi_reg, OOBTXBUF, 0x380);
72 NPCX_REG_OFFSET_CHECK(espi_reg, OOBCTL_DIRECT, 0x3fc);
73 NPCX_REG_OFFSET_CHECK(espi_reg, FLASHTXBUF, 0x480);
74 NPCX_REG_OFFSET_CHECK(espi_reg, FLASHCTL_DIRECT, 0x4fc);
75 
76 /* MSWC register structure check */
77 NPCX_REG_SIZE_CHECK(mswc_reg, 0x030);
78 NPCX_REG_OFFSET_CHECK(mswc_reg, HCBAL, 0x008);
79 NPCX_REG_OFFSET_CHECK(mswc_reg, HCBAH, 0x00a);
80 NPCX_REG_OFFSET_CHECK(mswc_reg, SRID_CR, 0x01c);
81 NPCX_REG_OFFSET_CHECK(mswc_reg, SID_CR, 0x020);
82 NPCX_REG_OFFSET_CHECK(mswc_reg, VW_SLPST1, 0x02e);
83 
84 /* SHM register structure check */
85 NPCX_REG_SIZE_CHECK(shm_reg, 0x050);
86 NPCX_REG_OFFSET_CHECK(shm_reg, IMA_WIN_SIZE, 0x005);
87 NPCX_REG_OFFSET_CHECK(shm_reg, WIN_SIZE, 0x007);
88 NPCX_REG_OFFSET_CHECK(shm_reg, IMA_SEM, 0x00b);
89 NPCX_REG_OFFSET_CHECK(shm_reg, SHCFG, 0x00e);
90 NPCX_REG_OFFSET_CHECK(shm_reg, WIN1_WR_PROT, 0x010);
91 NPCX_REG_OFFSET_CHECK(shm_reg, IMA_WR_PROT, 0x016);
92 NPCX_REG_OFFSET_CHECK(shm_reg, WIN_BASE1, 0x020);
93 NPCX_REG_OFFSET_CHECK(shm_reg, WIN_BASE2, 0x024);
94 NPCX_REG_OFFSET_CHECK(shm_reg, RST_CFG, 0x03a);
95 NPCX_REG_OFFSET_CHECK(shm_reg, DP80BUF, 0x040);
96 NPCX_REG_OFFSET_CHECK(shm_reg, DP80CTL, 0x044);
97 NPCX_REG_OFFSET_CHECK(shm_reg, HOFS_STS, 0x048);
98 NPCX_REG_OFFSET_CHECK(shm_reg, COFS1, 0x04c);
99 
100 /* KBC register structure check */
101 NPCX_REG_SIZE_CHECK(kbc_reg, 0x00c);
102 NPCX_REG_OFFSET_CHECK(kbc_reg, HIKMDI, 0x00a);
103 NPCX_REG_OFFSET_CHECK(kbc_reg, SHIKMDI, 0x00b);
104 
105 /* PMCH register structure check */
106 NPCX_REG_SIZE_CHECK(pmch_reg, 0x012);
107 NPCX_REG_OFFSET_CHECK(pmch_reg, HIPMDO, 0x002);
108 NPCX_REG_OFFSET_CHECK(pmch_reg, HIPMDOC, 0x006);
109 NPCX_REG_OFFSET_CHECK(pmch_reg, HIPMDOM, 0x008);
110 NPCX_REG_OFFSET_CHECK(pmch_reg, HIPMDIC, 0x00a);
111 NPCX_REG_OFFSET_CHECK(pmch_reg, HIPMIE, 0x010);
112 
113 /* C2H register structure check */
114 NPCX_REG_SIZE_CHECK(c2h_reg, 0x00c);
115 NPCX_REG_OFFSET_CHECK(c2h_reg, LKSIOHA, 0x004);
116 NPCX_REG_OFFSET_CHECK(c2h_reg, CRSMAE, 0x008);
117 NPCX_REG_OFFSET_CHECK(c2h_reg, SIBCTRL, 0x00a);
118 
119 /* SMB register structure check */
120 NPCX_REG_SIZE_CHECK(smb_reg, 0x020);
121 NPCX_REG_OFFSET_CHECK(smb_reg, SMBCTL1, 0x006);
122 NPCX_REG_OFFSET_CHECK(smb_reg, SMBT_OUT, 0x00f);
123 NPCX_REG_OFFSET_CHECK(smb_reg, SMBADDR6, 0x016);
124 NPCX_REG_OFFSET_CHECK(smb_reg, SMBCST2, 0x018);
125 NPCX_REG_OFFSET_CHECK(smb_reg, SMBTXF_STS, 0x01a);
126 NPCX_REG_OFFSET_CHECK(smb_reg, SMBSCLHT, 0x01e);
127 NPCX_REG_OFFSET_CHECK(smb_reg, SMBRXF_CTL, 0x01e);
128 
129 /* ITIM register structure check */
130 NPCX_REG_SIZE_CHECK(itim32_reg, 0x00c);
131 NPCX_REG_OFFSET_CHECK(itim32_reg, ITPRE32, 0x001);
132 NPCX_REG_OFFSET_CHECK(itim32_reg, ITCTS32, 0x004);
133 NPCX_REG_OFFSET_CHECK(itim32_reg, ITCNT32, 0x008);
134 
135 NPCX_REG_SIZE_CHECK(itim64_reg, 0x010);
136 NPCX_REG_OFFSET_CHECK(itim64_reg, ITPRE64, 0x001);
137 NPCX_REG_OFFSET_CHECK(itim64_reg, ITCTS64, 0x004);
138 NPCX_REG_OFFSET_CHECK(itim64_reg, ITCNT64L, 0x008);
139 NPCX_REG_OFFSET_CHECK(itim64_reg, ITCNT64H, 0x00c);
140 
141 /* TACH register structure check */
142 NPCX_REG_SIZE_CHECK(tach_reg, 0x01e);
143 NPCX_REG_OFFSET_CHECK(tach_reg, TPRSC, 0x008);
144 NPCX_REG_OFFSET_CHECK(tach_reg, TECLR, 0x010);
145 NPCX_REG_OFFSET_CHECK(tach_reg, TCPA, 0x014);
146 NPCX_REG_OFFSET_CHECK(tach_reg, TCPCFG, 0x018);
147 NPCX_REG_OFFSET_CHECK(tach_reg, TCFG, 0x01c);
148 
149 /* Debug Interface register structure check */
150 NPCX_REG_SIZE_CHECK(dbg_reg, 0x06);
151 NPCX_REG_OFFSET_CHECK(dbg_reg, DBGCTRL, 0x000);
152 NPCX_REG_OFFSET_CHECK(dbg_reg, DBGFRZEN2, 0x003);
153 NPCX_REG_OFFSET_CHECK(dbg_reg, DBGFRZEN4, 0x005);
154 
155 /* PS/2 Interface register structure check */
156 NPCX_REG_SIZE_CHECK(ps2_reg, 0x00c);
157 NPCX_REG_OFFSET_CHECK(ps2_reg, PSDAT, 0x000);
158 NPCX_REG_OFFSET_CHECK(ps2_reg, PSTAT, 0x002);
159 NPCX_REG_OFFSET_CHECK(ps2_reg, PSCON, 0x004);
160 NPCX_REG_OFFSET_CHECK(ps2_reg, PSOSIG, 0x006);
161 NPCX_REG_OFFSET_CHECK(ps2_reg, PSISIG, 0x008);
162 NPCX_REG_OFFSET_CHECK(ps2_reg, PSIEN, 0x00a);
163 
164 /* FIU register structure check */
165 #if defined(CONFIG_SOC_SERIES_NPCX9) || defined(CONFIG_SOC_SERIES_NPCX4)
166 NPCX_REG_SIZE_CHECK(fiu_reg, 0x040);
167 #else
168 NPCX_REG_SIZE_CHECK(fiu_reg, 0x034);
169 #endif
170 NPCX_REG_OFFSET_CHECK(fiu_reg, BURST_CFG, 0x001);
171 NPCX_REG_OFFSET_CHECK(fiu_reg, SPI_FL_CFG, 0x014);
172 NPCX_REG_OFFSET_CHECK(fiu_reg, UMA_CTS, 0x01e);
173 NPCX_REG_OFFSET_CHECK(fiu_reg, CRCCON, 0x026);
174 NPCX_REG_OFFSET_CHECK(fiu_reg, FIU_RD_CMD, 0x030);
175 NPCX_REG_OFFSET_CHECK(fiu_reg, FIU_EXT_CFG, 0x033);
176 
177 /* PECI register structure check */
178 NPCX_REG_SIZE_CHECK(peci_reg, 0x050);
179 NPCX_REG_OFFSET_CHECK(peci_reg, PECI_ADDR, 0x002);
180 NPCX_REG_OFFSET_CHECK(peci_reg, PECI_WR_LENGTH, 0x007);
181 NPCX_REG_OFFSET_CHECK(peci_reg, PECI_WR_FCS, 0x00b);
182 
183 /* KBS register structure check */
184 NPCX_REG_SIZE_CHECK(kbs_reg, 0x010);
185 NPCX_REG_OFFSET_CHECK(kbs_reg, KBSIN, 0x004);
186 NPCX_REG_OFFSET_CHECK(kbs_reg, KBSOUT0, 0x006);
187 NPCX_REG_OFFSET_CHECK(kbs_reg, KBS_BUF_INDX, 0x00a);
188 
189 /* SPIP register structure check */
190 NPCX_REG_SIZE_CHECK(spip_reg, 0x006);
191 NPCX_REG_OFFSET_CHECK(spip_reg, SPIP_CTL1, 0x002);
192 
193 /* SWRST register structure check */
194 NPCX_REG_SIZE_CHECK(swrst_reg, 0x014);
195 NPCX_REG_OFFSET_CHECK(swrst_reg, SWRST_TRG, 0x000);
196 NPCX_REG_OFFSET_CHECK(swrst_reg, SWRST_CTL[0], 0x004);
197 NPCX_REG_OFFSET_CHECK(swrst_reg, SWRST_CTL[1], 0x008);
198 NPCX_REG_OFFSET_CHECK(swrst_reg, SWRST_CTL[2], 0x00c);
199 NPCX_REG_OFFSET_CHECK(swrst_reg, SWRST_CTL[3], 0x010);
200 
201 /* I3C register structure check */
202 NPCX_REG_SIZE_CHECK(i3c_reg, 0x148);
203 NPCX_REG_OFFSET_CHECK(i3c_reg, MCONFIG, 0x000); /* Controller register */
204 NPCX_REG_OFFSET_CHECK(i3c_reg, MCTRL, 0x084);
205 NPCX_REG_OFFSET_CHECK(i3c_reg, IBIRULES, 0x08C);
206 NPCX_REG_OFFSET_CHECK(i3c_reg, MINTSET, 0x090);
207 NPCX_REG_OFFSET_CHECK(i3c_reg, MINTCLR, 0x094);
208 NPCX_REG_OFFSET_CHECK(i3c_reg, MINTMASKED, 0x098);
209 NPCX_REG_OFFSET_CHECK(i3c_reg, MERRWARN, 0x09C);
210 NPCX_REG_OFFSET_CHECK(i3c_reg, MDATACTRL, 0x0AC);
211 NPCX_REG_OFFSET_CHECK(i3c_reg, MWDATAB, 0x0B0);
212 NPCX_REG_OFFSET_CHECK(i3c_reg, MWDATABE, 0x0B4);
213 NPCX_REG_OFFSET_CHECK(i3c_reg, MWDATAH, 0x0B8);
214 NPCX_REG_OFFSET_CHECK(i3c_reg, MWDATAHE, 0x0BC);
215 NPCX_REG_OFFSET_CHECK(i3c_reg, MRDATAB, 0x0C0);
216 NPCX_REG_OFFSET_CHECK(i3c_reg, MRDATAH, 0x0C8);
217 NPCX_REG_OFFSET_CHECK(i3c_reg, MWMSG_DDR, 0x0D8);
218 NPCX_REG_OFFSET_CHECK(i3c_reg, MRMSG_DDR, 0x0DC);
219 NPCX_REG_OFFSET_CHECK(i3c_reg, MDYNADDR, 0x0E4);
220 NPCX_REG_OFFSET_CHECK(i3c_reg, CONFIG, 0x004); /* Target register */
221 NPCX_REG_OFFSET_CHECK(i3c_reg, STATUS, 0x008);
222 NPCX_REG_OFFSET_CHECK(i3c_reg, CTRL, 0x00C);
223 NPCX_REG_OFFSET_CHECK(i3c_reg, INTSET, 0x010);
224 NPCX_REG_OFFSET_CHECK(i3c_reg, INTCLR, 0x014);
225 NPCX_REG_OFFSET_CHECK(i3c_reg, INTMASKED, 0x018);
226 NPCX_REG_OFFSET_CHECK(i3c_reg, ERRWARN, 0x01C);
227 NPCX_REG_OFFSET_CHECK(i3c_reg, DMACTRL, 0x020);
228 NPCX_REG_OFFSET_CHECK(i3c_reg, DATACTRL, 0x02C);
229 NPCX_REG_OFFSET_CHECK(i3c_reg, IBIEXT2, 0x144);
230 
231 /* MDMA register structure check */
232 NPCX_REG_SIZE_CHECK(mdma_reg, 0x03C);
233 NPCX_REG_OFFSET_CHECK(mdma_reg, MDMA_SRCB0, 0x004);
234 NPCX_REG_OFFSET_CHECK(mdma_reg, MDMA_CTCNT0, 0x018);
235 NPCX_REG_OFFSET_CHECK(mdma_reg, MDMA_CTL1, 0x020);
236 NPCX_REG_OFFSET_CHECK(mdma_reg, MDMA_CTCNT1, 0x038);
237