blob: bbf1f5936b1fc17cc4034a503c302b2c6905da04 [file] [log] [blame]
Aaron Williamsb943dee2020-12-11 17:05:25 +01001/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Copyright (C) 2020 Marvell International Ltd.
4 *
5 * Configuration and status register (CSR) type definitions for
6 * Octeon agl.
7 *
8 */
9
10#ifndef __CVMX_AGL_DEFS_H__
11#define __CVMX_AGL_DEFS_H__
12
13#define CVMX_AGL_GMX_BAD_REG (0x00011800E0000518ull)
14#define CVMX_AGL_GMX_BIST (0x00011800E0000400ull)
15#define CVMX_AGL_GMX_DRV_CTL (0x00011800E00007F0ull)
16#define CVMX_AGL_GMX_INF_MODE (0x00011800E00007F8ull)
17#define CVMX_AGL_GMX_PRTX_CFG(offset) (0x00011800E0000010ull + ((offset) & 1) * 2048)
18#define CVMX_AGL_GMX_RXX_ADR_CAM0(offset) (0x00011800E0000180ull + ((offset) & 1) * 2048)
19#define CVMX_AGL_GMX_RXX_ADR_CAM1(offset) (0x00011800E0000188ull + ((offset) & 1) * 2048)
20#define CVMX_AGL_GMX_RXX_ADR_CAM2(offset) (0x00011800E0000190ull + ((offset) & 1) * 2048)
21#define CVMX_AGL_GMX_RXX_ADR_CAM3(offset) (0x00011800E0000198ull + ((offset) & 1) * 2048)
22#define CVMX_AGL_GMX_RXX_ADR_CAM4(offset) (0x00011800E00001A0ull + ((offset) & 1) * 2048)
23#define CVMX_AGL_GMX_RXX_ADR_CAM5(offset) (0x00011800E00001A8ull + ((offset) & 1) * 2048)
24#define CVMX_AGL_GMX_RXX_ADR_CAM_EN(offset) (0x00011800E0000108ull + ((offset) & 1) * 2048)
25#define CVMX_AGL_GMX_RXX_ADR_CTL(offset) (0x00011800E0000100ull + ((offset) & 1) * 2048)
26#define CVMX_AGL_GMX_RXX_DECISION(offset) (0x00011800E0000040ull + ((offset) & 1) * 2048)
27#define CVMX_AGL_GMX_RXX_FRM_CHK(offset) (0x00011800E0000020ull + ((offset) & 1) * 2048)
28#define CVMX_AGL_GMX_RXX_FRM_CTL(offset) (0x00011800E0000018ull + ((offset) & 1) * 2048)
29#define CVMX_AGL_GMX_RXX_FRM_MAX(offset) (0x00011800E0000030ull + ((offset) & 1) * 2048)
30#define CVMX_AGL_GMX_RXX_FRM_MIN(offset) (0x00011800E0000028ull + ((offset) & 1) * 2048)
31#define CVMX_AGL_GMX_RXX_IFG(offset) (0x00011800E0000058ull + ((offset) & 1) * 2048)
32#define CVMX_AGL_GMX_RXX_INT_EN(offset) (0x00011800E0000008ull + ((offset) & 1) * 2048)
33#define CVMX_AGL_GMX_RXX_INT_REG(offset) (0x00011800E0000000ull + ((offset) & 1) * 2048)
34#define CVMX_AGL_GMX_RXX_JABBER(offset) (0x00011800E0000038ull + ((offset) & 1) * 2048)
35#define CVMX_AGL_GMX_RXX_PAUSE_DROP_TIME(offset) (0x00011800E0000068ull + ((offset) & 1) * 2048)
36#define CVMX_AGL_GMX_RXX_RX_INBND(offset) (0x00011800E0000060ull + ((offset) & 1) * 2048)
37#define CVMX_AGL_GMX_RXX_STATS_CTL(offset) (0x00011800E0000050ull + ((offset) & 1) * 2048)
38#define CVMX_AGL_GMX_RXX_STATS_OCTS(offset) (0x00011800E0000088ull + ((offset) & 1) * 2048)
39#define CVMX_AGL_GMX_RXX_STATS_OCTS_CTL(offset) (0x00011800E0000098ull + ((offset) & 1) * 2048)
40#define CVMX_AGL_GMX_RXX_STATS_OCTS_DMAC(offset) (0x00011800E00000A8ull + ((offset) & 1) * 2048)
41#define CVMX_AGL_GMX_RXX_STATS_OCTS_DRP(offset) (0x00011800E00000B8ull + ((offset) & 1) * 2048)
42#define CVMX_AGL_GMX_RXX_STATS_PKTS(offset) (0x00011800E0000080ull + ((offset) & 1) * 2048)
43#define CVMX_AGL_GMX_RXX_STATS_PKTS_BAD(offset) (0x00011800E00000C0ull + ((offset) & 1) * 2048)
44#define CVMX_AGL_GMX_RXX_STATS_PKTS_CTL(offset) (0x00011800E0000090ull + ((offset) & 1) * 2048)
45#define CVMX_AGL_GMX_RXX_STATS_PKTS_DMAC(offset) (0x00011800E00000A0ull + ((offset) & 1) * 2048)
46#define CVMX_AGL_GMX_RXX_STATS_PKTS_DRP(offset) (0x00011800E00000B0ull + ((offset) & 1) * 2048)
47#define CVMX_AGL_GMX_RXX_UDD_SKP(offset) (0x00011800E0000048ull + ((offset) & 1) * 2048)
48#define CVMX_AGL_GMX_RX_BP_DROPX(offset) (0x00011800E0000420ull + ((offset) & 1) * 8)
49#define CVMX_AGL_GMX_RX_BP_OFFX(offset) (0x00011800E0000460ull + ((offset) & 1) * 8)
50#define CVMX_AGL_GMX_RX_BP_ONX(offset) (0x00011800E0000440ull + ((offset) & 1) * 8)
51#define CVMX_AGL_GMX_RX_PRT_INFO (0x00011800E00004E8ull)
52#define CVMX_AGL_GMX_RX_TX_STATUS (0x00011800E00007E8ull)
53#define CVMX_AGL_GMX_SMACX(offset) (0x00011800E0000230ull + ((offset) & 1) * 2048)
54#define CVMX_AGL_GMX_STAT_BP (0x00011800E0000520ull)
55#define CVMX_AGL_GMX_TXX_APPEND(offset) (0x00011800E0000218ull + ((offset) & 1) * 2048)
56#define CVMX_AGL_GMX_TXX_CLK(offset) (0x00011800E0000208ull + ((offset) & 1) * 2048)
57#define CVMX_AGL_GMX_TXX_CTL(offset) (0x00011800E0000270ull + ((offset) & 1) * 2048)
58#define CVMX_AGL_GMX_TXX_MIN_PKT(offset) (0x00011800E0000240ull + ((offset) & 1) * 2048)
59#define CVMX_AGL_GMX_TXX_PAUSE_PKT_INTERVAL(offset) (0x00011800E0000248ull + ((offset) & 1) * 2048)
60#define CVMX_AGL_GMX_TXX_PAUSE_PKT_TIME(offset) (0x00011800E0000238ull + ((offset) & 1) * 2048)
61#define CVMX_AGL_GMX_TXX_PAUSE_TOGO(offset) (0x00011800E0000258ull + ((offset) & 1) * 2048)
62#define CVMX_AGL_GMX_TXX_PAUSE_ZERO(offset) (0x00011800E0000260ull + ((offset) & 1) * 2048)
63#define CVMX_AGL_GMX_TXX_SOFT_PAUSE(offset) (0x00011800E0000250ull + ((offset) & 1) * 2048)
64#define CVMX_AGL_GMX_TXX_STAT0(offset) (0x00011800E0000280ull + ((offset) & 1) * 2048)
65#define CVMX_AGL_GMX_TXX_STAT1(offset) (0x00011800E0000288ull + ((offset) & 1) * 2048)
66#define CVMX_AGL_GMX_TXX_STAT2(offset) (0x00011800E0000290ull + ((offset) & 1) * 2048)
67#define CVMX_AGL_GMX_TXX_STAT3(offset) (0x00011800E0000298ull + ((offset) & 1) * 2048)
68#define CVMX_AGL_GMX_TXX_STAT4(offset) (0x00011800E00002A0ull + ((offset) & 1) * 2048)
69#define CVMX_AGL_GMX_TXX_STAT5(offset) (0x00011800E00002A8ull + ((offset) & 1) * 2048)
70#define CVMX_AGL_GMX_TXX_STAT6(offset) (0x00011800E00002B0ull + ((offset) & 1) * 2048)
71#define CVMX_AGL_GMX_TXX_STAT7(offset) (0x00011800E00002B8ull + ((offset) & 1) * 2048)
72#define CVMX_AGL_GMX_TXX_STAT8(offset) (0x00011800E00002C0ull + ((offset) & 1) * 2048)
73#define CVMX_AGL_GMX_TXX_STAT9(offset) (0x00011800E00002C8ull + ((offset) & 1) * 2048)
74#define CVMX_AGL_GMX_TXX_STATS_CTL(offset) (0x00011800E0000268ull + ((offset) & 1) * 2048)
75#define CVMX_AGL_GMX_TXX_THRESH(offset) (0x00011800E0000210ull + ((offset) & 1) * 2048)
76#define CVMX_AGL_GMX_TX_BP (0x00011800E00004D0ull)
77#define CVMX_AGL_GMX_TX_COL_ATTEMPT (0x00011800E0000498ull)
78#define CVMX_AGL_GMX_TX_IFG (0x00011800E0000488ull)
79#define CVMX_AGL_GMX_TX_INT_EN (0x00011800E0000508ull)
80#define CVMX_AGL_GMX_TX_INT_REG (0x00011800E0000500ull)
81#define CVMX_AGL_GMX_TX_JAM (0x00011800E0000490ull)
82#define CVMX_AGL_GMX_TX_LFSR (0x00011800E00004F8ull)
83#define CVMX_AGL_GMX_TX_OVR_BP (0x00011800E00004C8ull)
84#define CVMX_AGL_GMX_TX_PAUSE_PKT_DMAC (0x00011800E00004A0ull)
85#define CVMX_AGL_GMX_TX_PAUSE_PKT_TYPE (0x00011800E00004A8ull)
86#define CVMX_AGL_GMX_WOL_CTL (0x00011800E0000780ull)
87#define CVMX_AGL_PRTX_CTL(offset) (0x00011800E0002000ull + ((offset) & 1) * 8)
88
89/**
90 * cvmx_agl_gmx_bad_reg
91 *
92 * AGL_GMX_BAD_REG = A collection of things that have gone very, very wrong
93 *
94 *
95 * Notes:
96 * OUT_OVR[0], LOSTSTAT[0], OVRFLW, TXPOP, TXPSH will be reset when MIX0_CTL[RESET] is set to 1.
97 * OUT_OVR[1], LOSTSTAT[1], OVRFLW1, TXPOP1, TXPSH1 will be reset when MIX1_CTL[RESET] is set to 1.
98 * STATOVR will be reset when both MIX0/1_CTL[RESET] are set to 1.
99 */
100union cvmx_agl_gmx_bad_reg {
101 u64 u64;
102 struct cvmx_agl_gmx_bad_reg_s {
103 u64 reserved_38_63 : 26;
104 u64 txpsh1 : 1;
105 u64 txpop1 : 1;
106 u64 ovrflw1 : 1;
107 u64 txpsh : 1;
108 u64 txpop : 1;
109 u64 ovrflw : 1;
110 u64 reserved_27_31 : 5;
111 u64 statovr : 1;
112 u64 reserved_24_25 : 2;
113 u64 loststat : 2;
114 u64 reserved_4_21 : 18;
115 u64 out_ovr : 2;
116 u64 reserved_0_1 : 2;
117 } s;
118 struct cvmx_agl_gmx_bad_reg_cn52xx {
119 u64 reserved_38_63 : 26;
120 u64 txpsh1 : 1;
121 u64 txpop1 : 1;
122 u64 ovrflw1 : 1;
123 u64 txpsh : 1;
124 u64 txpop : 1;
125 u64 ovrflw : 1;
126 u64 reserved_27_31 : 5;
127 u64 statovr : 1;
128 u64 reserved_23_25 : 3;
129 u64 loststat : 1;
130 u64 reserved_4_21 : 18;
131 u64 out_ovr : 2;
132 u64 reserved_0_1 : 2;
133 } cn52xx;
134 struct cvmx_agl_gmx_bad_reg_cn52xx cn52xxp1;
135 struct cvmx_agl_gmx_bad_reg_cn56xx {
136 u64 reserved_35_63 : 29;
137 u64 txpsh : 1;
138 u64 txpop : 1;
139 u64 ovrflw : 1;
140 u64 reserved_27_31 : 5;
141 u64 statovr : 1;
142 u64 reserved_23_25 : 3;
143 u64 loststat : 1;
144 u64 reserved_3_21 : 19;
145 u64 out_ovr : 1;
146 u64 reserved_0_1 : 2;
147 } cn56xx;
148 struct cvmx_agl_gmx_bad_reg_cn56xx cn56xxp1;
149 struct cvmx_agl_gmx_bad_reg_s cn61xx;
150 struct cvmx_agl_gmx_bad_reg_s cn63xx;
151 struct cvmx_agl_gmx_bad_reg_s cn63xxp1;
152 struct cvmx_agl_gmx_bad_reg_s cn66xx;
153 struct cvmx_agl_gmx_bad_reg_s cn68xx;
154 struct cvmx_agl_gmx_bad_reg_s cn68xxp1;
155 struct cvmx_agl_gmx_bad_reg_cn56xx cn70xx;
156 struct cvmx_agl_gmx_bad_reg_cn56xx cn70xxp1;
157};
158
159typedef union cvmx_agl_gmx_bad_reg cvmx_agl_gmx_bad_reg_t;
160
161/**
162 * cvmx_agl_gmx_bist
163 *
164 * AGL_GMX_BIST = GMX BIST Results
165 *
166 *
167 * Notes:
168 * Not reset when MIX*_CTL[RESET] is set to 1.
169 *
170 */
171union cvmx_agl_gmx_bist {
172 u64 u64;
173 struct cvmx_agl_gmx_bist_s {
174 u64 reserved_25_63 : 39;
175 u64 status : 25;
176 } s;
177 struct cvmx_agl_gmx_bist_cn52xx {
178 u64 reserved_10_63 : 54;
179 u64 status : 10;
180 } cn52xx;
181 struct cvmx_agl_gmx_bist_cn52xx cn52xxp1;
182 struct cvmx_agl_gmx_bist_cn52xx cn56xx;
183 struct cvmx_agl_gmx_bist_cn52xx cn56xxp1;
184 struct cvmx_agl_gmx_bist_s cn61xx;
185 struct cvmx_agl_gmx_bist_s cn63xx;
186 struct cvmx_agl_gmx_bist_s cn63xxp1;
187 struct cvmx_agl_gmx_bist_s cn66xx;
188 struct cvmx_agl_gmx_bist_s cn68xx;
189 struct cvmx_agl_gmx_bist_s cn68xxp1;
190 struct cvmx_agl_gmx_bist_s cn70xx;
191 struct cvmx_agl_gmx_bist_s cn70xxp1;
192};
193
194typedef union cvmx_agl_gmx_bist cvmx_agl_gmx_bist_t;
195
196/**
197 * cvmx_agl_gmx_drv_ctl
198 *
199 * AGL_GMX_DRV_CTL = GMX Drive Control
200 *
201 *
202 * Notes:
203 * NCTL, PCTL, BYP_EN will be reset when MIX0_CTL[RESET] is set to 1.
204 * NCTL1, PCTL1, BYP_EN1 will be reset when MIX1_CTL[RESET] is set to 1.
205 */
206union cvmx_agl_gmx_drv_ctl {
207 u64 u64;
208 struct cvmx_agl_gmx_drv_ctl_s {
209 u64 reserved_49_63 : 15;
210 u64 byp_en1 : 1;
211 u64 reserved_45_47 : 3;
212 u64 pctl1 : 5;
213 u64 reserved_37_39 : 3;
214 u64 nctl1 : 5;
215 u64 reserved_17_31 : 15;
216 u64 byp_en : 1;
217 u64 reserved_13_15 : 3;
218 u64 pctl : 5;
219 u64 reserved_5_7 : 3;
220 u64 nctl : 5;
221 } s;
222 struct cvmx_agl_gmx_drv_ctl_s cn52xx;
223 struct cvmx_agl_gmx_drv_ctl_s cn52xxp1;
224 struct cvmx_agl_gmx_drv_ctl_cn56xx {
225 u64 reserved_17_63 : 47;
226 u64 byp_en : 1;
227 u64 reserved_13_15 : 3;
228 u64 pctl : 5;
229 u64 reserved_5_7 : 3;
230 u64 nctl : 5;
231 } cn56xx;
232 struct cvmx_agl_gmx_drv_ctl_cn56xx cn56xxp1;
233};
234
235typedef union cvmx_agl_gmx_drv_ctl cvmx_agl_gmx_drv_ctl_t;
236
237/**
238 * cvmx_agl_gmx_inf_mode
239 *
240 * AGL_GMX_INF_MODE = Interface Mode
241 *
242 *
243 * Notes:
244 * Not reset when MIX*_CTL[RESET] is set to 1.
245 *
246 */
247union cvmx_agl_gmx_inf_mode {
248 u64 u64;
249 struct cvmx_agl_gmx_inf_mode_s {
250 u64 reserved_2_63 : 62;
251 u64 en : 1;
252 u64 reserved_0_0 : 1;
253 } s;
254 struct cvmx_agl_gmx_inf_mode_s cn52xx;
255 struct cvmx_agl_gmx_inf_mode_s cn52xxp1;
256 struct cvmx_agl_gmx_inf_mode_s cn56xx;
257 struct cvmx_agl_gmx_inf_mode_s cn56xxp1;
258};
259
260typedef union cvmx_agl_gmx_inf_mode cvmx_agl_gmx_inf_mode_t;
261
262/**
263 * cvmx_agl_gmx_prt#_cfg
264 *
265 * AGL_GMX_PRT_CFG = Port description
266 *
267 *
268 * Notes:
269 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
270 *
271 */
272union cvmx_agl_gmx_prtx_cfg {
273 u64 u64;
274 struct cvmx_agl_gmx_prtx_cfg_s {
275 u64 reserved_14_63 : 50;
276 u64 tx_idle : 1;
277 u64 rx_idle : 1;
278 u64 reserved_9_11 : 3;
279 u64 speed_msb : 1;
280 u64 reserved_7_7 : 1;
281 u64 burst : 1;
282 u64 tx_en : 1;
283 u64 rx_en : 1;
284 u64 slottime : 1;
285 u64 duplex : 1;
286 u64 speed : 1;
287 u64 en : 1;
288 } s;
289 struct cvmx_agl_gmx_prtx_cfg_cn52xx {
290 u64 reserved_6_63 : 58;
291 u64 tx_en : 1;
292 u64 rx_en : 1;
293 u64 slottime : 1;
294 u64 duplex : 1;
295 u64 speed : 1;
296 u64 en : 1;
297 } cn52xx;
298 struct cvmx_agl_gmx_prtx_cfg_cn52xx cn52xxp1;
299 struct cvmx_agl_gmx_prtx_cfg_cn52xx cn56xx;
300 struct cvmx_agl_gmx_prtx_cfg_cn52xx cn56xxp1;
301 struct cvmx_agl_gmx_prtx_cfg_s cn61xx;
302 struct cvmx_agl_gmx_prtx_cfg_s cn63xx;
303 struct cvmx_agl_gmx_prtx_cfg_s cn63xxp1;
304 struct cvmx_agl_gmx_prtx_cfg_s cn66xx;
305 struct cvmx_agl_gmx_prtx_cfg_s cn68xx;
306 struct cvmx_agl_gmx_prtx_cfg_s cn68xxp1;
307 struct cvmx_agl_gmx_prtx_cfg_s cn70xx;
308 struct cvmx_agl_gmx_prtx_cfg_s cn70xxp1;
309};
310
311typedef union cvmx_agl_gmx_prtx_cfg cvmx_agl_gmx_prtx_cfg_t;
312
313/**
314 * cvmx_agl_gmx_rx#_adr_cam0
315 *
316 * AGL_GMX_RX_ADR_CAM = Address Filtering Control
317 *
318 */
319union cvmx_agl_gmx_rxx_adr_cam0 {
320 u64 u64;
321 struct cvmx_agl_gmx_rxx_adr_cam0_s {
322 u64 adr : 64;
323 } s;
324 struct cvmx_agl_gmx_rxx_adr_cam0_s cn52xx;
325 struct cvmx_agl_gmx_rxx_adr_cam0_s cn52xxp1;
326 struct cvmx_agl_gmx_rxx_adr_cam0_s cn56xx;
327 struct cvmx_agl_gmx_rxx_adr_cam0_s cn56xxp1;
328 struct cvmx_agl_gmx_rxx_adr_cam0_s cn61xx;
329 struct cvmx_agl_gmx_rxx_adr_cam0_s cn63xx;
330 struct cvmx_agl_gmx_rxx_adr_cam0_s cn63xxp1;
331 struct cvmx_agl_gmx_rxx_adr_cam0_s cn66xx;
332 struct cvmx_agl_gmx_rxx_adr_cam0_s cn68xx;
333 struct cvmx_agl_gmx_rxx_adr_cam0_s cn68xxp1;
334 struct cvmx_agl_gmx_rxx_adr_cam0_s cn70xx;
335 struct cvmx_agl_gmx_rxx_adr_cam0_s cn70xxp1;
336};
337
338typedef union cvmx_agl_gmx_rxx_adr_cam0 cvmx_agl_gmx_rxx_adr_cam0_t;
339
340/**
341 * cvmx_agl_gmx_rx#_adr_cam1
342 *
343 * AGL_GMX_RX_ADR_CAM = Address Filtering Control
344 *
345 */
346union cvmx_agl_gmx_rxx_adr_cam1 {
347 u64 u64;
348 struct cvmx_agl_gmx_rxx_adr_cam1_s {
349 u64 adr : 64;
350 } s;
351 struct cvmx_agl_gmx_rxx_adr_cam1_s cn52xx;
352 struct cvmx_agl_gmx_rxx_adr_cam1_s cn52xxp1;
353 struct cvmx_agl_gmx_rxx_adr_cam1_s cn56xx;
354 struct cvmx_agl_gmx_rxx_adr_cam1_s cn56xxp1;
355 struct cvmx_agl_gmx_rxx_adr_cam1_s cn61xx;
356 struct cvmx_agl_gmx_rxx_adr_cam1_s cn63xx;
357 struct cvmx_agl_gmx_rxx_adr_cam1_s cn63xxp1;
358 struct cvmx_agl_gmx_rxx_adr_cam1_s cn66xx;
359 struct cvmx_agl_gmx_rxx_adr_cam1_s cn68xx;
360 struct cvmx_agl_gmx_rxx_adr_cam1_s cn68xxp1;
361 struct cvmx_agl_gmx_rxx_adr_cam1_s cn70xx;
362 struct cvmx_agl_gmx_rxx_adr_cam1_s cn70xxp1;
363};
364
365typedef union cvmx_agl_gmx_rxx_adr_cam1 cvmx_agl_gmx_rxx_adr_cam1_t;
366
367/**
368 * cvmx_agl_gmx_rx#_adr_cam2
369 *
370 * AGL_GMX_RX_ADR_CAM = Address Filtering Control
371 *
372 */
373union cvmx_agl_gmx_rxx_adr_cam2 {
374 u64 u64;
375 struct cvmx_agl_gmx_rxx_adr_cam2_s {
376 u64 adr : 64;
377 } s;
378 struct cvmx_agl_gmx_rxx_adr_cam2_s cn52xx;
379 struct cvmx_agl_gmx_rxx_adr_cam2_s cn52xxp1;
380 struct cvmx_agl_gmx_rxx_adr_cam2_s cn56xx;
381 struct cvmx_agl_gmx_rxx_adr_cam2_s cn56xxp1;
382 struct cvmx_agl_gmx_rxx_adr_cam2_s cn61xx;
383 struct cvmx_agl_gmx_rxx_adr_cam2_s cn63xx;
384 struct cvmx_agl_gmx_rxx_adr_cam2_s cn63xxp1;
385 struct cvmx_agl_gmx_rxx_adr_cam2_s cn66xx;
386 struct cvmx_agl_gmx_rxx_adr_cam2_s cn68xx;
387 struct cvmx_agl_gmx_rxx_adr_cam2_s cn68xxp1;
388 struct cvmx_agl_gmx_rxx_adr_cam2_s cn70xx;
389 struct cvmx_agl_gmx_rxx_adr_cam2_s cn70xxp1;
390};
391
392typedef union cvmx_agl_gmx_rxx_adr_cam2 cvmx_agl_gmx_rxx_adr_cam2_t;
393
394/**
395 * cvmx_agl_gmx_rx#_adr_cam3
396 *
397 * AGL_GMX_RX_ADR_CAM = Address Filtering Control
398 *
399 */
400union cvmx_agl_gmx_rxx_adr_cam3 {
401 u64 u64;
402 struct cvmx_agl_gmx_rxx_adr_cam3_s {
403 u64 adr : 64;
404 } s;
405 struct cvmx_agl_gmx_rxx_adr_cam3_s cn52xx;
406 struct cvmx_agl_gmx_rxx_adr_cam3_s cn52xxp1;
407 struct cvmx_agl_gmx_rxx_adr_cam3_s cn56xx;
408 struct cvmx_agl_gmx_rxx_adr_cam3_s cn56xxp1;
409 struct cvmx_agl_gmx_rxx_adr_cam3_s cn61xx;
410 struct cvmx_agl_gmx_rxx_adr_cam3_s cn63xx;
411 struct cvmx_agl_gmx_rxx_adr_cam3_s cn63xxp1;
412 struct cvmx_agl_gmx_rxx_adr_cam3_s cn66xx;
413 struct cvmx_agl_gmx_rxx_adr_cam3_s cn68xx;
414 struct cvmx_agl_gmx_rxx_adr_cam3_s cn68xxp1;
415 struct cvmx_agl_gmx_rxx_adr_cam3_s cn70xx;
416 struct cvmx_agl_gmx_rxx_adr_cam3_s cn70xxp1;
417};
418
419typedef union cvmx_agl_gmx_rxx_adr_cam3 cvmx_agl_gmx_rxx_adr_cam3_t;
420
421/**
422 * cvmx_agl_gmx_rx#_adr_cam4
423 *
424 * AGL_GMX_RX_ADR_CAM = Address Filtering Control
425 *
426 */
427union cvmx_agl_gmx_rxx_adr_cam4 {
428 u64 u64;
429 struct cvmx_agl_gmx_rxx_adr_cam4_s {
430 u64 adr : 64;
431 } s;
432 struct cvmx_agl_gmx_rxx_adr_cam4_s cn52xx;
433 struct cvmx_agl_gmx_rxx_adr_cam4_s cn52xxp1;
434 struct cvmx_agl_gmx_rxx_adr_cam4_s cn56xx;
435 struct cvmx_agl_gmx_rxx_adr_cam4_s cn56xxp1;
436 struct cvmx_agl_gmx_rxx_adr_cam4_s cn61xx;
437 struct cvmx_agl_gmx_rxx_adr_cam4_s cn63xx;
438 struct cvmx_agl_gmx_rxx_adr_cam4_s cn63xxp1;
439 struct cvmx_agl_gmx_rxx_adr_cam4_s cn66xx;
440 struct cvmx_agl_gmx_rxx_adr_cam4_s cn68xx;
441 struct cvmx_agl_gmx_rxx_adr_cam4_s cn68xxp1;
442 struct cvmx_agl_gmx_rxx_adr_cam4_s cn70xx;
443 struct cvmx_agl_gmx_rxx_adr_cam4_s cn70xxp1;
444};
445
446typedef union cvmx_agl_gmx_rxx_adr_cam4 cvmx_agl_gmx_rxx_adr_cam4_t;
447
448/**
449 * cvmx_agl_gmx_rx#_adr_cam5
450 *
451 * AGL_GMX_RX_ADR_CAM = Address Filtering Control
452 *
453 */
454union cvmx_agl_gmx_rxx_adr_cam5 {
455 u64 u64;
456 struct cvmx_agl_gmx_rxx_adr_cam5_s {
457 u64 adr : 64;
458 } s;
459 struct cvmx_agl_gmx_rxx_adr_cam5_s cn52xx;
460 struct cvmx_agl_gmx_rxx_adr_cam5_s cn52xxp1;
461 struct cvmx_agl_gmx_rxx_adr_cam5_s cn56xx;
462 struct cvmx_agl_gmx_rxx_adr_cam5_s cn56xxp1;
463 struct cvmx_agl_gmx_rxx_adr_cam5_s cn61xx;
464 struct cvmx_agl_gmx_rxx_adr_cam5_s cn63xx;
465 struct cvmx_agl_gmx_rxx_adr_cam5_s cn63xxp1;
466 struct cvmx_agl_gmx_rxx_adr_cam5_s cn66xx;
467 struct cvmx_agl_gmx_rxx_adr_cam5_s cn68xx;
468 struct cvmx_agl_gmx_rxx_adr_cam5_s cn68xxp1;
469 struct cvmx_agl_gmx_rxx_adr_cam5_s cn70xx;
470 struct cvmx_agl_gmx_rxx_adr_cam5_s cn70xxp1;
471};
472
473typedef union cvmx_agl_gmx_rxx_adr_cam5 cvmx_agl_gmx_rxx_adr_cam5_t;
474
475/**
476 * cvmx_agl_gmx_rx#_adr_cam_en
477 *
478 * AGL_GMX_RX_ADR_CAM_EN = Address Filtering Control Enable
479 *
480 *
481 * Notes:
482 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
483 *
484 */
485union cvmx_agl_gmx_rxx_adr_cam_en {
486 u64 u64;
487 struct cvmx_agl_gmx_rxx_adr_cam_en_s {
488 u64 reserved_8_63 : 56;
489 u64 en : 8;
490 } s;
491 struct cvmx_agl_gmx_rxx_adr_cam_en_s cn52xx;
492 struct cvmx_agl_gmx_rxx_adr_cam_en_s cn52xxp1;
493 struct cvmx_agl_gmx_rxx_adr_cam_en_s cn56xx;
494 struct cvmx_agl_gmx_rxx_adr_cam_en_s cn56xxp1;
495 struct cvmx_agl_gmx_rxx_adr_cam_en_s cn61xx;
496 struct cvmx_agl_gmx_rxx_adr_cam_en_s cn63xx;
497 struct cvmx_agl_gmx_rxx_adr_cam_en_s cn63xxp1;
498 struct cvmx_agl_gmx_rxx_adr_cam_en_s cn66xx;
499 struct cvmx_agl_gmx_rxx_adr_cam_en_s cn68xx;
500 struct cvmx_agl_gmx_rxx_adr_cam_en_s cn68xxp1;
501 struct cvmx_agl_gmx_rxx_adr_cam_en_s cn70xx;
502 struct cvmx_agl_gmx_rxx_adr_cam_en_s cn70xxp1;
503};
504
505typedef union cvmx_agl_gmx_rxx_adr_cam_en cvmx_agl_gmx_rxx_adr_cam_en_t;
506
507/**
508 * cvmx_agl_gmx_rx#_adr_ctl
509 *
510 * AGL_GMX_RX_ADR_CTL = Address Filtering Control
511 *
512 *
513 * Notes:
514 * * ALGORITHM
515 * Here is some pseudo code that represents the address filter behavior.
516 *
517 * @verbatim
518 * bool dmac_addr_filter(uint8 prt, uint48 dmac) [
519 * ASSERT(prt >= 0 && prt <= 3);
520 * if (is_bcst(dmac)) // broadcast accept
521 * return (AGL_GMX_RX[prt]_ADR_CTL[BCST] ? ACCEPT : REJECT);
522 * if (is_mcst(dmac) & AGL_GMX_RX[prt]_ADR_CTL[MCST] == 1) // multicast reject
523 * return REJECT;
524 * if (is_mcst(dmac) & AGL_GMX_RX[prt]_ADR_CTL[MCST] == 2) // multicast accept
525 * return ACCEPT;
526 *
527 * cam_hit = 0;
528 *
529 * for (i=0; i<8; i++) [
530 * if (AGL_GMX_RX[prt]_ADR_CAM_EN[EN<i>] == 0)
531 * continue;
532 * uint48 unswizzled_mac_adr = 0x0;
533 * for (j=5; j>=0; j--) [
534 * unswizzled_mac_adr = (unswizzled_mac_adr << 8) | AGL_GMX_RX[prt]_ADR_CAM[j][ADR<i*8+7:i*8>];
535 * ]
536 * if (unswizzled_mac_adr == dmac) [
537 * cam_hit = 1;
538 * break;
539 * ]
540 * ]
541 *
542 * if (cam_hit)
543 * return (AGL_GMX_RX[prt]_ADR_CTL[CAM_MODE] ? ACCEPT : REJECT);
544 * else
545 * return (AGL_GMX_RX[prt]_ADR_CTL[CAM_MODE] ? REJECT : ACCEPT);
546 * ]
547 * @endverbatim
548 *
549 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
550 */
551union cvmx_agl_gmx_rxx_adr_ctl {
552 u64 u64;
553 struct cvmx_agl_gmx_rxx_adr_ctl_s {
554 u64 reserved_4_63 : 60;
555 u64 cam_mode : 1;
556 u64 mcst : 2;
557 u64 bcst : 1;
558 } s;
559 struct cvmx_agl_gmx_rxx_adr_ctl_s cn52xx;
560 struct cvmx_agl_gmx_rxx_adr_ctl_s cn52xxp1;
561 struct cvmx_agl_gmx_rxx_adr_ctl_s cn56xx;
562 struct cvmx_agl_gmx_rxx_adr_ctl_s cn56xxp1;
563 struct cvmx_agl_gmx_rxx_adr_ctl_s cn61xx;
564 struct cvmx_agl_gmx_rxx_adr_ctl_s cn63xx;
565 struct cvmx_agl_gmx_rxx_adr_ctl_s cn63xxp1;
566 struct cvmx_agl_gmx_rxx_adr_ctl_s cn66xx;
567 struct cvmx_agl_gmx_rxx_adr_ctl_s cn68xx;
568 struct cvmx_agl_gmx_rxx_adr_ctl_s cn68xxp1;
569 struct cvmx_agl_gmx_rxx_adr_ctl_s cn70xx;
570 struct cvmx_agl_gmx_rxx_adr_ctl_s cn70xxp1;
571};
572
573typedef union cvmx_agl_gmx_rxx_adr_ctl cvmx_agl_gmx_rxx_adr_ctl_t;
574
575/**
576 * cvmx_agl_gmx_rx#_decision
577 *
578 * AGL_GMX_RX_DECISION = The byte count to decide when to accept or filter a packet
579 *
580 *
581 * Notes:
582 * As each byte in a packet is received by GMX, the L2 byte count is compared
583 * against the AGL_GMX_RX_DECISION[CNT]. The L2 byte count is the number of bytes
584 * from the beginning of the L2 header (DMAC). In normal operation, the L2
585 * header begins after the PREAMBLE+SFD (AGL_GMX_RX_FRM_CTL[PRE_CHK]=1) and any
586 * optional UDD skip data (AGL_GMX_RX_UDD_SKP[LEN]).
587 *
588 * When AGL_GMX_RX_FRM_CTL[PRE_CHK] is clear, PREAMBLE+SFD are prepended to the
589 * packet and would require UDD skip length to account for them.
590 *
591 * L2 Size
592 * Port Mode <=AGL_GMX_RX_DECISION bytes (default=24) >AGL_GMX_RX_DECISION bytes (default=24)
593 *
594 * MII/Full Duplex accept packet apply filters
595 * no filtering is applied accept packet based on DMAC and PAUSE packet filters
596 *
597 * MII/Half Duplex drop packet apply filters
598 * packet is unconditionally dropped accept packet based on DMAC
599 *
600 * where l2_size = MAX(0, total_packet_size - AGL_GMX_RX_UDD_SKP[LEN] - ((AGL_GMX_RX_FRM_CTL[PRE_CHK]==1)*8)
601 *
602 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
603 */
604union cvmx_agl_gmx_rxx_decision {
605 u64 u64;
606 struct cvmx_agl_gmx_rxx_decision_s {
607 u64 reserved_5_63 : 59;
608 u64 cnt : 5;
609 } s;
610 struct cvmx_agl_gmx_rxx_decision_s cn52xx;
611 struct cvmx_agl_gmx_rxx_decision_s cn52xxp1;
612 struct cvmx_agl_gmx_rxx_decision_s cn56xx;
613 struct cvmx_agl_gmx_rxx_decision_s cn56xxp1;
614 struct cvmx_agl_gmx_rxx_decision_s cn61xx;
615 struct cvmx_agl_gmx_rxx_decision_s cn63xx;
616 struct cvmx_agl_gmx_rxx_decision_s cn63xxp1;
617 struct cvmx_agl_gmx_rxx_decision_s cn66xx;
618 struct cvmx_agl_gmx_rxx_decision_s cn68xx;
619 struct cvmx_agl_gmx_rxx_decision_s cn68xxp1;
620 struct cvmx_agl_gmx_rxx_decision_s cn70xx;
621 struct cvmx_agl_gmx_rxx_decision_s cn70xxp1;
622};
623
624typedef union cvmx_agl_gmx_rxx_decision cvmx_agl_gmx_rxx_decision_t;
625
626/**
627 * cvmx_agl_gmx_rx#_frm_chk
628 *
629 * AGL_GMX_RX_FRM_CHK = Which frame errors will set the ERR bit of the frame
630 *
631 *
632 * Notes:
633 * If AGL_GMX_RX_UDD_SKP[LEN] != 0, then LENERR will be forced to zero in HW.
634 *
635 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
636 */
637union cvmx_agl_gmx_rxx_frm_chk {
638 u64 u64;
639 struct cvmx_agl_gmx_rxx_frm_chk_s {
640 u64 reserved_10_63 : 54;
641 u64 niberr : 1;
642 u64 skperr : 1;
643 u64 rcverr : 1;
644 u64 lenerr : 1;
645 u64 alnerr : 1;
646 u64 fcserr : 1;
647 u64 jabber : 1;
648 u64 maxerr : 1;
649 u64 carext : 1;
650 u64 minerr : 1;
651 } s;
652 struct cvmx_agl_gmx_rxx_frm_chk_cn52xx {
653 u64 reserved_9_63 : 55;
654 u64 skperr : 1;
655 u64 rcverr : 1;
656 u64 lenerr : 1;
657 u64 alnerr : 1;
658 u64 fcserr : 1;
659 u64 jabber : 1;
660 u64 maxerr : 1;
661 u64 reserved_1_1 : 1;
662 u64 minerr : 1;
663 } cn52xx;
664 struct cvmx_agl_gmx_rxx_frm_chk_cn52xx cn52xxp1;
665 struct cvmx_agl_gmx_rxx_frm_chk_cn52xx cn56xx;
666 struct cvmx_agl_gmx_rxx_frm_chk_cn52xx cn56xxp1;
667 struct cvmx_agl_gmx_rxx_frm_chk_s cn61xx;
668 struct cvmx_agl_gmx_rxx_frm_chk_s cn63xx;
669 struct cvmx_agl_gmx_rxx_frm_chk_s cn63xxp1;
670 struct cvmx_agl_gmx_rxx_frm_chk_s cn66xx;
671 struct cvmx_agl_gmx_rxx_frm_chk_s cn68xx;
672 struct cvmx_agl_gmx_rxx_frm_chk_s cn68xxp1;
673 struct cvmx_agl_gmx_rxx_frm_chk_s cn70xx;
674 struct cvmx_agl_gmx_rxx_frm_chk_s cn70xxp1;
675};
676
677typedef union cvmx_agl_gmx_rxx_frm_chk cvmx_agl_gmx_rxx_frm_chk_t;
678
679/**
680 * cvmx_agl_gmx_rx#_frm_ctl
681 *
682 * AGL_GMX_RX_FRM_CTL = Frame Control
683 *
684 *
685 * Notes:
686 * * PRE_STRP
687 * When PRE_CHK is set (indicating that the PREAMBLE will be sent), PRE_STRP
688 * determines if the PREAMBLE+SFD bytes are thrown away or sent to the Octane
689 * core as part of the packet.
690 *
691 * In either mode, the PREAMBLE+SFD bytes are not counted toward the packet
692 * size when checking against the MIN and MAX bounds. Furthermore, the bytes
693 * are skipped when locating the start of the L2 header for DMAC and Control
694 * frame recognition.
695 *
696 * * CTL_BCK/CTL_DRP
697 * These bits control how the HW handles incoming PAUSE packets. Here are
698 * the most common modes of operation:
699 * CTL_BCK=1,CTL_DRP=1 - HW does it all
700 * CTL_BCK=0,CTL_DRP=0 - SW sees all pause frames
701 * CTL_BCK=0,CTL_DRP=1 - all pause frames are completely ignored
702 *
703 * These control bits should be set to CTL_BCK=0,CTL_DRP=0 in halfdup mode.
704 * Since PAUSE packets only apply to fulldup operation, any PAUSE packet
705 * would constitute an exception which should be handled by the processing
706 * cores. PAUSE packets should not be forwarded.
707 *
708 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
709 */
710union cvmx_agl_gmx_rxx_frm_ctl {
711 u64 u64;
712 struct cvmx_agl_gmx_rxx_frm_ctl_s {
713 u64 reserved_13_63 : 51;
714 u64 ptp_mode : 1;
715 u64 reserved_11_11 : 1;
716 u64 null_dis : 1;
717 u64 pre_align : 1;
718 u64 pad_len : 1;
719 u64 vlan_len : 1;
720 u64 pre_free : 1;
721 u64 ctl_smac : 1;
722 u64 ctl_mcst : 1;
723 u64 ctl_bck : 1;
724 u64 ctl_drp : 1;
725 u64 pre_strp : 1;
726 u64 pre_chk : 1;
727 } s;
728 struct cvmx_agl_gmx_rxx_frm_ctl_cn52xx {
729 u64 reserved_10_63 : 54;
730 u64 pre_align : 1;
731 u64 pad_len : 1;
732 u64 vlan_len : 1;
733 u64 pre_free : 1;
734 u64 ctl_smac : 1;
735 u64 ctl_mcst : 1;
736 u64 ctl_bck : 1;
737 u64 ctl_drp : 1;
738 u64 pre_strp : 1;
739 u64 pre_chk : 1;
740 } cn52xx;
741 struct cvmx_agl_gmx_rxx_frm_ctl_cn52xx cn52xxp1;
742 struct cvmx_agl_gmx_rxx_frm_ctl_cn52xx cn56xx;
743 struct cvmx_agl_gmx_rxx_frm_ctl_cn52xx cn56xxp1;
744 struct cvmx_agl_gmx_rxx_frm_ctl_s cn61xx;
745 struct cvmx_agl_gmx_rxx_frm_ctl_s cn63xx;
746 struct cvmx_agl_gmx_rxx_frm_ctl_s cn63xxp1;
747 struct cvmx_agl_gmx_rxx_frm_ctl_s cn66xx;
748 struct cvmx_agl_gmx_rxx_frm_ctl_s cn68xx;
749 struct cvmx_agl_gmx_rxx_frm_ctl_s cn68xxp1;
750 struct cvmx_agl_gmx_rxx_frm_ctl_s cn70xx;
751 struct cvmx_agl_gmx_rxx_frm_ctl_s cn70xxp1;
752};
753
754typedef union cvmx_agl_gmx_rxx_frm_ctl cvmx_agl_gmx_rxx_frm_ctl_t;
755
756/**
757 * cvmx_agl_gmx_rx#_frm_max
758 *
759 * AGL_GMX_RX_FRM_MAX = Frame Max length
760 *
761 *
762 * Notes:
763 * When changing the LEN field, be sure that LEN does not exceed
764 * AGL_GMX_RX_JABBER[CNT]. Failure to meet this constraint will cause packets that
765 * are within the maximum length parameter to be rejected because they exceed
766 * the AGL_GMX_RX_JABBER[CNT] limit.
767 *
768 * Notes:
769 *
770 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
771 */
772union cvmx_agl_gmx_rxx_frm_max {
773 u64 u64;
774 struct cvmx_agl_gmx_rxx_frm_max_s {
775 u64 reserved_16_63 : 48;
776 u64 len : 16;
777 } s;
778 struct cvmx_agl_gmx_rxx_frm_max_s cn52xx;
779 struct cvmx_agl_gmx_rxx_frm_max_s cn52xxp1;
780 struct cvmx_agl_gmx_rxx_frm_max_s cn56xx;
781 struct cvmx_agl_gmx_rxx_frm_max_s cn56xxp1;
782 struct cvmx_agl_gmx_rxx_frm_max_s cn61xx;
783 struct cvmx_agl_gmx_rxx_frm_max_s cn63xx;
784 struct cvmx_agl_gmx_rxx_frm_max_s cn63xxp1;
785 struct cvmx_agl_gmx_rxx_frm_max_s cn66xx;
786 struct cvmx_agl_gmx_rxx_frm_max_s cn68xx;
787 struct cvmx_agl_gmx_rxx_frm_max_s cn68xxp1;
788 struct cvmx_agl_gmx_rxx_frm_max_s cn70xx;
789 struct cvmx_agl_gmx_rxx_frm_max_s cn70xxp1;
790};
791
792typedef union cvmx_agl_gmx_rxx_frm_max cvmx_agl_gmx_rxx_frm_max_t;
793
794/**
795 * cvmx_agl_gmx_rx#_frm_min
796 *
797 * AGL_GMX_RX_FRM_MIN = Frame Min length
798 *
799 *
800 * Notes:
801 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
802 *
803 */
804union cvmx_agl_gmx_rxx_frm_min {
805 u64 u64;
806 struct cvmx_agl_gmx_rxx_frm_min_s {
807 u64 reserved_16_63 : 48;
808 u64 len : 16;
809 } s;
810 struct cvmx_agl_gmx_rxx_frm_min_s cn52xx;
811 struct cvmx_agl_gmx_rxx_frm_min_s cn52xxp1;
812 struct cvmx_agl_gmx_rxx_frm_min_s cn56xx;
813 struct cvmx_agl_gmx_rxx_frm_min_s cn56xxp1;
814 struct cvmx_agl_gmx_rxx_frm_min_s cn61xx;
815 struct cvmx_agl_gmx_rxx_frm_min_s cn63xx;
816 struct cvmx_agl_gmx_rxx_frm_min_s cn63xxp1;
817 struct cvmx_agl_gmx_rxx_frm_min_s cn66xx;
818 struct cvmx_agl_gmx_rxx_frm_min_s cn68xx;
819 struct cvmx_agl_gmx_rxx_frm_min_s cn68xxp1;
820 struct cvmx_agl_gmx_rxx_frm_min_s cn70xx;
821 struct cvmx_agl_gmx_rxx_frm_min_s cn70xxp1;
822};
823
824typedef union cvmx_agl_gmx_rxx_frm_min cvmx_agl_gmx_rxx_frm_min_t;
825
826/**
827 * cvmx_agl_gmx_rx#_ifg
828 *
829 * AGL_GMX_RX_IFG = RX Min IFG
830 *
831 *
832 * Notes:
833 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
834 *
835 */
836union cvmx_agl_gmx_rxx_ifg {
837 u64 u64;
838 struct cvmx_agl_gmx_rxx_ifg_s {
839 u64 reserved_4_63 : 60;
840 u64 ifg : 4;
841 } s;
842 struct cvmx_agl_gmx_rxx_ifg_s cn52xx;
843 struct cvmx_agl_gmx_rxx_ifg_s cn52xxp1;
844 struct cvmx_agl_gmx_rxx_ifg_s cn56xx;
845 struct cvmx_agl_gmx_rxx_ifg_s cn56xxp1;
846 struct cvmx_agl_gmx_rxx_ifg_s cn61xx;
847 struct cvmx_agl_gmx_rxx_ifg_s cn63xx;
848 struct cvmx_agl_gmx_rxx_ifg_s cn63xxp1;
849 struct cvmx_agl_gmx_rxx_ifg_s cn66xx;
850 struct cvmx_agl_gmx_rxx_ifg_s cn68xx;
851 struct cvmx_agl_gmx_rxx_ifg_s cn68xxp1;
852 struct cvmx_agl_gmx_rxx_ifg_s cn70xx;
853 struct cvmx_agl_gmx_rxx_ifg_s cn70xxp1;
854};
855
856typedef union cvmx_agl_gmx_rxx_ifg cvmx_agl_gmx_rxx_ifg_t;
857
858/**
859 * cvmx_agl_gmx_rx#_int_en
860 *
861 * AGL_GMX_RX_INT_EN = Interrupt Enable
862 *
863 *
864 * Notes:
865 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
866 *
867 */
868union cvmx_agl_gmx_rxx_int_en {
869 u64 u64;
870 struct cvmx_agl_gmx_rxx_int_en_s {
871 u64 reserved_30_63 : 34;
872 u64 wol : 1;
873 u64 reserved_20_28 : 9;
874 u64 pause_drp : 1;
875 u64 phy_dupx : 1;
876 u64 phy_spd : 1;
877 u64 phy_link : 1;
878 u64 ifgerr : 1;
879 u64 coldet : 1;
880 u64 falerr : 1;
881 u64 rsverr : 1;
882 u64 pcterr : 1;
883 u64 ovrerr : 1;
884 u64 niberr : 1;
885 u64 skperr : 1;
886 u64 rcverr : 1;
887 u64 lenerr : 1;
888 u64 alnerr : 1;
889 u64 fcserr : 1;
890 u64 jabber : 1;
891 u64 maxerr : 1;
892 u64 carext : 1;
893 u64 minerr : 1;
894 } s;
895 struct cvmx_agl_gmx_rxx_int_en_cn52xx {
896 u64 reserved_20_63 : 44;
897 u64 pause_drp : 1;
898 u64 reserved_16_18 : 3;
899 u64 ifgerr : 1;
900 u64 coldet : 1;
901 u64 falerr : 1;
902 u64 rsverr : 1;
903 u64 pcterr : 1;
904 u64 ovrerr : 1;
905 u64 reserved_9_9 : 1;
906 u64 skperr : 1;
907 u64 rcverr : 1;
908 u64 lenerr : 1;
909 u64 alnerr : 1;
910 u64 fcserr : 1;
911 u64 jabber : 1;
912 u64 maxerr : 1;
913 u64 reserved_1_1 : 1;
914 u64 minerr : 1;
915 } cn52xx;
916 struct cvmx_agl_gmx_rxx_int_en_cn52xx cn52xxp1;
917 struct cvmx_agl_gmx_rxx_int_en_cn52xx cn56xx;
918 struct cvmx_agl_gmx_rxx_int_en_cn52xx cn56xxp1;
919 struct cvmx_agl_gmx_rxx_int_en_cn61xx {
920 u64 reserved_20_63 : 44;
921 u64 pause_drp : 1;
922 u64 phy_dupx : 1;
923 u64 phy_spd : 1;
924 u64 phy_link : 1;
925 u64 ifgerr : 1;
926 u64 coldet : 1;
927 u64 falerr : 1;
928 u64 rsverr : 1;
929 u64 pcterr : 1;
930 u64 ovrerr : 1;
931 u64 niberr : 1;
932 u64 skperr : 1;
933 u64 rcverr : 1;
934 u64 lenerr : 1;
935 u64 alnerr : 1;
936 u64 fcserr : 1;
937 u64 jabber : 1;
938 u64 maxerr : 1;
939 u64 carext : 1;
940 u64 minerr : 1;
941 } cn61xx;
942 struct cvmx_agl_gmx_rxx_int_en_cn61xx cn63xx;
943 struct cvmx_agl_gmx_rxx_int_en_cn61xx cn63xxp1;
944 struct cvmx_agl_gmx_rxx_int_en_cn61xx cn66xx;
945 struct cvmx_agl_gmx_rxx_int_en_cn61xx cn68xx;
946 struct cvmx_agl_gmx_rxx_int_en_cn61xx cn68xxp1;
947 struct cvmx_agl_gmx_rxx_int_en_s cn70xx;
948 struct cvmx_agl_gmx_rxx_int_en_s cn70xxp1;
949};
950
951typedef union cvmx_agl_gmx_rxx_int_en cvmx_agl_gmx_rxx_int_en_t;
952
953/**
954 * cvmx_agl_gmx_rx#_int_reg
955 *
956 * AGL_GMX_RX_INT_REG = Interrupt Register
957 *
958 *
959 * Notes:
960 * (1) exceptions will only be raised to the control processor if the
961 * corresponding bit in the AGL_GMX_RX_INT_EN register is set.
962 *
963 * (2) exception conditions 10:0 can also set the rcv/opcode in the received
964 * packet's workQ entry. The AGL_GMX_RX_FRM_CHK register provides a bit mask
965 * for configuring which conditions set the error.
966 *
967 * (3) in half duplex operation, the expectation is that collisions will appear
968 * as MINERRs.
969 *
970 * (4) JABBER - An RX Jabber error indicates that a packet was received which
971 * is longer than the maximum allowed packet as defined by the
972 * system. GMX will truncate the packet at the JABBER count.
973 * Failure to do so could lead to system instabilty.
974 *
975 * (6) MAXERR - for untagged frames, the total frame DA+SA+TL+DATA+PAD+FCS >
976 * AGL_GMX_RX_FRM_MAX. For tagged frames, DA+SA+VLAN+TL+DATA+PAD+FCS
977 * > AGL_GMX_RX_FRM_MAX + 4*VLAN_VAL + 4*VLAN_STACKED.
978 *
979 * (7) MINERR - total frame DA+SA+TL+DATA+PAD+FCS < AGL_GMX_RX_FRM_MIN.
980 *
981 * (8) ALNERR - Indicates that the packet received was not an integer number of
982 * bytes. If FCS checking is enabled, ALNERR will only assert if
983 * the FCS is bad. If FCS checking is disabled, ALNERR will
984 * assert in all non-integer frame cases.
985 *
986 * (9) Collisions - Collisions can only occur in half-duplex mode. A collision
987 * is assumed by the receiver when the received
988 * frame < AGL_GMX_RX_FRM_MIN - this is normally a MINERR
989 *
990 * (A) LENERR - Length errors occur when the received packet does not match the
991 * length field. LENERR is only checked for packets between 64
992 * and 1500 bytes. For untagged frames, the length must exact
993 * match. For tagged frames the length or length+4 must match.
994 *
995 * (B) PCTERR - checks that the frame begins with a valid PREAMBLE sequence.
996 * Does not check the number of PREAMBLE cycles.
997 *
998 * (C) OVRERR -
999 *
1000 * OVRERR is an architectural assertion check internal to GMX to
1001 * make sure no assumption was violated. In a correctly operating
1002 * system, this interrupt can never fire.
1003 *
1004 * GMX has an internal arbiter which selects which of 4 ports to
1005 * buffer in the main RX FIFO. If we normally buffer 8 bytes,
1006 * then each port will typically push a tick every 8 cycles - if
1007 * the packet interface is going as fast as possible. If there
1008 * are four ports, they push every two cycles. So that's the
1009 * assumption. That the inbound module will always be able to
1010 * consume the tick before another is produced. If that doesn't
1011 * happen - that's when OVRERR will assert.
1012 *
1013 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
1014 */
1015union cvmx_agl_gmx_rxx_int_reg {
1016 u64 u64;
1017 struct cvmx_agl_gmx_rxx_int_reg_s {
1018 u64 reserved_30_63 : 34;
1019 u64 wol : 1;
1020 u64 reserved_20_28 : 9;
1021 u64 pause_drp : 1;
1022 u64 phy_dupx : 1;
1023 u64 phy_spd : 1;
1024 u64 phy_link : 1;
1025 u64 ifgerr : 1;
1026 u64 coldet : 1;
1027 u64 falerr : 1;
1028 u64 rsverr : 1;
1029 u64 pcterr : 1;
1030 u64 ovrerr : 1;
1031 u64 niberr : 1;
1032 u64 skperr : 1;
1033 u64 rcverr : 1;
1034 u64 lenerr : 1;
1035 u64 alnerr : 1;
1036 u64 fcserr : 1;
1037 u64 jabber : 1;
1038 u64 maxerr : 1;
1039 u64 carext : 1;
1040 u64 minerr : 1;
1041 } s;
1042 struct cvmx_agl_gmx_rxx_int_reg_cn52xx {
1043 u64 reserved_20_63 : 44;
1044 u64 pause_drp : 1;
1045 u64 reserved_16_18 : 3;
1046 u64 ifgerr : 1;
1047 u64 coldet : 1;
1048 u64 falerr : 1;
1049 u64 rsverr : 1;
1050 u64 pcterr : 1;
1051 u64 ovrerr : 1;
1052 u64 reserved_9_9 : 1;
1053 u64 skperr : 1;
1054 u64 rcverr : 1;
1055 u64 lenerr : 1;
1056 u64 alnerr : 1;
1057 u64 fcserr : 1;
1058 u64 jabber : 1;
1059 u64 maxerr : 1;
1060 u64 reserved_1_1 : 1;
1061 u64 minerr : 1;
1062 } cn52xx;
1063 struct cvmx_agl_gmx_rxx_int_reg_cn52xx cn52xxp1;
1064 struct cvmx_agl_gmx_rxx_int_reg_cn52xx cn56xx;
1065 struct cvmx_agl_gmx_rxx_int_reg_cn52xx cn56xxp1;
1066 struct cvmx_agl_gmx_rxx_int_reg_cn61xx {
1067 u64 reserved_20_63 : 44;
1068 u64 pause_drp : 1;
1069 u64 phy_dupx : 1;
1070 u64 phy_spd : 1;
1071 u64 phy_link : 1;
1072 u64 ifgerr : 1;
1073 u64 coldet : 1;
1074 u64 falerr : 1;
1075 u64 rsverr : 1;
1076 u64 pcterr : 1;
1077 u64 ovrerr : 1;
1078 u64 niberr : 1;
1079 u64 skperr : 1;
1080 u64 rcverr : 1;
1081 u64 lenerr : 1;
1082 u64 alnerr : 1;
1083 u64 fcserr : 1;
1084 u64 jabber : 1;
1085 u64 maxerr : 1;
1086 u64 carext : 1;
1087 u64 minerr : 1;
1088 } cn61xx;
1089 struct cvmx_agl_gmx_rxx_int_reg_cn61xx cn63xx;
1090 struct cvmx_agl_gmx_rxx_int_reg_cn61xx cn63xxp1;
1091 struct cvmx_agl_gmx_rxx_int_reg_cn61xx cn66xx;
1092 struct cvmx_agl_gmx_rxx_int_reg_cn61xx cn68xx;
1093 struct cvmx_agl_gmx_rxx_int_reg_cn61xx cn68xxp1;
1094 struct cvmx_agl_gmx_rxx_int_reg_s cn70xx;
1095 struct cvmx_agl_gmx_rxx_int_reg_s cn70xxp1;
1096};
1097
1098typedef union cvmx_agl_gmx_rxx_int_reg cvmx_agl_gmx_rxx_int_reg_t;
1099
1100/**
1101 * cvmx_agl_gmx_rx#_jabber
1102 *
1103 * AGL_GMX_RX_JABBER = The max size packet after which GMX will truncate
1104 *
1105 *
1106 * Notes:
1107 * CNT must be 8-byte aligned such that CNT[2:0] == 0
1108 *
1109 * The packet that will be sent to the packet input logic will have an
1110 * additionl 8 bytes if AGL_GMX_RX_FRM_CTL[PRE_CHK] is set and
1111 * AGL_GMX_RX_FRM_CTL[PRE_STRP] is clear. The max packet that will be sent is
1112 * defined as...
1113 *
1114 * max_sized_packet = AGL_GMX_RX_JABBER[CNT]+((AGL_GMX_RX_FRM_CTL[PRE_CHK] & !AGL_GMX_RX_FRM_CTL[PRE_STRP])*8)
1115 *
1116 * Be sure the CNT field value is at least as large as the
1117 * AGL_GMX_RX_FRM_MAX[LEN] value. Failure to meet this constraint will cause
1118 * packets that are within the AGL_GMX_RX_FRM_MAX[LEN] length to be rejected
1119 * because they exceed the CNT limit.
1120 *
1121 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
1122 */
1123union cvmx_agl_gmx_rxx_jabber {
1124 u64 u64;
1125 struct cvmx_agl_gmx_rxx_jabber_s {
1126 u64 reserved_16_63 : 48;
1127 u64 cnt : 16;
1128 } s;
1129 struct cvmx_agl_gmx_rxx_jabber_s cn52xx;
1130 struct cvmx_agl_gmx_rxx_jabber_s cn52xxp1;
1131 struct cvmx_agl_gmx_rxx_jabber_s cn56xx;
1132 struct cvmx_agl_gmx_rxx_jabber_s cn56xxp1;
1133 struct cvmx_agl_gmx_rxx_jabber_s cn61xx;
1134 struct cvmx_agl_gmx_rxx_jabber_s cn63xx;
1135 struct cvmx_agl_gmx_rxx_jabber_s cn63xxp1;
1136 struct cvmx_agl_gmx_rxx_jabber_s cn66xx;
1137 struct cvmx_agl_gmx_rxx_jabber_s cn68xx;
1138 struct cvmx_agl_gmx_rxx_jabber_s cn68xxp1;
1139 struct cvmx_agl_gmx_rxx_jabber_s cn70xx;
1140 struct cvmx_agl_gmx_rxx_jabber_s cn70xxp1;
1141};
1142
1143typedef union cvmx_agl_gmx_rxx_jabber cvmx_agl_gmx_rxx_jabber_t;
1144
1145/**
1146 * cvmx_agl_gmx_rx#_pause_drop_time
1147 *
1148 * AGL_GMX_RX_PAUSE_DROP_TIME = The TIME field in a PAUSE Packet which was dropped due to GMX RX FIFO full condition
1149 *
1150 *
1151 * Notes:
1152 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
1153 *
1154 */
1155union cvmx_agl_gmx_rxx_pause_drop_time {
1156 u64 u64;
1157 struct cvmx_agl_gmx_rxx_pause_drop_time_s {
1158 u64 reserved_16_63 : 48;
1159 u64 status : 16;
1160 } s;
1161 struct cvmx_agl_gmx_rxx_pause_drop_time_s cn52xx;
1162 struct cvmx_agl_gmx_rxx_pause_drop_time_s cn52xxp1;
1163 struct cvmx_agl_gmx_rxx_pause_drop_time_s cn56xx;
1164 struct cvmx_agl_gmx_rxx_pause_drop_time_s cn56xxp1;
1165 struct cvmx_agl_gmx_rxx_pause_drop_time_s cn61xx;
1166 struct cvmx_agl_gmx_rxx_pause_drop_time_s cn63xx;
1167 struct cvmx_agl_gmx_rxx_pause_drop_time_s cn63xxp1;
1168 struct cvmx_agl_gmx_rxx_pause_drop_time_s cn66xx;
1169 struct cvmx_agl_gmx_rxx_pause_drop_time_s cn68xx;
1170 struct cvmx_agl_gmx_rxx_pause_drop_time_s cn68xxp1;
1171 struct cvmx_agl_gmx_rxx_pause_drop_time_s cn70xx;
1172 struct cvmx_agl_gmx_rxx_pause_drop_time_s cn70xxp1;
1173};
1174
1175typedef union cvmx_agl_gmx_rxx_pause_drop_time cvmx_agl_gmx_rxx_pause_drop_time_t;
1176
1177/**
1178 * cvmx_agl_gmx_rx#_rx_inbnd
1179 *
1180 * AGL_GMX_RX_INBND = RGMII InBand Link Status
1181 *
1182 */
1183union cvmx_agl_gmx_rxx_rx_inbnd {
1184 u64 u64;
1185 struct cvmx_agl_gmx_rxx_rx_inbnd_s {
1186 u64 reserved_4_63 : 60;
1187 u64 duplex : 1;
1188 u64 speed : 2;
1189 u64 status : 1;
1190 } s;
1191 struct cvmx_agl_gmx_rxx_rx_inbnd_s cn61xx;
1192 struct cvmx_agl_gmx_rxx_rx_inbnd_s cn63xx;
1193 struct cvmx_agl_gmx_rxx_rx_inbnd_s cn63xxp1;
1194 struct cvmx_agl_gmx_rxx_rx_inbnd_s cn66xx;
1195 struct cvmx_agl_gmx_rxx_rx_inbnd_s cn68xx;
1196 struct cvmx_agl_gmx_rxx_rx_inbnd_s cn68xxp1;
1197 struct cvmx_agl_gmx_rxx_rx_inbnd_s cn70xx;
1198 struct cvmx_agl_gmx_rxx_rx_inbnd_s cn70xxp1;
1199};
1200
1201typedef union cvmx_agl_gmx_rxx_rx_inbnd cvmx_agl_gmx_rxx_rx_inbnd_t;
1202
1203/**
1204 * cvmx_agl_gmx_rx#_stats_ctl
1205 *
1206 * AGL_GMX_RX_STATS_CTL = RX Stats Control register
1207 *
1208 *
1209 * Notes:
1210 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
1211 *
1212 */
1213union cvmx_agl_gmx_rxx_stats_ctl {
1214 u64 u64;
1215 struct cvmx_agl_gmx_rxx_stats_ctl_s {
1216 u64 reserved_1_63 : 63;
1217 u64 rd_clr : 1;
1218 } s;
1219 struct cvmx_agl_gmx_rxx_stats_ctl_s cn52xx;
1220 struct cvmx_agl_gmx_rxx_stats_ctl_s cn52xxp1;
1221 struct cvmx_agl_gmx_rxx_stats_ctl_s cn56xx;
1222 struct cvmx_agl_gmx_rxx_stats_ctl_s cn56xxp1;
1223 struct cvmx_agl_gmx_rxx_stats_ctl_s cn61xx;
1224 struct cvmx_agl_gmx_rxx_stats_ctl_s cn63xx;
1225 struct cvmx_agl_gmx_rxx_stats_ctl_s cn63xxp1;
1226 struct cvmx_agl_gmx_rxx_stats_ctl_s cn66xx;
1227 struct cvmx_agl_gmx_rxx_stats_ctl_s cn68xx;
1228 struct cvmx_agl_gmx_rxx_stats_ctl_s cn68xxp1;
1229 struct cvmx_agl_gmx_rxx_stats_ctl_s cn70xx;
1230 struct cvmx_agl_gmx_rxx_stats_ctl_s cn70xxp1;
1231};
1232
1233typedef union cvmx_agl_gmx_rxx_stats_ctl cvmx_agl_gmx_rxx_stats_ctl_t;
1234
1235/**
1236 * cvmx_agl_gmx_rx#_stats_octs
1237 *
1238 * Notes:
1239 * - Cleared either by a write (of any value) or a read when AGL_GMX_RX_STATS_CTL[RD_CLR] is set
1240 * - Counters will wrap
1241 * - Not reset when MIX*_CTL[RESET] is set to 1.
1242 */
1243union cvmx_agl_gmx_rxx_stats_octs {
1244 u64 u64;
1245 struct cvmx_agl_gmx_rxx_stats_octs_s {
1246 u64 reserved_48_63 : 16;
1247 u64 cnt : 48;
1248 } s;
1249 struct cvmx_agl_gmx_rxx_stats_octs_s cn52xx;
1250 struct cvmx_agl_gmx_rxx_stats_octs_s cn52xxp1;
1251 struct cvmx_agl_gmx_rxx_stats_octs_s cn56xx;
1252 struct cvmx_agl_gmx_rxx_stats_octs_s cn56xxp1;
1253 struct cvmx_agl_gmx_rxx_stats_octs_s cn61xx;
1254 struct cvmx_agl_gmx_rxx_stats_octs_s cn63xx;
1255 struct cvmx_agl_gmx_rxx_stats_octs_s cn63xxp1;
1256 struct cvmx_agl_gmx_rxx_stats_octs_s cn66xx;
1257 struct cvmx_agl_gmx_rxx_stats_octs_s cn68xx;
1258 struct cvmx_agl_gmx_rxx_stats_octs_s cn68xxp1;
1259 struct cvmx_agl_gmx_rxx_stats_octs_s cn70xx;
1260 struct cvmx_agl_gmx_rxx_stats_octs_s cn70xxp1;
1261};
1262
1263typedef union cvmx_agl_gmx_rxx_stats_octs cvmx_agl_gmx_rxx_stats_octs_t;
1264
1265/**
1266 * cvmx_agl_gmx_rx#_stats_octs_ctl
1267 *
1268 * Notes:
1269 * - Cleared either by a write (of any value) or a read when AGL_GMX_RX_STATS_CTL[RD_CLR] is set
1270 * - Counters will wrap
1271 * - Not reset when MIX*_CTL[RESET] is set to 1.
1272 */
1273union cvmx_agl_gmx_rxx_stats_octs_ctl {
1274 u64 u64;
1275 struct cvmx_agl_gmx_rxx_stats_octs_ctl_s {
1276 u64 reserved_48_63 : 16;
1277 u64 cnt : 48;
1278 } s;
1279 struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn52xx;
1280 struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn52xxp1;
1281 struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn56xx;
1282 struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn56xxp1;
1283 struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn61xx;
1284 struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn63xx;
1285 struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn63xxp1;
1286 struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn66xx;
1287 struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn68xx;
1288 struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn68xxp1;
1289 struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn70xx;
1290 struct cvmx_agl_gmx_rxx_stats_octs_ctl_s cn70xxp1;
1291};
1292
1293typedef union cvmx_agl_gmx_rxx_stats_octs_ctl cvmx_agl_gmx_rxx_stats_octs_ctl_t;
1294
1295/**
1296 * cvmx_agl_gmx_rx#_stats_octs_dmac
1297 *
1298 * Notes:
1299 * - Cleared either by a write (of any value) or a read when AGL_GMX_RX_STATS_CTL[RD_CLR] is set
1300 * - Counters will wrap
1301 * - Not reset when MIX*_CTL[RESET] is set to 1.
1302 */
1303union cvmx_agl_gmx_rxx_stats_octs_dmac {
1304 u64 u64;
1305 struct cvmx_agl_gmx_rxx_stats_octs_dmac_s {
1306 u64 reserved_48_63 : 16;
1307 u64 cnt : 48;
1308 } s;
1309 struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn52xx;
1310 struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn52xxp1;
1311 struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn56xx;
1312 struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn56xxp1;
1313 struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn61xx;
1314 struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn63xx;
1315 struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn63xxp1;
1316 struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn66xx;
1317 struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn68xx;
1318 struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn68xxp1;
1319 struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn70xx;
1320 struct cvmx_agl_gmx_rxx_stats_octs_dmac_s cn70xxp1;
1321};
1322
1323typedef union cvmx_agl_gmx_rxx_stats_octs_dmac cvmx_agl_gmx_rxx_stats_octs_dmac_t;
1324
1325/**
1326 * cvmx_agl_gmx_rx#_stats_octs_drp
1327 *
1328 * Notes:
1329 * - Cleared either by a write (of any value) or a read when AGL_GMX_RX_STATS_CTL[RD_CLR] is set
1330 * - Counters will wrap
1331 * - Not reset when MIX*_CTL[RESET] is set to 1.
1332 */
1333union cvmx_agl_gmx_rxx_stats_octs_drp {
1334 u64 u64;
1335 struct cvmx_agl_gmx_rxx_stats_octs_drp_s {
1336 u64 reserved_48_63 : 16;
1337 u64 cnt : 48;
1338 } s;
1339 struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn52xx;
1340 struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn52xxp1;
1341 struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn56xx;
1342 struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn56xxp1;
1343 struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn61xx;
1344 struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn63xx;
1345 struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn63xxp1;
1346 struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn66xx;
1347 struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn68xx;
1348 struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn68xxp1;
1349 struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn70xx;
1350 struct cvmx_agl_gmx_rxx_stats_octs_drp_s cn70xxp1;
1351};
1352
1353typedef union cvmx_agl_gmx_rxx_stats_octs_drp cvmx_agl_gmx_rxx_stats_octs_drp_t;
1354
1355/**
1356 * cvmx_agl_gmx_rx#_stats_pkts
1357 *
1358 * Count of good received packets - packets that are not recognized as PAUSE
1359 * packets, dropped due the DMAC filter, dropped due FIFO full status, or
1360 * have any other OPCODE (FCS, Length, etc).
1361 */
1362union cvmx_agl_gmx_rxx_stats_pkts {
1363 u64 u64;
1364 struct cvmx_agl_gmx_rxx_stats_pkts_s {
1365 u64 reserved_32_63 : 32;
1366 u64 cnt : 32;
1367 } s;
1368 struct cvmx_agl_gmx_rxx_stats_pkts_s cn52xx;
1369 struct cvmx_agl_gmx_rxx_stats_pkts_s cn52xxp1;
1370 struct cvmx_agl_gmx_rxx_stats_pkts_s cn56xx;
1371 struct cvmx_agl_gmx_rxx_stats_pkts_s cn56xxp1;
1372 struct cvmx_agl_gmx_rxx_stats_pkts_s cn61xx;
1373 struct cvmx_agl_gmx_rxx_stats_pkts_s cn63xx;
1374 struct cvmx_agl_gmx_rxx_stats_pkts_s cn63xxp1;
1375 struct cvmx_agl_gmx_rxx_stats_pkts_s cn66xx;
1376 struct cvmx_agl_gmx_rxx_stats_pkts_s cn68xx;
1377 struct cvmx_agl_gmx_rxx_stats_pkts_s cn68xxp1;
1378 struct cvmx_agl_gmx_rxx_stats_pkts_s cn70xx;
1379 struct cvmx_agl_gmx_rxx_stats_pkts_s cn70xxp1;
1380};
1381
1382typedef union cvmx_agl_gmx_rxx_stats_pkts cvmx_agl_gmx_rxx_stats_pkts_t;
1383
1384/**
1385 * cvmx_agl_gmx_rx#_stats_pkts_bad
1386 *
1387 * Count of all packets received with some error that were not dropped
1388 * either due to the dmac filter or lack of room in the receive FIFO.
1389 */
1390union cvmx_agl_gmx_rxx_stats_pkts_bad {
1391 u64 u64;
1392 struct cvmx_agl_gmx_rxx_stats_pkts_bad_s {
1393 u64 reserved_32_63 : 32;
1394 u64 cnt : 32;
1395 } s;
1396 struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn52xx;
1397 struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn52xxp1;
1398 struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn56xx;
1399 struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn56xxp1;
1400 struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn61xx;
1401 struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn63xx;
1402 struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn63xxp1;
1403 struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn66xx;
1404 struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn68xx;
1405 struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn68xxp1;
1406 struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn70xx;
1407 struct cvmx_agl_gmx_rxx_stats_pkts_bad_s cn70xxp1;
1408};
1409
1410typedef union cvmx_agl_gmx_rxx_stats_pkts_bad cvmx_agl_gmx_rxx_stats_pkts_bad_t;
1411
1412/**
1413 * cvmx_agl_gmx_rx#_stats_pkts_ctl
1414 *
1415 * Count of all packets received that were recognized as Flow Control or
1416 * PAUSE packets. PAUSE packets with any kind of error are counted in
1417 * AGL_GMX_RX_STATS_PKTS_BAD. Pause packets can be optionally dropped or
1418 * forwarded based on the AGL_GMX_RX_FRM_CTL[CTL_DRP] bit. This count
1419 * increments regardless of whether the packet is dropped. Pause packets
1420 * will never be counted in AGL_GMX_RX_STATS_PKTS. Packets dropped due the dmac
1421 * filter will be counted in AGL_GMX_RX_STATS_PKTS_DMAC and not here.
1422 */
1423union cvmx_agl_gmx_rxx_stats_pkts_ctl {
1424 u64 u64;
1425 struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s {
1426 u64 reserved_32_63 : 32;
1427 u64 cnt : 32;
1428 } s;
1429 struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn52xx;
1430 struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn52xxp1;
1431 struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn56xx;
1432 struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn56xxp1;
1433 struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn61xx;
1434 struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn63xx;
1435 struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn63xxp1;
1436 struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn66xx;
1437 struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn68xx;
1438 struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn68xxp1;
1439 struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn70xx;
1440 struct cvmx_agl_gmx_rxx_stats_pkts_ctl_s cn70xxp1;
1441};
1442
1443typedef union cvmx_agl_gmx_rxx_stats_pkts_ctl cvmx_agl_gmx_rxx_stats_pkts_ctl_t;
1444
1445/**
1446 * cvmx_agl_gmx_rx#_stats_pkts_dmac
1447 *
1448 * Count of all packets received that were dropped by the dmac filter.
1449 * Packets that match the DMAC will be dropped and counted here regardless
1450 * of if they were bad packets. These packets will never be counted in
1451 * AGL_GMX_RX_STATS_PKTS.
1452 * Some packets that were not able to satisify the DECISION_CNT may not
1453 * actually be dropped by Octeon, but they will be counted here as if they
1454 * were dropped.
1455 */
1456union cvmx_agl_gmx_rxx_stats_pkts_dmac {
1457 u64 u64;
1458 struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s {
1459 u64 reserved_32_63 : 32;
1460 u64 cnt : 32;
1461 } s;
1462 struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn52xx;
1463 struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn52xxp1;
1464 struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn56xx;
1465 struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn56xxp1;
1466 struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn61xx;
1467 struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn63xx;
1468 struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn63xxp1;
1469 struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn66xx;
1470 struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn68xx;
1471 struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn68xxp1;
1472 struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn70xx;
1473 struct cvmx_agl_gmx_rxx_stats_pkts_dmac_s cn70xxp1;
1474};
1475
1476typedef union cvmx_agl_gmx_rxx_stats_pkts_dmac cvmx_agl_gmx_rxx_stats_pkts_dmac_t;
1477
1478/**
1479 * cvmx_agl_gmx_rx#_stats_pkts_drp
1480 *
1481 * Count of all packets received that were dropped due to a full receive
1482 * FIFO. This counts good and bad packets received - all packets dropped by
1483 * the FIFO. It does not count packets dropped by the dmac or pause packet
1484 * filters.
1485 */
1486union cvmx_agl_gmx_rxx_stats_pkts_drp {
1487 u64 u64;
1488 struct cvmx_agl_gmx_rxx_stats_pkts_drp_s {
1489 u64 reserved_32_63 : 32;
1490 u64 cnt : 32;
1491 } s;
1492 struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn52xx;
1493 struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn52xxp1;
1494 struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn56xx;
1495 struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn56xxp1;
1496 struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn61xx;
1497 struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn63xx;
1498 struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn63xxp1;
1499 struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn66xx;
1500 struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn68xx;
1501 struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn68xxp1;
1502 struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn70xx;
1503 struct cvmx_agl_gmx_rxx_stats_pkts_drp_s cn70xxp1;
1504};
1505
1506typedef union cvmx_agl_gmx_rxx_stats_pkts_drp cvmx_agl_gmx_rxx_stats_pkts_drp_t;
1507
1508/**
1509 * cvmx_agl_gmx_rx#_udd_skp
1510 *
1511 * AGL_GMX_RX_UDD_SKP = Amount of User-defined data before the start of the L2 data
1512 *
1513 *
1514 * Notes:
1515 * (1) The skip bytes are part of the packet and will be sent down the NCB
1516 * packet interface and will be handled by PKI.
1517 *
1518 * (2) The system can determine if the UDD bytes are included in the FCS check
1519 * by using the FCSSEL field - if the FCS check is enabled.
1520 *
1521 * (3) Assume that the preamble/sfd is always at the start of the frame - even
1522 * before UDD bytes. In most cases, there will be no preamble in these
1523 * cases since it will be MII to MII communication without a PHY
1524 * involved.
1525 *
1526 * (4) We can still do address filtering and control packet filtering is the
1527 * user desires.
1528 *
1529 * (5) UDD_SKP must be 0 in half-duplex operation unless
1530 * AGL_GMX_RX_FRM_CTL[PRE_CHK] is clear. If AGL_GMX_RX_FRM_CTL[PRE_CHK] is set,
1531 * then UDD_SKP will normally be 8.
1532 *
1533 * (6) In all cases, the UDD bytes will be sent down the packet interface as
1534 * part of the packet. The UDD bytes are never stripped from the actual
1535 * packet.
1536 *
1537 * (7) If LEN != 0, then AGL_GMX_RX_FRM_CHK[LENERR] will be disabled and AGL_GMX_RX_INT_REG[LENERR] will be zero
1538 *
1539 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
1540 */
1541union cvmx_agl_gmx_rxx_udd_skp {
1542 u64 u64;
1543 struct cvmx_agl_gmx_rxx_udd_skp_s {
1544 u64 reserved_9_63 : 55;
1545 u64 fcssel : 1;
1546 u64 reserved_7_7 : 1;
1547 u64 len : 7;
1548 } s;
1549 struct cvmx_agl_gmx_rxx_udd_skp_s cn52xx;
1550 struct cvmx_agl_gmx_rxx_udd_skp_s cn52xxp1;
1551 struct cvmx_agl_gmx_rxx_udd_skp_s cn56xx;
1552 struct cvmx_agl_gmx_rxx_udd_skp_s cn56xxp1;
1553 struct cvmx_agl_gmx_rxx_udd_skp_s cn61xx;
1554 struct cvmx_agl_gmx_rxx_udd_skp_s cn63xx;
1555 struct cvmx_agl_gmx_rxx_udd_skp_s cn63xxp1;
1556 struct cvmx_agl_gmx_rxx_udd_skp_s cn66xx;
1557 struct cvmx_agl_gmx_rxx_udd_skp_s cn68xx;
1558 struct cvmx_agl_gmx_rxx_udd_skp_s cn68xxp1;
1559 struct cvmx_agl_gmx_rxx_udd_skp_s cn70xx;
1560 struct cvmx_agl_gmx_rxx_udd_skp_s cn70xxp1;
1561};
1562
1563typedef union cvmx_agl_gmx_rxx_udd_skp cvmx_agl_gmx_rxx_udd_skp_t;
1564
1565/**
1566 * cvmx_agl_gmx_rx_bp_drop#
1567 *
1568 * AGL_GMX_RX_BP_DROP = FIFO mark for packet drop
1569 *
1570 *
1571 * Notes:
1572 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
1573 *
1574 */
1575union cvmx_agl_gmx_rx_bp_dropx {
1576 u64 u64;
1577 struct cvmx_agl_gmx_rx_bp_dropx_s {
1578 u64 reserved_6_63 : 58;
1579 u64 mark : 6;
1580 } s;
1581 struct cvmx_agl_gmx_rx_bp_dropx_s cn52xx;
1582 struct cvmx_agl_gmx_rx_bp_dropx_s cn52xxp1;
1583 struct cvmx_agl_gmx_rx_bp_dropx_s cn56xx;
1584 struct cvmx_agl_gmx_rx_bp_dropx_s cn56xxp1;
1585 struct cvmx_agl_gmx_rx_bp_dropx_s cn61xx;
1586 struct cvmx_agl_gmx_rx_bp_dropx_s cn63xx;
1587 struct cvmx_agl_gmx_rx_bp_dropx_s cn63xxp1;
1588 struct cvmx_agl_gmx_rx_bp_dropx_s cn66xx;
1589 struct cvmx_agl_gmx_rx_bp_dropx_s cn68xx;
1590 struct cvmx_agl_gmx_rx_bp_dropx_s cn68xxp1;
1591 struct cvmx_agl_gmx_rx_bp_dropx_s cn70xx;
1592 struct cvmx_agl_gmx_rx_bp_dropx_s cn70xxp1;
1593};
1594
1595typedef union cvmx_agl_gmx_rx_bp_dropx cvmx_agl_gmx_rx_bp_dropx_t;
1596
1597/**
1598 * cvmx_agl_gmx_rx_bp_off#
1599 *
1600 * AGL_GMX_RX_BP_OFF = Lowater mark for packet drop
1601 *
1602 *
1603 * Notes:
1604 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
1605 *
1606 */
1607union cvmx_agl_gmx_rx_bp_offx {
1608 u64 u64;
1609 struct cvmx_agl_gmx_rx_bp_offx_s {
1610 u64 reserved_6_63 : 58;
1611 u64 mark : 6;
1612 } s;
1613 struct cvmx_agl_gmx_rx_bp_offx_s cn52xx;
1614 struct cvmx_agl_gmx_rx_bp_offx_s cn52xxp1;
1615 struct cvmx_agl_gmx_rx_bp_offx_s cn56xx;
1616 struct cvmx_agl_gmx_rx_bp_offx_s cn56xxp1;
1617 struct cvmx_agl_gmx_rx_bp_offx_s cn61xx;
1618 struct cvmx_agl_gmx_rx_bp_offx_s cn63xx;
1619 struct cvmx_agl_gmx_rx_bp_offx_s cn63xxp1;
1620 struct cvmx_agl_gmx_rx_bp_offx_s cn66xx;
1621 struct cvmx_agl_gmx_rx_bp_offx_s cn68xx;
1622 struct cvmx_agl_gmx_rx_bp_offx_s cn68xxp1;
1623 struct cvmx_agl_gmx_rx_bp_offx_s cn70xx;
1624 struct cvmx_agl_gmx_rx_bp_offx_s cn70xxp1;
1625};
1626
1627typedef union cvmx_agl_gmx_rx_bp_offx cvmx_agl_gmx_rx_bp_offx_t;
1628
1629/**
1630 * cvmx_agl_gmx_rx_bp_on#
1631 *
1632 * AGL_GMX_RX_BP_ON = Hiwater mark for port/interface backpressure
1633 *
1634 *
1635 * Notes:
1636 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
1637 *
1638 */
1639union cvmx_agl_gmx_rx_bp_onx {
1640 u64 u64;
1641 struct cvmx_agl_gmx_rx_bp_onx_s {
1642 u64 reserved_9_63 : 55;
1643 u64 mark : 9;
1644 } s;
1645 struct cvmx_agl_gmx_rx_bp_onx_s cn52xx;
1646 struct cvmx_agl_gmx_rx_bp_onx_s cn52xxp1;
1647 struct cvmx_agl_gmx_rx_bp_onx_s cn56xx;
1648 struct cvmx_agl_gmx_rx_bp_onx_s cn56xxp1;
1649 struct cvmx_agl_gmx_rx_bp_onx_s cn61xx;
1650 struct cvmx_agl_gmx_rx_bp_onx_s cn63xx;
1651 struct cvmx_agl_gmx_rx_bp_onx_s cn63xxp1;
1652 struct cvmx_agl_gmx_rx_bp_onx_s cn66xx;
1653 struct cvmx_agl_gmx_rx_bp_onx_s cn68xx;
1654 struct cvmx_agl_gmx_rx_bp_onx_s cn68xxp1;
1655 struct cvmx_agl_gmx_rx_bp_onx_s cn70xx;
1656 struct cvmx_agl_gmx_rx_bp_onx_s cn70xxp1;
1657};
1658
1659typedef union cvmx_agl_gmx_rx_bp_onx cvmx_agl_gmx_rx_bp_onx_t;
1660
1661/**
1662 * cvmx_agl_gmx_rx_prt_info
1663 *
1664 * AGL_GMX_RX_PRT_INFO = state information for the ports
1665 *
1666 *
1667 * Notes:
1668 * COMMIT[0], DROP[0] will be reset when MIX0_CTL[RESET] is set to 1.
1669 * COMMIT[1], DROP[1] will be reset when MIX1_CTL[RESET] is set to 1.
1670 */
1671union cvmx_agl_gmx_rx_prt_info {
1672 u64 u64;
1673 struct cvmx_agl_gmx_rx_prt_info_s {
1674 u64 reserved_18_63 : 46;
1675 u64 drop : 2;
1676 u64 reserved_2_15 : 14;
1677 u64 commit : 2;
1678 } s;
1679 struct cvmx_agl_gmx_rx_prt_info_s cn52xx;
1680 struct cvmx_agl_gmx_rx_prt_info_s cn52xxp1;
1681 struct cvmx_agl_gmx_rx_prt_info_cn56xx {
1682 u64 reserved_17_63 : 47;
1683 u64 drop : 1;
1684 u64 reserved_1_15 : 15;
1685 u64 commit : 1;
1686 } cn56xx;
1687 struct cvmx_agl_gmx_rx_prt_info_cn56xx cn56xxp1;
1688 struct cvmx_agl_gmx_rx_prt_info_s cn61xx;
1689 struct cvmx_agl_gmx_rx_prt_info_s cn63xx;
1690 struct cvmx_agl_gmx_rx_prt_info_s cn63xxp1;
1691 struct cvmx_agl_gmx_rx_prt_info_s cn66xx;
1692 struct cvmx_agl_gmx_rx_prt_info_s cn68xx;
1693 struct cvmx_agl_gmx_rx_prt_info_s cn68xxp1;
1694 struct cvmx_agl_gmx_rx_prt_info_cn56xx cn70xx;
1695 struct cvmx_agl_gmx_rx_prt_info_cn56xx cn70xxp1;
1696};
1697
1698typedef union cvmx_agl_gmx_rx_prt_info cvmx_agl_gmx_rx_prt_info_t;
1699
1700/**
1701 * cvmx_agl_gmx_rx_tx_status
1702 *
1703 * AGL_GMX_RX_TX_STATUS = GMX RX/TX Status
1704 *
1705 *
1706 * Notes:
1707 * RX[0], TX[0] will be reset when MIX0_CTL[RESET] is set to 1.
1708 * RX[1], TX[1] will be reset when MIX1_CTL[RESET] is set to 1.
1709 */
1710union cvmx_agl_gmx_rx_tx_status {
1711 u64 u64;
1712 struct cvmx_agl_gmx_rx_tx_status_s {
1713 u64 reserved_6_63 : 58;
1714 u64 tx : 2;
1715 u64 reserved_2_3 : 2;
1716 u64 rx : 2;
1717 } s;
1718 struct cvmx_agl_gmx_rx_tx_status_s cn52xx;
1719 struct cvmx_agl_gmx_rx_tx_status_s cn52xxp1;
1720 struct cvmx_agl_gmx_rx_tx_status_cn56xx {
1721 u64 reserved_5_63 : 59;
1722 u64 tx : 1;
1723 u64 reserved_1_3 : 3;
1724 u64 rx : 1;
1725 } cn56xx;
1726 struct cvmx_agl_gmx_rx_tx_status_cn56xx cn56xxp1;
1727 struct cvmx_agl_gmx_rx_tx_status_s cn61xx;
1728 struct cvmx_agl_gmx_rx_tx_status_s cn63xx;
1729 struct cvmx_agl_gmx_rx_tx_status_s cn63xxp1;
1730 struct cvmx_agl_gmx_rx_tx_status_s cn66xx;
1731 struct cvmx_agl_gmx_rx_tx_status_s cn68xx;
1732 struct cvmx_agl_gmx_rx_tx_status_s cn68xxp1;
1733 struct cvmx_agl_gmx_rx_tx_status_cn56xx cn70xx;
1734 struct cvmx_agl_gmx_rx_tx_status_cn56xx cn70xxp1;
1735};
1736
1737typedef union cvmx_agl_gmx_rx_tx_status cvmx_agl_gmx_rx_tx_status_t;
1738
1739/**
1740 * cvmx_agl_gmx_smac#
1741 *
1742 * AGL_GMX_SMAC = Packet SMAC
1743 *
1744 *
1745 * Notes:
1746 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
1747 *
1748 */
1749union cvmx_agl_gmx_smacx {
1750 u64 u64;
1751 struct cvmx_agl_gmx_smacx_s {
1752 u64 reserved_48_63 : 16;
1753 u64 smac : 48;
1754 } s;
1755 struct cvmx_agl_gmx_smacx_s cn52xx;
1756 struct cvmx_agl_gmx_smacx_s cn52xxp1;
1757 struct cvmx_agl_gmx_smacx_s cn56xx;
1758 struct cvmx_agl_gmx_smacx_s cn56xxp1;
1759 struct cvmx_agl_gmx_smacx_s cn61xx;
1760 struct cvmx_agl_gmx_smacx_s cn63xx;
1761 struct cvmx_agl_gmx_smacx_s cn63xxp1;
1762 struct cvmx_agl_gmx_smacx_s cn66xx;
1763 struct cvmx_agl_gmx_smacx_s cn68xx;
1764 struct cvmx_agl_gmx_smacx_s cn68xxp1;
1765 struct cvmx_agl_gmx_smacx_s cn70xx;
1766 struct cvmx_agl_gmx_smacx_s cn70xxp1;
1767};
1768
1769typedef union cvmx_agl_gmx_smacx cvmx_agl_gmx_smacx_t;
1770
1771/**
1772 * cvmx_agl_gmx_stat_bp
1773 *
1774 * AGL_GMX_STAT_BP = Number of cycles that the TX/Stats block has help up operation
1775 *
1776 *
1777 * Notes:
1778 * Additionally reset when both MIX0/1_CTL[RESET] are set to 1.
1779 *
1780 *
1781 *
1782 * It has no relationship with the TX FIFO per se. The TX engine sends packets
1783 * from PKO and upon completion, sends a command to the TX stats block for an
1784 * update based on the packet size. The stats operation can take a few cycles -
1785 * normally not enough to be visible considering the 64B min packet size that is
1786 * ethernet convention.
1787 *
1788 * In the rare case in which SW attempted to schedule really, really, small packets
1789 * or the sclk (6xxx) is running ass-slow, then the stats updates may not happen in
1790 * real time and can back up the TX engine.
1791 *
1792 * This counter is the number of cycles in which the TX engine was stalled. In
1793 * normal operation, it should always be zeros.
1794 */
1795union cvmx_agl_gmx_stat_bp {
1796 u64 u64;
1797 struct cvmx_agl_gmx_stat_bp_s {
1798 u64 reserved_17_63 : 47;
1799 u64 bp : 1;
1800 u64 cnt : 16;
1801 } s;
1802 struct cvmx_agl_gmx_stat_bp_s cn52xx;
1803 struct cvmx_agl_gmx_stat_bp_s cn52xxp1;
1804 struct cvmx_agl_gmx_stat_bp_s cn56xx;
1805 struct cvmx_agl_gmx_stat_bp_s cn56xxp1;
1806 struct cvmx_agl_gmx_stat_bp_s cn61xx;
1807 struct cvmx_agl_gmx_stat_bp_s cn63xx;
1808 struct cvmx_agl_gmx_stat_bp_s cn63xxp1;
1809 struct cvmx_agl_gmx_stat_bp_s cn66xx;
1810 struct cvmx_agl_gmx_stat_bp_s cn68xx;
1811 struct cvmx_agl_gmx_stat_bp_s cn68xxp1;
1812 struct cvmx_agl_gmx_stat_bp_s cn70xx;
1813 struct cvmx_agl_gmx_stat_bp_s cn70xxp1;
1814};
1815
1816typedef union cvmx_agl_gmx_stat_bp cvmx_agl_gmx_stat_bp_t;
1817
1818/**
1819 * cvmx_agl_gmx_tx#_append
1820 *
1821 * AGL_GMX_TX_APPEND = Packet TX Append Control
1822 *
1823 *
1824 * Notes:
1825 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
1826 *
1827 */
1828union cvmx_agl_gmx_txx_append {
1829 u64 u64;
1830 struct cvmx_agl_gmx_txx_append_s {
1831 u64 reserved_4_63 : 60;
1832 u64 force_fcs : 1;
1833 u64 fcs : 1;
1834 u64 pad : 1;
1835 u64 preamble : 1;
1836 } s;
1837 struct cvmx_agl_gmx_txx_append_s cn52xx;
1838 struct cvmx_agl_gmx_txx_append_s cn52xxp1;
1839 struct cvmx_agl_gmx_txx_append_s cn56xx;
1840 struct cvmx_agl_gmx_txx_append_s cn56xxp1;
1841 struct cvmx_agl_gmx_txx_append_s cn61xx;
1842 struct cvmx_agl_gmx_txx_append_s cn63xx;
1843 struct cvmx_agl_gmx_txx_append_s cn63xxp1;
1844 struct cvmx_agl_gmx_txx_append_s cn66xx;
1845 struct cvmx_agl_gmx_txx_append_s cn68xx;
1846 struct cvmx_agl_gmx_txx_append_s cn68xxp1;
1847 struct cvmx_agl_gmx_txx_append_s cn70xx;
1848 struct cvmx_agl_gmx_txx_append_s cn70xxp1;
1849};
1850
1851typedef union cvmx_agl_gmx_txx_append cvmx_agl_gmx_txx_append_t;
1852
1853/**
1854 * cvmx_agl_gmx_tx#_clk
1855 *
1856 * AGL_GMX_TX_CLK = RGMII TX Clock Generation Register
1857 *
1858 *
1859 * Notes:
1860 * Normal Programming Values:
1861 * (1) RGMII, 1000Mbs (AGL_GMX_PRT_CFG[SPEED]==1), CLK_CNT == 1
1862 * (2) RGMII, 10/100Mbs (AGL_GMX_PRT_CFG[SPEED]==0), CLK_CNT == 50/5
1863 * (3) MII, 10/100Mbs (AGL_GMX_PRT_CFG[SPEED]==0), CLK_CNT == 1
1864 *
1865 * RGMII Example:
1866 * Given a 125MHz PLL reference clock...
1867 * CLK_CNT == 1 ==> 125.0MHz TXC clock period (8ns* 1)
1868 * CLK_CNT == 5 ==> 25.0MHz TXC clock period (8ns* 5)
1869 * CLK_CNT == 50 ==> 2.5MHz TXC clock period (8ns*50)
1870 *
1871 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
1872 */
1873union cvmx_agl_gmx_txx_clk {
1874 u64 u64;
1875 struct cvmx_agl_gmx_txx_clk_s {
1876 u64 reserved_6_63 : 58;
1877 u64 clk_cnt : 6;
1878 } s;
1879 struct cvmx_agl_gmx_txx_clk_s cn61xx;
1880 struct cvmx_agl_gmx_txx_clk_s cn63xx;
1881 struct cvmx_agl_gmx_txx_clk_s cn63xxp1;
1882 struct cvmx_agl_gmx_txx_clk_s cn66xx;
1883 struct cvmx_agl_gmx_txx_clk_s cn68xx;
1884 struct cvmx_agl_gmx_txx_clk_s cn68xxp1;
1885 struct cvmx_agl_gmx_txx_clk_s cn70xx;
1886 struct cvmx_agl_gmx_txx_clk_s cn70xxp1;
1887};
1888
1889typedef union cvmx_agl_gmx_txx_clk cvmx_agl_gmx_txx_clk_t;
1890
1891/**
1892 * cvmx_agl_gmx_tx#_ctl
1893 *
1894 * AGL_GMX_TX_CTL = TX Control register
1895 *
1896 *
1897 * Notes:
1898 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
1899 *
1900 */
1901union cvmx_agl_gmx_txx_ctl {
1902 u64 u64;
1903 struct cvmx_agl_gmx_txx_ctl_s {
1904 u64 reserved_2_63 : 62;
1905 u64 xsdef_en : 1;
1906 u64 xscol_en : 1;
1907 } s;
1908 struct cvmx_agl_gmx_txx_ctl_s cn52xx;
1909 struct cvmx_agl_gmx_txx_ctl_s cn52xxp1;
1910 struct cvmx_agl_gmx_txx_ctl_s cn56xx;
1911 struct cvmx_agl_gmx_txx_ctl_s cn56xxp1;
1912 struct cvmx_agl_gmx_txx_ctl_s cn61xx;
1913 struct cvmx_agl_gmx_txx_ctl_s cn63xx;
1914 struct cvmx_agl_gmx_txx_ctl_s cn63xxp1;
1915 struct cvmx_agl_gmx_txx_ctl_s cn66xx;
1916 struct cvmx_agl_gmx_txx_ctl_s cn68xx;
1917 struct cvmx_agl_gmx_txx_ctl_s cn68xxp1;
1918 struct cvmx_agl_gmx_txx_ctl_s cn70xx;
1919 struct cvmx_agl_gmx_txx_ctl_s cn70xxp1;
1920};
1921
1922typedef union cvmx_agl_gmx_txx_ctl cvmx_agl_gmx_txx_ctl_t;
1923
1924/**
1925 * cvmx_agl_gmx_tx#_min_pkt
1926 *
1927 * AGL_GMX_TX_MIN_PKT = Packet TX Min Size Packet (PAD upto min size)
1928 *
1929 *
1930 * Notes:
1931 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
1932 *
1933 */
1934union cvmx_agl_gmx_txx_min_pkt {
1935 u64 u64;
1936 struct cvmx_agl_gmx_txx_min_pkt_s {
1937 u64 reserved_8_63 : 56;
1938 u64 min_size : 8;
1939 } s;
1940 struct cvmx_agl_gmx_txx_min_pkt_s cn52xx;
1941 struct cvmx_agl_gmx_txx_min_pkt_s cn52xxp1;
1942 struct cvmx_agl_gmx_txx_min_pkt_s cn56xx;
1943 struct cvmx_agl_gmx_txx_min_pkt_s cn56xxp1;
1944 struct cvmx_agl_gmx_txx_min_pkt_s cn61xx;
1945 struct cvmx_agl_gmx_txx_min_pkt_s cn63xx;
1946 struct cvmx_agl_gmx_txx_min_pkt_s cn63xxp1;
1947 struct cvmx_agl_gmx_txx_min_pkt_s cn66xx;
1948 struct cvmx_agl_gmx_txx_min_pkt_s cn68xx;
1949 struct cvmx_agl_gmx_txx_min_pkt_s cn68xxp1;
1950 struct cvmx_agl_gmx_txx_min_pkt_s cn70xx;
1951 struct cvmx_agl_gmx_txx_min_pkt_s cn70xxp1;
1952};
1953
1954typedef union cvmx_agl_gmx_txx_min_pkt cvmx_agl_gmx_txx_min_pkt_t;
1955
1956/**
1957 * cvmx_agl_gmx_tx#_pause_pkt_interval
1958 *
1959 * AGL_GMX_TX_PAUSE_PKT_INTERVAL = Packet TX Pause Packet transmission interval - how often PAUSE packets will be sent
1960 *
1961 *
1962 * Notes:
1963 * Choosing proper values of AGL_GMX_TX_PAUSE_PKT_TIME[TIME] and
1964 * AGL_GMX_TX_PAUSE_PKT_INTERVAL[INTERVAL] can be challenging to the system
1965 * designer. It is suggested that TIME be much greater than INTERVAL and
1966 * AGL_GMX_TX_PAUSE_ZERO[SEND] be set. This allows a periodic refresh of the PAUSE
1967 * count and then when the backpressure condition is lifted, a PAUSE packet
1968 * with TIME==0 will be sent indicating that Octane is ready for additional
1969 * data.
1970 *
1971 * If the system chooses to not set AGL_GMX_TX_PAUSE_ZERO[SEND], then it is
1972 * suggested that TIME and INTERVAL are programmed such that they satisify the
1973 * following rule...
1974 *
1975 * INTERVAL <= TIME - (largest_pkt_size + IFG + pause_pkt_size)
1976 *
1977 * where largest_pkt_size is that largest packet that the system can send
1978 * (normally 1518B), IFG is the interframe gap and pause_pkt_size is the size
1979 * of the PAUSE packet (normally 64B).
1980 *
1981 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
1982 */
1983union cvmx_agl_gmx_txx_pause_pkt_interval {
1984 u64 u64;
1985 struct cvmx_agl_gmx_txx_pause_pkt_interval_s {
1986 u64 reserved_16_63 : 48;
1987 u64 interval : 16;
1988 } s;
1989 struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn52xx;
1990 struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn52xxp1;
1991 struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn56xx;
1992 struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn56xxp1;
1993 struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn61xx;
1994 struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn63xx;
1995 struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn63xxp1;
1996 struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn66xx;
1997 struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn68xx;
1998 struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn68xxp1;
1999 struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn70xx;
2000 struct cvmx_agl_gmx_txx_pause_pkt_interval_s cn70xxp1;
2001};
2002
2003typedef union cvmx_agl_gmx_txx_pause_pkt_interval cvmx_agl_gmx_txx_pause_pkt_interval_t;
2004
2005/**
2006 * cvmx_agl_gmx_tx#_pause_pkt_time
2007 *
2008 * AGL_GMX_TX_PAUSE_PKT_TIME = Packet TX Pause Packet pause_time field
2009 *
2010 *
2011 * Notes:
2012 * Choosing proper values of AGL_GMX_TX_PAUSE_PKT_TIME[TIME] and
2013 * AGL_GMX_TX_PAUSE_PKT_INTERVAL[INTERVAL] can be challenging to the system
2014 * designer. It is suggested that TIME be much greater than INTERVAL and
2015 * AGL_GMX_TX_PAUSE_ZERO[SEND] be set. This allows a periodic refresh of the PAUSE
2016 * count and then when the backpressure condition is lifted, a PAUSE packet
2017 * with TIME==0 will be sent indicating that Octane is ready for additional
2018 * data.
2019 *
2020 * If the system chooses to not set AGL_GMX_TX_PAUSE_ZERO[SEND], then it is
2021 * suggested that TIME and INTERVAL are programmed such that they satisify the
2022 * following rule...
2023 *
2024 * INTERVAL <= TIME - (largest_pkt_size + IFG + pause_pkt_size)
2025 *
2026 * where largest_pkt_size is that largest packet that the system can send
2027 * (normally 1518B), IFG is the interframe gap and pause_pkt_size is the size
2028 * of the PAUSE packet (normally 64B).
2029 *
2030 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
2031 */
2032union cvmx_agl_gmx_txx_pause_pkt_time {
2033 u64 u64;
2034 struct cvmx_agl_gmx_txx_pause_pkt_time_s {
2035 u64 reserved_16_63 : 48;
2036 u64 time : 16;
2037 } s;
2038 struct cvmx_agl_gmx_txx_pause_pkt_time_s cn52xx;
2039 struct cvmx_agl_gmx_txx_pause_pkt_time_s cn52xxp1;
2040 struct cvmx_agl_gmx_txx_pause_pkt_time_s cn56xx;
2041 struct cvmx_agl_gmx_txx_pause_pkt_time_s cn56xxp1;
2042 struct cvmx_agl_gmx_txx_pause_pkt_time_s cn61xx;
2043 struct cvmx_agl_gmx_txx_pause_pkt_time_s cn63xx;
2044 struct cvmx_agl_gmx_txx_pause_pkt_time_s cn63xxp1;
2045 struct cvmx_agl_gmx_txx_pause_pkt_time_s cn66xx;
2046 struct cvmx_agl_gmx_txx_pause_pkt_time_s cn68xx;
2047 struct cvmx_agl_gmx_txx_pause_pkt_time_s cn68xxp1;
2048 struct cvmx_agl_gmx_txx_pause_pkt_time_s cn70xx;
2049 struct cvmx_agl_gmx_txx_pause_pkt_time_s cn70xxp1;
2050};
2051
2052typedef union cvmx_agl_gmx_txx_pause_pkt_time cvmx_agl_gmx_txx_pause_pkt_time_t;
2053
2054/**
2055 * cvmx_agl_gmx_tx#_pause_togo
2056 *
2057 * AGL_GMX_TX_PAUSE_TOGO = Packet TX Amount of time remaining to backpressure
2058 *
2059 *
2060 * Notes:
2061 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
2062 *
2063 */
2064union cvmx_agl_gmx_txx_pause_togo {
2065 u64 u64;
2066 struct cvmx_agl_gmx_txx_pause_togo_s {
2067 u64 reserved_16_63 : 48;
2068 u64 time : 16;
2069 } s;
2070 struct cvmx_agl_gmx_txx_pause_togo_s cn52xx;
2071 struct cvmx_agl_gmx_txx_pause_togo_s cn52xxp1;
2072 struct cvmx_agl_gmx_txx_pause_togo_s cn56xx;
2073 struct cvmx_agl_gmx_txx_pause_togo_s cn56xxp1;
2074 struct cvmx_agl_gmx_txx_pause_togo_s cn61xx;
2075 struct cvmx_agl_gmx_txx_pause_togo_s cn63xx;
2076 struct cvmx_agl_gmx_txx_pause_togo_s cn63xxp1;
2077 struct cvmx_agl_gmx_txx_pause_togo_s cn66xx;
2078 struct cvmx_agl_gmx_txx_pause_togo_s cn68xx;
2079 struct cvmx_agl_gmx_txx_pause_togo_s cn68xxp1;
2080 struct cvmx_agl_gmx_txx_pause_togo_s cn70xx;
2081 struct cvmx_agl_gmx_txx_pause_togo_s cn70xxp1;
2082};
2083
2084typedef union cvmx_agl_gmx_txx_pause_togo cvmx_agl_gmx_txx_pause_togo_t;
2085
2086/**
2087 * cvmx_agl_gmx_tx#_pause_zero
2088 *
2089 * AGL_GMX_TX_PAUSE_ZERO = Packet TX Amount of time remaining to backpressure
2090 *
2091 *
2092 * Notes:
2093 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
2094 *
2095 */
2096union cvmx_agl_gmx_txx_pause_zero {
2097 u64 u64;
2098 struct cvmx_agl_gmx_txx_pause_zero_s {
2099 u64 reserved_1_63 : 63;
2100 u64 send : 1;
2101 } s;
2102 struct cvmx_agl_gmx_txx_pause_zero_s cn52xx;
2103 struct cvmx_agl_gmx_txx_pause_zero_s cn52xxp1;
2104 struct cvmx_agl_gmx_txx_pause_zero_s cn56xx;
2105 struct cvmx_agl_gmx_txx_pause_zero_s cn56xxp1;
2106 struct cvmx_agl_gmx_txx_pause_zero_s cn61xx;
2107 struct cvmx_agl_gmx_txx_pause_zero_s cn63xx;
2108 struct cvmx_agl_gmx_txx_pause_zero_s cn63xxp1;
2109 struct cvmx_agl_gmx_txx_pause_zero_s cn66xx;
2110 struct cvmx_agl_gmx_txx_pause_zero_s cn68xx;
2111 struct cvmx_agl_gmx_txx_pause_zero_s cn68xxp1;
2112 struct cvmx_agl_gmx_txx_pause_zero_s cn70xx;
2113 struct cvmx_agl_gmx_txx_pause_zero_s cn70xxp1;
2114};
2115
2116typedef union cvmx_agl_gmx_txx_pause_zero cvmx_agl_gmx_txx_pause_zero_t;
2117
2118/**
2119 * cvmx_agl_gmx_tx#_soft_pause
2120 *
2121 * AGL_GMX_TX_SOFT_PAUSE = Packet TX Software Pause
2122 *
2123 *
2124 * Notes:
2125 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
2126 *
2127 */
2128union cvmx_agl_gmx_txx_soft_pause {
2129 u64 u64;
2130 struct cvmx_agl_gmx_txx_soft_pause_s {
2131 u64 reserved_16_63 : 48;
2132 u64 time : 16;
2133 } s;
2134 struct cvmx_agl_gmx_txx_soft_pause_s cn52xx;
2135 struct cvmx_agl_gmx_txx_soft_pause_s cn52xxp1;
2136 struct cvmx_agl_gmx_txx_soft_pause_s cn56xx;
2137 struct cvmx_agl_gmx_txx_soft_pause_s cn56xxp1;
2138 struct cvmx_agl_gmx_txx_soft_pause_s cn61xx;
2139 struct cvmx_agl_gmx_txx_soft_pause_s cn63xx;
2140 struct cvmx_agl_gmx_txx_soft_pause_s cn63xxp1;
2141 struct cvmx_agl_gmx_txx_soft_pause_s cn66xx;
2142 struct cvmx_agl_gmx_txx_soft_pause_s cn68xx;
2143 struct cvmx_agl_gmx_txx_soft_pause_s cn68xxp1;
2144 struct cvmx_agl_gmx_txx_soft_pause_s cn70xx;
2145 struct cvmx_agl_gmx_txx_soft_pause_s cn70xxp1;
2146};
2147
2148typedef union cvmx_agl_gmx_txx_soft_pause cvmx_agl_gmx_txx_soft_pause_t;
2149
2150/**
2151 * cvmx_agl_gmx_tx#_stat0
2152 *
2153 * AGL_GMX_TX_STAT0 = AGL_GMX_TX_STATS_XSDEF / AGL_GMX_TX_STATS_XSCOL
2154 *
2155 *
2156 * Notes:
2157 * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
2158 * - Counters will wrap
2159 * - Not reset when MIX*_CTL[RESET] is set to 1.
2160 */
2161union cvmx_agl_gmx_txx_stat0 {
2162 u64 u64;
2163 struct cvmx_agl_gmx_txx_stat0_s {
2164 u64 xsdef : 32;
2165 u64 xscol : 32;
2166 } s;
2167 struct cvmx_agl_gmx_txx_stat0_s cn52xx;
2168 struct cvmx_agl_gmx_txx_stat0_s cn52xxp1;
2169 struct cvmx_agl_gmx_txx_stat0_s cn56xx;
2170 struct cvmx_agl_gmx_txx_stat0_s cn56xxp1;
2171 struct cvmx_agl_gmx_txx_stat0_s cn61xx;
2172 struct cvmx_agl_gmx_txx_stat0_s cn63xx;
2173 struct cvmx_agl_gmx_txx_stat0_s cn63xxp1;
2174 struct cvmx_agl_gmx_txx_stat0_s cn66xx;
2175 struct cvmx_agl_gmx_txx_stat0_s cn68xx;
2176 struct cvmx_agl_gmx_txx_stat0_s cn68xxp1;
2177 struct cvmx_agl_gmx_txx_stat0_s cn70xx;
2178 struct cvmx_agl_gmx_txx_stat0_s cn70xxp1;
2179};
2180
2181typedef union cvmx_agl_gmx_txx_stat0 cvmx_agl_gmx_txx_stat0_t;
2182
2183/**
2184 * cvmx_agl_gmx_tx#_stat1
2185 *
2186 * AGL_GMX_TX_STAT1 = AGL_GMX_TX_STATS_SCOL / AGL_GMX_TX_STATS_MCOL
2187 *
2188 *
2189 * Notes:
2190 * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
2191 * - Counters will wrap
2192 * - Not reset when MIX*_CTL[RESET] is set to 1.
2193 */
2194union cvmx_agl_gmx_txx_stat1 {
2195 u64 u64;
2196 struct cvmx_agl_gmx_txx_stat1_s {
2197 u64 scol : 32;
2198 u64 mcol : 32;
2199 } s;
2200 struct cvmx_agl_gmx_txx_stat1_s cn52xx;
2201 struct cvmx_agl_gmx_txx_stat1_s cn52xxp1;
2202 struct cvmx_agl_gmx_txx_stat1_s cn56xx;
2203 struct cvmx_agl_gmx_txx_stat1_s cn56xxp1;
2204 struct cvmx_agl_gmx_txx_stat1_s cn61xx;
2205 struct cvmx_agl_gmx_txx_stat1_s cn63xx;
2206 struct cvmx_agl_gmx_txx_stat1_s cn63xxp1;
2207 struct cvmx_agl_gmx_txx_stat1_s cn66xx;
2208 struct cvmx_agl_gmx_txx_stat1_s cn68xx;
2209 struct cvmx_agl_gmx_txx_stat1_s cn68xxp1;
2210 struct cvmx_agl_gmx_txx_stat1_s cn70xx;
2211 struct cvmx_agl_gmx_txx_stat1_s cn70xxp1;
2212};
2213
2214typedef union cvmx_agl_gmx_txx_stat1 cvmx_agl_gmx_txx_stat1_t;
2215
2216/**
2217 * cvmx_agl_gmx_tx#_stat2
2218 *
2219 * AGL_GMX_TX_STAT2 = AGL_GMX_TX_STATS_OCTS
2220 *
2221 *
2222 * Notes:
2223 * - Octect counts are the sum of all data transmitted on the wire including
2224 * packet data, pad bytes, fcs bytes, pause bytes, and jam bytes. The octect
2225 * counts do not include PREAMBLE byte or EXTEND cycles.
2226 * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
2227 * - Counters will wrap
2228 * - Not reset when MIX*_CTL[RESET] is set to 1.
2229 */
2230union cvmx_agl_gmx_txx_stat2 {
2231 u64 u64;
2232 struct cvmx_agl_gmx_txx_stat2_s {
2233 u64 reserved_48_63 : 16;
2234 u64 octs : 48;
2235 } s;
2236 struct cvmx_agl_gmx_txx_stat2_s cn52xx;
2237 struct cvmx_agl_gmx_txx_stat2_s cn52xxp1;
2238 struct cvmx_agl_gmx_txx_stat2_s cn56xx;
2239 struct cvmx_agl_gmx_txx_stat2_s cn56xxp1;
2240 struct cvmx_agl_gmx_txx_stat2_s cn61xx;
2241 struct cvmx_agl_gmx_txx_stat2_s cn63xx;
2242 struct cvmx_agl_gmx_txx_stat2_s cn63xxp1;
2243 struct cvmx_agl_gmx_txx_stat2_s cn66xx;
2244 struct cvmx_agl_gmx_txx_stat2_s cn68xx;
2245 struct cvmx_agl_gmx_txx_stat2_s cn68xxp1;
2246 struct cvmx_agl_gmx_txx_stat2_s cn70xx;
2247 struct cvmx_agl_gmx_txx_stat2_s cn70xxp1;
2248};
2249
2250typedef union cvmx_agl_gmx_txx_stat2 cvmx_agl_gmx_txx_stat2_t;
2251
2252/**
2253 * cvmx_agl_gmx_tx#_stat3
2254 *
2255 * AGL_GMX_TX_STAT3 = AGL_GMX_TX_STATS_PKTS
2256 *
2257 *
2258 * Notes:
2259 * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
2260 * - Counters will wrap
2261 * - Not reset when MIX*_CTL[RESET] is set to 1.
2262 */
2263union cvmx_agl_gmx_txx_stat3 {
2264 u64 u64;
2265 struct cvmx_agl_gmx_txx_stat3_s {
2266 u64 reserved_32_63 : 32;
2267 u64 pkts : 32;
2268 } s;
2269 struct cvmx_agl_gmx_txx_stat3_s cn52xx;
2270 struct cvmx_agl_gmx_txx_stat3_s cn52xxp1;
2271 struct cvmx_agl_gmx_txx_stat3_s cn56xx;
2272 struct cvmx_agl_gmx_txx_stat3_s cn56xxp1;
2273 struct cvmx_agl_gmx_txx_stat3_s cn61xx;
2274 struct cvmx_agl_gmx_txx_stat3_s cn63xx;
2275 struct cvmx_agl_gmx_txx_stat3_s cn63xxp1;
2276 struct cvmx_agl_gmx_txx_stat3_s cn66xx;
2277 struct cvmx_agl_gmx_txx_stat3_s cn68xx;
2278 struct cvmx_agl_gmx_txx_stat3_s cn68xxp1;
2279 struct cvmx_agl_gmx_txx_stat3_s cn70xx;
2280 struct cvmx_agl_gmx_txx_stat3_s cn70xxp1;
2281};
2282
2283typedef union cvmx_agl_gmx_txx_stat3 cvmx_agl_gmx_txx_stat3_t;
2284
2285/**
2286 * cvmx_agl_gmx_tx#_stat4
2287 *
2288 * AGL_GMX_TX_STAT4 = AGL_GMX_TX_STATS_HIST1 (64) / AGL_GMX_TX_STATS_HIST0 (<64)
2289 *
2290 *
2291 * Notes:
2292 * - Packet length is the sum of all data transmitted on the wire for the given
2293 * packet including packet data, pad bytes, fcs bytes, pause bytes, and jam
2294 * bytes. The octect counts do not include PREAMBLE byte or EXTEND cycles.
2295 * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
2296 * - Counters will wrap
2297 * - Not reset when MIX*_CTL[RESET] is set to 1.
2298 */
2299union cvmx_agl_gmx_txx_stat4 {
2300 u64 u64;
2301 struct cvmx_agl_gmx_txx_stat4_s {
2302 u64 hist1 : 32;
2303 u64 hist0 : 32;
2304 } s;
2305 struct cvmx_agl_gmx_txx_stat4_s cn52xx;
2306 struct cvmx_agl_gmx_txx_stat4_s cn52xxp1;
2307 struct cvmx_agl_gmx_txx_stat4_s cn56xx;
2308 struct cvmx_agl_gmx_txx_stat4_s cn56xxp1;
2309 struct cvmx_agl_gmx_txx_stat4_s cn61xx;
2310 struct cvmx_agl_gmx_txx_stat4_s cn63xx;
2311 struct cvmx_agl_gmx_txx_stat4_s cn63xxp1;
2312 struct cvmx_agl_gmx_txx_stat4_s cn66xx;
2313 struct cvmx_agl_gmx_txx_stat4_s cn68xx;
2314 struct cvmx_agl_gmx_txx_stat4_s cn68xxp1;
2315 struct cvmx_agl_gmx_txx_stat4_s cn70xx;
2316 struct cvmx_agl_gmx_txx_stat4_s cn70xxp1;
2317};
2318
2319typedef union cvmx_agl_gmx_txx_stat4 cvmx_agl_gmx_txx_stat4_t;
2320
2321/**
2322 * cvmx_agl_gmx_tx#_stat5
2323 *
2324 * AGL_GMX_TX_STAT5 = AGL_GMX_TX_STATS_HIST3 (128- 255) / AGL_GMX_TX_STATS_HIST2 (65- 127)
2325 *
2326 *
2327 * Notes:
2328 * - Packet length is the sum of all data transmitted on the wire for the given
2329 * packet including packet data, pad bytes, fcs bytes, pause bytes, and jam
2330 * bytes. The octect counts do not include PREAMBLE byte or EXTEND cycles.
2331 * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
2332 * - Counters will wrap
2333 * - Not reset when MIX*_CTL[RESET] is set to 1.
2334 */
2335union cvmx_agl_gmx_txx_stat5 {
2336 u64 u64;
2337 struct cvmx_agl_gmx_txx_stat5_s {
2338 u64 hist3 : 32;
2339 u64 hist2 : 32;
2340 } s;
2341 struct cvmx_agl_gmx_txx_stat5_s cn52xx;
2342 struct cvmx_agl_gmx_txx_stat5_s cn52xxp1;
2343 struct cvmx_agl_gmx_txx_stat5_s cn56xx;
2344 struct cvmx_agl_gmx_txx_stat5_s cn56xxp1;
2345 struct cvmx_agl_gmx_txx_stat5_s cn61xx;
2346 struct cvmx_agl_gmx_txx_stat5_s cn63xx;
2347 struct cvmx_agl_gmx_txx_stat5_s cn63xxp1;
2348 struct cvmx_agl_gmx_txx_stat5_s cn66xx;
2349 struct cvmx_agl_gmx_txx_stat5_s cn68xx;
2350 struct cvmx_agl_gmx_txx_stat5_s cn68xxp1;
2351 struct cvmx_agl_gmx_txx_stat5_s cn70xx;
2352 struct cvmx_agl_gmx_txx_stat5_s cn70xxp1;
2353};
2354
2355typedef union cvmx_agl_gmx_txx_stat5 cvmx_agl_gmx_txx_stat5_t;
2356
2357/**
2358 * cvmx_agl_gmx_tx#_stat6
2359 *
2360 * AGL_GMX_TX_STAT6 = AGL_GMX_TX_STATS_HIST5 (512-1023) / AGL_GMX_TX_STATS_HIST4 (256-511)
2361 *
2362 *
2363 * Notes:
2364 * - Packet length is the sum of all data transmitted on the wire for the given
2365 * packet including packet data, pad bytes, fcs bytes, pause bytes, and jam
2366 * bytes. The octect counts do not include PREAMBLE byte or EXTEND cycles.
2367 * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
2368 * - Counters will wrap
2369 * - Not reset when MIX*_CTL[RESET] is set to 1.
2370 */
2371union cvmx_agl_gmx_txx_stat6 {
2372 u64 u64;
2373 struct cvmx_agl_gmx_txx_stat6_s {
2374 u64 hist5 : 32;
2375 u64 hist4 : 32;
2376 } s;
2377 struct cvmx_agl_gmx_txx_stat6_s cn52xx;
2378 struct cvmx_agl_gmx_txx_stat6_s cn52xxp1;
2379 struct cvmx_agl_gmx_txx_stat6_s cn56xx;
2380 struct cvmx_agl_gmx_txx_stat6_s cn56xxp1;
2381 struct cvmx_agl_gmx_txx_stat6_s cn61xx;
2382 struct cvmx_agl_gmx_txx_stat6_s cn63xx;
2383 struct cvmx_agl_gmx_txx_stat6_s cn63xxp1;
2384 struct cvmx_agl_gmx_txx_stat6_s cn66xx;
2385 struct cvmx_agl_gmx_txx_stat6_s cn68xx;
2386 struct cvmx_agl_gmx_txx_stat6_s cn68xxp1;
2387 struct cvmx_agl_gmx_txx_stat6_s cn70xx;
2388 struct cvmx_agl_gmx_txx_stat6_s cn70xxp1;
2389};
2390
2391typedef union cvmx_agl_gmx_txx_stat6 cvmx_agl_gmx_txx_stat6_t;
2392
2393/**
2394 * cvmx_agl_gmx_tx#_stat7
2395 *
2396 * AGL_GMX_TX_STAT7 = AGL_GMX_TX_STATS_HIST7 (1024-1518) / AGL_GMX_TX_STATS_HIST6 (>1518)
2397 *
2398 *
2399 * Notes:
2400 * - Packet length is the sum of all data transmitted on the wire for the given
2401 * packet including packet data, pad bytes, fcs bytes, pause bytes, and jam
2402 * bytes. The octect counts do not include PREAMBLE byte or EXTEND cycles.
2403 * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
2404 * - Counters will wrap
2405 * - Not reset when MIX*_CTL[RESET] is set to 1.
2406 */
2407union cvmx_agl_gmx_txx_stat7 {
2408 u64 u64;
2409 struct cvmx_agl_gmx_txx_stat7_s {
2410 u64 hist7 : 32;
2411 u64 hist6 : 32;
2412 } s;
2413 struct cvmx_agl_gmx_txx_stat7_s cn52xx;
2414 struct cvmx_agl_gmx_txx_stat7_s cn52xxp1;
2415 struct cvmx_agl_gmx_txx_stat7_s cn56xx;
2416 struct cvmx_agl_gmx_txx_stat7_s cn56xxp1;
2417 struct cvmx_agl_gmx_txx_stat7_s cn61xx;
2418 struct cvmx_agl_gmx_txx_stat7_s cn63xx;
2419 struct cvmx_agl_gmx_txx_stat7_s cn63xxp1;
2420 struct cvmx_agl_gmx_txx_stat7_s cn66xx;
2421 struct cvmx_agl_gmx_txx_stat7_s cn68xx;
2422 struct cvmx_agl_gmx_txx_stat7_s cn68xxp1;
2423 struct cvmx_agl_gmx_txx_stat7_s cn70xx;
2424 struct cvmx_agl_gmx_txx_stat7_s cn70xxp1;
2425};
2426
2427typedef union cvmx_agl_gmx_txx_stat7 cvmx_agl_gmx_txx_stat7_t;
2428
2429/**
2430 * cvmx_agl_gmx_tx#_stat8
2431 *
2432 * AGL_GMX_TX_STAT8 = AGL_GMX_TX_STATS_MCST / AGL_GMX_TX_STATS_BCST
2433 *
2434 *
2435 * Notes:
2436 * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
2437 * - Counters will wrap
2438 * - Note, GMX determines if the packet is MCST or BCST from the DMAC of the
2439 * packet. GMX assumes that the DMAC lies in the first 6 bytes of the packet
2440 * as per the 802.3 frame definition. If the system requires additional data
2441 * before the L2 header, then the MCST and BCST counters may not reflect
2442 * reality and should be ignored by software.
2443 * - Not reset when MIX*_CTL[RESET] is set to 1.
2444 */
2445union cvmx_agl_gmx_txx_stat8 {
2446 u64 u64;
2447 struct cvmx_agl_gmx_txx_stat8_s {
2448 u64 mcst : 32;
2449 u64 bcst : 32;
2450 } s;
2451 struct cvmx_agl_gmx_txx_stat8_s cn52xx;
2452 struct cvmx_agl_gmx_txx_stat8_s cn52xxp1;
2453 struct cvmx_agl_gmx_txx_stat8_s cn56xx;
2454 struct cvmx_agl_gmx_txx_stat8_s cn56xxp1;
2455 struct cvmx_agl_gmx_txx_stat8_s cn61xx;
2456 struct cvmx_agl_gmx_txx_stat8_s cn63xx;
2457 struct cvmx_agl_gmx_txx_stat8_s cn63xxp1;
2458 struct cvmx_agl_gmx_txx_stat8_s cn66xx;
2459 struct cvmx_agl_gmx_txx_stat8_s cn68xx;
2460 struct cvmx_agl_gmx_txx_stat8_s cn68xxp1;
2461 struct cvmx_agl_gmx_txx_stat8_s cn70xx;
2462 struct cvmx_agl_gmx_txx_stat8_s cn70xxp1;
2463};
2464
2465typedef union cvmx_agl_gmx_txx_stat8 cvmx_agl_gmx_txx_stat8_t;
2466
2467/**
2468 * cvmx_agl_gmx_tx#_stat9
2469 *
2470 * AGL_GMX_TX_STAT9 = AGL_GMX_TX_STATS_UNDFLW / AGL_GMX_TX_STATS_CTL
2471 *
2472 *
2473 * Notes:
2474 * - Cleared either by a write (of any value) or a read when AGL_GMX_TX_STATS_CTL[RD_CLR] is set
2475 * - Counters will wrap
2476 * - Not reset when MIX*_CTL[RESET] is set to 1.
2477 */
2478union cvmx_agl_gmx_txx_stat9 {
2479 u64 u64;
2480 struct cvmx_agl_gmx_txx_stat9_s {
2481 u64 undflw : 32;
2482 u64 ctl : 32;
2483 } s;
2484 struct cvmx_agl_gmx_txx_stat9_s cn52xx;
2485 struct cvmx_agl_gmx_txx_stat9_s cn52xxp1;
2486 struct cvmx_agl_gmx_txx_stat9_s cn56xx;
2487 struct cvmx_agl_gmx_txx_stat9_s cn56xxp1;
2488 struct cvmx_agl_gmx_txx_stat9_s cn61xx;
2489 struct cvmx_agl_gmx_txx_stat9_s cn63xx;
2490 struct cvmx_agl_gmx_txx_stat9_s cn63xxp1;
2491 struct cvmx_agl_gmx_txx_stat9_s cn66xx;
2492 struct cvmx_agl_gmx_txx_stat9_s cn68xx;
2493 struct cvmx_agl_gmx_txx_stat9_s cn68xxp1;
2494 struct cvmx_agl_gmx_txx_stat9_s cn70xx;
2495 struct cvmx_agl_gmx_txx_stat9_s cn70xxp1;
2496};
2497
2498typedef union cvmx_agl_gmx_txx_stat9 cvmx_agl_gmx_txx_stat9_t;
2499
2500/**
2501 * cvmx_agl_gmx_tx#_stats_ctl
2502 *
2503 * AGL_GMX_TX_STATS_CTL = TX Stats Control register
2504 *
2505 *
2506 * Notes:
2507 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
2508 *
2509 */
2510union cvmx_agl_gmx_txx_stats_ctl {
2511 u64 u64;
2512 struct cvmx_agl_gmx_txx_stats_ctl_s {
2513 u64 reserved_1_63 : 63;
2514 u64 rd_clr : 1;
2515 } s;
2516 struct cvmx_agl_gmx_txx_stats_ctl_s cn52xx;
2517 struct cvmx_agl_gmx_txx_stats_ctl_s cn52xxp1;
2518 struct cvmx_agl_gmx_txx_stats_ctl_s cn56xx;
2519 struct cvmx_agl_gmx_txx_stats_ctl_s cn56xxp1;
2520 struct cvmx_agl_gmx_txx_stats_ctl_s cn61xx;
2521 struct cvmx_agl_gmx_txx_stats_ctl_s cn63xx;
2522 struct cvmx_agl_gmx_txx_stats_ctl_s cn63xxp1;
2523 struct cvmx_agl_gmx_txx_stats_ctl_s cn66xx;
2524 struct cvmx_agl_gmx_txx_stats_ctl_s cn68xx;
2525 struct cvmx_agl_gmx_txx_stats_ctl_s cn68xxp1;
2526 struct cvmx_agl_gmx_txx_stats_ctl_s cn70xx;
2527 struct cvmx_agl_gmx_txx_stats_ctl_s cn70xxp1;
2528};
2529
2530typedef union cvmx_agl_gmx_txx_stats_ctl cvmx_agl_gmx_txx_stats_ctl_t;
2531
2532/**
2533 * cvmx_agl_gmx_tx#_thresh
2534 *
2535 * AGL_GMX_TX_THRESH = Packet TX Threshold
2536 *
2537 *
2538 * Notes:
2539 * Additionally reset when MIX<prt>_CTL[RESET] is set to 1.
2540 *
2541 */
2542union cvmx_agl_gmx_txx_thresh {
2543 u64 u64;
2544 struct cvmx_agl_gmx_txx_thresh_s {
2545 u64 reserved_6_63 : 58;
2546 u64 cnt : 6;
2547 } s;
2548 struct cvmx_agl_gmx_txx_thresh_s cn52xx;
2549 struct cvmx_agl_gmx_txx_thresh_s cn52xxp1;
2550 struct cvmx_agl_gmx_txx_thresh_s cn56xx;
2551 struct cvmx_agl_gmx_txx_thresh_s cn56xxp1;
2552 struct cvmx_agl_gmx_txx_thresh_s cn61xx;
2553 struct cvmx_agl_gmx_txx_thresh_s cn63xx;
2554 struct cvmx_agl_gmx_txx_thresh_s cn63xxp1;
2555 struct cvmx_agl_gmx_txx_thresh_s cn66xx;
2556 struct cvmx_agl_gmx_txx_thresh_s cn68xx;
2557 struct cvmx_agl_gmx_txx_thresh_s cn68xxp1;
2558 struct cvmx_agl_gmx_txx_thresh_s cn70xx;
2559 struct cvmx_agl_gmx_txx_thresh_s cn70xxp1;
2560};
2561
2562typedef union cvmx_agl_gmx_txx_thresh cvmx_agl_gmx_txx_thresh_t;
2563
2564/**
2565 * cvmx_agl_gmx_tx_bp
2566 *
2567 * AGL_GMX_TX_BP = Packet TX BackPressure Register
2568 *
2569 *
2570 * Notes:
2571 * BP[0] will be reset when MIX0_CTL[RESET] is set to 1.
2572 * BP[1] will be reset when MIX1_CTL[RESET] is set to 1.
2573 */
2574union cvmx_agl_gmx_tx_bp {
2575 u64 u64;
2576 struct cvmx_agl_gmx_tx_bp_s {
2577 u64 reserved_2_63 : 62;
2578 u64 bp : 2;
2579 } s;
2580 struct cvmx_agl_gmx_tx_bp_s cn52xx;
2581 struct cvmx_agl_gmx_tx_bp_s cn52xxp1;
2582 struct cvmx_agl_gmx_tx_bp_cn56xx {
2583 u64 reserved_1_63 : 63;
2584 u64 bp : 1;
2585 } cn56xx;
2586 struct cvmx_agl_gmx_tx_bp_cn56xx cn56xxp1;
2587 struct cvmx_agl_gmx_tx_bp_s cn61xx;
2588 struct cvmx_agl_gmx_tx_bp_s cn63xx;
2589 struct cvmx_agl_gmx_tx_bp_s cn63xxp1;
2590 struct cvmx_agl_gmx_tx_bp_s cn66xx;
2591 struct cvmx_agl_gmx_tx_bp_s cn68xx;
2592 struct cvmx_agl_gmx_tx_bp_s cn68xxp1;
2593 struct cvmx_agl_gmx_tx_bp_cn56xx cn70xx;
2594 struct cvmx_agl_gmx_tx_bp_cn56xx cn70xxp1;
2595};
2596
2597typedef union cvmx_agl_gmx_tx_bp cvmx_agl_gmx_tx_bp_t;
2598
2599/**
2600 * cvmx_agl_gmx_tx_col_attempt
2601 *
2602 * AGL_GMX_TX_COL_ATTEMPT = Packet TX collision attempts before dropping frame
2603 *
2604 *
2605 * Notes:
2606 * Additionally reset when both MIX0/1_CTL[RESET] are set to 1.
2607 *
2608 */
2609union cvmx_agl_gmx_tx_col_attempt {
2610 u64 u64;
2611 struct cvmx_agl_gmx_tx_col_attempt_s {
2612 u64 reserved_5_63 : 59;
2613 u64 limit : 5;
2614 } s;
2615 struct cvmx_agl_gmx_tx_col_attempt_s cn52xx;
2616 struct cvmx_agl_gmx_tx_col_attempt_s cn52xxp1;
2617 struct cvmx_agl_gmx_tx_col_attempt_s cn56xx;
2618 struct cvmx_agl_gmx_tx_col_attempt_s cn56xxp1;
2619 struct cvmx_agl_gmx_tx_col_attempt_s cn61xx;
2620 struct cvmx_agl_gmx_tx_col_attempt_s cn63xx;
2621 struct cvmx_agl_gmx_tx_col_attempt_s cn63xxp1;
2622 struct cvmx_agl_gmx_tx_col_attempt_s cn66xx;
2623 struct cvmx_agl_gmx_tx_col_attempt_s cn68xx;
2624 struct cvmx_agl_gmx_tx_col_attempt_s cn68xxp1;
2625 struct cvmx_agl_gmx_tx_col_attempt_s cn70xx;
2626 struct cvmx_agl_gmx_tx_col_attempt_s cn70xxp1;
2627};
2628
2629typedef union cvmx_agl_gmx_tx_col_attempt cvmx_agl_gmx_tx_col_attempt_t;
2630
2631/**
2632 * cvmx_agl_gmx_tx_ifg
2633 *
2634 * Common
2635 * AGL_GMX_TX_IFG = Packet TX Interframe Gap
2636 */
2637union cvmx_agl_gmx_tx_ifg {
2638 u64 u64;
2639 struct cvmx_agl_gmx_tx_ifg_s {
2640 u64 reserved_8_63 : 56;
2641 u64 ifg2 : 4;
2642 u64 ifg1 : 4;
2643 } s;
2644 struct cvmx_agl_gmx_tx_ifg_s cn52xx;
2645 struct cvmx_agl_gmx_tx_ifg_s cn52xxp1;
2646 struct cvmx_agl_gmx_tx_ifg_s cn56xx;
2647 struct cvmx_agl_gmx_tx_ifg_s cn56xxp1;
2648 struct cvmx_agl_gmx_tx_ifg_s cn61xx;
2649 struct cvmx_agl_gmx_tx_ifg_s cn63xx;
2650 struct cvmx_agl_gmx_tx_ifg_s cn63xxp1;
2651 struct cvmx_agl_gmx_tx_ifg_s cn66xx;
2652 struct cvmx_agl_gmx_tx_ifg_s cn68xx;
2653 struct cvmx_agl_gmx_tx_ifg_s cn68xxp1;
2654 struct cvmx_agl_gmx_tx_ifg_s cn70xx;
2655 struct cvmx_agl_gmx_tx_ifg_s cn70xxp1;
2656};
2657
2658typedef union cvmx_agl_gmx_tx_ifg cvmx_agl_gmx_tx_ifg_t;
2659
2660/**
2661 * cvmx_agl_gmx_tx_int_en
2662 *
2663 * AGL_GMX_TX_INT_EN = Interrupt Enable
2664 *
2665 *
2666 * Notes:
2667 * UNDFLW[0], XSCOL[0], XSDEF[0], LATE_COL[0], PTP_LOST[0] will be reset when MIX0_CTL[RESET] is set to 1.
2668 * UNDFLW[1], XSCOL[1], XSDEF[1], LATE_COL[1], PTP_LOST[1] will be reset when MIX1_CTL[RESET] is set to 1.
2669 * PKO_NXA will bee reset when both MIX0/1_CTL[RESET] are set to 1.
2670 */
2671union cvmx_agl_gmx_tx_int_en {
2672 u64 u64;
2673 struct cvmx_agl_gmx_tx_int_en_s {
2674 u64 reserved_22_63 : 42;
2675 u64 ptp_lost : 2;
2676 u64 reserved_18_19 : 2;
2677 u64 late_col : 2;
2678 u64 reserved_14_15 : 2;
2679 u64 xsdef : 2;
2680 u64 reserved_10_11 : 2;
2681 u64 xscol : 2;
2682 u64 reserved_4_7 : 4;
2683 u64 undflw : 2;
2684 u64 reserved_1_1 : 1;
2685 u64 pko_nxa : 1;
2686 } s;
2687 struct cvmx_agl_gmx_tx_int_en_cn52xx {
2688 u64 reserved_18_63 : 46;
2689 u64 late_col : 2;
2690 u64 reserved_14_15 : 2;
2691 u64 xsdef : 2;
2692 u64 reserved_10_11 : 2;
2693 u64 xscol : 2;
2694 u64 reserved_4_7 : 4;
2695 u64 undflw : 2;
2696 u64 reserved_1_1 : 1;
2697 u64 pko_nxa : 1;
2698 } cn52xx;
2699 struct cvmx_agl_gmx_tx_int_en_cn52xx cn52xxp1;
2700 struct cvmx_agl_gmx_tx_int_en_cn56xx {
2701 u64 reserved_17_63 : 47;
2702 u64 late_col : 1;
2703 u64 reserved_13_15 : 3;
2704 u64 xsdef : 1;
2705 u64 reserved_9_11 : 3;
2706 u64 xscol : 1;
2707 u64 reserved_3_7 : 5;
2708 u64 undflw : 1;
2709 u64 reserved_1_1 : 1;
2710 u64 pko_nxa : 1;
2711 } cn56xx;
2712 struct cvmx_agl_gmx_tx_int_en_cn56xx cn56xxp1;
2713 struct cvmx_agl_gmx_tx_int_en_s cn61xx;
2714 struct cvmx_agl_gmx_tx_int_en_s cn63xx;
2715 struct cvmx_agl_gmx_tx_int_en_s cn63xxp1;
2716 struct cvmx_agl_gmx_tx_int_en_s cn66xx;
2717 struct cvmx_agl_gmx_tx_int_en_s cn68xx;
2718 struct cvmx_agl_gmx_tx_int_en_s cn68xxp1;
2719 struct cvmx_agl_gmx_tx_int_en_cn70xx {
2720 u64 reserved_21_63 : 43;
2721 u64 ptp_lost : 1;
2722 u64 reserved_17_19 : 3;
2723 u64 late_col : 1;
2724 u64 reserved_13_15 : 3;
2725 u64 xsdef : 1;
2726 u64 reserved_9_11 : 3;
2727 u64 xscol : 1;
2728 u64 reserved_3_7 : 5;
2729 u64 undflw : 1;
2730 u64 reserved_1_1 : 1;
2731 u64 pko_nxa : 1;
2732 } cn70xx;
2733 struct cvmx_agl_gmx_tx_int_en_cn70xx cn70xxp1;
2734};
2735
2736typedef union cvmx_agl_gmx_tx_int_en cvmx_agl_gmx_tx_int_en_t;
2737
2738/**
2739 * cvmx_agl_gmx_tx_int_reg
2740 *
2741 * AGL_GMX_TX_INT_REG = Interrupt Register
2742 *
2743 *
2744 * Notes:
2745 * UNDFLW[0], XSCOL[0], XSDEF[0], LATE_COL[0], PTP_LOST[0] will be reset when MIX0_CTL[RESET] is set to 1.
2746 * UNDFLW[1], XSCOL[1], XSDEF[1], LATE_COL[1], PTP_LOST[1] will be reset when MIX1_CTL[RESET] is set to 1.
2747 * PKO_NXA will bee reset when both MIX0/1_CTL[RESET] are set to 1.
2748 */
2749union cvmx_agl_gmx_tx_int_reg {
2750 u64 u64;
2751 struct cvmx_agl_gmx_tx_int_reg_s {
2752 u64 reserved_22_63 : 42;
2753 u64 ptp_lost : 2;
2754 u64 reserved_18_19 : 2;
2755 u64 late_col : 2;
2756 u64 reserved_14_15 : 2;
2757 u64 xsdef : 2;
2758 u64 reserved_10_11 : 2;
2759 u64 xscol : 2;
2760 u64 reserved_4_7 : 4;
2761 u64 undflw : 2;
2762 u64 reserved_1_1 : 1;
2763 u64 pko_nxa : 1;
2764 } s;
2765 struct cvmx_agl_gmx_tx_int_reg_cn52xx {
2766 u64 reserved_18_63 : 46;
2767 u64 late_col : 2;
2768 u64 reserved_14_15 : 2;
2769 u64 xsdef : 2;
2770 u64 reserved_10_11 : 2;
2771 u64 xscol : 2;
2772 u64 reserved_4_7 : 4;
2773 u64 undflw : 2;
2774 u64 reserved_1_1 : 1;
2775 u64 pko_nxa : 1;
2776 } cn52xx;
2777 struct cvmx_agl_gmx_tx_int_reg_cn52xx cn52xxp1;
2778 struct cvmx_agl_gmx_tx_int_reg_cn56xx {
2779 u64 reserved_17_63 : 47;
2780 u64 late_col : 1;
2781 u64 reserved_13_15 : 3;
2782 u64 xsdef : 1;
2783 u64 reserved_9_11 : 3;
2784 u64 xscol : 1;
2785 u64 reserved_3_7 : 5;
2786 u64 undflw : 1;
2787 u64 reserved_1_1 : 1;
2788 u64 pko_nxa : 1;
2789 } cn56xx;
2790 struct cvmx_agl_gmx_tx_int_reg_cn56xx cn56xxp1;
2791 struct cvmx_agl_gmx_tx_int_reg_s cn61xx;
2792 struct cvmx_agl_gmx_tx_int_reg_s cn63xx;
2793 struct cvmx_agl_gmx_tx_int_reg_s cn63xxp1;
2794 struct cvmx_agl_gmx_tx_int_reg_s cn66xx;
2795 struct cvmx_agl_gmx_tx_int_reg_s cn68xx;
2796 struct cvmx_agl_gmx_tx_int_reg_s cn68xxp1;
2797 struct cvmx_agl_gmx_tx_int_reg_cn70xx {
2798 u64 reserved_21_63 : 43;
2799 u64 ptp_lost : 1;
2800 u64 reserved_17_19 : 3;
2801 u64 late_col : 1;
2802 u64 reserved_13_15 : 3;
2803 u64 xsdef : 1;
2804 u64 reserved_9_11 : 3;
2805 u64 xscol : 1;
2806 u64 reserved_3_7 : 5;
2807 u64 undflw : 1;
2808 u64 reserved_1_1 : 1;
2809 u64 pko_nxa : 1;
2810 } cn70xx;
2811 struct cvmx_agl_gmx_tx_int_reg_cn70xx cn70xxp1;
2812};
2813
2814typedef union cvmx_agl_gmx_tx_int_reg cvmx_agl_gmx_tx_int_reg_t;
2815
2816/**
2817 * cvmx_agl_gmx_tx_jam
2818 *
2819 * AGL_GMX_TX_JAM = Packet TX Jam Pattern
2820 *
2821 *
2822 * Notes:
2823 * Additionally reset when both MIX0/1_CTL[RESET] are set to 1.
2824 *
2825 */
2826union cvmx_agl_gmx_tx_jam {
2827 u64 u64;
2828 struct cvmx_agl_gmx_tx_jam_s {
2829 u64 reserved_8_63 : 56;
2830 u64 jam : 8;
2831 } s;
2832 struct cvmx_agl_gmx_tx_jam_s cn52xx;
2833 struct cvmx_agl_gmx_tx_jam_s cn52xxp1;
2834 struct cvmx_agl_gmx_tx_jam_s cn56xx;
2835 struct cvmx_agl_gmx_tx_jam_s cn56xxp1;
2836 struct cvmx_agl_gmx_tx_jam_s cn61xx;
2837 struct cvmx_agl_gmx_tx_jam_s cn63xx;
2838 struct cvmx_agl_gmx_tx_jam_s cn63xxp1;
2839 struct cvmx_agl_gmx_tx_jam_s cn66xx;
2840 struct cvmx_agl_gmx_tx_jam_s cn68xx;
2841 struct cvmx_agl_gmx_tx_jam_s cn68xxp1;
2842 struct cvmx_agl_gmx_tx_jam_s cn70xx;
2843 struct cvmx_agl_gmx_tx_jam_s cn70xxp1;
2844};
2845
2846typedef union cvmx_agl_gmx_tx_jam cvmx_agl_gmx_tx_jam_t;
2847
2848/**
2849 * cvmx_agl_gmx_tx_lfsr
2850 *
2851 * AGL_GMX_TX_LFSR = LFSR used to implement truncated binary exponential backoff
2852 *
2853 *
2854 * Notes:
2855 * Additionally reset when both MIX0/1_CTL[RESET] are set to 1.
2856 *
2857 */
2858union cvmx_agl_gmx_tx_lfsr {
2859 u64 u64;
2860 struct cvmx_agl_gmx_tx_lfsr_s {
2861 u64 reserved_16_63 : 48;
2862 u64 lfsr : 16;
2863 } s;
2864 struct cvmx_agl_gmx_tx_lfsr_s cn52xx;
2865 struct cvmx_agl_gmx_tx_lfsr_s cn52xxp1;
2866 struct cvmx_agl_gmx_tx_lfsr_s cn56xx;
2867 struct cvmx_agl_gmx_tx_lfsr_s cn56xxp1;
2868 struct cvmx_agl_gmx_tx_lfsr_s cn61xx;
2869 struct cvmx_agl_gmx_tx_lfsr_s cn63xx;
2870 struct cvmx_agl_gmx_tx_lfsr_s cn63xxp1;
2871 struct cvmx_agl_gmx_tx_lfsr_s cn66xx;
2872 struct cvmx_agl_gmx_tx_lfsr_s cn68xx;
2873 struct cvmx_agl_gmx_tx_lfsr_s cn68xxp1;
2874 struct cvmx_agl_gmx_tx_lfsr_s cn70xx;
2875 struct cvmx_agl_gmx_tx_lfsr_s cn70xxp1;
2876};
2877
2878typedef union cvmx_agl_gmx_tx_lfsr cvmx_agl_gmx_tx_lfsr_t;
2879
2880/**
2881 * cvmx_agl_gmx_tx_ovr_bp
2882 *
2883 * AGL_GMX_TX_OVR_BP = Packet TX Override BackPressure
2884 *
2885 *
2886 * Notes:
2887 * IGN_FULL[0], BP[0], EN[0] will be reset when MIX0_CTL[RESET] is set to 1.
2888 * IGN_FULL[1], BP[1], EN[1] will be reset when MIX1_CTL[RESET] is set to 1.
2889 */
2890union cvmx_agl_gmx_tx_ovr_bp {
2891 u64 u64;
2892 struct cvmx_agl_gmx_tx_ovr_bp_s {
2893 u64 reserved_10_63 : 54;
2894 u64 en : 2;
2895 u64 reserved_6_7 : 2;
2896 u64 bp : 2;
2897 u64 reserved_2_3 : 2;
2898 u64 ign_full : 2;
2899 } s;
2900 struct cvmx_agl_gmx_tx_ovr_bp_s cn52xx;
2901 struct cvmx_agl_gmx_tx_ovr_bp_s cn52xxp1;
2902 struct cvmx_agl_gmx_tx_ovr_bp_cn56xx {
2903 u64 reserved_9_63 : 55;
2904 u64 en : 1;
2905 u64 reserved_5_7 : 3;
2906 u64 bp : 1;
2907 u64 reserved_1_3 : 3;
2908 u64 ign_full : 1;
2909 } cn56xx;
2910 struct cvmx_agl_gmx_tx_ovr_bp_cn56xx cn56xxp1;
2911 struct cvmx_agl_gmx_tx_ovr_bp_s cn61xx;
2912 struct cvmx_agl_gmx_tx_ovr_bp_s cn63xx;
2913 struct cvmx_agl_gmx_tx_ovr_bp_s cn63xxp1;
2914 struct cvmx_agl_gmx_tx_ovr_bp_s cn66xx;
2915 struct cvmx_agl_gmx_tx_ovr_bp_s cn68xx;
2916 struct cvmx_agl_gmx_tx_ovr_bp_s cn68xxp1;
2917 struct cvmx_agl_gmx_tx_ovr_bp_cn56xx cn70xx;
2918 struct cvmx_agl_gmx_tx_ovr_bp_cn56xx cn70xxp1;
2919};
2920
2921typedef union cvmx_agl_gmx_tx_ovr_bp cvmx_agl_gmx_tx_ovr_bp_t;
2922
2923/**
2924 * cvmx_agl_gmx_tx_pause_pkt_dmac
2925 *
2926 * AGL_GMX_TX_PAUSE_PKT_DMAC = Packet TX Pause Packet DMAC field
2927 *
2928 *
2929 * Notes:
2930 * Additionally reset when both MIX0/1_CTL[RESET] are set to 1.
2931 *
2932 */
2933union cvmx_agl_gmx_tx_pause_pkt_dmac {
2934 u64 u64;
2935 struct cvmx_agl_gmx_tx_pause_pkt_dmac_s {
2936 u64 reserved_48_63 : 16;
2937 u64 dmac : 48;
2938 } s;
2939 struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn52xx;
2940 struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn52xxp1;
2941 struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn56xx;
2942 struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn56xxp1;
2943 struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn61xx;
2944 struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn63xx;
2945 struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn63xxp1;
2946 struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn66xx;
2947 struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn68xx;
2948 struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn68xxp1;
2949 struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn70xx;
2950 struct cvmx_agl_gmx_tx_pause_pkt_dmac_s cn70xxp1;
2951};
2952
2953typedef union cvmx_agl_gmx_tx_pause_pkt_dmac cvmx_agl_gmx_tx_pause_pkt_dmac_t;
2954
2955/**
2956 * cvmx_agl_gmx_tx_pause_pkt_type
2957 *
2958 * AGL_GMX_TX_PAUSE_PKT_TYPE = Packet TX Pause Packet TYPE field
2959 *
2960 *
2961 * Notes:
2962 * Additionally reset when both MIX0/1_CTL[RESET] are set to 1.
2963 *
2964 */
2965union cvmx_agl_gmx_tx_pause_pkt_type {
2966 u64 u64;
2967 struct cvmx_agl_gmx_tx_pause_pkt_type_s {
2968 u64 reserved_16_63 : 48;
2969 u64 type : 16;
2970 } s;
2971 struct cvmx_agl_gmx_tx_pause_pkt_type_s cn52xx;
2972 struct cvmx_agl_gmx_tx_pause_pkt_type_s cn52xxp1;
2973 struct cvmx_agl_gmx_tx_pause_pkt_type_s cn56xx;
2974 struct cvmx_agl_gmx_tx_pause_pkt_type_s cn56xxp1;
2975 struct cvmx_agl_gmx_tx_pause_pkt_type_s cn61xx;
2976 struct cvmx_agl_gmx_tx_pause_pkt_type_s cn63xx;
2977 struct cvmx_agl_gmx_tx_pause_pkt_type_s cn63xxp1;
2978 struct cvmx_agl_gmx_tx_pause_pkt_type_s cn66xx;
2979 struct cvmx_agl_gmx_tx_pause_pkt_type_s cn68xx;
2980 struct cvmx_agl_gmx_tx_pause_pkt_type_s cn68xxp1;
2981 struct cvmx_agl_gmx_tx_pause_pkt_type_s cn70xx;
2982 struct cvmx_agl_gmx_tx_pause_pkt_type_s cn70xxp1;
2983};
2984
2985typedef union cvmx_agl_gmx_tx_pause_pkt_type cvmx_agl_gmx_tx_pause_pkt_type_t;
2986
2987/**
2988 * cvmx_agl_gmx_wol_ctl
2989 */
2990union cvmx_agl_gmx_wol_ctl {
2991 u64 u64;
2992 struct cvmx_agl_gmx_wol_ctl_s {
2993 u64 reserved_33_63 : 31;
2994 u64 magic_en : 1;
2995 u64 reserved_17_31 : 15;
2996 u64 direct_en : 1;
2997 u64 reserved_1_15 : 15;
2998 u64 en : 1;
2999 } s;
3000 struct cvmx_agl_gmx_wol_ctl_s cn70xx;
3001 struct cvmx_agl_gmx_wol_ctl_s cn70xxp1;
3002};
3003
3004typedef union cvmx_agl_gmx_wol_ctl cvmx_agl_gmx_wol_ctl_t;
3005
3006/**
3007 * cvmx_agl_prt#_ctl
3008 *
3009 * AGL_PRT_CTL = AGL Port Control
3010 *
3011 *
3012 * Notes:
3013 * The RGMII timing specification requires that devices transmit clock and
3014 * data synchronously. The specification requires external sources (namely
3015 * the PC board trace routes) to introduce the appropriate 1.5 to 2.0 ns of
3016 * delay.
3017 *
3018 * To eliminate the need for the PC board delays, the MIX RGMII interface
3019 * has optional onboard DLL's for both transmit and receive. For correct
3020 * operation, at most one of the transmitter, board, or receiver involved
3021 * in an RGMII link should introduce delay. By default/reset,
3022 * the MIX RGMII receivers delay the received clock, and the MIX
3023 * RGMII transmitters do not delay the transmitted clock. Whether this
3024 * default works as-is with a given link partner depends on the behavior
3025 * of the link partner and the PC board.
3026 *
3027 * These are the possible modes of MIX RGMII receive operation:
3028 * o AGL_PRTx_CTL[CLKRX_BYP] = 0 (reset value) - The OCTEON MIX RGMII
3029 * receive interface introduces clock delay using its internal DLL.
3030 * This mode is appropriate if neither the remote
3031 * transmitter nor the PC board delays the clock.
3032 * o AGL_PRTx_CTL[CLKRX_BYP] = 1, [CLKRX_SET] = 0x0 - The OCTEON MIX
3033 * RGMII receive interface introduces no clock delay. This mode
3034 * is appropriate if either the remote transmitter or the PC board
3035 * delays the clock.
3036 *
3037 * These are the possible modes of MIX RGMII transmit operation:
3038 * o AGL_PRTx_CTL[CLKTX_BYP] = 1, [CLKTX_SET] = 0x0 (reset value) -
3039 * The OCTEON MIX RGMII transmit interface introduces no clock
3040 * delay. This mode is appropriate is either the remote receiver
3041 * or the PC board delays the clock.
3042 * o AGL_PRTx_CTL[CLKTX_BYP] = 0 - The OCTEON MIX RGMII transmit
3043 * interface introduces clock delay using its internal DLL.
3044 * This mode is appropriate if neither the remote receiver
3045 * nor the PC board delays the clock.
3046 *
3047 * AGL_PRT0_CTL will be reset when MIX0_CTL[RESET] is set to 1.
3048 * AGL_PRT1_CTL will be reset when MIX1_CTL[RESET] is set to 1.
3049 */
3050union cvmx_agl_prtx_ctl {
3051 u64 u64;
3052 struct cvmx_agl_prtx_ctl_s {
3053 u64 drv_byp : 1;
3054 u64 reserved_62_62 : 1;
3055 u64 cmp_pctl : 6;
3056 u64 reserved_54_55 : 2;
3057 u64 cmp_nctl : 6;
3058 u64 reserved_46_47 : 2;
3059 u64 drv_pctl : 6;
3060 u64 reserved_38_39 : 2;
3061 u64 drv_nctl : 6;
3062 u64 reserved_31_31 : 1;
3063 u64 clk_set : 7;
3064 u64 clkrx_byp : 1;
3065 u64 clkrx_set : 7;
3066 u64 clktx_byp : 1;
3067 u64 clktx_set : 7;
3068 u64 refclk_sel : 2;
3069 u64 reserved_5_5 : 1;
3070 u64 dllrst : 1;
3071 u64 comp : 1;
3072 u64 enable : 1;
3073 u64 clkrst : 1;
3074 u64 mode : 1;
3075 } s;
3076 struct cvmx_agl_prtx_ctl_cn61xx {
3077 u64 drv_byp : 1;
3078 u64 reserved_62_62 : 1;
3079 u64 cmp_pctl : 6;
3080 u64 reserved_54_55 : 2;
3081 u64 cmp_nctl : 6;
3082 u64 reserved_46_47 : 2;
3083 u64 drv_pctl : 6;
3084 u64 reserved_38_39 : 2;
3085 u64 drv_nctl : 6;
3086 u64 reserved_29_31 : 3;
3087 u64 clk_set : 5;
3088 u64 clkrx_byp : 1;
3089 u64 reserved_21_22 : 2;
3090 u64 clkrx_set : 5;
3091 u64 clktx_byp : 1;
3092 u64 reserved_13_14 : 2;
3093 u64 clktx_set : 5;
3094 u64 reserved_5_7 : 3;
3095 u64 dllrst : 1;
3096 u64 comp : 1;
3097 u64 enable : 1;
3098 u64 clkrst : 1;
3099 u64 mode : 1;
3100 } cn61xx;
3101 struct cvmx_agl_prtx_ctl_cn61xx cn63xx;
3102 struct cvmx_agl_prtx_ctl_cn61xx cn63xxp1;
3103 struct cvmx_agl_prtx_ctl_cn61xx cn66xx;
3104 struct cvmx_agl_prtx_ctl_cn61xx cn68xx;
3105 struct cvmx_agl_prtx_ctl_cn61xx cn68xxp1;
3106 struct cvmx_agl_prtx_ctl_cn70xx {
3107 u64 drv_byp : 1;
3108 u64 reserved_61_62 : 2;
3109 u64 cmp_pctl : 5;
3110 u64 reserved_53_55 : 3;
3111 u64 cmp_nctl : 5;
3112 u64 reserved_45_47 : 3;
3113 u64 drv_pctl : 5;
3114 u64 reserved_37_39 : 3;
3115 u64 drv_nctl : 5;
3116 u64 reserved_31_31 : 1;
3117 u64 clk_set : 7;
3118 u64 clkrx_byp : 1;
3119 u64 clkrx_set : 7;
3120 u64 clktx_byp : 1;
3121 u64 clktx_set : 7;
3122 u64 refclk_sel : 2;
3123 u64 reserved_5_5 : 1;
3124 u64 dllrst : 1;
3125 u64 comp : 1;
3126 u64 enable : 1;
3127 u64 clkrst : 1;
3128 u64 mode : 1;
3129 } cn70xx;
3130 struct cvmx_agl_prtx_ctl_cn70xx cn70xxp1;
3131};
3132
3133typedef union cvmx_agl_prtx_ctl cvmx_agl_prtx_ctl_t;
3134
3135#endif