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 enables all interrupt bits in cvmx_gmxx_rxx_int_en_t 50 */ 51 void __cvmx_interrupt_gmxx_rxx_int_en_enable(int index, int block) 52 { 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; // Collision 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 */ 85 } 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; // Collision 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; 107 } 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; // Collision 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 */ 130 } 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; // Collision 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; 152 } 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; // Collision 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; 174 } 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; // Collision 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; 197 } 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; // Collision 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 */ 226 } 227 cvmx_write_csr(CVMX_GMXX_RXX_INT_EN(index, block), gmx_rx_int_en.u64); 228 } 229 /** 230 * __cvmx_interrupt_pcsx_intx_en_reg_enable enables all interrupt bits in cvmx_pcsx_intx_en_reg_t 231 */ 232 void __cvmx_interrupt_pcsx_intx_en_reg_enable(int index, int block) 233 { 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 */ 252 } 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 */ 267 } 268 cvmx_write_csr(CVMX_PCSX_INTX_EN_REG(index, block), pcs_int_en_reg.u64); 269 } 270 /** 271 * __cvmx_interrupt_pcsxx_int_en_reg_enable enables all interrupt bits in cvmx_pcsxx_int_en_reg_t 272 */ 273 void __cvmx_interrupt_pcsxx_int_en_reg_enable(int index) 274 { 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; 287 } 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; 296 } 297 cvmx_write_csr(CVMX_PCSXX_INT_EN_REG(index), pcsx_int_en_reg.u64); 298 } 299 300 /** 301 * __cvmx_interrupt_spxx_int_msk_enable enables all interrupt bits in cvmx_spxx_int_msk_t 302 */ 303 void __cvmx_interrupt_spxx_int_msk_enable(int index) 304 { 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))); 308 spx_int_msk.u64 = 0; 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; 322 } 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; 336 } 337 cvmx_write_csr(CVMX_SPXX_INT_MSK(index), spx_int_msk.u64); 338 } 339 /** 340 * __cvmx_interrupt_stxx_int_msk_enable enables all interrupt bits in cvmx_stxx_int_msk_t 341 */ 342 void __cvmx_interrupt_stxx_int_msk_enable(int index) 343 { 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))); 347 stx_int_msk.u64 = 0; 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; 358 } 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; 369 } 370 cvmx_write_csr(CVMX_STXX_INT_MSK(index), stx_int_msk.u64); 371 } 372