Merge tag 'for-5.15/io_uring-2021-09-04' of git://git.kernel.dk/linux-block
[linux-2.6-microblaze.git] / arch / mips / cavium-octeon / executive / cvmx-interrupt-decodes.c
1 /***********************license start***************
2  * Author: Cavium Networks
3  *
4  * Contact: support@caviumnetworks.com
5  * This file is part of the OCTEON SDK
6  *
7  * Copyright (c) 2003-2009 Cavium Networks
8  *
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.
12  *
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
17  * details.
18  *
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/.
23  *
24  * This file may also be available under a different license from Cavium.
25  * Contact Cavium Networks for more information
26  ***********************license end**************************************/
27
28 /*
29  *
30  * Automatically generated functions useful for enabling
31  * and decoding RSL_INT_BLOCKS interrupts.
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  * __cvmx_interrupt_gmxx_rxx_int_en_enable - enable all interrupt bits in cvmx_gmxx_rxx_int_en_t
50  * @index: interrupt register offset
51  * @block: interrupt register block_id
52  */
53 void __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                 /* Skipping gmx_rx_int_en.s.reserved_29_63 */
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                 /* Skipping gmx_rx_int_en.s.reserved_16_18 */
72                 /*gmx_rx_int_en.s.ifgerr = 1; */
73                 /*gmx_rx_int_en.s.coldet = 1; // Collision detect */
74                 /*gmx_rx_int_en.s.falerr = 1; // False carrier error or extend error after slottime */
75                 /*gmx_rx_int_en.s.rsverr = 1; // RGMII reserved opcodes */
76                 /*gmx_rx_int_en.s.pcterr = 1; // Bad Preamble / Protocol */
77                 gmx_rx_int_en.s.ovrerr = 1;
78                 /* Skipping gmx_rx_int_en.s.reserved_9_9 */
79                 gmx_rx_int_en.s.skperr = 1;
80                 gmx_rx_int_en.s.rcverr = 1;
81                 /* Skipping gmx_rx_int_en.s.reserved_5_6 */
82                 /*gmx_rx_int_en.s.fcserr = 1; // FCS errors are handled when we get work */
83                 gmx_rx_int_en.s.jabber = 1;
84                 /* Skipping gmx_rx_int_en.s.reserved_2_2 */
85                 gmx_rx_int_en.s.carext = 1;
86                 /* Skipping gmx_rx_int_en.s.reserved_0_0 */
87         }
88         if (OCTEON_IS_MODEL(OCTEON_CN30XX)) {
89                 /* Skipping gmx_rx_int_en.s.reserved_19_63 */
90                 /*gmx_rx_int_en.s.phy_dupx = 1; */
91                 /*gmx_rx_int_en.s.phy_spd = 1; */
92                 /*gmx_rx_int_en.s.phy_link = 1; */
93                 /*gmx_rx_int_en.s.ifgerr = 1; */
94                 /*gmx_rx_int_en.s.coldet = 1; // Collision detect */
95                 /*gmx_rx_int_en.s.falerr = 1; // False carrier error or extend error after slottime */
96                 /*gmx_rx_int_en.s.rsverr = 1; // RGMII reserved opcodes */
97                 /*gmx_rx_int_en.s.pcterr = 1; // Bad Preamble / Protocol */
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                 /*gmx_rx_int_en.s.lenerr = 1; // Length errors are handled when we get work */
103                 gmx_rx_int_en.s.alnerr = 1;
104                 /*gmx_rx_int_en.s.fcserr = 1; // FCS errors are handled when we get work */
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                 /* Skipping gmx_rx_int_en.s.reserved_20_63 */
112                 gmx_rx_int_en.s.pause_drp = 1;
113                 /*gmx_rx_int_en.s.phy_dupx = 1; */
114                 /*gmx_rx_int_en.s.phy_spd = 1; */
115                 /*gmx_rx_int_en.s.phy_link = 1; */
116                 /*gmx_rx_int_en.s.ifgerr = 1; */
117                 /*gmx_rx_int_en.s.coldet = 1; // Collision detect */
118                 /*gmx_rx_int_en.s.falerr = 1; // False carrier error or extend error after slottime */
119                 /*gmx_rx_int_en.s.rsverr = 1; // RGMII reserved opcodes */
120                 /*gmx_rx_int_en.s.pcterr = 1; // Bad Preamble / Protocol */
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                 /* Skipping gmx_rx_int_en.s.reserved_6_6 */
126                 gmx_rx_int_en.s.alnerr = 1;
127                 /*gmx_rx_int_en.s.fcserr = 1; // FCS errors are handled when we get work */
128                 gmx_rx_int_en.s.jabber = 1;
129                 /* Skipping gmx_rx_int_en.s.reserved_2_2 */
130                 gmx_rx_int_en.s.carext = 1;
131                 /* Skipping gmx_rx_int_en.s.reserved_0_0 */
132         }
133         if (OCTEON_IS_MODEL(OCTEON_CN38XX)) {
134                 /* Skipping gmx_rx_int_en.s.reserved_19_63 */
135                 /*gmx_rx_int_en.s.phy_dupx = 1; */
136                 /*gmx_rx_int_en.s.phy_spd = 1; */
137                 /*gmx_rx_int_en.s.phy_link = 1; */
138                 /*gmx_rx_int_en.s.ifgerr = 1; */
139                 /*gmx_rx_int_en.s.coldet = 1; // Collision detect */
140                 /*gmx_rx_int_en.s.falerr = 1; // False carrier error or extend error after slottime */
141                 /*gmx_rx_int_en.s.rsverr = 1; // RGMII reserved opcodes */
142                 /*gmx_rx_int_en.s.pcterr = 1; // Bad Preamble / Protocol */
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                 /*gmx_rx_int_en.s.lenerr = 1; // Length errors are handled when we get work */
148                 gmx_rx_int_en.s.alnerr = 1;
149                 /*gmx_rx_int_en.s.fcserr = 1; // FCS errors are handled when we get work */
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                 /* Skipping gmx_rx_int_en.s.reserved_19_63 */
157                 /*gmx_rx_int_en.s.phy_dupx = 1; */
158                 /*gmx_rx_int_en.s.phy_spd = 1; */
159                 /*gmx_rx_int_en.s.phy_link = 1; */
160                 /*gmx_rx_int_en.s.ifgerr = 1; */
161                 /*gmx_rx_int_en.s.coldet = 1; // Collision detect */
162                 /*gmx_rx_int_en.s.falerr = 1; // False carrier error or extend error after slottime */
163                 /*gmx_rx_int_en.s.rsverr = 1; // RGMII reserved opcodes */
164                 /*gmx_rx_int_en.s.pcterr = 1; // Bad Preamble / Protocol */
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                 /*gmx_rx_int_en.s.lenerr = 1; // Length errors are handled when we get work */
170                 gmx_rx_int_en.s.alnerr = 1;
171                 /*gmx_rx_int_en.s.fcserr = 1; // FCS errors are handled when we get work */
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                 /* Skipping gmx_rx_int_en.s.reserved_20_63 */
179                 gmx_rx_int_en.s.pause_drp = 1;
180                 /*gmx_rx_int_en.s.phy_dupx = 1; */
181                 /*gmx_rx_int_en.s.phy_spd = 1; */
182                 /*gmx_rx_int_en.s.phy_link = 1; */
183                 /*gmx_rx_int_en.s.ifgerr = 1; */
184                 /*gmx_rx_int_en.s.coldet = 1; // Collision detect */
185                 /*gmx_rx_int_en.s.falerr = 1; // False carrier error or extend error after slottime */
186                 /*gmx_rx_int_en.s.rsverr = 1; // RGMII reserved opcodes */
187                 /*gmx_rx_int_en.s.pcterr = 1; // Bad Preamble / Protocol */
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                 /*gmx_rx_int_en.s.lenerr = 1; // Length errors are handled when we get work */
193                 gmx_rx_int_en.s.alnerr = 1;
194                 /*gmx_rx_int_en.s.fcserr = 1; // FCS errors are handled when we get work */
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                 /* Skipping gmx_rx_int_en.s.reserved_29_63 */
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                 /* Skipping gmx_rx_int_en.s.reserved_16_18 */
213                 /*gmx_rx_int_en.s.ifgerr = 1; */
214                 /*gmx_rx_int_en.s.coldet = 1; // Collision detect */
215                 /*gmx_rx_int_en.s.falerr = 1; // False carrier error or extend error after slottime */
216                 /*gmx_rx_int_en.s.rsverr = 1; // RGMII reserved opcodes */
217                 /*gmx_rx_int_en.s.pcterr = 1; // Bad Preamble / Protocol */
218                 gmx_rx_int_en.s.ovrerr = 1;
219                 /* Skipping gmx_rx_int_en.s.reserved_9_9 */
220                 gmx_rx_int_en.s.skperr = 1;
221                 gmx_rx_int_en.s.rcverr = 1;
222                 /* Skipping gmx_rx_int_en.s.reserved_5_6 */
223                 /*gmx_rx_int_en.s.fcserr = 1; // FCS errors are handled when we get work */
224                 gmx_rx_int_en.s.jabber = 1;
225                 /* Skipping gmx_rx_int_en.s.reserved_2_2 */
226                 gmx_rx_int_en.s.carext = 1;
227                 /* Skipping gmx_rx_int_en.s.reserved_0_0 */
228         }
229         cvmx_write_csr(CVMX_GMXX_RXX_INT_EN(index, block), gmx_rx_int_en.u64);
230 }
231 /**
232  * __cvmx_interrupt_pcsx_intx_en_reg_enable - enable all interrupt bits in cvmx_pcsx_intx_en_reg_t
233  * @index: interrupt register offset
234  * @block: interrupt register block_id
235  */
236 void __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                 /* Skipping pcs_int_en_reg.s.reserved_12_63 */
244                 /*pcs_int_en_reg.s.dup = 1; // This happens during normal operation */
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                 /*pcs_int_en_reg.s.rxerr_en = 1; // This happens during normal operation */
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                 /*pcs_int_en_reg.s.xmit_en = 1; // This happens during normal operation */
255                 /*pcs_int_en_reg.s.lnkspd_en = 1; // This happens during normal operation */
256         }
257         if (OCTEON_IS_MODEL(OCTEON_CN52XX)) {
258                 /* Skipping pcs_int_en_reg.s.reserved_12_63 */
259                 /*pcs_int_en_reg.s.dup = 1; // This happens during normal operation */
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                 /*pcs_int_en_reg.s.rxerr_en = 1; // This happens during normal operation */
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                 /*pcs_int_en_reg.s.xmit_en = 1; // This happens during normal operation */
270                 /*pcs_int_en_reg.s.lnkspd_en = 1; // This happens during normal operation */
271         }
272         cvmx_write_csr(CVMX_PCSX_INTX_EN_REG(index, block), pcs_int_en_reg.u64);
273 }
274 /**
275  * __cvmx_interrupt_pcsxx_int_en_reg_enable - enable all interrupt bits in cvmx_pcsxx_int_en_reg_t
276  * @index: interrupt register block_id
277  */
278 void __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                 /* Skipping pcsx_int_en_reg.s.reserved_6_63 */
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                 /* Skipping pcsx_int_en_reg.s.reserved_6_63 */
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;      /* Happens if XAUI module is not installed */
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  * __cvmx_interrupt_spxx_int_msk_enable - enable all interrupt bits in cvmx_spxx_int_msk_t
307  * @index: interrupt register block_id
308  */
309 void __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                 /* Skipping spx_int_msk.s.reserved_12_63 */
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                 /* Skipping spx_int_msk.s.reserved_2_3 */
326                 spx_int_msk.s.abnorm = 1;
327                 spx_int_msk.s.prtnxa = 1;
328         }
329         if (OCTEON_IS_MODEL(OCTEON_CN58XX)) {
330                 /* Skipping spx_int_msk.s.reserved_12_63 */
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                 /* Skipping spx_int_msk.s.reserved_2_3 */
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  * __cvmx_interrupt_stxx_int_msk_enable - enable all interrupt bits in cvmx_stxx_int_msk_t
347  * @index: interrupt register block_id
348  */
349 void __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                 /* Skipping stx_int_msk.s.reserved_8_63 */
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                 /* Skipping stx_int_msk.s.reserved_8_63 */
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 }