blob: 23a18be54e24342bb207877e761296647ad5243d [file] [log] [blame]
Aaron Williams0c7c1ea2020-12-11 17:05:37 +01001/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Copyright (C) 2020 Marvell International Ltd.
4 */
5
6#ifndef __CVMX_MIO_DEFS_H__
7#define __CVMX_MIO_DEFS_H__
8
9#define CVMX_MIO_PTP_CLOCK_CFG (0x0001070000000F00ull)
10#define CVMX_MIO_PTP_EVT_CNT (0x0001070000000F28ull)
11#define CVMX_MIO_RST_BOOT (0x0001180000001600ull)
12#define CVMX_MIO_RST_CTLX(offset) (0x0001180000001618ull + ((offset) & 1))
13#define CVMX_MIO_QLMX_CFG(offset) (0x0001180000001590ull + ((offset) & 7) * 8)
14
15/**
16 * cvmx_mio_ptp_clock_cfg
17 *
18 * This register configures the timestamp architecture.
19 *
20 */
21union cvmx_mio_ptp_clock_cfg {
22 u64 u64;
23 struct cvmx_mio_ptp_clock_cfg_s {
24 u64 reserved_40_63 : 24;
25 u64 ext_clk_edge : 2;
26 u64 ckout_out4 : 1;
27 u64 pps_out : 5;
28 u64 pps_inv : 1;
29 u64 pps_en : 1;
30 u64 ckout_out : 4;
31 u64 ckout_inv : 1;
32 u64 ckout_en : 1;
33 u64 evcnt_in : 6;
34 u64 evcnt_edge : 1;
35 u64 evcnt_en : 1;
36 u64 tstmp_in : 6;
37 u64 tstmp_edge : 1;
38 u64 tstmp_en : 1;
39 u64 ext_clk_in : 6;
40 u64 ext_clk_en : 1;
41 u64 ptp_en : 1;
42 } s;
43 struct cvmx_mio_ptp_clock_cfg_cn61xx {
44 u64 reserved_42_63 : 22;
45 u64 pps : 1;
46 u64 ckout : 1;
47 u64 ext_clk_edge : 2;
48 u64 ckout_out4 : 1;
49 u64 pps_out : 5;
50 u64 pps_inv : 1;
51 u64 pps_en : 1;
52 u64 ckout_out : 4;
53 u64 ckout_inv : 1;
54 u64 ckout_en : 1;
55 u64 evcnt_in : 6;
56 u64 evcnt_edge : 1;
57 u64 evcnt_en : 1;
58 u64 tstmp_in : 6;
59 u64 tstmp_edge : 1;
60 u64 tstmp_en : 1;
61 u64 ext_clk_in : 6;
62 u64 ext_clk_en : 1;
63 u64 ptp_en : 1;
64 } cn61xx;
65 struct cvmx_mio_ptp_clock_cfg_cn63xx {
66 u64 reserved_24_63 : 40;
67 u64 evcnt_in : 6;
68 u64 evcnt_edge : 1;
69 u64 evcnt_en : 1;
70 u64 tstmp_in : 6;
71 u64 tstmp_edge : 1;
72 u64 tstmp_en : 1;
73 u64 ext_clk_in : 6;
74 u64 ext_clk_en : 1;
75 u64 ptp_en : 1;
76 } cn63xx;
77 struct cvmx_mio_ptp_clock_cfg_cn63xx cn63xxp1;
78 struct cvmx_mio_ptp_clock_cfg_s cn66xx;
79 struct cvmx_mio_ptp_clock_cfg_cn61xx cn68xx;
80 struct cvmx_mio_ptp_clock_cfg_cn63xx cn68xxp1;
81 struct cvmx_mio_ptp_clock_cfg_cn70xx {
82 u64 reserved_42_63 : 22;
83 u64 ckout : 1;
84 u64 pps : 1;
85 u64 ext_clk_edge : 2;
86 u64 reserved_32_37 : 6;
87 u64 pps_inv : 1;
88 u64 pps_en : 1;
89 u64 reserved_26_29 : 4;
90 u64 ckout_inv : 1;
91 u64 ckout_en : 1;
92 u64 evcnt_in : 6;
93 u64 evcnt_edge : 1;
94 u64 evcnt_en : 1;
95 u64 tstmp_in : 6;
96 u64 tstmp_edge : 1;
97 u64 tstmp_en : 1;
98 u64 ext_clk_in : 6;
99 u64 ext_clk_en : 1;
100 u64 ptp_en : 1;
101 } cn70xx;
102 struct cvmx_mio_ptp_clock_cfg_cn70xx cn70xxp1;
103 struct cvmx_mio_ptp_clock_cfg_cn70xx cn73xx;
104 struct cvmx_mio_ptp_clock_cfg_cn70xx cn78xx;
105 struct cvmx_mio_ptp_clock_cfg_cn70xx cn78xxp1;
106 struct cvmx_mio_ptp_clock_cfg_cn61xx cnf71xx;
107 struct cvmx_mio_ptp_clock_cfg_cn70xx cnf75xx;
108};
109
110typedef union cvmx_mio_ptp_clock_cfg cvmx_mio_ptp_clock_cfg_t;
111
112/**
113 * cvmx_mio_ptp_evt_cnt
114 *
115 * This register contains the PTP event counter.
116 *
117 */
118union cvmx_mio_ptp_evt_cnt {
119 u64 u64;
120 struct cvmx_mio_ptp_evt_cnt_s {
121 u64 cntr : 64;
122 } s;
123 struct cvmx_mio_ptp_evt_cnt_s cn61xx;
124 struct cvmx_mio_ptp_evt_cnt_s cn63xx;
125 struct cvmx_mio_ptp_evt_cnt_s cn63xxp1;
126 struct cvmx_mio_ptp_evt_cnt_s cn66xx;
127 struct cvmx_mio_ptp_evt_cnt_s cn68xx;
128 struct cvmx_mio_ptp_evt_cnt_s cn68xxp1;
129 struct cvmx_mio_ptp_evt_cnt_s cn70xx;
130 struct cvmx_mio_ptp_evt_cnt_s cn70xxp1;
131 struct cvmx_mio_ptp_evt_cnt_s cn73xx;
132 struct cvmx_mio_ptp_evt_cnt_s cn78xx;
133 struct cvmx_mio_ptp_evt_cnt_s cn78xxp1;
134 struct cvmx_mio_ptp_evt_cnt_s cnf71xx;
135 struct cvmx_mio_ptp_evt_cnt_s cnf75xx;
136};
137
138typedef union cvmx_mio_ptp_evt_cnt cvmx_mio_ptp_evt_cnt_t;
139
140/**
141 * cvmx_mio_rst_boot
142 *
143 * Notes:
144 * JTCSRDIS, EJTAGDIS, ROMEN reset to 1 in authentik mode; in all other modes they reset to 0.
145 *
146 */
147union cvmx_mio_rst_boot {
148 u64 u64;
149 struct cvmx_mio_rst_boot_s {
150 u64 chipkill : 1;
151 u64 jtcsrdis : 1;
152 u64 ejtagdis : 1;
153 u64 romen : 1;
154 u64 ckill_ppdis : 1;
155 u64 jt_tstmode : 1;
156 u64 reserved_50_57 : 8;
157 u64 lboot_ext : 2;
158 u64 reserved_44_47 : 4;
159 u64 qlm4_spd : 4;
160 u64 qlm3_spd : 4;
161 u64 c_mul : 6;
162 u64 pnr_mul : 6;
163 u64 qlm2_spd : 4;
164 u64 qlm1_spd : 4;
165 u64 qlm0_spd : 4;
166 u64 lboot : 10;
167 u64 rboot : 1;
168 u64 rboot_pin : 1;
169 } s;
170 struct cvmx_mio_rst_boot_cn61xx {
171 u64 chipkill : 1;
172 u64 jtcsrdis : 1;
173 u64 ejtagdis : 1;
174 u64 romen : 1;
175 u64 ckill_ppdis : 1;
176 u64 jt_tstmode : 1;
177 u64 reserved_50_57 : 8;
178 u64 lboot_ext : 2;
179 u64 reserved_36_47 : 12;
180 u64 c_mul : 6;
181 u64 pnr_mul : 6;
182 u64 qlm2_spd : 4;
183 u64 qlm1_spd : 4;
184 u64 qlm0_spd : 4;
185 u64 lboot : 10;
186 u64 rboot : 1;
187 u64 rboot_pin : 1;
188 } cn61xx;
189 struct cvmx_mio_rst_boot_cn63xx {
190 u64 reserved_36_63 : 28;
191 u64 c_mul : 6;
192 u64 pnr_mul : 6;
193 u64 qlm2_spd : 4;
194 u64 qlm1_spd : 4;
195 u64 qlm0_spd : 4;
196 u64 lboot : 10;
197 u64 rboot : 1;
198 u64 rboot_pin : 1;
199 } cn63xx;
200 struct cvmx_mio_rst_boot_cn63xx cn63xxp1;
201 struct cvmx_mio_rst_boot_cn66xx {
202 u64 chipkill : 1;
203 u64 jtcsrdis : 1;
204 u64 ejtagdis : 1;
205 u64 romen : 1;
206 u64 ckill_ppdis : 1;
207 u64 reserved_50_58 : 9;
208 u64 lboot_ext : 2;
209 u64 reserved_36_47 : 12;
210 u64 c_mul : 6;
211 u64 pnr_mul : 6;
212 u64 qlm2_spd : 4;
213 u64 qlm1_spd : 4;
214 u64 qlm0_spd : 4;
215 u64 lboot : 10;
216 u64 rboot : 1;
217 u64 rboot_pin : 1;
218 } cn66xx;
219 struct cvmx_mio_rst_boot_cn68xx {
220 u64 reserved_59_63 : 5;
221 u64 jt_tstmode : 1;
222 u64 reserved_44_57 : 14;
223 u64 qlm4_spd : 4;
224 u64 qlm3_spd : 4;
225 u64 c_mul : 6;
226 u64 pnr_mul : 6;
227 u64 qlm2_spd : 4;
228 u64 qlm1_spd : 4;
229 u64 qlm0_spd : 4;
230 u64 lboot : 10;
231 u64 rboot : 1;
232 u64 rboot_pin : 1;
233 } cn68xx;
234 struct cvmx_mio_rst_boot_cn68xxp1 {
235 u64 reserved_44_63 : 20;
236 u64 qlm4_spd : 4;
237 u64 qlm3_spd : 4;
238 u64 c_mul : 6;
239 u64 pnr_mul : 6;
240 u64 qlm2_spd : 4;
241 u64 qlm1_spd : 4;
242 u64 qlm0_spd : 4;
243 u64 lboot : 10;
244 u64 rboot : 1;
245 u64 rboot_pin : 1;
246 } cn68xxp1;
247 struct cvmx_mio_rst_boot_cn61xx cnf71xx;
248};
249
250typedef union cvmx_mio_rst_boot cvmx_mio_rst_boot_t;
251
252/**
253 * cvmx_mio_rst_ctl#
254 *
255 * Notes:
256 * GEN1_Only mode is enabled for PEM0 when QLM1_SPD[0] is set or when sclk < 550Mhz.
257 * GEN1_Only mode is enabled for PEM1 when QLM1_SPD[1] is set or when sclk < 550Mhz.
258 */
259union cvmx_mio_rst_ctlx {
260 u64 u64;
261 struct cvmx_mio_rst_ctlx_s {
262 u64 reserved_13_63 : 51;
263 u64 in_rev_ln : 1;
264 u64 rev_lanes : 1;
265 u64 gen1_only : 1;
266 u64 prst_link : 1;
267 u64 rst_done : 1;
268 u64 rst_link : 1;
269 u64 host_mode : 1;
270 u64 prtmode : 2;
271 u64 rst_drv : 1;
272 u64 rst_rcv : 1;
273 u64 rst_chip : 1;
274 u64 rst_val : 1;
275 } s;
276 struct cvmx_mio_rst_ctlx_s cn61xx;
277 struct cvmx_mio_rst_ctlx_cn63xx {
278 u64 reserved_10_63 : 54;
279 u64 prst_link : 1;
280 u64 rst_done : 1;
281 u64 rst_link : 1;
282 u64 host_mode : 1;
283 u64 prtmode : 2;
284 u64 rst_drv : 1;
285 u64 rst_rcv : 1;
286 u64 rst_chip : 1;
287 u64 rst_val : 1;
288 } cn63xx;
289 struct cvmx_mio_rst_ctlx_cn63xxp1 {
290 u64 reserved_9_63 : 55;
291 u64 rst_done : 1;
292 u64 rst_link : 1;
293 u64 host_mode : 1;
294 u64 prtmode : 2;
295 u64 rst_drv : 1;
296 u64 rst_rcv : 1;
297 u64 rst_chip : 1;
298 u64 rst_val : 1;
299 } cn63xxp1;
300 struct cvmx_mio_rst_ctlx_cn63xx cn66xx;
301 struct cvmx_mio_rst_ctlx_cn63xx cn68xx;
302 struct cvmx_mio_rst_ctlx_cn63xx cn68xxp1;
303 struct cvmx_mio_rst_ctlx_s cnf71xx;
304};
305
306typedef union cvmx_mio_rst_ctlx cvmx_mio_rst_ctlx_t;
307
308/**
309 * cvmx_mio_qlm#_cfg
310 *
311 * Notes:
312 * Certain QLM_SPD is valid only for certain QLM_CFG configuration, refer to HRM for valid
313 * combinations. These csrs are reset only on COLD_RESET. The Reset values for QLM_SPD and QLM_CFG
314 * are as follows: MIO_QLM0_CFG SPD=F, CFG=2 SGMII (AGX0)
315 * MIO_QLM1_CFG SPD=0, CFG=1 PCIE 2x1 (PEM0/PEM1)
316 */
317union cvmx_mio_qlmx_cfg {
318 u64 u64;
319 struct cvmx_mio_qlmx_cfg_s {
320 u64 reserved_15_63 : 49;
321 u64 prtmode : 1;
322 u64 reserved_12_13 : 2;
323 u64 qlm_spd : 4;
324 u64 reserved_4_7 : 4;
325 u64 qlm_cfg : 4;
326 } s;
327 struct cvmx_mio_qlmx_cfg_cn61xx {
328 u64 reserved_15_63 : 49;
329 u64 prtmode : 1;
330 u64 reserved_12_13 : 2;
331 u64 qlm_spd : 4;
332 u64 reserved_2_7 : 6;
333 u64 qlm_cfg : 2;
334 } cn61xx;
335 struct cvmx_mio_qlmx_cfg_cn66xx {
336 u64 reserved_12_63 : 52;
337 u64 qlm_spd : 4;
338 u64 reserved_4_7 : 4;
339 u64 qlm_cfg : 4;
340 } cn66xx;
341 struct cvmx_mio_qlmx_cfg_cn68xx {
342 u64 reserved_12_63 : 52;
343 u64 qlm_spd : 4;
344 u64 reserved_3_7 : 5;
345 u64 qlm_cfg : 3;
346 } cn68xx;
347 struct cvmx_mio_qlmx_cfg_cn68xx cn68xxp1;
348 struct cvmx_mio_qlmx_cfg_cn61xx cnf71xx;
349};
350
351typedef union cvmx_mio_qlmx_cfg cvmx_mio_qlmx_cfg_t;
352
353#endif