1 /***********************license start***************
2 * Author: Cavium Networks
4 * Contact: support@caviumnetworks.com
5 * This file is part of the OCTEON SDK
7 * Copyright (c) 2003-2009 Cavium Networks
9 * This file is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License, Version 2, as
11 * published by the Free Software Foundation.
13 * This file is distributed in the hope that it will be useful, but
14 * AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
15 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
16 * NONINFRINGEMENT. See the GNU General Public License for more
19 * You should have received a copy of the GNU General Public License
20 * along with this file; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 * or visit http://www.gnu.org/licenses/.
24 * This file may also be available under a different license from Cavium.
25 * Contact Cavium Networks for more information
26 ***********************license end**************************************/
30 * Automatically generated functions useful for enabling
31 * and decoding RSL_INT_BLOCKS interrupts.
35 #include <asm/octeon/octeon.h>
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>
44 #define PRINT_ERROR(format, ...)
49 * __cvmx_interrupt_gmxx_rxx_int_en_enable enables all interrupt bits in cvmx_gmxx_rxx_int_en_t
51 void __cvmx_interrupt_gmxx_rxx_int_en_enable(int index
, int block
)
53 union cvmx_gmxx_rxx_int_en gmx_rx_int_en
;
54 cvmx_write_csr(CVMX_GMXX_RXX_INT_REG(index
, block
),
55 cvmx_read_csr(CVMX_GMXX_RXX_INT_REG(index
, block
)));
56 gmx_rx_int_en
.u64
= 0;
57 if (OCTEON_IS_MODEL(OCTEON_CN56XX
)) {
58 /* Skipping gmx_rx_int_en.s.reserved_29_63 */
59 gmx_rx_int_en
.s
.hg2cc
= 1;
60 gmx_rx_int_en
.s
.hg2fld
= 1;
61 gmx_rx_int_en
.s
.undat
= 1;
62 gmx_rx_int_en
.s
.uneop
= 1;
63 gmx_rx_int_en
.s
.unsop
= 1;
64 gmx_rx_int_en
.s
.bad_term
= 1;
65 gmx_rx_int_en
.s
.bad_seq
= 1;
66 gmx_rx_int_en
.s
.rem_fault
= 1;
67 gmx_rx_int_en
.s
.loc_fault
= 1;
68 gmx_rx_int_en
.s
.pause_drp
= 1;
69 /* Skipping gmx_rx_int_en.s.reserved_16_18 */
70 /*gmx_rx_int_en.s.ifgerr = 1; */
71 /*gmx_rx_int_en.s.coldet = 1; // Collsion detect */
72 /*gmx_rx_int_en.s.falerr = 1; // False carrier error or extend error after slottime */
73 /*gmx_rx_int_en.s.rsverr = 1; // RGMII reserved opcodes */
74 /*gmx_rx_int_en.s.pcterr = 1; // Bad Preamble / Protocol */
75 gmx_rx_int_en
.s
.ovrerr
= 1;
76 /* Skipping gmx_rx_int_en.s.reserved_9_9 */
77 gmx_rx_int_en
.s
.skperr
= 1;
78 gmx_rx_int_en
.s
.rcverr
= 1;
79 /* Skipping gmx_rx_int_en.s.reserved_5_6 */
80 /*gmx_rx_int_en.s.fcserr = 1; // FCS errors are handled when we get work */
81 gmx_rx_int_en
.s
.jabber
= 1;
82 /* Skipping gmx_rx_int_en.s.reserved_2_2 */
83 gmx_rx_int_en
.s
.carext
= 1;
84 /* Skipping gmx_rx_int_en.s.reserved_0_0 */
86 if (OCTEON_IS_MODEL(OCTEON_CN30XX
)) {
87 /* Skipping gmx_rx_int_en.s.reserved_19_63 */
88 /*gmx_rx_int_en.s.phy_dupx = 1; */
89 /*gmx_rx_int_en.s.phy_spd = 1; */
90 /*gmx_rx_int_en.s.phy_link = 1; */
91 /*gmx_rx_int_en.s.ifgerr = 1; */
92 /*gmx_rx_int_en.s.coldet = 1; // Collsion detect */
93 /*gmx_rx_int_en.s.falerr = 1; // False carrier error or extend error after slottime */
94 /*gmx_rx_int_en.s.rsverr = 1; // RGMII reserved opcodes */
95 /*gmx_rx_int_en.s.pcterr = 1; // Bad Preamble / Protocol */
96 gmx_rx_int_en
.s
.ovrerr
= 1;
97 gmx_rx_int_en
.s
.niberr
= 1;
98 gmx_rx_int_en
.s
.skperr
= 1;
99 gmx_rx_int_en
.s
.rcverr
= 1;
100 /*gmx_rx_int_en.s.lenerr = 1; // Length errors are handled when we get work */
101 gmx_rx_int_en
.s
.alnerr
= 1;
102 /*gmx_rx_int_en.s.fcserr = 1; // FCS errors are handled when we get work */
103 gmx_rx_int_en
.s
.jabber
= 1;
104 gmx_rx_int_en
.s
.maxerr
= 1;
105 gmx_rx_int_en
.s
.carext
= 1;
106 gmx_rx_int_en
.s
.minerr
= 1;
108 if (OCTEON_IS_MODEL(OCTEON_CN50XX
)) {
109 /* Skipping gmx_rx_int_en.s.reserved_20_63 */
110 gmx_rx_int_en
.s
.pause_drp
= 1;
111 /*gmx_rx_int_en.s.phy_dupx = 1; */
112 /*gmx_rx_int_en.s.phy_spd = 1; */
113 /*gmx_rx_int_en.s.phy_link = 1; */
114 /*gmx_rx_int_en.s.ifgerr = 1; */
115 /*gmx_rx_int_en.s.coldet = 1; // Collsion detect */
116 /*gmx_rx_int_en.s.falerr = 1; // False carrier error or extend error after slottime */
117 /*gmx_rx_int_en.s.rsverr = 1; // RGMII reserved opcodes */
118 /*gmx_rx_int_en.s.pcterr = 1; // Bad Preamble / Protocol */
119 gmx_rx_int_en
.s
.ovrerr
= 1;
120 gmx_rx_int_en
.s
.niberr
= 1;
121 gmx_rx_int_en
.s
.skperr
= 1;
122 gmx_rx_int_en
.s
.rcverr
= 1;
123 /* Skipping gmx_rx_int_en.s.reserved_6_6 */
124 gmx_rx_int_en
.s
.alnerr
= 1;
125 /*gmx_rx_int_en.s.fcserr = 1; // FCS errors are handled when we get work */
126 gmx_rx_int_en
.s
.jabber
= 1;
127 /* Skipping gmx_rx_int_en.s.reserved_2_2 */
128 gmx_rx_int_en
.s
.carext
= 1;
129 /* Skipping gmx_rx_int_en.s.reserved_0_0 */
131 if (OCTEON_IS_MODEL(OCTEON_CN38XX
)) {
132 /* Skipping gmx_rx_int_en.s.reserved_19_63 */
133 /*gmx_rx_int_en.s.phy_dupx = 1; */
134 /*gmx_rx_int_en.s.phy_spd = 1; */
135 /*gmx_rx_int_en.s.phy_link = 1; */
136 /*gmx_rx_int_en.s.ifgerr = 1; */
137 /*gmx_rx_int_en.s.coldet = 1; // Collsion detect */
138 /*gmx_rx_int_en.s.falerr = 1; // False carrier error or extend error after slottime */
139 /*gmx_rx_int_en.s.rsverr = 1; // RGMII reserved opcodes */
140 /*gmx_rx_int_en.s.pcterr = 1; // Bad Preamble / Protocol */
141 gmx_rx_int_en
.s
.ovrerr
= 1;
142 gmx_rx_int_en
.s
.niberr
= 1;
143 gmx_rx_int_en
.s
.skperr
= 1;
144 gmx_rx_int_en
.s
.rcverr
= 1;
145 /*gmx_rx_int_en.s.lenerr = 1; // Length errors are handled when we get work */
146 gmx_rx_int_en
.s
.alnerr
= 1;
147 /*gmx_rx_int_en.s.fcserr = 1; // FCS errors are handled when we get work */
148 gmx_rx_int_en
.s
.jabber
= 1;
149 gmx_rx_int_en
.s
.maxerr
= 1;
150 gmx_rx_int_en
.s
.carext
= 1;
151 gmx_rx_int_en
.s
.minerr
= 1;
153 if (OCTEON_IS_MODEL(OCTEON_CN31XX
)) {
154 /* Skipping gmx_rx_int_en.s.reserved_19_63 */
155 /*gmx_rx_int_en.s.phy_dupx = 1; */
156 /*gmx_rx_int_en.s.phy_spd = 1; */
157 /*gmx_rx_int_en.s.phy_link = 1; */
158 /*gmx_rx_int_en.s.ifgerr = 1; */
159 /*gmx_rx_int_en.s.coldet = 1; // Collsion detect */
160 /*gmx_rx_int_en.s.falerr = 1; // False carrier error or extend error after slottime */
161 /*gmx_rx_int_en.s.rsverr = 1; // RGMII reserved opcodes */
162 /*gmx_rx_int_en.s.pcterr = 1; // Bad Preamble / Protocol */
163 gmx_rx_int_en
.s
.ovrerr
= 1;
164 gmx_rx_int_en
.s
.niberr
= 1;
165 gmx_rx_int_en
.s
.skperr
= 1;
166 gmx_rx_int_en
.s
.rcverr
= 1;
167 /*gmx_rx_int_en.s.lenerr = 1; // Length errors are handled when we get work */
168 gmx_rx_int_en
.s
.alnerr
= 1;
169 /*gmx_rx_int_en.s.fcserr = 1; // FCS errors are handled when we get work */
170 gmx_rx_int_en
.s
.jabber
= 1;
171 gmx_rx_int_en
.s
.maxerr
= 1;
172 gmx_rx_int_en
.s
.carext
= 1;
173 gmx_rx_int_en
.s
.minerr
= 1;
175 if (OCTEON_IS_MODEL(OCTEON_CN58XX
)) {
176 /* Skipping gmx_rx_int_en.s.reserved_20_63 */
177 gmx_rx_int_en
.s
.pause_drp
= 1;
178 /*gmx_rx_int_en.s.phy_dupx = 1; */
179 /*gmx_rx_int_en.s.phy_spd = 1; */
180 /*gmx_rx_int_en.s.phy_link = 1; */
181 /*gmx_rx_int_en.s.ifgerr = 1; */
182 /*gmx_rx_int_en.s.coldet = 1; // Collsion detect */
183 /*gmx_rx_int_en.s.falerr = 1; // False carrier error or extend error after slottime */
184 /*gmx_rx_int_en.s.rsverr = 1; // RGMII reserved opcodes */
185 /*gmx_rx_int_en.s.pcterr = 1; // Bad Preamble / Protocol */
186 gmx_rx_int_en
.s
.ovrerr
= 1;
187 gmx_rx_int_en
.s
.niberr
= 1;
188 gmx_rx_int_en
.s
.skperr
= 1;
189 gmx_rx_int_en
.s
.rcverr
= 1;
190 /*gmx_rx_int_en.s.lenerr = 1; // Length errors are handled when we get work */
191 gmx_rx_int_en
.s
.alnerr
= 1;
192 /*gmx_rx_int_en.s.fcserr = 1; // FCS errors are handled when we get work */
193 gmx_rx_int_en
.s
.jabber
= 1;
194 gmx_rx_int_en
.s
.maxerr
= 1;
195 gmx_rx_int_en
.s
.carext
= 1;
196 gmx_rx_int_en
.s
.minerr
= 1;
198 if (OCTEON_IS_MODEL(OCTEON_CN52XX
)) {
199 /* Skipping gmx_rx_int_en.s.reserved_29_63 */
200 gmx_rx_int_en
.s
.hg2cc
= 1;
201 gmx_rx_int_en
.s
.hg2fld
= 1;
202 gmx_rx_int_en
.s
.undat
= 1;
203 gmx_rx_int_en
.s
.uneop
= 1;
204 gmx_rx_int_en
.s
.unsop
= 1;
205 gmx_rx_int_en
.s
.bad_term
= 1;
206 gmx_rx_int_en
.s
.bad_seq
= 0;
207 gmx_rx_int_en
.s
.rem_fault
= 1;
208 gmx_rx_int_en
.s
.loc_fault
= 0;
209 gmx_rx_int_en
.s
.pause_drp
= 1;
210 /* Skipping gmx_rx_int_en.s.reserved_16_18 */
211 /*gmx_rx_int_en.s.ifgerr = 1; */
212 /*gmx_rx_int_en.s.coldet = 1; // Collsion detect */
213 /*gmx_rx_int_en.s.falerr = 1; // False carrier error or extend error after slottime */
214 /*gmx_rx_int_en.s.rsverr = 1; // RGMII reserved opcodes */
215 /*gmx_rx_int_en.s.pcterr = 1; // Bad Preamble / Protocol */
216 gmx_rx_int_en
.s
.ovrerr
= 1;
217 /* Skipping gmx_rx_int_en.s.reserved_9_9 */
218 gmx_rx_int_en
.s
.skperr
= 1;
219 gmx_rx_int_en
.s
.rcverr
= 1;
220 /* Skipping gmx_rx_int_en.s.reserved_5_6 */
221 /*gmx_rx_int_en.s.fcserr = 1; // FCS errors are handled when we get work */
222 gmx_rx_int_en
.s
.jabber
= 1;
223 /* Skipping gmx_rx_int_en.s.reserved_2_2 */
224 gmx_rx_int_en
.s
.carext
= 1;
225 /* Skipping gmx_rx_int_en.s.reserved_0_0 */
227 cvmx_write_csr(CVMX_GMXX_RXX_INT_EN(index
, block
), gmx_rx_int_en
.u64
);
230 * __cvmx_interrupt_pcsx_intx_en_reg_enable enables all interrupt bits in cvmx_pcsx_intx_en_reg_t
232 void __cvmx_interrupt_pcsx_intx_en_reg_enable(int index
, int block
)
234 union cvmx_pcsx_intx_en_reg pcs_int_en_reg
;
235 cvmx_write_csr(CVMX_PCSX_INTX_REG(index
, block
),
236 cvmx_read_csr(CVMX_PCSX_INTX_REG(index
, block
)));
237 pcs_int_en_reg
.u64
= 0;
238 if (OCTEON_IS_MODEL(OCTEON_CN56XX
)) {
239 /* Skipping pcs_int_en_reg.s.reserved_12_63 */
240 /*pcs_int_en_reg.s.dup = 1; // This happens during normal operation */
241 pcs_int_en_reg
.s
.sync_bad_en
= 1;
242 pcs_int_en_reg
.s
.an_bad_en
= 1;
243 pcs_int_en_reg
.s
.rxlock_en
= 1;
244 pcs_int_en_reg
.s
.rxbad_en
= 1;
245 /*pcs_int_en_reg.s.rxerr_en = 1; // This happens during normal operation */
246 pcs_int_en_reg
.s
.txbad_en
= 1;
247 pcs_int_en_reg
.s
.txfifo_en
= 1;
248 pcs_int_en_reg
.s
.txfifu_en
= 1;
249 pcs_int_en_reg
.s
.an_err_en
= 1;
250 /*pcs_int_en_reg.s.xmit_en = 1; // This happens during normal operation */
251 /*pcs_int_en_reg.s.lnkspd_en = 1; // This happens during normal operation */
253 if (OCTEON_IS_MODEL(OCTEON_CN52XX
)) {
254 /* Skipping pcs_int_en_reg.s.reserved_12_63 */
255 /*pcs_int_en_reg.s.dup = 1; // This happens during normal operation */
256 pcs_int_en_reg
.s
.sync_bad_en
= 1;
257 pcs_int_en_reg
.s
.an_bad_en
= 1;
258 pcs_int_en_reg
.s
.rxlock_en
= 1;
259 pcs_int_en_reg
.s
.rxbad_en
= 1;
260 /*pcs_int_en_reg.s.rxerr_en = 1; // This happens during normal operation */
261 pcs_int_en_reg
.s
.txbad_en
= 1;
262 pcs_int_en_reg
.s
.txfifo_en
= 1;
263 pcs_int_en_reg
.s
.txfifu_en
= 1;
264 pcs_int_en_reg
.s
.an_err_en
= 1;
265 /*pcs_int_en_reg.s.xmit_en = 1; // This happens during normal operation */
266 /*pcs_int_en_reg.s.lnkspd_en = 1; // This happens during normal operation */
268 cvmx_write_csr(CVMX_PCSX_INTX_EN_REG(index
, block
), pcs_int_en_reg
.u64
);
271 * __cvmx_interrupt_pcsxx_int_en_reg_enable enables all interrupt bits in cvmx_pcsxx_int_en_reg_t
273 void __cvmx_interrupt_pcsxx_int_en_reg_enable(int index
)
275 union cvmx_pcsxx_int_en_reg pcsx_int_en_reg
;
276 cvmx_write_csr(CVMX_PCSXX_INT_REG(index
),
277 cvmx_read_csr(CVMX_PCSXX_INT_REG(index
)));
278 pcsx_int_en_reg
.u64
= 0;
279 if (OCTEON_IS_MODEL(OCTEON_CN56XX
)) {
280 /* Skipping pcsx_int_en_reg.s.reserved_6_63 */
281 pcsx_int_en_reg
.s
.algnlos_en
= 1;
282 pcsx_int_en_reg
.s
.synlos_en
= 1;
283 pcsx_int_en_reg
.s
.bitlckls_en
= 1;
284 pcsx_int_en_reg
.s
.rxsynbad_en
= 1;
285 pcsx_int_en_reg
.s
.rxbad_en
= 1;
286 pcsx_int_en_reg
.s
.txflt_en
= 1;
288 if (OCTEON_IS_MODEL(OCTEON_CN52XX
)) {
289 /* Skipping pcsx_int_en_reg.s.reserved_6_63 */
290 pcsx_int_en_reg
.s
.algnlos_en
= 1;
291 pcsx_int_en_reg
.s
.synlos_en
= 1;
292 pcsx_int_en_reg
.s
.bitlckls_en
= 0; /* Happens if XAUI module is not installed */
293 pcsx_int_en_reg
.s
.rxsynbad_en
= 1;
294 pcsx_int_en_reg
.s
.rxbad_en
= 1;
295 pcsx_int_en_reg
.s
.txflt_en
= 1;
297 cvmx_write_csr(CVMX_PCSXX_INT_EN_REG(index
), pcsx_int_en_reg
.u64
);
301 * __cvmx_interrupt_spxx_int_msk_enable enables all interrupt bits in cvmx_spxx_int_msk_t
303 void __cvmx_interrupt_spxx_int_msk_enable(int index
)
305 union cvmx_spxx_int_msk spx_int_msk
;
306 cvmx_write_csr(CVMX_SPXX_INT_REG(index
),
307 cvmx_read_csr(CVMX_SPXX_INT_REG(index
)));
309 if (OCTEON_IS_MODEL(OCTEON_CN38XX
)) {
310 /* Skipping spx_int_msk.s.reserved_12_63 */
311 spx_int_msk
.s
.calerr
= 1;
312 spx_int_msk
.s
.syncerr
= 1;
313 spx_int_msk
.s
.diperr
= 1;
314 spx_int_msk
.s
.tpaovr
= 1;
315 spx_int_msk
.s
.rsverr
= 1;
316 spx_int_msk
.s
.drwnng
= 1;
317 spx_int_msk
.s
.clserr
= 1;
318 spx_int_msk
.s
.spiovr
= 1;
319 /* Skipping spx_int_msk.s.reserved_2_3 */
320 spx_int_msk
.s
.abnorm
= 1;
321 spx_int_msk
.s
.prtnxa
= 1;
323 if (OCTEON_IS_MODEL(OCTEON_CN58XX
)) {
324 /* Skipping spx_int_msk.s.reserved_12_63 */
325 spx_int_msk
.s
.calerr
= 1;
326 spx_int_msk
.s
.syncerr
= 1;
327 spx_int_msk
.s
.diperr
= 1;
328 spx_int_msk
.s
.tpaovr
= 1;
329 spx_int_msk
.s
.rsverr
= 1;
330 spx_int_msk
.s
.drwnng
= 1;
331 spx_int_msk
.s
.clserr
= 1;
332 spx_int_msk
.s
.spiovr
= 1;
333 /* Skipping spx_int_msk.s.reserved_2_3 */
334 spx_int_msk
.s
.abnorm
= 1;
335 spx_int_msk
.s
.prtnxa
= 1;
337 cvmx_write_csr(CVMX_SPXX_INT_MSK(index
), spx_int_msk
.u64
);
340 * __cvmx_interrupt_stxx_int_msk_enable enables all interrupt bits in cvmx_stxx_int_msk_t
342 void __cvmx_interrupt_stxx_int_msk_enable(int index
)
344 union cvmx_stxx_int_msk stx_int_msk
;
345 cvmx_write_csr(CVMX_STXX_INT_REG(index
),
346 cvmx_read_csr(CVMX_STXX_INT_REG(index
)));
348 if (OCTEON_IS_MODEL(OCTEON_CN38XX
)) {
349 /* Skipping stx_int_msk.s.reserved_8_63 */
350 stx_int_msk
.s
.frmerr
= 1;
351 stx_int_msk
.s
.unxfrm
= 1;
352 stx_int_msk
.s
.nosync
= 1;
353 stx_int_msk
.s
.diperr
= 1;
354 stx_int_msk
.s
.datovr
= 1;
355 stx_int_msk
.s
.ovrbst
= 1;
356 stx_int_msk
.s
.calpar1
= 1;
357 stx_int_msk
.s
.calpar0
= 1;
359 if (OCTEON_IS_MODEL(OCTEON_CN58XX
)) {
360 /* Skipping stx_int_msk.s.reserved_8_63 */
361 stx_int_msk
.s
.frmerr
= 1;
362 stx_int_msk
.s
.unxfrm
= 1;
363 stx_int_msk
.s
.nosync
= 1;
364 stx_int_msk
.s
.diperr
= 1;
365 stx_int_msk
.s
.datovr
= 1;
366 stx_int_msk
.s
.ovrbst
= 1;
367 stx_int_msk
.s
.calpar1
= 1;
368 stx_int_msk
.s
.calpar0
= 1;
370 cvmx_write_csr(CVMX_STXX_INT_MSK(index
), stx_int_msk
.u64
);