0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035 #include <asm/octeon/octeon.h>
0036
0037 #include <asm/octeon/cvmx-gmxx-defs.h>
0038 #include <asm/octeon/cvmx-pcsx-defs.h>
0039 #include <asm/octeon/cvmx-pcsxx-defs.h>
0040 #include <asm/octeon/cvmx-spxx-defs.h>
0041 #include <asm/octeon/cvmx-stxx-defs.h>
0042
0043 #ifndef PRINT_ERROR
0044 #define PRINT_ERROR(format, ...)
0045 #endif
0046
0047
0048
0049
0050
0051
0052
0053 void __cvmx_interrupt_gmxx_rxx_int_en_enable(int index, int block)
0054 {
0055 union cvmx_gmxx_rxx_int_en gmx_rx_int_en;
0056 cvmx_write_csr(CVMX_GMXX_RXX_INT_REG(index, block),
0057 cvmx_read_csr(CVMX_GMXX_RXX_INT_REG(index, block)));
0058 gmx_rx_int_en.u64 = 0;
0059 if (OCTEON_IS_MODEL(OCTEON_CN56XX)) {
0060
0061 gmx_rx_int_en.s.hg2cc = 1;
0062 gmx_rx_int_en.s.hg2fld = 1;
0063 gmx_rx_int_en.s.undat = 1;
0064 gmx_rx_int_en.s.uneop = 1;
0065 gmx_rx_int_en.s.unsop = 1;
0066 gmx_rx_int_en.s.bad_term = 1;
0067 gmx_rx_int_en.s.bad_seq = 1;
0068 gmx_rx_int_en.s.rem_fault = 1;
0069 gmx_rx_int_en.s.loc_fault = 1;
0070 gmx_rx_int_en.s.pause_drp = 1;
0071
0072
0073
0074
0075
0076
0077 gmx_rx_int_en.s.ovrerr = 1;
0078
0079 gmx_rx_int_en.s.skperr = 1;
0080 gmx_rx_int_en.s.rcverr = 1;
0081
0082
0083 gmx_rx_int_en.s.jabber = 1;
0084
0085 gmx_rx_int_en.s.carext = 1;
0086
0087 }
0088 if (OCTEON_IS_MODEL(OCTEON_CN30XX)) {
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098 gmx_rx_int_en.s.ovrerr = 1;
0099 gmx_rx_int_en.s.niberr = 1;
0100 gmx_rx_int_en.s.skperr = 1;
0101 gmx_rx_int_en.s.rcverr = 1;
0102
0103 gmx_rx_int_en.s.alnerr = 1;
0104
0105 gmx_rx_int_en.s.jabber = 1;
0106 gmx_rx_int_en.s.maxerr = 1;
0107 gmx_rx_int_en.s.carext = 1;
0108 gmx_rx_int_en.s.minerr = 1;
0109 }
0110 if (OCTEON_IS_MODEL(OCTEON_CN50XX)) {
0111
0112 gmx_rx_int_en.s.pause_drp = 1;
0113
0114
0115
0116
0117
0118
0119
0120
0121 gmx_rx_int_en.s.ovrerr = 1;
0122 gmx_rx_int_en.s.niberr = 1;
0123 gmx_rx_int_en.s.skperr = 1;
0124 gmx_rx_int_en.s.rcverr = 1;
0125
0126 gmx_rx_int_en.s.alnerr = 1;
0127
0128 gmx_rx_int_en.s.jabber = 1;
0129
0130 gmx_rx_int_en.s.carext = 1;
0131
0132 }
0133 if (OCTEON_IS_MODEL(OCTEON_CN38XX)) {
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143 gmx_rx_int_en.s.ovrerr = 1;
0144 gmx_rx_int_en.s.niberr = 1;
0145 gmx_rx_int_en.s.skperr = 1;
0146 gmx_rx_int_en.s.rcverr = 1;
0147
0148 gmx_rx_int_en.s.alnerr = 1;
0149
0150 gmx_rx_int_en.s.jabber = 1;
0151 gmx_rx_int_en.s.maxerr = 1;
0152 gmx_rx_int_en.s.carext = 1;
0153 gmx_rx_int_en.s.minerr = 1;
0154 }
0155 if (OCTEON_IS_MODEL(OCTEON_CN31XX)) {
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165 gmx_rx_int_en.s.ovrerr = 1;
0166 gmx_rx_int_en.s.niberr = 1;
0167 gmx_rx_int_en.s.skperr = 1;
0168 gmx_rx_int_en.s.rcverr = 1;
0169
0170 gmx_rx_int_en.s.alnerr = 1;
0171
0172 gmx_rx_int_en.s.jabber = 1;
0173 gmx_rx_int_en.s.maxerr = 1;
0174 gmx_rx_int_en.s.carext = 1;
0175 gmx_rx_int_en.s.minerr = 1;
0176 }
0177 if (OCTEON_IS_MODEL(OCTEON_CN58XX)) {
0178
0179 gmx_rx_int_en.s.pause_drp = 1;
0180
0181
0182
0183
0184
0185
0186
0187
0188 gmx_rx_int_en.s.ovrerr = 1;
0189 gmx_rx_int_en.s.niberr = 1;
0190 gmx_rx_int_en.s.skperr = 1;
0191 gmx_rx_int_en.s.rcverr = 1;
0192
0193 gmx_rx_int_en.s.alnerr = 1;
0194
0195 gmx_rx_int_en.s.jabber = 1;
0196 gmx_rx_int_en.s.maxerr = 1;
0197 gmx_rx_int_en.s.carext = 1;
0198 gmx_rx_int_en.s.minerr = 1;
0199 }
0200 if (OCTEON_IS_MODEL(OCTEON_CN52XX)) {
0201
0202 gmx_rx_int_en.s.hg2cc = 1;
0203 gmx_rx_int_en.s.hg2fld = 1;
0204 gmx_rx_int_en.s.undat = 1;
0205 gmx_rx_int_en.s.uneop = 1;
0206 gmx_rx_int_en.s.unsop = 1;
0207 gmx_rx_int_en.s.bad_term = 1;
0208 gmx_rx_int_en.s.bad_seq = 0;
0209 gmx_rx_int_en.s.rem_fault = 1;
0210 gmx_rx_int_en.s.loc_fault = 0;
0211 gmx_rx_int_en.s.pause_drp = 1;
0212
0213
0214
0215
0216
0217
0218 gmx_rx_int_en.s.ovrerr = 1;
0219
0220 gmx_rx_int_en.s.skperr = 1;
0221 gmx_rx_int_en.s.rcverr = 1;
0222
0223
0224 gmx_rx_int_en.s.jabber = 1;
0225
0226 gmx_rx_int_en.s.carext = 1;
0227
0228 }
0229 cvmx_write_csr(CVMX_GMXX_RXX_INT_EN(index, block), gmx_rx_int_en.u64);
0230 }
0231
0232
0233
0234
0235
0236 void __cvmx_interrupt_pcsx_intx_en_reg_enable(int index, int block)
0237 {
0238 union cvmx_pcsx_intx_en_reg pcs_int_en_reg;
0239 cvmx_write_csr(CVMX_PCSX_INTX_REG(index, block),
0240 cvmx_read_csr(CVMX_PCSX_INTX_REG(index, block)));
0241 pcs_int_en_reg.u64 = 0;
0242 if (OCTEON_IS_MODEL(OCTEON_CN56XX)) {
0243
0244
0245 pcs_int_en_reg.s.sync_bad_en = 1;
0246 pcs_int_en_reg.s.an_bad_en = 1;
0247 pcs_int_en_reg.s.rxlock_en = 1;
0248 pcs_int_en_reg.s.rxbad_en = 1;
0249
0250 pcs_int_en_reg.s.txbad_en = 1;
0251 pcs_int_en_reg.s.txfifo_en = 1;
0252 pcs_int_en_reg.s.txfifu_en = 1;
0253 pcs_int_en_reg.s.an_err_en = 1;
0254
0255
0256 }
0257 if (OCTEON_IS_MODEL(OCTEON_CN52XX)) {
0258
0259
0260 pcs_int_en_reg.s.sync_bad_en = 1;
0261 pcs_int_en_reg.s.an_bad_en = 1;
0262 pcs_int_en_reg.s.rxlock_en = 1;
0263 pcs_int_en_reg.s.rxbad_en = 1;
0264
0265 pcs_int_en_reg.s.txbad_en = 1;
0266 pcs_int_en_reg.s.txfifo_en = 1;
0267 pcs_int_en_reg.s.txfifu_en = 1;
0268 pcs_int_en_reg.s.an_err_en = 1;
0269
0270
0271 }
0272 cvmx_write_csr(CVMX_PCSX_INTX_EN_REG(index, block), pcs_int_en_reg.u64);
0273 }
0274
0275
0276
0277
0278 void __cvmx_interrupt_pcsxx_int_en_reg_enable(int index)
0279 {
0280 union cvmx_pcsxx_int_en_reg pcsx_int_en_reg;
0281 cvmx_write_csr(CVMX_PCSXX_INT_REG(index),
0282 cvmx_read_csr(CVMX_PCSXX_INT_REG(index)));
0283 pcsx_int_en_reg.u64 = 0;
0284 if (OCTEON_IS_MODEL(OCTEON_CN56XX)) {
0285
0286 pcsx_int_en_reg.s.algnlos_en = 1;
0287 pcsx_int_en_reg.s.synlos_en = 1;
0288 pcsx_int_en_reg.s.bitlckls_en = 1;
0289 pcsx_int_en_reg.s.rxsynbad_en = 1;
0290 pcsx_int_en_reg.s.rxbad_en = 1;
0291 pcsx_int_en_reg.s.txflt_en = 1;
0292 }
0293 if (OCTEON_IS_MODEL(OCTEON_CN52XX)) {
0294
0295 pcsx_int_en_reg.s.algnlos_en = 1;
0296 pcsx_int_en_reg.s.synlos_en = 1;
0297 pcsx_int_en_reg.s.bitlckls_en = 0;
0298 pcsx_int_en_reg.s.rxsynbad_en = 1;
0299 pcsx_int_en_reg.s.rxbad_en = 1;
0300 pcsx_int_en_reg.s.txflt_en = 1;
0301 }
0302 cvmx_write_csr(CVMX_PCSXX_INT_EN_REG(index), pcsx_int_en_reg.u64);
0303 }
0304
0305
0306
0307
0308
0309 void __cvmx_interrupt_spxx_int_msk_enable(int index)
0310 {
0311 union cvmx_spxx_int_msk spx_int_msk;
0312 cvmx_write_csr(CVMX_SPXX_INT_REG(index),
0313 cvmx_read_csr(CVMX_SPXX_INT_REG(index)));
0314 spx_int_msk.u64 = 0;
0315 if (OCTEON_IS_MODEL(OCTEON_CN38XX)) {
0316
0317 spx_int_msk.s.calerr = 1;
0318 spx_int_msk.s.syncerr = 1;
0319 spx_int_msk.s.diperr = 1;
0320 spx_int_msk.s.tpaovr = 1;
0321 spx_int_msk.s.rsverr = 1;
0322 spx_int_msk.s.drwnng = 1;
0323 spx_int_msk.s.clserr = 1;
0324 spx_int_msk.s.spiovr = 1;
0325
0326 spx_int_msk.s.abnorm = 1;
0327 spx_int_msk.s.prtnxa = 1;
0328 }
0329 if (OCTEON_IS_MODEL(OCTEON_CN58XX)) {
0330
0331 spx_int_msk.s.calerr = 1;
0332 spx_int_msk.s.syncerr = 1;
0333 spx_int_msk.s.diperr = 1;
0334 spx_int_msk.s.tpaovr = 1;
0335 spx_int_msk.s.rsverr = 1;
0336 spx_int_msk.s.drwnng = 1;
0337 spx_int_msk.s.clserr = 1;
0338 spx_int_msk.s.spiovr = 1;
0339
0340 spx_int_msk.s.abnorm = 1;
0341 spx_int_msk.s.prtnxa = 1;
0342 }
0343 cvmx_write_csr(CVMX_SPXX_INT_MSK(index), spx_int_msk.u64);
0344 }
0345
0346
0347
0348
0349 void __cvmx_interrupt_stxx_int_msk_enable(int index)
0350 {
0351 union cvmx_stxx_int_msk stx_int_msk;
0352 cvmx_write_csr(CVMX_STXX_INT_REG(index),
0353 cvmx_read_csr(CVMX_STXX_INT_REG(index)));
0354 stx_int_msk.u64 = 0;
0355 if (OCTEON_IS_MODEL(OCTEON_CN38XX)) {
0356
0357 stx_int_msk.s.frmerr = 1;
0358 stx_int_msk.s.unxfrm = 1;
0359 stx_int_msk.s.nosync = 1;
0360 stx_int_msk.s.diperr = 1;
0361 stx_int_msk.s.datovr = 1;
0362 stx_int_msk.s.ovrbst = 1;
0363 stx_int_msk.s.calpar1 = 1;
0364 stx_int_msk.s.calpar0 = 1;
0365 }
0366 if (OCTEON_IS_MODEL(OCTEON_CN58XX)) {
0367
0368 stx_int_msk.s.frmerr = 1;
0369 stx_int_msk.s.unxfrm = 1;
0370 stx_int_msk.s.nosync = 1;
0371 stx_int_msk.s.diperr = 1;
0372 stx_int_msk.s.datovr = 1;
0373 stx_int_msk.s.ovrbst = 1;
0374 stx_int_msk.s.calpar1 = 1;
0375 stx_int_msk.s.calpar0 = 1;
0376 }
0377 cvmx_write_csr(CVMX_STXX_INT_MSK(index), stx_int_msk.u64);
0378 }