1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35#include <asm/octeon/octeon.h>
36
37#include <asm/octeon/cvmx-gmxx-defs.h>
38#include <asm/octeon/cvmx-pcsx-defs.h>
39#include <asm/octeon/cvmx-pcsxx-defs.h>
40#include <asm/octeon/cvmx-spxx-defs.h>
41#include <asm/octeon/cvmx-stxx-defs.h>
42
43#ifndef PRINT_ERROR
44#define PRINT_ERROR(format, ...)
45#endif
46
47
48
49
50
51
52
53void __cvmx_interrupt_gmxx_rxx_int_en_enable(int index, int block)
54{
55 union cvmx_gmxx_rxx_int_en gmx_rx_int_en;
56 cvmx_write_csr(CVMX_GMXX_RXX_INT_REG(index, block),
57 cvmx_read_csr(CVMX_GMXX_RXX_INT_REG(index, block)));
58 gmx_rx_int_en.u64 = 0;
59 if (OCTEON_IS_MODEL(OCTEON_CN56XX)) {
60
61 gmx_rx_int_en.s.hg2cc = 1;
62 gmx_rx_int_en.s.hg2fld = 1;
63 gmx_rx_int_en.s.undat = 1;
64 gmx_rx_int_en.s.uneop = 1;
65 gmx_rx_int_en.s.unsop = 1;
66 gmx_rx_int_en.s.bad_term = 1;
67 gmx_rx_int_en.s.bad_seq = 1;
68 gmx_rx_int_en.s.rem_fault = 1;
69 gmx_rx_int_en.s.loc_fault = 1;
70 gmx_rx_int_en.s.pause_drp = 1;
71
72
73
74
75
76
77 gmx_rx_int_en.s.ovrerr = 1;
78
79 gmx_rx_int_en.s.skperr = 1;
80 gmx_rx_int_en.s.rcverr = 1;
81
82
83 gmx_rx_int_en.s.jabber = 1;
84
85 gmx_rx_int_en.s.carext = 1;
86
87 }
88 if (OCTEON_IS_MODEL(OCTEON_CN30XX)) {
89
90
91
92
93
94
95
96
97
98 gmx_rx_int_en.s.ovrerr = 1;
99 gmx_rx_int_en.s.niberr = 1;
100 gmx_rx_int_en.s.skperr = 1;
101 gmx_rx_int_en.s.rcverr = 1;
102
103 gmx_rx_int_en.s.alnerr = 1;
104
105 gmx_rx_int_en.s.jabber = 1;
106 gmx_rx_int_en.s.maxerr = 1;
107 gmx_rx_int_en.s.carext = 1;
108 gmx_rx_int_en.s.minerr = 1;
109 }
110 if (OCTEON_IS_MODEL(OCTEON_CN50XX)) {
111
112 gmx_rx_int_en.s.pause_drp = 1;
113
114
115
116
117
118
119
120
121 gmx_rx_int_en.s.ovrerr = 1;
122 gmx_rx_int_en.s.niberr = 1;
123 gmx_rx_int_en.s.skperr = 1;
124 gmx_rx_int_en.s.rcverr = 1;
125
126 gmx_rx_int_en.s.alnerr = 1;
127
128 gmx_rx_int_en.s.jabber = 1;
129
130 gmx_rx_int_en.s.carext = 1;
131
132 }
133 if (OCTEON_IS_MODEL(OCTEON_CN38XX)) {
134
135
136
137
138
139
140
141
142
143 gmx_rx_int_en.s.ovrerr = 1;
144 gmx_rx_int_en.s.niberr = 1;
145 gmx_rx_int_en.s.skperr = 1;
146 gmx_rx_int_en.s.rcverr = 1;
147
148 gmx_rx_int_en.s.alnerr = 1;
149
150 gmx_rx_int_en.s.jabber = 1;
151 gmx_rx_int_en.s.maxerr = 1;
152 gmx_rx_int_en.s.carext = 1;
153 gmx_rx_int_en.s.minerr = 1;
154 }
155 if (OCTEON_IS_MODEL(OCTEON_CN31XX)) {
156
157
158
159
160
161
162
163
164
165 gmx_rx_int_en.s.ovrerr = 1;
166 gmx_rx_int_en.s.niberr = 1;
167 gmx_rx_int_en.s.skperr = 1;
168 gmx_rx_int_en.s.rcverr = 1;
169
170 gmx_rx_int_en.s.alnerr = 1;
171
172 gmx_rx_int_en.s.jabber = 1;
173 gmx_rx_int_en.s.maxerr = 1;
174 gmx_rx_int_en.s.carext = 1;
175 gmx_rx_int_en.s.minerr = 1;
176 }
177 if (OCTEON_IS_MODEL(OCTEON_CN58XX)) {
178
179 gmx_rx_int_en.s.pause_drp = 1;
180
181
182
183
184
185
186
187
188 gmx_rx_int_en.s.ovrerr = 1;
189 gmx_rx_int_en.s.niberr = 1;
190 gmx_rx_int_en.s.skperr = 1;
191 gmx_rx_int_en.s.rcverr = 1;
192
193 gmx_rx_int_en.s.alnerr = 1;
194
195 gmx_rx_int_en.s.jabber = 1;
196 gmx_rx_int_en.s.maxerr = 1;
197 gmx_rx_int_en.s.carext = 1;
198 gmx_rx_int_en.s.minerr = 1;
199 }
200 if (OCTEON_IS_MODEL(OCTEON_CN52XX)) {
201
202 gmx_rx_int_en.s.hg2cc = 1;
203 gmx_rx_int_en.s.hg2fld = 1;
204 gmx_rx_int_en.s.undat = 1;
205 gmx_rx_int_en.s.uneop = 1;
206 gmx_rx_int_en.s.unsop = 1;
207 gmx_rx_int_en.s.bad_term = 1;
208 gmx_rx_int_en.s.bad_seq = 0;
209 gmx_rx_int_en.s.rem_fault = 1;
210 gmx_rx_int_en.s.loc_fault = 0;
211 gmx_rx_int_en.s.pause_drp = 1;
212
213
214
215
216
217
218 gmx_rx_int_en.s.ovrerr = 1;
219
220 gmx_rx_int_en.s.skperr = 1;
221 gmx_rx_int_en.s.rcverr = 1;
222
223
224 gmx_rx_int_en.s.jabber = 1;
225
226 gmx_rx_int_en.s.carext = 1;
227
228 }
229 cvmx_write_csr(CVMX_GMXX_RXX_INT_EN(index, block), gmx_rx_int_en.u64);
230}
231
232
233
234
235
236void __cvmx_interrupt_pcsx_intx_en_reg_enable(int index, int block)
237{
238 union cvmx_pcsx_intx_en_reg pcs_int_en_reg;
239 cvmx_write_csr(CVMX_PCSX_INTX_REG(index, block),
240 cvmx_read_csr(CVMX_PCSX_INTX_REG(index, block)));
241 pcs_int_en_reg.u64 = 0;
242 if (OCTEON_IS_MODEL(OCTEON_CN56XX)) {
243
244
245 pcs_int_en_reg.s.sync_bad_en = 1;
246 pcs_int_en_reg.s.an_bad_en = 1;
247 pcs_int_en_reg.s.rxlock_en = 1;
248 pcs_int_en_reg.s.rxbad_en = 1;
249
250 pcs_int_en_reg.s.txbad_en = 1;
251 pcs_int_en_reg.s.txfifo_en = 1;
252 pcs_int_en_reg.s.txfifu_en = 1;
253 pcs_int_en_reg.s.an_err_en = 1;
254
255
256 }
257 if (OCTEON_IS_MODEL(OCTEON_CN52XX)) {
258
259
260 pcs_int_en_reg.s.sync_bad_en = 1;
261 pcs_int_en_reg.s.an_bad_en = 1;
262 pcs_int_en_reg.s.rxlock_en = 1;
263 pcs_int_en_reg.s.rxbad_en = 1;
264
265 pcs_int_en_reg.s.txbad_en = 1;
266 pcs_int_en_reg.s.txfifo_en = 1;
267 pcs_int_en_reg.s.txfifu_en = 1;
268 pcs_int_en_reg.s.an_err_en = 1;
269
270
271 }
272 cvmx_write_csr(CVMX_PCSX_INTX_EN_REG(index, block), pcs_int_en_reg.u64);
273}
274
275
276
277
278void __cvmx_interrupt_pcsxx_int_en_reg_enable(int index)
279{
280 union cvmx_pcsxx_int_en_reg pcsx_int_en_reg;
281 cvmx_write_csr(CVMX_PCSXX_INT_REG(index),
282 cvmx_read_csr(CVMX_PCSXX_INT_REG(index)));
283 pcsx_int_en_reg.u64 = 0;
284 if (OCTEON_IS_MODEL(OCTEON_CN56XX)) {
285
286 pcsx_int_en_reg.s.algnlos_en = 1;
287 pcsx_int_en_reg.s.synlos_en = 1;
288 pcsx_int_en_reg.s.bitlckls_en = 1;
289 pcsx_int_en_reg.s.rxsynbad_en = 1;
290 pcsx_int_en_reg.s.rxbad_en = 1;
291 pcsx_int_en_reg.s.txflt_en = 1;
292 }
293 if (OCTEON_IS_MODEL(OCTEON_CN52XX)) {
294
295 pcsx_int_en_reg.s.algnlos_en = 1;
296 pcsx_int_en_reg.s.synlos_en = 1;
297 pcsx_int_en_reg.s.bitlckls_en = 0;
298 pcsx_int_en_reg.s.rxsynbad_en = 1;
299 pcsx_int_en_reg.s.rxbad_en = 1;
300 pcsx_int_en_reg.s.txflt_en = 1;
301 }
302 cvmx_write_csr(CVMX_PCSXX_INT_EN_REG(index), pcsx_int_en_reg.u64);
303}
304
305
306
307
308
309void __cvmx_interrupt_spxx_int_msk_enable(int index)
310{
311 union cvmx_spxx_int_msk spx_int_msk;
312 cvmx_write_csr(CVMX_SPXX_INT_REG(index),
313 cvmx_read_csr(CVMX_SPXX_INT_REG(index)));
314 spx_int_msk.u64 = 0;
315 if (OCTEON_IS_MODEL(OCTEON_CN38XX)) {
316
317 spx_int_msk.s.calerr = 1;
318 spx_int_msk.s.syncerr = 1;
319 spx_int_msk.s.diperr = 1;
320 spx_int_msk.s.tpaovr = 1;
321 spx_int_msk.s.rsverr = 1;
322 spx_int_msk.s.drwnng = 1;
323 spx_int_msk.s.clserr = 1;
324 spx_int_msk.s.spiovr = 1;
325
326 spx_int_msk.s.abnorm = 1;
327 spx_int_msk.s.prtnxa = 1;
328 }
329 if (OCTEON_IS_MODEL(OCTEON_CN58XX)) {
330
331 spx_int_msk.s.calerr = 1;
332 spx_int_msk.s.syncerr = 1;
333 spx_int_msk.s.diperr = 1;
334 spx_int_msk.s.tpaovr = 1;
335 spx_int_msk.s.rsverr = 1;
336 spx_int_msk.s.drwnng = 1;
337 spx_int_msk.s.clserr = 1;
338 spx_int_msk.s.spiovr = 1;
339
340 spx_int_msk.s.abnorm = 1;
341 spx_int_msk.s.prtnxa = 1;
342 }
343 cvmx_write_csr(CVMX_SPXX_INT_MSK(index), spx_int_msk.u64);
344}
345
346
347
348
349void __cvmx_interrupt_stxx_int_msk_enable(int index)
350{
351 union cvmx_stxx_int_msk stx_int_msk;
352 cvmx_write_csr(CVMX_STXX_INT_REG(index),
353 cvmx_read_csr(CVMX_STXX_INT_REG(index)));
354 stx_int_msk.u64 = 0;
355 if (OCTEON_IS_MODEL(OCTEON_CN38XX)) {
356
357 stx_int_msk.s.frmerr = 1;
358 stx_int_msk.s.unxfrm = 1;
359 stx_int_msk.s.nosync = 1;
360 stx_int_msk.s.diperr = 1;
361 stx_int_msk.s.datovr = 1;
362 stx_int_msk.s.ovrbst = 1;
363 stx_int_msk.s.calpar1 = 1;
364 stx_int_msk.s.calpar0 = 1;
365 }
366 if (OCTEON_IS_MODEL(OCTEON_CN58XX)) {
367
368 stx_int_msk.s.frmerr = 1;
369 stx_int_msk.s.unxfrm = 1;
370 stx_int_msk.s.nosync = 1;
371 stx_int_msk.s.diperr = 1;
372 stx_int_msk.s.datovr = 1;
373 stx_int_msk.s.ovrbst = 1;
374 stx_int_msk.s.calpar1 = 1;
375 stx_int_msk.s.calpar0 = 1;
376 }
377 cvmx_write_csr(CVMX_STXX_INT_MSK(index), stx_int_msk.u64);
378}
379