2 * QEMU model of Versal's PMC IOU SLCR (system level control registers)
4 * Copyright (c) 2021 Xilinx Inc.
5 * Written by Edgar E. Iglesias <edgar.iglesias@xilinx.com>
7 * Permission is hereby granted, free of charge, to any person obtaining a copy
8 * of this software and associated documentation files (the "Software"), to deal
9 * in the Software without restriction, including without limitation the rights
10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 * copies of the Software, and to permit persons to whom the Software is
12 * furnished to do so, subject to the following conditions:
14 * The above copyright notice and this permission notice shall be included in
15 * all copies or substantial portions of the Software.
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
26 #include "qemu/osdep.h"
27 #include "hw/sysbus.h"
28 #include "hw/register.h"
30 #include "qemu/bitops.h"
32 #include "migration/vmstate.h"
33 #include "hw/qdev-properties.h"
34 #include "hw/misc/xlnx-versal-pmc-iou-slcr.h"
36 #ifndef XILINX_VERSAL_PMC_IOU_SLCR_ERR_DEBUG
37 #define XILINX_VERSAL_PMC_IOU_SLCR_ERR_DEBUG 0
41 FIELD(MIO_PIN_0
, L3_SEL
, 7, 3)
42 FIELD(MIO_PIN_0
, L2_SEL
, 5, 2)
43 FIELD(MIO_PIN_0
, L1_SEL
, 3, 2)
44 FIELD(MIO_PIN_0
, L0_SEL
, 1, 2)
46 FIELD(MIO_PIN_1
, L3_SEL
, 7, 3)
47 FIELD(MIO_PIN_1
, L2_SEL
, 5, 2)
48 FIELD(MIO_PIN_1
, L1_SEL
, 3, 2)
49 FIELD(MIO_PIN_1
, L0_SEL
, 1, 2)
51 FIELD(MIO_PIN_2
, L3_SEL
, 7, 3)
52 FIELD(MIO_PIN_2
, L2_SEL
, 5, 2)
53 FIELD(MIO_PIN_2
, L1_SEL
, 3, 2)
54 FIELD(MIO_PIN_2
, L0_SEL
, 1, 2)
56 FIELD(MIO_PIN_3
, L3_SEL
, 7, 3)
57 FIELD(MIO_PIN_3
, L2_SEL
, 5, 2)
58 FIELD(MIO_PIN_3
, L1_SEL
, 3, 2)
59 FIELD(MIO_PIN_3
, L0_SEL
, 1, 2)
60 REG32(MIO_PIN_4
, 0x10)
61 FIELD(MIO_PIN_4
, L3_SEL
, 7, 3)
62 FIELD(MIO_PIN_4
, L2_SEL
, 5, 2)
63 FIELD(MIO_PIN_4
, L1_SEL
, 3, 2)
64 FIELD(MIO_PIN_4
, L0_SEL
, 1, 2)
65 REG32(MIO_PIN_5
, 0x14)
66 FIELD(MIO_PIN_5
, L3_SEL
, 7, 3)
67 FIELD(MIO_PIN_5
, L2_SEL
, 5, 2)
68 FIELD(MIO_PIN_5
, L1_SEL
, 3, 2)
69 FIELD(MIO_PIN_5
, L0_SEL
, 1, 2)
70 REG32(MIO_PIN_6
, 0x18)
71 FIELD(MIO_PIN_6
, L3_SEL
, 7, 3)
72 FIELD(MIO_PIN_6
, L2_SEL
, 5, 2)
73 FIELD(MIO_PIN_6
, L1_SEL
, 3, 2)
74 FIELD(MIO_PIN_6
, L0_SEL
, 1, 2)
75 REG32(MIO_PIN_7
, 0x1c)
76 FIELD(MIO_PIN_7
, L3_SEL
, 7, 3)
77 FIELD(MIO_PIN_7
, L2_SEL
, 5, 2)
78 FIELD(MIO_PIN_7
, L1_SEL
, 3, 2)
79 FIELD(MIO_PIN_7
, L0_SEL
, 1, 2)
80 REG32(MIO_PIN_8
, 0x20)
81 FIELD(MIO_PIN_8
, L3_SEL
, 7, 3)
82 FIELD(MIO_PIN_8
, L2_SEL
, 5, 2)
83 FIELD(MIO_PIN_8
, L1_SEL
, 3, 2)
84 FIELD(MIO_PIN_8
, L0_SEL
, 1, 2)
85 REG32(MIO_PIN_9
, 0x24)
86 FIELD(MIO_PIN_9
, L3_SEL
, 7, 3)
87 FIELD(MIO_PIN_9
, L2_SEL
, 5, 2)
88 FIELD(MIO_PIN_9
, L1_SEL
, 3, 2)
89 FIELD(MIO_PIN_9
, L0_SEL
, 1, 2)
90 REG32(MIO_PIN_10
, 0x28)
91 FIELD(MIO_PIN_10
, L3_SEL
, 7, 3)
92 FIELD(MIO_PIN_10
, L2_SEL
, 5, 2)
93 FIELD(MIO_PIN_10
, L1_SEL
, 3, 2)
94 FIELD(MIO_PIN_10
, L0_SEL
, 1, 2)
95 REG32(MIO_PIN_11
, 0x2c)
96 FIELD(MIO_PIN_11
, L3_SEL
, 7, 3)
97 FIELD(MIO_PIN_11
, L2_SEL
, 5, 2)
98 FIELD(MIO_PIN_11
, L1_SEL
, 3, 2)
99 FIELD(MIO_PIN_11
, L0_SEL
, 1, 2)
100 REG32(MIO_PIN_12
, 0x30)
101 FIELD(MIO_PIN_12
, L3_SEL
, 7, 3)
102 FIELD(MIO_PIN_12
, L2_SEL
, 5, 2)
103 FIELD(MIO_PIN_12
, L1_SEL
, 3, 2)
104 FIELD(MIO_PIN_12
, L0_SEL
, 1, 2)
105 REG32(MIO_PIN_13
, 0x34)
106 FIELD(MIO_PIN_13
, L3_SEL
, 7, 3)
107 FIELD(MIO_PIN_13
, L2_SEL
, 5, 2)
108 FIELD(MIO_PIN_13
, L1_SEL
, 3, 2)
109 FIELD(MIO_PIN_13
, L0_SEL
, 1, 2)
110 REG32(MIO_PIN_14
, 0x38)
111 FIELD(MIO_PIN_14
, L3_SEL
, 7, 3)
112 FIELD(MIO_PIN_14
, L2_SEL
, 5, 2)
113 FIELD(MIO_PIN_14
, L1_SEL
, 3, 2)
114 FIELD(MIO_PIN_14
, L0_SEL
, 1, 2)
115 REG32(MIO_PIN_15
, 0x3c)
116 FIELD(MIO_PIN_15
, L3_SEL
, 7, 3)
117 FIELD(MIO_PIN_15
, L2_SEL
, 5, 2)
118 FIELD(MIO_PIN_15
, L1_SEL
, 3, 2)
119 FIELD(MIO_PIN_15
, L0_SEL
, 1, 2)
120 REG32(MIO_PIN_16
, 0x40)
121 FIELD(MIO_PIN_16
, L3_SEL
, 7, 3)
122 FIELD(MIO_PIN_16
, L2_SEL
, 5, 2)
123 FIELD(MIO_PIN_16
, L1_SEL
, 3, 2)
124 FIELD(MIO_PIN_16
, L0_SEL
, 1, 2)
125 REG32(MIO_PIN_17
, 0x44)
126 FIELD(MIO_PIN_17
, L3_SEL
, 7, 3)
127 FIELD(MIO_PIN_17
, L2_SEL
, 5, 2)
128 FIELD(MIO_PIN_17
, L1_SEL
, 3, 2)
129 FIELD(MIO_PIN_17
, L0_SEL
, 1, 2)
130 REG32(MIO_PIN_18
, 0x48)
131 FIELD(MIO_PIN_18
, L3_SEL
, 7, 3)
132 FIELD(MIO_PIN_18
, L2_SEL
, 5, 2)
133 FIELD(MIO_PIN_18
, L1_SEL
, 3, 2)
134 FIELD(MIO_PIN_18
, L0_SEL
, 1, 2)
135 REG32(MIO_PIN_19
, 0x4c)
136 FIELD(MIO_PIN_19
, L3_SEL
, 7, 3)
137 FIELD(MIO_PIN_19
, L2_SEL
, 5, 2)
138 FIELD(MIO_PIN_19
, L1_SEL
, 3, 2)
139 FIELD(MIO_PIN_19
, L0_SEL
, 1, 2)
140 REG32(MIO_PIN_20
, 0x50)
141 FIELD(MIO_PIN_20
, L3_SEL
, 7, 3)
142 FIELD(MIO_PIN_20
, L2_SEL
, 5, 2)
143 FIELD(MIO_PIN_20
, L1_SEL
, 3, 2)
144 FIELD(MIO_PIN_20
, L0_SEL
, 1, 2)
145 REG32(MIO_PIN_21
, 0x54)
146 FIELD(MIO_PIN_21
, L3_SEL
, 7, 3)
147 FIELD(MIO_PIN_21
, L2_SEL
, 5, 2)
148 FIELD(MIO_PIN_21
, L1_SEL
, 3, 2)
149 FIELD(MIO_PIN_21
, L0_SEL
, 1, 2)
150 REG32(MIO_PIN_22
, 0x58)
151 FIELD(MIO_PIN_22
, L3_SEL
, 7, 3)
152 FIELD(MIO_PIN_22
, L2_SEL
, 5, 2)
153 FIELD(MIO_PIN_22
, L1_SEL
, 3, 2)
154 FIELD(MIO_PIN_22
, L0_SEL
, 1, 2)
155 REG32(MIO_PIN_23
, 0x5c)
156 FIELD(MIO_PIN_23
, L3_SEL
, 7, 3)
157 FIELD(MIO_PIN_23
, L2_SEL
, 5, 2)
158 FIELD(MIO_PIN_23
, L1_SEL
, 3, 2)
159 FIELD(MIO_PIN_23
, L0_SEL
, 1, 2)
160 REG32(MIO_PIN_24
, 0x60)
161 FIELD(MIO_PIN_24
, L3_SEL
, 7, 3)
162 FIELD(MIO_PIN_24
, L2_SEL
, 5, 2)
163 FIELD(MIO_PIN_24
, L1_SEL
, 3, 2)
164 FIELD(MIO_PIN_24
, L0_SEL
, 1, 2)
165 REG32(MIO_PIN_25
, 0x64)
166 FIELD(MIO_PIN_25
, L3_SEL
, 7, 3)
167 FIELD(MIO_PIN_25
, L2_SEL
, 5, 2)
168 FIELD(MIO_PIN_25
, L1_SEL
, 3, 2)
169 FIELD(MIO_PIN_25
, L0_SEL
, 1, 2)
170 REG32(MIO_PIN_26
, 0x68)
171 FIELD(MIO_PIN_26
, L3_SEL
, 7, 3)
172 FIELD(MIO_PIN_26
, L2_SEL
, 5, 2)
173 FIELD(MIO_PIN_26
, L1_SEL
, 3, 2)
174 FIELD(MIO_PIN_26
, L0_SEL
, 1, 2)
175 REG32(MIO_PIN_27
, 0x6c)
176 FIELD(MIO_PIN_27
, L3_SEL
, 7, 3)
177 FIELD(MIO_PIN_27
, L2_SEL
, 5, 2)
178 FIELD(MIO_PIN_27
, L1_SEL
, 3, 2)
179 FIELD(MIO_PIN_27
, L0_SEL
, 1, 2)
180 REG32(MIO_PIN_28
, 0x70)
181 FIELD(MIO_PIN_28
, L3_SEL
, 7, 3)
182 FIELD(MIO_PIN_28
, L2_SEL
, 5, 2)
183 FIELD(MIO_PIN_28
, L1_SEL
, 3, 2)
184 FIELD(MIO_PIN_28
, L0_SEL
, 1, 2)
185 REG32(MIO_PIN_29
, 0x74)
186 FIELD(MIO_PIN_29
, L3_SEL
, 7, 3)
187 FIELD(MIO_PIN_29
, L2_SEL
, 5, 2)
188 FIELD(MIO_PIN_29
, L1_SEL
, 3, 2)
189 FIELD(MIO_PIN_29
, L0_SEL
, 1, 2)
190 REG32(MIO_PIN_30
, 0x78)
191 FIELD(MIO_PIN_30
, L3_SEL
, 7, 3)
192 FIELD(MIO_PIN_30
, L2_SEL
, 5, 2)
193 FIELD(MIO_PIN_30
, L1_SEL
, 3, 2)
194 FIELD(MIO_PIN_30
, L0_SEL
, 1, 2)
195 REG32(MIO_PIN_31
, 0x7c)
196 FIELD(MIO_PIN_31
, L3_SEL
, 7, 3)
197 FIELD(MIO_PIN_31
, L2_SEL
, 5, 2)
198 FIELD(MIO_PIN_31
, L1_SEL
, 3, 2)
199 FIELD(MIO_PIN_31
, L0_SEL
, 1, 2)
200 REG32(MIO_PIN_32
, 0x80)
201 FIELD(MIO_PIN_32
, L3_SEL
, 7, 3)
202 FIELD(MIO_PIN_32
, L2_SEL
, 5, 2)
203 FIELD(MIO_PIN_32
, L1_SEL
, 3, 2)
204 FIELD(MIO_PIN_32
, L0_SEL
, 1, 2)
205 REG32(MIO_PIN_33
, 0x84)
206 FIELD(MIO_PIN_33
, L3_SEL
, 7, 3)
207 FIELD(MIO_PIN_33
, L2_SEL
, 5, 2)
208 FIELD(MIO_PIN_33
, L1_SEL
, 3, 2)
209 FIELD(MIO_PIN_33
, L0_SEL
, 1, 2)
210 REG32(MIO_PIN_34
, 0x88)
211 FIELD(MIO_PIN_34
, L3_SEL
, 7, 3)
212 FIELD(MIO_PIN_34
, L2_SEL
, 5, 2)
213 FIELD(MIO_PIN_34
, L1_SEL
, 3, 2)
214 FIELD(MIO_PIN_34
, L0_SEL
, 1, 2)
215 REG32(MIO_PIN_35
, 0x8c)
216 FIELD(MIO_PIN_35
, L3_SEL
, 7, 3)
217 FIELD(MIO_PIN_35
, L2_SEL
, 5, 2)
218 FIELD(MIO_PIN_35
, L1_SEL
, 3, 2)
219 FIELD(MIO_PIN_35
, L0_SEL
, 1, 2)
220 REG32(MIO_PIN_36
, 0x90)
221 FIELD(MIO_PIN_36
, L3_SEL
, 7, 3)
222 FIELD(MIO_PIN_36
, L2_SEL
, 5, 2)
223 FIELD(MIO_PIN_36
, L1_SEL
, 3, 2)
224 FIELD(MIO_PIN_36
, L0_SEL
, 1, 2)
225 REG32(MIO_PIN_37
, 0x94)
226 FIELD(MIO_PIN_37
, L3_SEL
, 7, 3)
227 FIELD(MIO_PIN_37
, L2_SEL
, 5, 2)
228 FIELD(MIO_PIN_37
, L1_SEL
, 3, 2)
229 FIELD(MIO_PIN_37
, L0_SEL
, 1, 2)
230 REG32(MIO_PIN_38
, 0x98)
231 FIELD(MIO_PIN_38
, L3_SEL
, 7, 3)
232 FIELD(MIO_PIN_38
, L2_SEL
, 5, 2)
233 FIELD(MIO_PIN_38
, L1_SEL
, 3, 2)
234 FIELD(MIO_PIN_38
, L0_SEL
, 1, 2)
235 REG32(MIO_PIN_39
, 0x9c)
236 FIELD(MIO_PIN_39
, L3_SEL
, 7, 3)
237 FIELD(MIO_PIN_39
, L2_SEL
, 5, 2)
238 FIELD(MIO_PIN_39
, L1_SEL
, 3, 2)
239 FIELD(MIO_PIN_39
, L0_SEL
, 1, 2)
240 REG32(MIO_PIN_40
, 0xa0)
241 FIELD(MIO_PIN_40
, L3_SEL
, 7, 3)
242 FIELD(MIO_PIN_40
, L2_SEL
, 5, 2)
243 FIELD(MIO_PIN_40
, L1_SEL
, 3, 2)
244 FIELD(MIO_PIN_40
, L0_SEL
, 1, 2)
245 REG32(MIO_PIN_41
, 0xa4)
246 FIELD(MIO_PIN_41
, L3_SEL
, 7, 3)
247 FIELD(MIO_PIN_41
, L2_SEL
, 5, 2)
248 FIELD(MIO_PIN_41
, L1_SEL
, 3, 2)
249 FIELD(MIO_PIN_41
, L0_SEL
, 1, 2)
250 REG32(MIO_PIN_42
, 0xa8)
251 FIELD(MIO_PIN_42
, L3_SEL
, 7, 3)
252 FIELD(MIO_PIN_42
, L2_SEL
, 5, 2)
253 FIELD(MIO_PIN_42
, L1_SEL
, 3, 2)
254 FIELD(MIO_PIN_42
, L0_SEL
, 1, 2)
255 REG32(MIO_PIN_43
, 0xac)
256 FIELD(MIO_PIN_43
, L3_SEL
, 7, 3)
257 FIELD(MIO_PIN_43
, L2_SEL
, 5, 2)
258 FIELD(MIO_PIN_43
, L1_SEL
, 3, 2)
259 FIELD(MIO_PIN_43
, L0_SEL
, 1, 2)
260 REG32(MIO_PIN_44
, 0xb0)
261 FIELD(MIO_PIN_44
, L3_SEL
, 7, 3)
262 FIELD(MIO_PIN_44
, L2_SEL
, 5, 2)
263 FIELD(MIO_PIN_44
, L1_SEL
, 3, 2)
264 FIELD(MIO_PIN_44
, L0_SEL
, 1, 2)
265 REG32(MIO_PIN_45
, 0xb4)
266 FIELD(MIO_PIN_45
, L3_SEL
, 7, 3)
267 FIELD(MIO_PIN_45
, L2_SEL
, 5, 2)
268 FIELD(MIO_PIN_45
, L1_SEL
, 3, 2)
269 FIELD(MIO_PIN_45
, L0_SEL
, 1, 2)
270 REG32(MIO_PIN_46
, 0xb8)
271 FIELD(MIO_PIN_46
, L3_SEL
, 7, 3)
272 FIELD(MIO_PIN_46
, L2_SEL
, 5, 2)
273 FIELD(MIO_PIN_46
, L1_SEL
, 3, 2)
274 FIELD(MIO_PIN_46
, L0_SEL
, 1, 2)
275 REG32(MIO_PIN_47
, 0xbc)
276 FIELD(MIO_PIN_47
, L3_SEL
, 7, 3)
277 FIELD(MIO_PIN_47
, L2_SEL
, 5, 2)
278 FIELD(MIO_PIN_47
, L1_SEL
, 3, 2)
279 FIELD(MIO_PIN_47
, L0_SEL
, 1, 2)
280 REG32(MIO_PIN_48
, 0xc0)
281 FIELD(MIO_PIN_48
, L3_SEL
, 7, 3)
282 FIELD(MIO_PIN_48
, L2_SEL
, 5, 2)
283 FIELD(MIO_PIN_48
, L1_SEL
, 3, 2)
284 FIELD(MIO_PIN_48
, L0_SEL
, 1, 2)
285 REG32(MIO_PIN_49
, 0xc4)
286 FIELD(MIO_PIN_49
, L3_SEL
, 7, 3)
287 FIELD(MIO_PIN_49
, L2_SEL
, 5, 2)
288 FIELD(MIO_PIN_49
, L1_SEL
, 3, 2)
289 FIELD(MIO_PIN_49
, L0_SEL
, 1, 2)
290 REG32(MIO_PIN_50
, 0xc8)
291 FIELD(MIO_PIN_50
, L3_SEL
, 7, 3)
292 FIELD(MIO_PIN_50
, L2_SEL
, 5, 2)
293 FIELD(MIO_PIN_50
, L1_SEL
, 3, 2)
294 FIELD(MIO_PIN_50
, L0_SEL
, 1, 2)
295 REG32(MIO_PIN_51
, 0xcc)
296 FIELD(MIO_PIN_51
, L3_SEL
, 7, 3)
297 FIELD(MIO_PIN_51
, L2_SEL
, 5, 2)
298 FIELD(MIO_PIN_51
, L1_SEL
, 3, 2)
299 FIELD(MIO_PIN_51
, L0_SEL
, 1, 2)
300 REG32(BNK0_EN_RX
, 0x100)
301 FIELD(BNK0_EN_RX
, BNK0_EN_RX
, 0, 26)
302 REG32(BNK0_SEL_RX0
, 0x104)
303 REG32(BNK0_SEL_RX1
, 0x108)
304 FIELD(BNK0_SEL_RX1
, BNK0_SEL_RX
, 0, 20)
305 REG32(BNK0_EN_RX_SCHMITT_HYST
, 0x10c)
306 FIELD(BNK0_EN_RX_SCHMITT_HYST
, BNK0_EN_RX_SCHMITT_HYST
, 0, 26)
307 REG32(BNK0_EN_WK_PD
, 0x110)
308 FIELD(BNK0_EN_WK_PD
, BNK0_EN_WK_PD
, 0, 26)
309 REG32(BNK0_EN_WK_PU
, 0x114)
310 FIELD(BNK0_EN_WK_PU
, BNK0_EN_WK_PU
, 0, 26)
311 REG32(BNK0_SEL_DRV0
, 0x118)
312 REG32(BNK0_SEL_DRV1
, 0x11c)
313 FIELD(BNK0_SEL_DRV1
, BNK0_SEL_DRV
, 0, 20)
314 REG32(BNK0_SEL_SLEW
, 0x120)
315 FIELD(BNK0_SEL_SLEW
, BNK0_SEL_SLEW
, 0, 26)
316 REG32(BNK0_EN_DFT_OPT_INV
, 0x124)
317 FIELD(BNK0_EN_DFT_OPT_INV
, BNK0_EN_DFT_OPT_INV
, 0, 26)
318 REG32(BNK0_EN_PAD2PAD_LOOPBACK
, 0x128)
319 FIELD(BNK0_EN_PAD2PAD_LOOPBACK
, BNK0_EN_PAD2PAD_LOOPBACK
, 0, 13)
320 REG32(BNK0_RX_SPARE0
, 0x12c)
321 REG32(BNK0_RX_SPARE1
, 0x130)
322 FIELD(BNK0_RX_SPARE1
, BNK0_RX_SPARE
, 0, 20)
323 REG32(BNK0_TX_SPARE0
, 0x134)
324 REG32(BNK0_TX_SPARE1
, 0x138)
325 FIELD(BNK0_TX_SPARE1
, BNK0_TX_SPARE
, 0, 20)
326 REG32(BNK0_SEL_EN1P8
, 0x13c)
327 FIELD(BNK0_SEL_EN1P8
, BNK0_SEL_EN1P8
, 0, 1)
328 REG32(BNK0_EN_B_POR_DETECT
, 0x140)
329 FIELD(BNK0_EN_B_POR_DETECT
, BNK0_EN_B_POR_DETECT
, 0, 1)
330 REG32(BNK0_LPF_BYP_POR_DETECT
, 0x144)
331 FIELD(BNK0_LPF_BYP_POR_DETECT
, BNK0_LPF_BYP_POR_DETECT
, 0, 1)
332 REG32(BNK0_EN_LATCH
, 0x148)
333 FIELD(BNK0_EN_LATCH
, BNK0_EN_LATCH
, 0, 1)
334 REG32(BNK0_VBG_LPF_BYP_B
, 0x14c)
335 FIELD(BNK0_VBG_LPF_BYP_B
, BNK0_VBG_LPF_BYP_B
, 0, 1)
336 REG32(BNK0_EN_AMP_B
, 0x150)
337 FIELD(BNK0_EN_AMP_B
, BNK0_EN_AMP_B
, 0, 2)
338 REG32(BNK0_SPARE_BIAS
, 0x154)
339 FIELD(BNK0_SPARE_BIAS
, BNK0_SPARE_BIAS
, 0, 4)
340 REG32(BNK0_DRIVER_BIAS
, 0x158)
341 FIELD(BNK0_DRIVER_BIAS
, BNK0_DRIVER_BIAS
, 0, 15)
342 REG32(BNK0_VMODE
, 0x15c)
343 FIELD(BNK0_VMODE
, BNK0_VMODE
, 0, 1)
344 REG32(BNK0_SEL_AUX_IO_RX
, 0x160)
345 FIELD(BNK0_SEL_AUX_IO_RX
, BNK0_SEL_AUX_IO_RX
, 0, 26)
346 REG32(BNK0_EN_TX_HS_MODE
, 0x164)
347 FIELD(BNK0_EN_TX_HS_MODE
, BNK0_EN_TX_HS_MODE
, 0, 26)
348 REG32(MIO_MST_TRI0
, 0x200)
349 FIELD(MIO_MST_TRI0
, PIN_25_TRI
, 25, 1)
350 FIELD(MIO_MST_TRI0
, PIN_24_TRI
, 24, 1)
351 FIELD(MIO_MST_TRI0
, PIN_23_TRI
, 23, 1)
352 FIELD(MIO_MST_TRI0
, PIN_22_TRI
, 22, 1)
353 FIELD(MIO_MST_TRI0
, PIN_21_TRI
, 21, 1)
354 FIELD(MIO_MST_TRI0
, PIN_20_TRI
, 20, 1)
355 FIELD(MIO_MST_TRI0
, PIN_19_TRI
, 19, 1)
356 FIELD(MIO_MST_TRI0
, PIN_18_TRI
, 18, 1)
357 FIELD(MIO_MST_TRI0
, PIN_17_TRI
, 17, 1)
358 FIELD(MIO_MST_TRI0
, PIN_16_TRI
, 16, 1)
359 FIELD(MIO_MST_TRI0
, PIN_15_TRI
, 15, 1)
360 FIELD(MIO_MST_TRI0
, PIN_14_TRI
, 14, 1)
361 FIELD(MIO_MST_TRI0
, PIN_13_TRI
, 13, 1)
362 FIELD(MIO_MST_TRI0
, PIN_12_TRI
, 12, 1)
363 FIELD(MIO_MST_TRI0
, PIN_11_TRI
, 11, 1)
364 FIELD(MIO_MST_TRI0
, PIN_10_TRI
, 10, 1)
365 FIELD(MIO_MST_TRI0
, PIN_09_TRI
, 9, 1)
366 FIELD(MIO_MST_TRI0
, PIN_08_TRI
, 8, 1)
367 FIELD(MIO_MST_TRI0
, PIN_07_TRI
, 7, 1)
368 FIELD(MIO_MST_TRI0
, PIN_06_TRI
, 6, 1)
369 FIELD(MIO_MST_TRI0
, PIN_05_TRI
, 5, 1)
370 FIELD(MIO_MST_TRI0
, PIN_04_TRI
, 4, 1)
371 FIELD(MIO_MST_TRI0
, PIN_03_TRI
, 3, 1)
372 FIELD(MIO_MST_TRI0
, PIN_02_TRI
, 2, 1)
373 FIELD(MIO_MST_TRI0
, PIN_01_TRI
, 1, 1)
374 FIELD(MIO_MST_TRI0
, PIN_00_TRI
, 0, 1)
375 REG32(MIO_MST_TRI1
, 0x204)
376 FIELD(MIO_MST_TRI1
, PIN_51_TRI
, 25, 1)
377 FIELD(MIO_MST_TRI1
, PIN_50_TRI
, 24, 1)
378 FIELD(MIO_MST_TRI1
, PIN_49_TRI
, 23, 1)
379 FIELD(MIO_MST_TRI1
, PIN_48_TRI
, 22, 1)
380 FIELD(MIO_MST_TRI1
, PIN_47_TRI
, 21, 1)
381 FIELD(MIO_MST_TRI1
, PIN_46_TRI
, 20, 1)
382 FIELD(MIO_MST_TRI1
, PIN_45_TRI
, 19, 1)
383 FIELD(MIO_MST_TRI1
, PIN_44_TRI
, 18, 1)
384 FIELD(MIO_MST_TRI1
, PIN_43_TRI
, 17, 1)
385 FIELD(MIO_MST_TRI1
, PIN_42_TRI
, 16, 1)
386 FIELD(MIO_MST_TRI1
, PIN_41_TRI
, 15, 1)
387 FIELD(MIO_MST_TRI1
, PIN_40_TRI
, 14, 1)
388 FIELD(MIO_MST_TRI1
, PIN_39_TRI
, 13, 1)
389 FIELD(MIO_MST_TRI1
, PIN_38_TRI
, 12, 1)
390 FIELD(MIO_MST_TRI1
, PIN_37_TRI
, 11, 1)
391 FIELD(MIO_MST_TRI1
, PIN_36_TRI
, 10, 1)
392 FIELD(MIO_MST_TRI1
, PIN_35_TRI
, 9, 1)
393 FIELD(MIO_MST_TRI1
, PIN_34_TRI
, 8, 1)
394 FIELD(MIO_MST_TRI1
, PIN_33_TRI
, 7, 1)
395 FIELD(MIO_MST_TRI1
, PIN_32_TRI
, 6, 1)
396 FIELD(MIO_MST_TRI1
, PIN_31_TRI
, 5, 1)
397 FIELD(MIO_MST_TRI1
, PIN_30_TRI
, 4, 1)
398 FIELD(MIO_MST_TRI1
, PIN_29_TRI
, 3, 1)
399 FIELD(MIO_MST_TRI1
, PIN_28_TRI
, 2, 1)
400 FIELD(MIO_MST_TRI1
, PIN_27_TRI
, 1, 1)
401 FIELD(MIO_MST_TRI1
, PIN_26_TRI
, 0, 1)
402 REG32(BNK1_EN_RX
, 0x300)
403 FIELD(BNK1_EN_RX
, BNK1_EN_RX
, 0, 26)
404 REG32(BNK1_SEL_RX0
, 0x304)
405 REG32(BNK1_SEL_RX1
, 0x308)
406 FIELD(BNK1_SEL_RX1
, BNK1_SEL_RX
, 0, 20)
407 REG32(BNK1_EN_RX_SCHMITT_HYST
, 0x30c)
408 FIELD(BNK1_EN_RX_SCHMITT_HYST
, BNK1_EN_RX_SCHMITT_HYST
, 0, 26)
409 REG32(BNK1_EN_WK_PD
, 0x310)
410 FIELD(BNK1_EN_WK_PD
, BNK1_EN_WK_PD
, 0, 26)
411 REG32(BNK1_EN_WK_PU
, 0x314)
412 FIELD(BNK1_EN_WK_PU
, BNK1_EN_WK_PU
, 0, 26)
413 REG32(BNK1_SEL_DRV0
, 0x318)
414 REG32(BNK1_SEL_DRV1
, 0x31c)
415 FIELD(BNK1_SEL_DRV1
, BNK1_SEL_DRV
, 0, 20)
416 REG32(BNK1_SEL_SLEW
, 0x320)
417 FIELD(BNK1_SEL_SLEW
, BNK1_SEL_SLEW
, 0, 26)
418 REG32(BNK1_EN_DFT_OPT_INV
, 0x324)
419 FIELD(BNK1_EN_DFT_OPT_INV
, BNK1_EN_DFT_OPT_INV
, 0, 26)
420 REG32(BNK1_EN_PAD2PAD_LOOPBACK
, 0x328)
421 FIELD(BNK1_EN_PAD2PAD_LOOPBACK
, BNK1_EN_PAD2PAD_LOOPBACK
, 0, 13)
422 REG32(BNK1_RX_SPARE0
, 0x32c)
423 REG32(BNK1_RX_SPARE1
, 0x330)
424 FIELD(BNK1_RX_SPARE1
, BNK1_RX_SPARE
, 0, 20)
425 REG32(BNK1_TX_SPARE0
, 0x334)
426 REG32(BNK1_TX_SPARE1
, 0x338)
427 FIELD(BNK1_TX_SPARE1
, BNK1_TX_SPARE
, 0, 20)
428 REG32(BNK1_SEL_EN1P8
, 0x33c)
429 FIELD(BNK1_SEL_EN1P8
, BNK1_SEL_EN1P8
, 0, 1)
430 REG32(BNK1_EN_B_POR_DETECT
, 0x340)
431 FIELD(BNK1_EN_B_POR_DETECT
, BNK1_EN_B_POR_DETECT
, 0, 1)
432 REG32(BNK1_LPF_BYP_POR_DETECT
, 0x344)
433 FIELD(BNK1_LPF_BYP_POR_DETECT
, BNK1_LPF_BYP_POR_DETECT
, 0, 1)
434 REG32(BNK1_EN_LATCH
, 0x348)
435 FIELD(BNK1_EN_LATCH
, BNK1_EN_LATCH
, 0, 1)
436 REG32(BNK1_VBG_LPF_BYP_B
, 0x34c)
437 FIELD(BNK1_VBG_LPF_BYP_B
, BNK1_VBG_LPF_BYP_B
, 0, 1)
438 REG32(BNK1_EN_AMP_B
, 0x350)
439 FIELD(BNK1_EN_AMP_B
, BNK1_EN_AMP_B
, 0, 2)
440 REG32(BNK1_SPARE_BIAS
, 0x354)
441 FIELD(BNK1_SPARE_BIAS
, BNK1_SPARE_BIAS
, 0, 4)
442 REG32(BNK1_DRIVER_BIAS
, 0x358)
443 FIELD(BNK1_DRIVER_BIAS
, BNK1_DRIVER_BIAS
, 0, 15)
444 REG32(BNK1_VMODE
, 0x35c)
445 FIELD(BNK1_VMODE
, BNK1_VMODE
, 0, 1)
446 REG32(BNK1_SEL_AUX_IO_RX
, 0x360)
447 FIELD(BNK1_SEL_AUX_IO_RX
, BNK1_SEL_AUX_IO_RX
, 0, 26)
448 REG32(BNK1_EN_TX_HS_MODE
, 0x364)
449 FIELD(BNK1_EN_TX_HS_MODE
, BNK1_EN_TX_HS_MODE
, 0, 26)
450 REG32(SD0_CLK_CTRL
, 0x400)
451 FIELD(SD0_CLK_CTRL
, SDIO0_FBCLK_SEL
, 2, 1)
452 FIELD(SD0_CLK_CTRL
, SDIO0_RX_SRC_SEL
, 0, 2)
453 REG32(SD0_CTRL_REG
, 0x404)
454 FIELD(SD0_CTRL_REG
, SD0_EMMC_SEL
, 0, 1)
455 REG32(SD0_CONFIG_REG1
, 0x410)
456 FIELD(SD0_CONFIG_REG1
, SD0_BASECLK
, 7, 8)
457 FIELD(SD0_CONFIG_REG1
, SD0_TUNIGCOUNT
, 1, 6)
458 FIELD(SD0_CONFIG_REG1
, SD0_ASYNCWKPENA
, 0, 1)
459 REG32(SD0_CONFIG_REG2
, 0x414)
460 FIELD(SD0_CONFIG_REG2
, SD0_SLOTTYPE
, 12, 2)
461 FIELD(SD0_CONFIG_REG2
, SD0_ASYCINTR
, 11, 1)
462 FIELD(SD0_CONFIG_REG2
, SD0_64BIT
, 10, 1)
463 FIELD(SD0_CONFIG_REG2
, SD0_1P8V
, 9, 1)
464 FIELD(SD0_CONFIG_REG2
, SD0_3P0V
, 8, 1)
465 FIELD(SD0_CONFIG_REG2
, SD0_3P3V
, 7, 1)
466 FIELD(SD0_CONFIG_REG2
, SD0_SUSPRES
, 6, 1)
467 FIELD(SD0_CONFIG_REG2
, SD0_SDMA
, 5, 1)
468 FIELD(SD0_CONFIG_REG2
, SD0_HIGHSPEED
, 4, 1)
469 FIELD(SD0_CONFIG_REG2
, SD0_ADMA2
, 3, 1)
470 FIELD(SD0_CONFIG_REG2
, SD0_8BIT
, 2, 1)
471 FIELD(SD0_CONFIG_REG2
, SD0_MAXBLK
, 0, 2)
472 REG32(SD0_CONFIG_REG3
, 0x418)
473 FIELD(SD0_CONFIG_REG3
, SD0_TUNINGSDR50
, 10, 1)
474 FIELD(SD0_CONFIG_REG3
, SD0_RETUNETMR
, 6, 4)
475 FIELD(SD0_CONFIG_REG3
, SD0_DDRIVER
, 5, 1)
476 FIELD(SD0_CONFIG_REG3
, SD0_CDRIVER
, 4, 1)
477 FIELD(SD0_CONFIG_REG3
, SD0_ADRIVER
, 3, 1)
478 FIELD(SD0_CONFIG_REG3
, SD0_DDR50
, 2, 1)
479 FIELD(SD0_CONFIG_REG3
, SD0_SDR104
, 1, 1)
480 FIELD(SD0_CONFIG_REG3
, SD0_SDR50
, 0, 1)
481 REG32(SD0_INITPRESET
, 0x41c)
482 FIELD(SD0_INITPRESET
, SD0_INITPRESET
, 0, 13)
483 REG32(SD0_DSPPRESET
, 0x420)
484 FIELD(SD0_DSPPRESET
, SD0_DSPPRESET
, 0, 13)
485 REG32(SD0_HSPDPRESET
, 0x424)
486 FIELD(SD0_HSPDPRESET
, SD0_HSPDPRESET
, 0, 13)
487 REG32(SD0_SDR12PRESET
, 0x428)
488 FIELD(SD0_SDR12PRESET
, SD0_SDR12PRESET
, 0, 13)
489 REG32(SD0_SDR25PRESET
, 0x42c)
490 FIELD(SD0_SDR25PRESET
, SD0_SDR25PRESET
, 0, 13)
491 REG32(SD0_SDR50PRSET
, 0x430)
492 FIELD(SD0_SDR50PRSET
, SD0_SDR50PRESET
, 0, 13)
493 REG32(SD0_SDR104PRST
, 0x434)
494 FIELD(SD0_SDR104PRST
, SD0_SDR104PRESET
, 0, 13)
495 REG32(SD0_DDR50PRESET
, 0x438)
496 FIELD(SD0_DDR50PRESET
, SD0_DDR50PRESET
, 0, 13)
497 REG32(SD0_MAXCUR1P8
, 0x43c)
498 FIELD(SD0_MAXCUR1P8
, SD0_MAXCUR1P8
, 0, 8)
499 REG32(SD0_MAXCUR3P0
, 0x440)
500 FIELD(SD0_MAXCUR3P0
, SD0_MAXCUR3P0
, 0, 8)
501 REG32(SD0_MAXCUR3P3
, 0x444)
502 FIELD(SD0_MAXCUR3P3
, SD0_MAXCUR3P3
, 0, 8)
503 REG32(SD0_DLL_CTRL
, 0x448)
504 FIELD(SD0_DLL_CTRL
, SD0_CLKSTABLE_CFG
, 9, 1)
505 FIELD(SD0_DLL_CTRL
, SD0_DLL_CFG
, 5, 4)
506 FIELD(SD0_DLL_CTRL
, SD0_DLL_PSDONE
, 4, 1)
507 FIELD(SD0_DLL_CTRL
, SD0_DLL_OVF
, 3, 1)
508 FIELD(SD0_DLL_CTRL
, SD0_DLL_RST
, 2, 1)
509 FIELD(SD0_DLL_CTRL
, SD0_DLL_TESTMODE
, 1, 1)
510 FIELD(SD0_DLL_CTRL
, SD0_DLL_LOCK
, 0, 1)
511 REG32(SD0_CDN_CTRL
, 0x44c)
512 FIELD(SD0_CDN_CTRL
, SD0_CDN_CTRL
, 0, 1)
513 REG32(SD0_DLL_TEST
, 0x450)
514 FIELD(SD0_DLL_TEST
, DLL_DIV
, 16, 8)
515 FIELD(SD0_DLL_TEST
, DLL_TX_SEL
, 9, 7)
516 FIELD(SD0_DLL_TEST
, DLL_RX_SEL
, 0, 9)
517 REG32(SD0_RX_TUNING_SEL
, 0x454)
518 FIELD(SD0_RX_TUNING_SEL
, SD0_RX_SEL
, 0, 9)
519 REG32(SD0_DLL_DIV_MAP0
, 0x458)
520 FIELD(SD0_DLL_DIV_MAP0
, DIV_3
, 24, 8)
521 FIELD(SD0_DLL_DIV_MAP0
, DIV_2
, 16, 8)
522 FIELD(SD0_DLL_DIV_MAP0
, DIV_1
, 8, 8)
523 FIELD(SD0_DLL_DIV_MAP0
, DIV_0
, 0, 8)
524 REG32(SD0_DLL_DIV_MAP1
, 0x45c)
525 FIELD(SD0_DLL_DIV_MAP1
, DIV_7
, 24, 8)
526 FIELD(SD0_DLL_DIV_MAP1
, DIV_6
, 16, 8)
527 FIELD(SD0_DLL_DIV_MAP1
, DIV_5
, 8, 8)
528 FIELD(SD0_DLL_DIV_MAP1
, DIV_4
, 0, 8)
529 REG32(SD0_IOU_COHERENT_CTRL
, 0x460)
530 FIELD(SD0_IOU_COHERENT_CTRL
, SD0_AXI_COH
, 0, 4)
531 REG32(SD0_IOU_INTERCONNECT_ROUTE
, 0x464)
532 FIELD(SD0_IOU_INTERCONNECT_ROUTE
, SD0
, 0, 1)
533 REG32(SD0_IOU_RAM
, 0x468)
534 FIELD(SD0_IOU_RAM
, EMASA0
, 6, 1)
535 FIELD(SD0_IOU_RAM
, EMAB0
, 3, 3)
536 FIELD(SD0_IOU_RAM
, EMAA0
, 0, 3)
537 REG32(SD0_IOU_INTERCONNECT_QOS
, 0x46c)
538 FIELD(SD0_IOU_INTERCONNECT_QOS
, SD0_QOS
, 0, 4)
539 REG32(SD1_CLK_CTRL
, 0x480)
540 FIELD(SD1_CLK_CTRL
, SDIO1_FBCLK_SEL
, 1, 1)
541 FIELD(SD1_CLK_CTRL
, SDIO1_RX_SRC_SEL
, 0, 1)
542 REG32(SD1_CTRL_REG
, 0x484)
543 FIELD(SD1_CTRL_REG
, SD1_EMMC_SEL
, 0, 1)
544 REG32(SD1_CONFIG_REG1
, 0x490)
545 FIELD(SD1_CONFIG_REG1
, SD1_BASECLK
, 7, 8)
546 FIELD(SD1_CONFIG_REG1
, SD1_TUNIGCOUNT
, 1, 6)
547 FIELD(SD1_CONFIG_REG1
, SD1_ASYNCWKPENA
, 0, 1)
548 REG32(SD1_CONFIG_REG2
, 0x494)
549 FIELD(SD1_CONFIG_REG2
, SD1_SLOTTYPE
, 12, 2)
550 FIELD(SD1_CONFIG_REG2
, SD1_ASYCINTR
, 11, 1)
551 FIELD(SD1_CONFIG_REG2
, SD1_64BIT
, 10, 1)
552 FIELD(SD1_CONFIG_REG2
, SD1_1P8V
, 9, 1)
553 FIELD(SD1_CONFIG_REG2
, SD1_3P0V
, 8, 1)
554 FIELD(SD1_CONFIG_REG2
, SD1_3P3V
, 7, 1)
555 FIELD(SD1_CONFIG_REG2
, SD1_SUSPRES
, 6, 1)
556 FIELD(SD1_CONFIG_REG2
, SD1_SDMA
, 5, 1)
557 FIELD(SD1_CONFIG_REG2
, SD1_HIGHSPEED
, 4, 1)
558 FIELD(SD1_CONFIG_REG2
, SD1_ADMA2
, 3, 1)
559 FIELD(SD1_CONFIG_REG2
, SD1_8BIT
, 2, 1)
560 FIELD(SD1_CONFIG_REG2
, SD1_MAXBLK
, 0, 2)
561 REG32(SD1_CONFIG_REG3
, 0x498)
562 FIELD(SD1_CONFIG_REG3
, SD1_TUNINGSDR50
, 10, 1)
563 FIELD(SD1_CONFIG_REG3
, SD1_RETUNETMR
, 6, 4)
564 FIELD(SD1_CONFIG_REG3
, SD1_DDRIVER
, 5, 1)
565 FIELD(SD1_CONFIG_REG3
, SD1_CDRIVER
, 4, 1)
566 FIELD(SD1_CONFIG_REG3
, SD1_ADRIVER
, 3, 1)
567 FIELD(SD1_CONFIG_REG3
, SD1_DDR50
, 2, 1)
568 FIELD(SD1_CONFIG_REG3
, SD1_SDR104
, 1, 1)
569 FIELD(SD1_CONFIG_REG3
, SD1_SDR50
, 0, 1)
570 REG32(SD1_INITPRESET
, 0x49c)
571 FIELD(SD1_INITPRESET
, SD1_INITPRESET
, 0, 13)
572 REG32(SD1_DSPPRESET
, 0x4a0)
573 FIELD(SD1_DSPPRESET
, SD1_DSPPRESET
, 0, 13)
574 REG32(SD1_HSPDPRESET
, 0x4a4)
575 FIELD(SD1_HSPDPRESET
, SD1_HSPDPRESET
, 0, 13)
576 REG32(SD1_SDR12PRESET
, 0x4a8)
577 FIELD(SD1_SDR12PRESET
, SD1_SDR12PRESET
, 0, 13)
578 REG32(SD1_SDR25PRESET
, 0x4ac)
579 FIELD(SD1_SDR25PRESET
, SD1_SDR25PRESET
, 0, 13)
580 REG32(SD1_SDR50PRSET
, 0x4b0)
581 FIELD(SD1_SDR50PRSET
, SD1_SDR50PRESET
, 0, 13)
582 REG32(SD1_SDR104PRST
, 0x4b4)
583 FIELD(SD1_SDR104PRST
, SD1_SDR104PRESET
, 0, 13)
584 REG32(SD1_DDR50PRESET
, 0x4b8)
585 FIELD(SD1_DDR50PRESET
, SD1_DDR50PRESET
, 0, 13)
586 REG32(SD1_MAXCUR1P8
, 0x4bc)
587 FIELD(SD1_MAXCUR1P8
, SD1_MAXCUR1P8
, 0, 8)
588 REG32(SD1_MAXCUR3P0
, 0x4c0)
589 FIELD(SD1_MAXCUR3P0
, SD1_MAXCUR3P0
, 0, 8)
590 REG32(SD1_MAXCUR3P3
, 0x4c4)
591 FIELD(SD1_MAXCUR3P3
, SD1_MAXCUR3P3
, 0, 8)
592 REG32(SD1_DLL_CTRL
, 0x4c8)
593 FIELD(SD1_DLL_CTRL
, SD1_CLKSTABLE_CFG
, 9, 1)
594 FIELD(SD1_DLL_CTRL
, SD1_DLL_CFG
, 5, 4)
595 FIELD(SD1_DLL_CTRL
, SD1_DLL_PSDONE
, 4, 1)
596 FIELD(SD1_DLL_CTRL
, SD1_DLL_OVF
, 3, 1)
597 FIELD(SD1_DLL_CTRL
, SD1_DLL_RST
, 2, 1)
598 FIELD(SD1_DLL_CTRL
, SD1_DLL_TESTMODE
, 1, 1)
599 FIELD(SD1_DLL_CTRL
, SD1_DLL_LOCK
, 0, 1)
600 REG32(SD1_CDN_CTRL
, 0x4cc)
601 FIELD(SD1_CDN_CTRL
, SD1_CDN_CTRL
, 0, 1)
602 REG32(SD1_DLL_TEST
, 0x4d0)
603 FIELD(SD1_DLL_TEST
, DLL_DIV
, 16, 8)
604 FIELD(SD1_DLL_TEST
, DLL_TX_SEL
, 9, 7)
605 FIELD(SD1_DLL_TEST
, DLL_RX_SEL
, 0, 9)
606 REG32(SD1_RX_TUNING_SEL
, 0x4d4)
607 FIELD(SD1_RX_TUNING_SEL
, SD1_RX_SEL
, 0, 9)
608 REG32(SD1_DLL_DIV_MAP0
, 0x4d8)
609 FIELD(SD1_DLL_DIV_MAP0
, DIV_3
, 24, 8)
610 FIELD(SD1_DLL_DIV_MAP0
, DIV_2
, 16, 8)
611 FIELD(SD1_DLL_DIV_MAP0
, DIV_1
, 8, 8)
612 FIELD(SD1_DLL_DIV_MAP0
, DIV_0
, 0, 8)
613 REG32(SD1_DLL_DIV_MAP1
, 0x4dc)
614 FIELD(SD1_DLL_DIV_MAP1
, DIV_7
, 24, 8)
615 FIELD(SD1_DLL_DIV_MAP1
, DIV_6
, 16, 8)
616 FIELD(SD1_DLL_DIV_MAP1
, DIV_5
, 8, 8)
617 FIELD(SD1_DLL_DIV_MAP1
, DIV_4
, 0, 8)
618 REG32(SD1_IOU_COHERENT_CTRL
, 0x4e0)
619 FIELD(SD1_IOU_COHERENT_CTRL
, SD1_AXI_COH
, 0, 4)
620 REG32(SD1_IOU_INTERCONNECT_ROUTE
, 0x4e4)
621 FIELD(SD1_IOU_INTERCONNECT_ROUTE
, SD1
, 0, 1)
622 REG32(SD1_IOU_RAM
, 0x4e8)
623 FIELD(SD1_IOU_RAM
, EMASA0
, 6, 1)
624 FIELD(SD1_IOU_RAM
, EMAB0
, 3, 3)
625 FIELD(SD1_IOU_RAM
, EMAA0
, 0, 3)
626 REG32(SD1_IOU_INTERCONNECT_QOS
, 0x4ec)
627 FIELD(SD1_IOU_INTERCONNECT_QOS
, SD1_QOS
, 0, 4)
628 REG32(OSPI_QSPI_IOU_AXI_MUX_SEL
, 0x504)
629 FIELD(OSPI_QSPI_IOU_AXI_MUX_SEL
, OSPI_MUX_SEL
, 1, 1)
630 FIELD(OSPI_QSPI_IOU_AXI_MUX_SEL
, QSPI_OSPI_MUX_SEL
, 0, 1)
631 REG32(QSPI_IOU_COHERENT_CTRL
, 0x508)
632 FIELD(QSPI_IOU_COHERENT_CTRL
, QSPI_AXI_COH
, 0, 4)
633 REG32(QSPI_IOU_INTERCONNECT_ROUTE
, 0x50c)
634 FIELD(QSPI_IOU_INTERCONNECT_ROUTE
, QSPI
, 0, 1)
635 REG32(QSPI_IOU_RAM
, 0x510)
636 FIELD(QSPI_IOU_RAM
, EMASA1
, 13, 1)
637 FIELD(QSPI_IOU_RAM
, EMAB1
, 10, 3)
638 FIELD(QSPI_IOU_RAM
, EMAA1
, 7, 3)
639 FIELD(QSPI_IOU_RAM
, EMASA0
, 6, 1)
640 FIELD(QSPI_IOU_RAM
, EMAB0
, 3, 3)
641 FIELD(QSPI_IOU_RAM
, EMAA0
, 0, 3)
642 REG32(QSPI_IOU_INTERCONNECT_QOS
, 0x514)
643 FIELD(QSPI_IOU_INTERCONNECT_QOS
, QSPI_QOS
, 0, 4)
644 REG32(OSPI_IOU_COHERENT_CTRL
, 0x530)
645 FIELD(OSPI_IOU_COHERENT_CTRL
, OSPI_AXI_COH
, 0, 4)
646 REG32(OSPI_IOU_INTERCONNECT_ROUTE
, 0x534)
647 FIELD(OSPI_IOU_INTERCONNECT_ROUTE
, OSPI
, 0, 1)
648 REG32(OSPI_IOU_RAM
, 0x538)
649 FIELD(OSPI_IOU_RAM
, EMAS0
, 5, 1)
650 FIELD(OSPI_IOU_RAM
, EMAW0
, 3, 2)
651 FIELD(OSPI_IOU_RAM
, EMA0
, 0, 3)
652 REG32(OSPI_IOU_INTERCONNECT_QOS
, 0x53c)
653 FIELD(OSPI_IOU_INTERCONNECT_QOS
, OSPI_QOS
, 0, 4)
654 REG32(OSPI_REFCLK_DLY_CTRL
, 0x540)
655 FIELD(OSPI_REFCLK_DLY_CTRL
, DLY1
, 3, 2)
656 FIELD(OSPI_REFCLK_DLY_CTRL
, DLY0
, 0, 3)
657 REG32(CUR_PWR_ST
, 0x600)
658 FIELD(CUR_PWR_ST
, U2PMU
, 0, 2)
659 REG32(CONNECT_ST
, 0x604)
660 FIELD(CONNECT_ST
, U2PMU
, 0, 1)
661 REG32(PW_STATE_REQ
, 0x608)
662 FIELD(PW_STATE_REQ
, BIT_1_0
, 0, 2)
663 REG32(HOST_U2_PORT_DISABLE
, 0x60c)
664 FIELD(HOST_U2_PORT_DISABLE
, BIT_0
, 0, 1)
665 REG32(DBG_U2PMU
, 0x610)
666 REG32(DBG_U2PMU_EXT1
, 0x614)
667 REG32(DBG_U2PMU_EXT2
, 0x618)
668 FIELD(DBG_U2PMU_EXT2
, BIT_67_64
, 0, 4)
669 REG32(PME_GEN_U2PMU
, 0x61c)
670 FIELD(PME_GEN_U2PMU
, BIT_0
, 0, 1)
671 REG32(PWR_CONFIG_USB2
, 0x620)
672 FIELD(PWR_CONFIG_USB2
, STRAP
, 0, 30)
673 REG32(PHY_HUB
, 0x624)
674 FIELD(PHY_HUB
, VBUS_CTRL
, 1, 1)
675 FIELD(PHY_HUB
, OVER_CURRENT
, 0, 1)
677 FIELD(CTRL
, SLVERR_ENABLE
, 0, 1)
679 FIELD(ISR
, ADDR_DECODE_ERR
, 0, 1)
681 FIELD(IMR
, ADDR_DECODE_ERR
, 0, 1)
683 FIELD(IER
, ADDR_DECODE_ERR
, 0, 1)
685 FIELD(IDR
, ADDR_DECODE_ERR
, 0, 1)
687 FIELD(ITR
, ADDR_DECODE_ERR
, 0, 1)
688 REG32(PARITY_ISR
, 0x814)
689 FIELD(PARITY_ISR
, PERR_AXI_SD1_IOU
, 12, 1)
690 FIELD(PARITY_ISR
, PERR_AXI_SD0_IOU
, 11, 1)
691 FIELD(PARITY_ISR
, PERR_AXI_QSPI_IOU
, 10, 1)
692 FIELD(PARITY_ISR
, PERR_AXI_OSPI_IOU
, 9, 1)
693 FIELD(PARITY_ISR
, PERR_IOU_SD1
, 8, 1)
694 FIELD(PARITY_ISR
, PERR_IOU_SD0
, 7, 1)
695 FIELD(PARITY_ISR
, PERR_IOU_QSPI1
, 6, 1)
696 FIELD(PARITY_ISR
, PERR_IOUSLCR_SECURE_APB
, 5, 1)
697 FIELD(PARITY_ISR
, PERR_IOUSLCR_APB
, 4, 1)
698 FIELD(PARITY_ISR
, PERR_QSPI0_APB
, 3, 1)
699 FIELD(PARITY_ISR
, PERR_OSPI_APB
, 2, 1)
700 FIELD(PARITY_ISR
, PERR_I2C_APB
, 1, 1)
701 FIELD(PARITY_ISR
, PERR_GPIO_APB
, 0, 1)
702 REG32(PARITY_IMR
, 0x818)
703 FIELD(PARITY_IMR
, PERR_AXI_SD1_IOU
, 12, 1)
704 FIELD(PARITY_IMR
, PERR_AXI_SD0_IOU
, 11, 1)
705 FIELD(PARITY_IMR
, PERR_AXI_QSPI_IOU
, 10, 1)
706 FIELD(PARITY_IMR
, PERR_AXI_OSPI_IOU
, 9, 1)
707 FIELD(PARITY_IMR
, PERR_IOU_SD1
, 8, 1)
708 FIELD(PARITY_IMR
, PERR_IOU_SD0
, 7, 1)
709 FIELD(PARITY_IMR
, PERR_IOU_QSPI1
, 6, 1)
710 FIELD(PARITY_IMR
, PERR_IOUSLCR_SECURE_APB
, 5, 1)
711 FIELD(PARITY_IMR
, PERR_IOUSLCR_APB
, 4, 1)
712 FIELD(PARITY_IMR
, PERR_QSPI0_APB
, 3, 1)
713 FIELD(PARITY_IMR
, PERR_OSPI_APB
, 2, 1)
714 FIELD(PARITY_IMR
, PERR_I2C_APB
, 1, 1)
715 FIELD(PARITY_IMR
, PERR_GPIO_APB
, 0, 1)
716 REG32(PARITY_IER
, 0x81c)
717 FIELD(PARITY_IER
, PERR_AXI_SD1_IOU
, 12, 1)
718 FIELD(PARITY_IER
, PERR_AXI_SD0_IOU
, 11, 1)
719 FIELD(PARITY_IER
, PERR_AXI_QSPI_IOU
, 10, 1)
720 FIELD(PARITY_IER
, PERR_AXI_OSPI_IOU
, 9, 1)
721 FIELD(PARITY_IER
, PERR_IOU_SD1
, 8, 1)
722 FIELD(PARITY_IER
, PERR_IOU_SD0
, 7, 1)
723 FIELD(PARITY_IER
, PERR_IOU_QSPI1
, 6, 1)
724 FIELD(PARITY_IER
, PERR_IOUSLCR_SECURE_APB
, 5, 1)
725 FIELD(PARITY_IER
, PERR_IOUSLCR_APB
, 4, 1)
726 FIELD(PARITY_IER
, PERR_QSPI0_APB
, 3, 1)
727 FIELD(PARITY_IER
, PERR_OSPI_APB
, 2, 1)
728 FIELD(PARITY_IER
, PERR_I2C_APB
, 1, 1)
729 FIELD(PARITY_IER
, PERR_GPIO_APB
, 0, 1)
730 REG32(PARITY_IDR
, 0x820)
731 FIELD(PARITY_IDR
, PERR_AXI_SD1_IOU
, 12, 1)
732 FIELD(PARITY_IDR
, PERR_AXI_SD0_IOU
, 11, 1)
733 FIELD(PARITY_IDR
, PERR_AXI_QSPI_IOU
, 10, 1)
734 FIELD(PARITY_IDR
, PERR_AXI_OSPI_IOU
, 9, 1)
735 FIELD(PARITY_IDR
, PERR_IOU_SD1
, 8, 1)
736 FIELD(PARITY_IDR
, PERR_IOU_SD0
, 7, 1)
737 FIELD(PARITY_IDR
, PERR_IOU_QSPI1
, 6, 1)
738 FIELD(PARITY_IDR
, PERR_IOUSLCR_SECURE_APB
, 5, 1)
739 FIELD(PARITY_IDR
, PERR_IOUSLCR_APB
, 4, 1)
740 FIELD(PARITY_IDR
, PERR_QSPI0_APB
, 3, 1)
741 FIELD(PARITY_IDR
, PERR_OSPI_APB
, 2, 1)
742 FIELD(PARITY_IDR
, PERR_I2C_APB
, 1, 1)
743 FIELD(PARITY_IDR
, PERR_GPIO_APB
, 0, 1)
744 REG32(PARITY_ITR
, 0x824)
745 FIELD(PARITY_ITR
, PERR_AXI_SD1_IOU
, 12, 1)
746 FIELD(PARITY_ITR
, PERR_AXI_SD0_IOU
, 11, 1)
747 FIELD(PARITY_ITR
, PERR_AXI_QSPI_IOU
, 10, 1)
748 FIELD(PARITY_ITR
, PERR_AXI_OSPI_IOU
, 9, 1)
749 FIELD(PARITY_ITR
, PERR_IOU_SD1
, 8, 1)
750 FIELD(PARITY_ITR
, PERR_IOU_SD0
, 7, 1)
751 FIELD(PARITY_ITR
, PERR_IOU_QSPI1
, 6, 1)
752 FIELD(PARITY_ITR
, PERR_IOUSLCR_SECURE_APB
, 5, 1)
753 FIELD(PARITY_ITR
, PERR_IOUSLCR_APB
, 4, 1)
754 FIELD(PARITY_ITR
, PERR_QSPI0_APB
, 3, 1)
755 FIELD(PARITY_ITR
, PERR_OSPI_APB
, 2, 1)
756 FIELD(PARITY_ITR
, PERR_I2C_APB
, 1, 1)
757 FIELD(PARITY_ITR
, PERR_GPIO_APB
, 0, 1)
759 FIELD(WPROT0
, ACTIVE
, 0, 1)
761 static void parity_imr_update_irq(XlnxVersalPmcIouSlcr
*s
)
763 bool pending
= s
->regs
[R_PARITY_ISR
] & ~s
->regs
[R_PARITY_IMR
];
764 qemu_set_irq(s
->irq_parity_imr
, pending
);
767 static void parity_isr_postw(RegisterInfo
*reg
, uint64_t val64
)
769 XlnxVersalPmcIouSlcr
*s
= XILINX_VERSAL_PMC_IOU_SLCR(reg
->opaque
);
770 parity_imr_update_irq(s
);
773 static uint64_t parity_ier_prew(RegisterInfo
*reg
, uint64_t val64
)
775 XlnxVersalPmcIouSlcr
*s
= XILINX_VERSAL_PMC_IOU_SLCR(reg
->opaque
);
776 uint32_t val
= val64
;
778 s
->regs
[R_PARITY_IMR
] &= ~val
;
779 parity_imr_update_irq(s
);
783 static uint64_t parity_idr_prew(RegisterInfo
*reg
, uint64_t val64
)
785 XlnxVersalPmcIouSlcr
*s
= XILINX_VERSAL_PMC_IOU_SLCR(reg
->opaque
);
786 uint32_t val
= val64
;
788 s
->regs
[R_PARITY_IMR
] |= val
;
789 parity_imr_update_irq(s
);
793 static uint64_t parity_itr_prew(RegisterInfo
*reg
, uint64_t val64
)
795 XlnxVersalPmcIouSlcr
*s
= XILINX_VERSAL_PMC_IOU_SLCR(reg
->opaque
);
796 uint32_t val
= val64
;
798 s
->regs
[R_PARITY_ISR
] |= val
;
799 parity_imr_update_irq(s
);
803 static void imr_update_irq(XlnxVersalPmcIouSlcr
*s
)
805 bool pending
= s
->regs
[R_ISR
] & ~s
->regs
[R_IMR
];
806 qemu_set_irq(s
->irq_imr
, pending
);
809 static void isr_postw(RegisterInfo
*reg
, uint64_t val64
)
811 XlnxVersalPmcIouSlcr
*s
= XILINX_VERSAL_PMC_IOU_SLCR(reg
->opaque
);
815 static uint64_t ier_prew(RegisterInfo
*reg
, uint64_t val64
)
817 XlnxVersalPmcIouSlcr
*s
= XILINX_VERSAL_PMC_IOU_SLCR(reg
->opaque
);
818 uint32_t val
= val64
;
820 s
->regs
[R_IMR
] &= ~val
;
825 static uint64_t idr_prew(RegisterInfo
*reg
, uint64_t val64
)
827 XlnxVersalPmcIouSlcr
*s
= XILINX_VERSAL_PMC_IOU_SLCR(reg
->opaque
);
828 uint32_t val
= val64
;
830 s
->regs
[R_IMR
] |= val
;
835 static uint64_t itr_prew(RegisterInfo
*reg
, uint64_t val64
)
837 XlnxVersalPmcIouSlcr
*s
= XILINX_VERSAL_PMC_IOU_SLCR(reg
->opaque
);
838 uint32_t val
= val64
;
840 s
->regs
[R_ISR
] |= val
;
845 static uint64_t sd0_ctrl_reg_prew(RegisterInfo
*reg
, uint64_t val64
)
847 XlnxVersalPmcIouSlcr
*s
= XILINX_VERSAL_PMC_IOU_SLCR(reg
->opaque
);
848 uint32_t prev
= ARRAY_FIELD_EX32(s
->regs
, SD0_CTRL_REG
, SD0_EMMC_SEL
);
850 if (prev
!= (val64
& R_SD0_CTRL_REG_SD0_EMMC_SEL_MASK
)) {
851 qemu_set_irq(s
->sd_emmc_sel
[0], !!val64
);
857 static uint64_t sd1_ctrl_reg_prew(RegisterInfo
*reg
, uint64_t val64
)
859 XlnxVersalPmcIouSlcr
*s
= XILINX_VERSAL_PMC_IOU_SLCR(reg
->opaque
);
860 uint32_t prev
= ARRAY_FIELD_EX32(s
->regs
, SD1_CTRL_REG
, SD1_EMMC_SEL
);
862 if (prev
!= (val64
& R_SD1_CTRL_REG_SD1_EMMC_SEL_MASK
)) {
863 qemu_set_irq(s
->sd_emmc_sel
[1], !!val64
);
869 static uint64_t ospi_qspi_iou_axi_mux_sel_prew(RegisterInfo
*reg
,
872 XlnxVersalPmcIouSlcr
*s
= XILINX_VERSAL_PMC_IOU_SLCR(reg
->opaque
);
873 uint32_t val32
= (uint32_t) val64
;
874 uint8_t ospi_mux_sel
= FIELD_EX32(val32
, OSPI_QSPI_IOU_AXI_MUX_SEL
,
876 uint8_t qspi_ospi_mux_sel
= FIELD_EX32(val32
, OSPI_QSPI_IOU_AXI_MUX_SEL
,
880 ARRAY_FIELD_EX32(s
->regs
, OSPI_QSPI_IOU_AXI_MUX_SEL
, OSPI_MUX_SEL
)) {
881 qemu_set_irq(s
->ospi_mux_sel
, !!ospi_mux_sel
);
884 if (qspi_ospi_mux_sel
!=
885 ARRAY_FIELD_EX32(s
->regs
, OSPI_QSPI_IOU_AXI_MUX_SEL
,
886 QSPI_OSPI_MUX_SEL
)) {
887 qemu_set_irq(s
->qspi_ospi_mux_sel
, !!qspi_ospi_mux_sel
);
893 static RegisterAccessInfo pmc_iou_slcr_regs_info
[] = {
894 { .name
= "MIO_PIN_0", .addr
= A_MIO_PIN_0
,
896 },{ .name
= "MIO_PIN_1", .addr
= A_MIO_PIN_1
,
898 },{ .name
= "MIO_PIN_2", .addr
= A_MIO_PIN_2
,
900 },{ .name
= "MIO_PIN_3", .addr
= A_MIO_PIN_3
,
902 },{ .name
= "MIO_PIN_4", .addr
= A_MIO_PIN_4
,
904 },{ .name
= "MIO_PIN_5", .addr
= A_MIO_PIN_5
,
906 },{ .name
= "MIO_PIN_6", .addr
= A_MIO_PIN_6
,
908 },{ .name
= "MIO_PIN_7", .addr
= A_MIO_PIN_7
,
910 },{ .name
= "MIO_PIN_8", .addr
= A_MIO_PIN_8
,
912 },{ .name
= "MIO_PIN_9", .addr
= A_MIO_PIN_9
,
914 },{ .name
= "MIO_PIN_10", .addr
= A_MIO_PIN_10
,
916 },{ .name
= "MIO_PIN_11", .addr
= A_MIO_PIN_11
,
918 },{ .name
= "MIO_PIN_12", .addr
= A_MIO_PIN_12
,
920 },{ .name
= "MIO_PIN_13", .addr
= A_MIO_PIN_13
,
922 },{ .name
= "MIO_PIN_14", .addr
= A_MIO_PIN_14
,
924 },{ .name
= "MIO_PIN_15", .addr
= A_MIO_PIN_15
,
926 },{ .name
= "MIO_PIN_16", .addr
= A_MIO_PIN_16
,
928 },{ .name
= "MIO_PIN_17", .addr
= A_MIO_PIN_17
,
930 },{ .name
= "MIO_PIN_18", .addr
= A_MIO_PIN_18
,
932 },{ .name
= "MIO_PIN_19", .addr
= A_MIO_PIN_19
,
934 },{ .name
= "MIO_PIN_20", .addr
= A_MIO_PIN_20
,
936 },{ .name
= "MIO_PIN_21", .addr
= A_MIO_PIN_21
,
938 },{ .name
= "MIO_PIN_22", .addr
= A_MIO_PIN_22
,
940 },{ .name
= "MIO_PIN_23", .addr
= A_MIO_PIN_23
,
942 },{ .name
= "MIO_PIN_24", .addr
= A_MIO_PIN_24
,
944 },{ .name
= "MIO_PIN_25", .addr
= A_MIO_PIN_25
,
946 },{ .name
= "MIO_PIN_26", .addr
= A_MIO_PIN_26
,
948 },{ .name
= "MIO_PIN_27", .addr
= A_MIO_PIN_27
,
950 },{ .name
= "MIO_PIN_28", .addr
= A_MIO_PIN_28
,
952 },{ .name
= "MIO_PIN_29", .addr
= A_MIO_PIN_29
,
954 },{ .name
= "MIO_PIN_30", .addr
= A_MIO_PIN_30
,
956 },{ .name
= "MIO_PIN_31", .addr
= A_MIO_PIN_31
,
958 },{ .name
= "MIO_PIN_32", .addr
= A_MIO_PIN_32
,
960 },{ .name
= "MIO_PIN_33", .addr
= A_MIO_PIN_33
,
962 },{ .name
= "MIO_PIN_34", .addr
= A_MIO_PIN_34
,
964 },{ .name
= "MIO_PIN_35", .addr
= A_MIO_PIN_35
,
966 },{ .name
= "MIO_PIN_36", .addr
= A_MIO_PIN_36
,
968 },{ .name
= "MIO_PIN_37", .addr
= A_MIO_PIN_37
,
970 },{ .name
= "MIO_PIN_38", .addr
= A_MIO_PIN_38
,
972 },{ .name
= "MIO_PIN_39", .addr
= A_MIO_PIN_39
,
974 },{ .name
= "MIO_PIN_40", .addr
= A_MIO_PIN_40
,
976 },{ .name
= "MIO_PIN_41", .addr
= A_MIO_PIN_41
,
978 },{ .name
= "MIO_PIN_42", .addr
= A_MIO_PIN_42
,
980 },{ .name
= "MIO_PIN_43", .addr
= A_MIO_PIN_43
,
982 },{ .name
= "MIO_PIN_44", .addr
= A_MIO_PIN_44
,
984 },{ .name
= "MIO_PIN_45", .addr
= A_MIO_PIN_45
,
986 },{ .name
= "MIO_PIN_46", .addr
= A_MIO_PIN_46
,
988 },{ .name
= "MIO_PIN_47", .addr
= A_MIO_PIN_47
,
990 },{ .name
= "MIO_PIN_48", .addr
= A_MIO_PIN_48
,
992 },{ .name
= "MIO_PIN_49", .addr
= A_MIO_PIN_49
,
994 },{ .name
= "MIO_PIN_50", .addr
= A_MIO_PIN_50
,
996 },{ .name
= "MIO_PIN_51", .addr
= A_MIO_PIN_51
,
998 },{ .name
= "BNK0_EN_RX", .addr
= A_BNK0_EN_RX
,
1001 },{ .name
= "BNK0_SEL_RX0", .addr
= A_BNK0_SEL_RX0
,
1002 .reset
= 0xffffffff,
1003 },{ .name
= "BNK0_SEL_RX1", .addr
= A_BNK0_SEL_RX1
,
1006 },{ .name
= "BNK0_EN_RX_SCHMITT_HYST", .addr
= A_BNK0_EN_RX_SCHMITT_HYST
,
1008 },{ .name
= "BNK0_EN_WK_PD", .addr
= A_BNK0_EN_WK_PD
,
1010 },{ .name
= "BNK0_EN_WK_PU", .addr
= A_BNK0_EN_WK_PU
,
1013 },{ .name
= "BNK0_SEL_DRV0", .addr
= A_BNK0_SEL_DRV0
,
1014 .reset
= 0xffffffff,
1015 },{ .name
= "BNK0_SEL_DRV1", .addr
= A_BNK0_SEL_DRV1
,
1018 },{ .name
= "BNK0_SEL_SLEW", .addr
= A_BNK0_SEL_SLEW
,
1020 },{ .name
= "BNK0_EN_DFT_OPT_INV", .addr
= A_BNK0_EN_DFT_OPT_INV
,
1022 },{ .name
= "BNK0_EN_PAD2PAD_LOOPBACK",
1023 .addr
= A_BNK0_EN_PAD2PAD_LOOPBACK
,
1025 },{ .name
= "BNK0_RX_SPARE0", .addr
= A_BNK0_RX_SPARE0
,
1026 },{ .name
= "BNK0_RX_SPARE1", .addr
= A_BNK0_RX_SPARE1
,
1028 },{ .name
= "BNK0_TX_SPARE0", .addr
= A_BNK0_TX_SPARE0
,
1029 },{ .name
= "BNK0_TX_SPARE1", .addr
= A_BNK0_TX_SPARE1
,
1031 },{ .name
= "BNK0_SEL_EN1P8", .addr
= A_BNK0_SEL_EN1P8
,
1033 },{ .name
= "BNK0_EN_B_POR_DETECT", .addr
= A_BNK0_EN_B_POR_DETECT
,
1035 },{ .name
= "BNK0_LPF_BYP_POR_DETECT", .addr
= A_BNK0_LPF_BYP_POR_DETECT
,
1038 },{ .name
= "BNK0_EN_LATCH", .addr
= A_BNK0_EN_LATCH
,
1040 },{ .name
= "BNK0_VBG_LPF_BYP_B", .addr
= A_BNK0_VBG_LPF_BYP_B
,
1043 },{ .name
= "BNK0_EN_AMP_B", .addr
= A_BNK0_EN_AMP_B
,
1045 },{ .name
= "BNK0_SPARE_BIAS", .addr
= A_BNK0_SPARE_BIAS
,
1047 },{ .name
= "BNK0_DRIVER_BIAS", .addr
= A_BNK0_DRIVER_BIAS
,
1049 },{ .name
= "BNK0_VMODE", .addr
= A_BNK0_VMODE
,
1052 },{ .name
= "BNK0_SEL_AUX_IO_RX", .addr
= A_BNK0_SEL_AUX_IO_RX
,
1054 },{ .name
= "BNK0_EN_TX_HS_MODE", .addr
= A_BNK0_EN_TX_HS_MODE
,
1056 },{ .name
= "MIO_MST_TRI0", .addr
= A_MIO_MST_TRI0
,
1059 },{ .name
= "MIO_MST_TRI1", .addr
= A_MIO_MST_TRI1
,
1062 },{ .name
= "BNK1_EN_RX", .addr
= A_BNK1_EN_RX
,
1065 },{ .name
= "BNK1_SEL_RX0", .addr
= A_BNK1_SEL_RX0
,
1066 .reset
= 0xffffffff,
1067 },{ .name
= "BNK1_SEL_RX1", .addr
= A_BNK1_SEL_RX1
,
1070 },{ .name
= "BNK1_EN_RX_SCHMITT_HYST", .addr
= A_BNK1_EN_RX_SCHMITT_HYST
,
1072 },{ .name
= "BNK1_EN_WK_PD", .addr
= A_BNK1_EN_WK_PD
,
1074 },{ .name
= "BNK1_EN_WK_PU", .addr
= A_BNK1_EN_WK_PU
,
1077 },{ .name
= "BNK1_SEL_DRV0", .addr
= A_BNK1_SEL_DRV0
,
1078 .reset
= 0xffffffff,
1079 },{ .name
= "BNK1_SEL_DRV1", .addr
= A_BNK1_SEL_DRV1
,
1082 },{ .name
= "BNK1_SEL_SLEW", .addr
= A_BNK1_SEL_SLEW
,
1084 },{ .name
= "BNK1_EN_DFT_OPT_INV", .addr
= A_BNK1_EN_DFT_OPT_INV
,
1086 },{ .name
= "BNK1_EN_PAD2PAD_LOOPBACK",
1087 .addr
= A_BNK1_EN_PAD2PAD_LOOPBACK
,
1089 },{ .name
= "BNK1_RX_SPARE0", .addr
= A_BNK1_RX_SPARE0
,
1090 },{ .name
= "BNK1_RX_SPARE1", .addr
= A_BNK1_RX_SPARE1
,
1092 },{ .name
= "BNK1_TX_SPARE0", .addr
= A_BNK1_TX_SPARE0
,
1093 },{ .name
= "BNK1_TX_SPARE1", .addr
= A_BNK1_TX_SPARE1
,
1095 },{ .name
= "BNK1_SEL_EN1P8", .addr
= A_BNK1_SEL_EN1P8
,
1097 },{ .name
= "BNK1_EN_B_POR_DETECT", .addr
= A_BNK1_EN_B_POR_DETECT
,
1099 },{ .name
= "BNK1_LPF_BYP_POR_DETECT", .addr
= A_BNK1_LPF_BYP_POR_DETECT
,
1102 },{ .name
= "BNK1_EN_LATCH", .addr
= A_BNK1_EN_LATCH
,
1104 },{ .name
= "BNK1_VBG_LPF_BYP_B", .addr
= A_BNK1_VBG_LPF_BYP_B
,
1107 },{ .name
= "BNK1_EN_AMP_B", .addr
= A_BNK1_EN_AMP_B
,
1109 },{ .name
= "BNK1_SPARE_BIAS", .addr
= A_BNK1_SPARE_BIAS
,
1111 },{ .name
= "BNK1_DRIVER_BIAS", .addr
= A_BNK1_DRIVER_BIAS
,
1113 },{ .name
= "BNK1_VMODE", .addr
= A_BNK1_VMODE
,
1116 },{ .name
= "BNK1_SEL_AUX_IO_RX", .addr
= A_BNK1_SEL_AUX_IO_RX
,
1118 },{ .name
= "BNK1_EN_TX_HS_MODE", .addr
= A_BNK1_EN_TX_HS_MODE
,
1120 },{ .name
= "SD0_CLK_CTRL", .addr
= A_SD0_CLK_CTRL
,
1122 },{ .name
= "SD0_CTRL_REG", .addr
= A_SD0_CTRL_REG
,
1124 .pre_write
= sd0_ctrl_reg_prew
,
1125 },{ .name
= "SD0_CONFIG_REG1", .addr
= A_SD0_CONFIG_REG1
,
1128 },{ .name
= "SD0_CONFIG_REG2", .addr
= A_SD0_CONFIG_REG2
,
1131 },{ .name
= "SD0_CONFIG_REG3", .addr
= A_SD0_CONFIG_REG3
,
1134 },{ .name
= "SD0_INITPRESET", .addr
= A_SD0_INITPRESET
,
1137 },{ .name
= "SD0_DSPPRESET", .addr
= A_SD0_DSPPRESET
,
1140 },{ .name
= "SD0_HSPDPRESET", .addr
= A_SD0_HSPDPRESET
,
1143 },{ .name
= "SD0_SDR12PRESET", .addr
= A_SD0_SDR12PRESET
,
1146 },{ .name
= "SD0_SDR25PRESET", .addr
= A_SD0_SDR25PRESET
,
1149 },{ .name
= "SD0_SDR50PRSET", .addr
= A_SD0_SDR50PRSET
,
1152 },{ .name
= "SD0_SDR104PRST", .addr
= A_SD0_SDR104PRST
,
1154 },{ .name
= "SD0_DDR50PRESET", .addr
= A_SD0_DDR50PRESET
,
1157 },{ .name
= "SD0_MAXCUR1P8", .addr
= A_SD0_MAXCUR1P8
,
1159 },{ .name
= "SD0_MAXCUR3P0", .addr
= A_SD0_MAXCUR3P0
,
1161 },{ .name
= "SD0_MAXCUR3P3", .addr
= A_SD0_MAXCUR3P3
,
1163 },{ .name
= "SD0_DLL_CTRL", .addr
= A_SD0_DLL_CTRL
,
1167 },{ .name
= "SD0_CDN_CTRL", .addr
= A_SD0_CDN_CTRL
,
1169 },{ .name
= "SD0_DLL_TEST", .addr
= A_SD0_DLL_TEST
,
1171 },{ .name
= "SD0_RX_TUNING_SEL", .addr
= A_SD0_RX_TUNING_SEL
,
1174 },{ .name
= "SD0_DLL_DIV_MAP0", .addr
= A_SD0_DLL_DIV_MAP0
,
1175 .reset
= 0x50505050,
1176 },{ .name
= "SD0_DLL_DIV_MAP1", .addr
= A_SD0_DLL_DIV_MAP1
,
1177 .reset
= 0x50505050,
1178 },{ .name
= "SD0_IOU_COHERENT_CTRL", .addr
= A_SD0_IOU_COHERENT_CTRL
,
1180 },{ .name
= "SD0_IOU_INTERCONNECT_ROUTE",
1181 .addr
= A_SD0_IOU_INTERCONNECT_ROUTE
,
1183 },{ .name
= "SD0_IOU_RAM", .addr
= A_SD0_IOU_RAM
,
1186 },{ .name
= "SD0_IOU_INTERCONNECT_QOS",
1187 .addr
= A_SD0_IOU_INTERCONNECT_QOS
,
1189 },{ .name
= "SD1_CLK_CTRL", .addr
= A_SD1_CLK_CTRL
,
1191 },{ .name
= "SD1_CTRL_REG", .addr
= A_SD1_CTRL_REG
,
1193 .pre_write
= sd1_ctrl_reg_prew
,
1194 },{ .name
= "SD1_CONFIG_REG1", .addr
= A_SD1_CONFIG_REG1
,
1197 },{ .name
= "SD1_CONFIG_REG2", .addr
= A_SD1_CONFIG_REG2
,
1200 },{ .name
= "SD1_CONFIG_REG3", .addr
= A_SD1_CONFIG_REG3
,
1203 },{ .name
= "SD1_INITPRESET", .addr
= A_SD1_INITPRESET
,
1206 },{ .name
= "SD1_DSPPRESET", .addr
= A_SD1_DSPPRESET
,
1209 },{ .name
= "SD1_HSPDPRESET", .addr
= A_SD1_HSPDPRESET
,
1212 },{ .name
= "SD1_SDR12PRESET", .addr
= A_SD1_SDR12PRESET
,
1215 },{ .name
= "SD1_SDR25PRESET", .addr
= A_SD1_SDR25PRESET
,
1218 },{ .name
= "SD1_SDR50PRSET", .addr
= A_SD1_SDR50PRSET
,
1221 },{ .name
= "SD1_SDR104PRST", .addr
= A_SD1_SDR104PRST
,
1223 },{ .name
= "SD1_DDR50PRESET", .addr
= A_SD1_DDR50PRESET
,
1226 },{ .name
= "SD1_MAXCUR1P8", .addr
= A_SD1_MAXCUR1P8
,
1228 },{ .name
= "SD1_MAXCUR3P0", .addr
= A_SD1_MAXCUR3P0
,
1230 },{ .name
= "SD1_MAXCUR3P3", .addr
= A_SD1_MAXCUR3P3
,
1232 },{ .name
= "SD1_DLL_CTRL", .addr
= A_SD1_DLL_CTRL
,
1236 },{ .name
= "SD1_CDN_CTRL", .addr
= A_SD1_CDN_CTRL
,
1238 },{ .name
= "SD1_DLL_TEST", .addr
= A_SD1_DLL_TEST
,
1240 },{ .name
= "SD1_RX_TUNING_SEL", .addr
= A_SD1_RX_TUNING_SEL
,
1243 },{ .name
= "SD1_DLL_DIV_MAP0", .addr
= A_SD1_DLL_DIV_MAP0
,
1244 .reset
= 0x50505050,
1245 },{ .name
= "SD1_DLL_DIV_MAP1", .addr
= A_SD1_DLL_DIV_MAP1
,
1246 .reset
= 0x50505050,
1247 },{ .name
= "SD1_IOU_COHERENT_CTRL", .addr
= A_SD1_IOU_COHERENT_CTRL
,
1249 },{ .name
= "SD1_IOU_INTERCONNECT_ROUTE",
1250 .addr
= A_SD1_IOU_INTERCONNECT_ROUTE
,
1252 },{ .name
= "SD1_IOU_RAM", .addr
= A_SD1_IOU_RAM
,
1255 },{ .name
= "SD1_IOU_INTERCONNECT_QOS",
1256 .addr
= A_SD1_IOU_INTERCONNECT_QOS
,
1258 },{ .name
= "OSPI_QSPI_IOU_AXI_MUX_SEL",
1259 .addr
= A_OSPI_QSPI_IOU_AXI_MUX_SEL
,
1262 .pre_write
= ospi_qspi_iou_axi_mux_sel_prew
,
1263 },{ .name
= "QSPI_IOU_COHERENT_CTRL", .addr
= A_QSPI_IOU_COHERENT_CTRL
,
1265 },{ .name
= "QSPI_IOU_INTERCONNECT_ROUTE",
1266 .addr
= A_QSPI_IOU_INTERCONNECT_ROUTE
,
1268 },{ .name
= "QSPI_IOU_RAM", .addr
= A_QSPI_IOU_RAM
,
1271 },{ .name
= "QSPI_IOU_INTERCONNECT_QOS",
1272 .addr
= A_QSPI_IOU_INTERCONNECT_QOS
,
1274 },{ .name
= "OSPI_IOU_COHERENT_CTRL", .addr
= A_OSPI_IOU_COHERENT_CTRL
,
1276 },{ .name
= "OSPI_IOU_INTERCONNECT_ROUTE",
1277 .addr
= A_OSPI_IOU_INTERCONNECT_ROUTE
,
1279 },{ .name
= "OSPI_IOU_RAM", .addr
= A_OSPI_IOU_RAM
,
1282 },{ .name
= "OSPI_IOU_INTERCONNECT_QOS",
1283 .addr
= A_OSPI_IOU_INTERCONNECT_QOS
,
1285 },{ .name
= "OSPI_REFCLK_DLY_CTRL", .addr
= A_OSPI_REFCLK_DLY_CTRL
,
1288 },{ .name
= "CUR_PWR_ST", .addr
= A_CUR_PWR_ST
,
1291 },{ .name
= "CONNECT_ST", .addr
= A_CONNECT_ST
,
1294 },{ .name
= "PW_STATE_REQ", .addr
= A_PW_STATE_REQ
,
1296 },{ .name
= "HOST_U2_PORT_DISABLE", .addr
= A_HOST_U2_PORT_DISABLE
,
1298 },{ .name
= "DBG_U2PMU", .addr
= A_DBG_U2PMU
,
1300 },{ .name
= "DBG_U2PMU_EXT1", .addr
= A_DBG_U2PMU_EXT1
,
1302 },{ .name
= "DBG_U2PMU_EXT2", .addr
= A_DBG_U2PMU_EXT2
,
1305 },{ .name
= "PME_GEN_U2PMU", .addr
= A_PME_GEN_U2PMU
,
1308 },{ .name
= "PWR_CONFIG_USB2", .addr
= A_PWR_CONFIG_USB2
,
1310 },{ .name
= "PHY_HUB", .addr
= A_PHY_HUB
,
1313 },{ .name
= "CTRL", .addr
= A_CTRL
,
1314 },{ .name
= "ISR", .addr
= A_ISR
,
1316 .post_write
= isr_postw
,
1317 },{ .name
= "IMR", .addr
= A_IMR
,
1320 },{ .name
= "IER", .addr
= A_IER
,
1321 .pre_write
= ier_prew
,
1322 },{ .name
= "IDR", .addr
= A_IDR
,
1323 .pre_write
= idr_prew
,
1324 },{ .name
= "ITR", .addr
= A_ITR
,
1325 .pre_write
= itr_prew
,
1326 },{ .name
= "PARITY_ISR", .addr
= A_PARITY_ISR
,
1328 .post_write
= parity_isr_postw
,
1329 },{ .name
= "PARITY_IMR", .addr
= A_PARITY_IMR
,
1332 },{ .name
= "PARITY_IER", .addr
= A_PARITY_IER
,
1333 .pre_write
= parity_ier_prew
,
1334 },{ .name
= "PARITY_IDR", .addr
= A_PARITY_IDR
,
1335 .pre_write
= parity_idr_prew
,
1336 },{ .name
= "PARITY_ITR", .addr
= A_PARITY_ITR
,
1337 .pre_write
= parity_itr_prew
,
1338 },{ .name
= "WPROT0", .addr
= A_WPROT0
,
1343 static void xlnx_versal_pmc_iou_slcr_reset_init(Object
*obj
, ResetType type
)
1345 XlnxVersalPmcIouSlcr
*s
= XILINX_VERSAL_PMC_IOU_SLCR(obj
);
1348 for (i
= 0; i
< ARRAY_SIZE(s
->regs_info
); ++i
) {
1349 register_reset(&s
->regs_info
[i
]);
1353 static void xlnx_versal_pmc_iou_slcr_reset_hold(Object
*obj
)
1355 XlnxVersalPmcIouSlcr
*s
= XILINX_VERSAL_PMC_IOU_SLCR(obj
);
1357 parity_imr_update_irq(s
);
1361 * Setup OSPI_QSPI mux
1362 * By default axi slave interface is enabled for ospi-dma
1364 qemu_set_irq(s
->ospi_mux_sel
, 0);
1365 qemu_set_irq(s
->qspi_ospi_mux_sel
, 1);
1368 static const MemoryRegionOps pmc_iou_slcr_ops
= {
1369 .read
= register_read_memory
,
1370 .write
= register_write_memory
,
1371 .endianness
= DEVICE_LITTLE_ENDIAN
,
1373 .min_access_size
= 4,
1374 .max_access_size
= 4,
1378 static void xlnx_versal_pmc_iou_slcr_realize(DeviceState
*dev
, Error
**errp
)
1380 XlnxVersalPmcIouSlcr
*s
= XILINX_VERSAL_PMC_IOU_SLCR(dev
);
1382 qdev_init_gpio_out_named(dev
, s
->sd_emmc_sel
, "sd-emmc-sel", 2);
1383 qdev_init_gpio_out_named(dev
, &s
->qspi_ospi_mux_sel
,
1384 "qspi-ospi-mux-sel", 1);
1385 qdev_init_gpio_out_named(dev
, &s
->ospi_mux_sel
, "ospi-mux-sel", 1);
1388 static void xlnx_versal_pmc_iou_slcr_init(Object
*obj
)
1390 XlnxVersalPmcIouSlcr
*s
= XILINX_VERSAL_PMC_IOU_SLCR(obj
);
1391 SysBusDevice
*sbd
= SYS_BUS_DEVICE(obj
);
1392 RegisterInfoArray
*reg_array
;
1394 memory_region_init(&s
->iomem
, obj
, TYPE_XILINX_VERSAL_PMC_IOU_SLCR
,
1395 XILINX_VERSAL_PMC_IOU_SLCR_R_MAX
* 4);
1397 register_init_block32(DEVICE(obj
), pmc_iou_slcr_regs_info
,
1398 ARRAY_SIZE(pmc_iou_slcr_regs_info
),
1399 s
->regs_info
, s
->regs
,
1401 XILINX_VERSAL_PMC_IOU_SLCR_ERR_DEBUG
,
1402 XILINX_VERSAL_PMC_IOU_SLCR_R_MAX
* 4);
1403 memory_region_add_subregion(&s
->iomem
,
1406 sysbus_init_mmio(sbd
, &s
->iomem
);
1407 sysbus_init_irq(sbd
, &s
->irq_parity_imr
);
1408 sysbus_init_irq(sbd
, &s
->irq_imr
);
1411 static const VMStateDescription vmstate_pmc_iou_slcr
= {
1412 .name
= TYPE_XILINX_VERSAL_PMC_IOU_SLCR
,
1414 .minimum_version_id
= 1,
1415 .fields
= (VMStateField
[]) {
1416 VMSTATE_UINT32_ARRAY(regs
, XlnxVersalPmcIouSlcr
,
1417 XILINX_VERSAL_PMC_IOU_SLCR_R_MAX
),
1418 VMSTATE_END_OF_LIST(),
1422 static void xlnx_versal_pmc_iou_slcr_class_init(ObjectClass
*klass
, void *data
)
1424 DeviceClass
*dc
= DEVICE_CLASS(klass
);
1425 ResettableClass
*rc
= RESETTABLE_CLASS(klass
);
1427 dc
->realize
= xlnx_versal_pmc_iou_slcr_realize
;
1428 dc
->vmsd
= &vmstate_pmc_iou_slcr
;
1429 rc
->phases
.enter
= xlnx_versal_pmc_iou_slcr_reset_init
;
1430 rc
->phases
.hold
= xlnx_versal_pmc_iou_slcr_reset_hold
;
1433 static const TypeInfo xlnx_versal_pmc_iou_slcr_info
= {
1434 .name
= TYPE_XILINX_VERSAL_PMC_IOU_SLCR
,
1435 .parent
= TYPE_SYS_BUS_DEVICE
,
1436 .instance_size
= sizeof(XlnxVersalPmcIouSlcr
),
1437 .class_init
= xlnx_versal_pmc_iou_slcr_class_init
,
1438 .instance_init
= xlnx_versal_pmc_iou_slcr_init
,
1441 static void xlnx_versal_pmc_iou_slcr_register_types(void)
1443 type_register_static(&xlnx_versal_pmc_iou_slcr_info
);
1446 type_init(xlnx_versal_pmc_iou_slcr_register_types
)