blob: 159f58ace292de2b74031f97ced93d58e83db3ce [file] [log] [blame]
Suneel Garapaticd530282019-10-19 18:32:33 -07001/* SPDX-License-Identifier: GPL-2.0
2 *
3 * Copyright (C) 2020 Marvell International Ltd.
4 *
5 * https://spdx.org/licenses
6 */
7#ifndef __CSRS_XCV_H__
8#define __CSRS_XCV_H__
9
10/**
11 * @file
12 *
13 * Configuration and status register (CSR) address and type definitions for
14 * XCV.
15 *
16 * This file is auto generated. Do not edit.
17 *
18 */
19
20/**
21 * Enumeration xcv_bar_e
22 *
23 * XCV Base Address Register Enumeration Enumerates the base address
24 * registers.
25 */
26#define XCV_BAR_E_XCVX_PF_BAR0(a) (0x87e0db000000ll + 0ll * (a))
27#define XCV_BAR_E_XCVX_PF_BAR0_SIZE 0x100000ull
28#define XCV_BAR_E_XCVX_PF_BAR4(a) (0x87e0dbf00000ll + 0ll * (a))
29#define XCV_BAR_E_XCVX_PF_BAR4_SIZE 0x100000ull
30
31/**
32 * Enumeration xcv_int_vec_e
33 *
34 * XCV MSI-X Vector Enumeration Enumerates the MSI-X interrupt vectors.
35 */
36#define XCV_INT_VEC_E_INT (0)
37
38/**
39 * Register (RSL) xcv#_batch_crd_ret
40 *
41 * XCV Batch Credit Return Register
42 */
43union xcvx_batch_crd_ret {
44 u64 u;
45 struct xcvx_batch_crd_ret_s {
46 u64 crd_ret : 1;
47 u64 reserved_1_63 : 63;
48 } s;
49 /* struct xcvx_batch_crd_ret_s cn; */
50};
51
52static inline u64 XCVX_BATCH_CRD_RET(u64 a)
53 __attribute__ ((pure, always_inline));
54static inline u64 XCVX_BATCH_CRD_RET(u64 a)
55{
56 return 0x100 + 0 * a;
57}
58
59/**
60 * Register (RSL) xcv#_comp_ctl
61 *
62 * XCV Compensation Controller Register This register controls
63 * programmable compensation.
64 */
65union xcvx_comp_ctl {
66 u64 u;
67 struct xcvx_comp_ctl_s {
68 u64 nctl_sat : 1;
69 u64 reserved_1_26 : 26;
70 u64 nctl_lock : 1;
71 u64 reserved_28 : 1;
72 u64 pctl_sat : 1;
73 u64 pctl_lock : 1;
74 u64 reserved_31 : 1;
75 u64 drv_nctl : 5;
76 u64 reserved_37_39 : 3;
77 u64 drv_pctl : 5;
78 u64 reserved_45_47 : 3;
79 u64 cmp_nctl : 5;
80 u64 reserved_53_55 : 3;
81 u64 cmp_pctl : 5;
82 u64 reserved_61_62 : 2;
83 u64 drv_byp : 1;
84 } s;
85 /* struct xcvx_comp_ctl_s cn; */
86};
87
88static inline u64 XCVX_COMP_CTL(u64 a)
89 __attribute__ ((pure, always_inline));
90static inline u64 XCVX_COMP_CTL(u64 a)
91{
92 return 0x20 + 0 * a;
93}
94
95/**
96 * Register (RSL) xcv#_ctl
97 *
98 * XCV Control Register This register contains the status control bits.
99 */
100union xcvx_ctl {
101 u64 u;
102 struct xcvx_ctl_s {
103 u64 speed : 2;
104 u64 lpbk_int : 1;
105 u64 lpbk_ext : 1;
106 u64 reserved_4_63 : 60;
107 } s;
108 /* struct xcvx_ctl_s cn; */
109};
110
111static inline u64 XCVX_CTL(u64 a)
112 __attribute__ ((pure, always_inline));
113static inline u64 XCVX_CTL(u64 a)
114{
115 return 0x30 + 0 * a;
116}
117
118/**
119 * Register (RSL) xcv#_dll_ctl
120 *
121 * XCV DLL Controller Register The RGMII timing specification requires
122 * that devices transmit clock and data synchronously. The specification
123 * requires external sources (namely the PC board trace routes) to
124 * introduce the appropriate 1.5 to 2.0 ns of delay. To eliminate the
125 * need for the PC board delays, the RGMII interface has optional on-
126 * board DLLs for both transmit and receive. For correct operation, at
127 * most one of the transmitter, board, or receiver involved in an RGMII
128 * link should introduce delay. By default/reset, the RGMII receivers
129 * delay the received clock, and the RGMII transmitters do not delay the
130 * transmitted clock. Whether this default works as-is with a given link
131 * partner depends on the behavior of the link partner and the PC board.
132 * These are the possible modes of RGMII receive operation: *
133 * XCV()_DLL_CTL[CLKRX_BYP] = 0 (reset value) - The RGMII receive
134 * interface introduces clock delay using its internal DLL. This mode is
135 * appropriate if neither the remote transmitter nor the PC board delays
136 * the clock. * XCV()_DLL_CTL[CLKRX_BYP] = 1, [CLKRX_SET] = 0x0 - The
137 * RGMII receive interface introduces no clock delay. This mode is
138 * appropriate if either the remote transmitter or the PC board delays
139 * the clock. These are the possible modes of RGMII transmit operation:
140 * * XCV()_DLL_CTL[CLKTX_BYP] = 1, [CLKTX_SET] = 0x0 (reset value) - The
141 * RGMII transmit interface introduces no clock delay. This mode is
142 * appropriate is either the remote receiver or the PC board delays the
143 * clock. * XCV()_DLL_CTL[CLKTX_BYP] = 0 - The RGMII transmit interface
144 * introduces clock delay using its internal DLL. This mode is
145 * appropriate if neither the remote receiver nor the PC board delays the
146 * clock.
147 */
148union xcvx_dll_ctl {
149 u64 u;
150 struct xcvx_dll_ctl_s {
151 u64 refclk_sel : 2;
152 u64 reserved_2_7 : 6;
153 u64 clktx_set : 7;
154 u64 clktx_byp : 1;
155 u64 clkrx_set : 7;
156 u64 clkrx_byp : 1;
157 u64 clk_set : 7;
158 u64 lock : 1;
159 u64 reserved_32_63 : 32;
160 } s;
161 /* struct xcvx_dll_ctl_s cn; */
162};
163
164static inline u64 XCVX_DLL_CTL(u64 a)
165 __attribute__ ((pure, always_inline));
166static inline u64 XCVX_DLL_CTL(u64 a)
167{
168 return 0x10 + 0 * a;
169}
170
171/**
172 * Register (RSL) xcv#_eco
173 *
174 * INTERNAL: XCV ECO Register
175 */
176union xcvx_eco {
177 u64 u;
178 struct xcvx_eco_s {
179 u64 eco_rw : 16;
180 u64 reserved_16_63 : 48;
181 } s;
182 /* struct xcvx_eco_s cn; */
183};
184
185static inline u64 XCVX_ECO(u64 a)
186 __attribute__ ((pure, always_inline));
187static inline u64 XCVX_ECO(u64 a)
188{
189 return 0x200 + 0 * a;
190}
191
192/**
193 * Register (RSL) xcv#_inbnd_status
194 *
195 * XCV Inband Status Register This register contains RGMII inband status.
196 */
197union xcvx_inbnd_status {
198 u64 u;
199 struct xcvx_inbnd_status_s {
200 u64 link : 1;
201 u64 speed : 2;
202 u64 duplex : 1;
203 u64 reserved_4_63 : 60;
204 } s;
205 /* struct xcvx_inbnd_status_s cn; */
206};
207
208static inline u64 XCVX_INBND_STATUS(u64 a)
209 __attribute__ ((pure, always_inline));
210static inline u64 XCVX_INBND_STATUS(u64 a)
211{
212 return 0x80 + 0 * a;
213}
214
215/**
216 * Register (RSL) xcv#_int
217 *
218 * XCV Interrupt Register This register flags error for TX FIFO overflow,
219 * TX FIFO underflow and incomplete byte for 10/100 Mode. It also flags
220 * status change for link duplex, link speed and link up/down.
221 */
222union xcvx_int {
223 u64 u;
224 struct xcvx_int_s {
225 u64 link : 1;
226 u64 speed : 1;
227 u64 reserved_2 : 1;
228 u64 duplex : 1;
229 u64 incomp_byte : 1;
230 u64 tx_undflw : 1;
231 u64 tx_ovrflw : 1;
232 u64 reserved_7_63 : 57;
233 } s;
234 /* struct xcvx_int_s cn; */
235};
236
237static inline u64 XCVX_INT(u64 a)
238 __attribute__ ((pure, always_inline));
239static inline u64 XCVX_INT(u64 a)
240{
241 return 0x40 + 0 * a;
242}
243
244/**
245 * Register (RSL) xcv#_int_ena_w1c
246 *
247 * Loopback Error Interrupt Enable Clear Register This register clears
248 * interrupt enable bits.
249 */
250union xcvx_int_ena_w1c {
251 u64 u;
252 struct xcvx_int_ena_w1c_s {
253 u64 link : 1;
254 u64 speed : 1;
255 u64 reserved_2 : 1;
256 u64 duplex : 1;
257 u64 incomp_byte : 1;
258 u64 tx_undflw : 1;
259 u64 tx_ovrflw : 1;
260 u64 reserved_7_63 : 57;
261 } s;
262 /* struct xcvx_int_ena_w1c_s cn; */
263};
264
265static inline u64 XCVX_INT_ENA_W1C(u64 a)
266 __attribute__ ((pure, always_inline));
267static inline u64 XCVX_INT_ENA_W1C(u64 a)
268{
269 return 0x50 + 0 * a;
270}
271
272/**
273 * Register (RSL) xcv#_int_ena_w1s
274 *
275 * Loopback Error Interrupt Enable Set Register This register sets
276 * interrupt enable bits.
277 */
278union xcvx_int_ena_w1s {
279 u64 u;
280 struct xcvx_int_ena_w1s_s {
281 u64 link : 1;
282 u64 speed : 1;
283 u64 reserved_2 : 1;
284 u64 duplex : 1;
285 u64 incomp_byte : 1;
286 u64 tx_undflw : 1;
287 u64 tx_ovrflw : 1;
288 u64 reserved_7_63 : 57;
289 } s;
290 /* struct xcvx_int_ena_w1s_s cn; */
291};
292
293static inline u64 XCVX_INT_ENA_W1S(u64 a)
294 __attribute__ ((pure, always_inline));
295static inline u64 XCVX_INT_ENA_W1S(u64 a)
296{
297 return 0x58 + 0 * a;
298}
299
300/**
301 * Register (RSL) xcv#_int_w1s
302 *
303 * Loopback Error Interrupt Set Register This register sets interrupt
304 * bits.
305 */
306union xcvx_int_w1s {
307 u64 u;
308 struct xcvx_int_w1s_s {
309 u64 link : 1;
310 u64 speed : 1;
311 u64 reserved_2 : 1;
312 u64 duplex : 1;
313 u64 incomp_byte : 1;
314 u64 tx_undflw : 1;
315 u64 tx_ovrflw : 1;
316 u64 reserved_7_63 : 57;
317 } s;
318 /* struct xcvx_int_w1s_s cn; */
319};
320
321static inline u64 XCVX_INT_W1S(u64 a)
322 __attribute__ ((pure, always_inline));
323static inline u64 XCVX_INT_W1S(u64 a)
324{
325 return 0x48 + 0 * a;
326}
327
328/**
329 * Register (RSL) xcv#_msix_pba#
330 *
331 * XCV MSI-X Pending Bit Array Registers This register is the MSI-X PBA
332 * table; the bit number is indexed by the XCV_INT_VEC_E enumeration.
333 */
334union xcvx_msix_pbax {
335 u64 u;
336 struct xcvx_msix_pbax_s {
337 u64 pend : 64;
338 } s;
339 /* struct xcvx_msix_pbax_s cn; */
340};
341
342static inline u64 XCVX_MSIX_PBAX(u64 a, u64 b)
343 __attribute__ ((pure, always_inline));
344static inline u64 XCVX_MSIX_PBAX(u64 a, u64 b)
345{
346 return 0xf0000 + 0 * a + 8 * b;
347}
348
349/**
350 * Register (RSL) xcv#_msix_vec#_addr
351 *
352 * XCV MSI-X Vector-Table Address Register This register is the MSI-X
353 * vector table, indexed by the XCV_INT_VEC_E enumeration.
354 */
355union xcvx_msix_vecx_addr {
356 u64 u;
357 struct xcvx_msix_vecx_addr_s {
358 u64 secvec : 1;
359 u64 reserved_1 : 1;
360 u64 addr : 47;
361 u64 reserved_49_63 : 15;
362 } s;
363 /* struct xcvx_msix_vecx_addr_s cn; */
364};
365
366static inline u64 XCVX_MSIX_VECX_ADDR(u64 a, u64 b)
367 __attribute__ ((pure, always_inline));
368static inline u64 XCVX_MSIX_VECX_ADDR(u64 a, u64 b)
369{
370 return 0 + 0 * a + 0x10 * b;
371}
372
373/**
374 * Register (RSL) xcv#_msix_vec#_ctl
375 *
376 * XCV MSI-X Vector-Table Control and Data Register This register is the
377 * MSI-X vector table, indexed by the XCV_INT_VEC_E enumeration.
378 */
379union xcvx_msix_vecx_ctl {
380 u64 u;
381 struct xcvx_msix_vecx_ctl_s {
382 u64 data : 20;
383 u64 reserved_20_31 : 12;
384 u64 mask : 1;
385 u64 reserved_33_63 : 31;
386 } s;
387 /* struct xcvx_msix_vecx_ctl_s cn; */
388};
389
390static inline u64 XCVX_MSIX_VECX_CTL(u64 a, u64 b)
391 __attribute__ ((pure, always_inline));
392static inline u64 XCVX_MSIX_VECX_CTL(u64 a, u64 b)
393{
394 return 8 + 0 * a + 0x10 * b;
395}
396
397/**
398 * Register (RSL) xcv#_reset
399 *
400 * XCV Reset Registers This register controls reset.
401 */
402union xcvx_reset {
403 u64 u;
404 struct xcvx_reset_s {
405 u64 rx_dat_rst_n : 1;
406 u64 rx_pkt_rst_n : 1;
407 u64 tx_dat_rst_n : 1;
408 u64 tx_pkt_rst_n : 1;
409 u64 reserved_4_6 : 3;
410 u64 comp : 1;
411 u64 reserved_8_10 : 3;
412 u64 dllrst : 1;
413 u64 reserved_12_14 : 3;
414 u64 clkrst : 1;
415 u64 reserved_16_62 : 47;
416 u64 enable : 1;
417 } s;
418 /* struct xcvx_reset_s cn; */
419};
420
421static inline u64 XCVX_RESET(u64 a)
422 __attribute__ ((pure, always_inline));
423static inline u64 XCVX_RESET(u64 a)
424{
425 return 0 + 0 * a;
426}
427
428#endif /* __CSRS_XCV_H__ */