1a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir/* bnx2x_init.h: Broadcom Everest network driver. 294a78b79cb5f14c09a42522738d6694c6a1cdd20Vladislav Zolotarov * Structures and macroes needed during the initialization. 3a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir * 485b26ea18ee63be83d65ec6db72ad7857980a04bAriel Elior * Copyright (c) 2007-2012 Broadcom Corporation 5a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir * 6a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir * This program is free software; you can redistribute it and/or modify 7a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir * it under the terms of the GNU General Public License as published by 8a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir * the Free Software Foundation. 9a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir * 1024e3fcefb9cc61acce59ed54c00c4e4c32537de7Eilon Greenstein * Maintained by: Eilon Greenstein <eilong@broadcom.com> 1124e3fcefb9cc61acce59ed54c00c4e4c32537de7Eilon Greenstein * Written by: Eliezer Tamir 1294a78b79cb5f14c09a42522738d6694c6a1cdd20Vladislav Zolotarov * Modified by: Vladislav Zolotarov <vladz@broadcom.com> 13a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir */ 14a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir 15a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir#ifndef BNX2X_INIT_H 16a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir#define BNX2X_INIT_H 17a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir 18a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir/* Init operation types and structures */ 19619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarovenum { 20619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov OP_RD = 0x1, /* read a single register */ 21619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov OP_WR, /* write a single register */ 22619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov OP_SW, /* copy a string to the device */ 23619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov OP_ZR, /* clear memory */ 24619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov OP_ZP, /* unzip then copy with DMAE */ 25619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov OP_WR_64, /* write 64 bit pattern */ 26619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov OP_WB, /* copy a string using DMAE */ 27619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov OP_WB_ZR, /* Clear a string using DMAE or indirect-wr */ 28619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov /* Skip the following ops if all of the init modes don't match */ 29619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov OP_IF_MODE_OR, 30619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov /* Skip the following ops if any of the init modes don't match */ 31619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov OP_IF_MODE_AND, 32619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov OP_MAX 33619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov}; 34573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein 35619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarovenum { 36619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov STAGE_START, 37619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov STAGE_END, 38619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov}; 3994a78b79cb5f14c09a42522738d6694c6a1cdd20Vladislav Zolotarov 4094a78b79cb5f14c09a42522738d6694c6a1cdd20Vladislav Zolotarov/* Returns the index of start or end of a specific block stage in ops array*/ 4194a78b79cb5f14c09a42522738d6694c6a1cdd20Vladislav Zolotarov#define BLOCK_OPS_IDX(block, stage, end) \ 42619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov (2*(((block)*NUM_OF_INIT_PHASES) + (stage)) + (end)) 43ad8d394804b355bc623decc50748cd01dbc0783bEilon Greenstein 44a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir 45619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov/* structs for the various opcodes */ 46a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamirstruct raw_op { 476378c0253175e400525ac0efac9dd29f4e573cbfEilon Greenstein u32 op:8; 486378c0253175e400525ac0efac9dd29f4e573cbfEilon Greenstein u32 offset:24; 49a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir u32 raw_data; 50a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir}; 51a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir 52a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamirstruct op_read { 536378c0253175e400525ac0efac9dd29f4e573cbfEilon Greenstein u32 op:8; 546378c0253175e400525ac0efac9dd29f4e573cbfEilon Greenstein u32 offset:24; 55619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov u32 val; 56a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir}; 57a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir 58a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamirstruct op_write { 596378c0253175e400525ac0efac9dd29f4e573cbfEilon Greenstein u32 op:8; 606378c0253175e400525ac0efac9dd29f4e573cbfEilon Greenstein u32 offset:24; 61a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir u32 val; 62a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir}; 63a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir 64619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarovstruct op_arr_write { 656378c0253175e400525ac0efac9dd29f4e573cbfEilon Greenstein u32 op:8; 666378c0253175e400525ac0efac9dd29f4e573cbfEilon Greenstein u32 offset:24; 67619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#ifdef __BIG_ENDIAN 68a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir u16 data_len; 69a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir u16 data_off; 70619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#else /* __LITTLE_ENDIAN */ 71619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov u16 data_off; 72619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov u16 data_len; 73a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir#endif 74a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir}; 75a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir 76a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamirstruct op_zero { 776378c0253175e400525ac0efac9dd29f4e573cbfEilon Greenstein u32 op:8; 786378c0253175e400525ac0efac9dd29f4e573cbfEilon Greenstein u32 offset:24; 79a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir u32 len; 80a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir}; 81a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir 82619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarovstruct op_if_mode { 83619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov u32 op:8; 84619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov u32 cmd_offset:24; 85619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov u32 mode_bit_map; 86619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov}; 87619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov 88619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov 89a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamirunion init_op { 90a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir struct op_read read; 91a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir struct op_write write; 92619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov struct op_arr_write arr_wr; 93a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir struct op_zero zero; 94a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir struct raw_op raw; 95619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov struct op_if_mode if_mode; 96619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov}; 97619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov 98619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov 99619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov/* Init Phases */ 100619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarovenum { 101619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov PHASE_COMMON, 102619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov PHASE_PORT0, 103619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov PHASE_PORT1, 104619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov PHASE_PF0, 105619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov PHASE_PF1, 106619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov PHASE_PF2, 107619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov PHASE_PF3, 108619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov PHASE_PF4, 109619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov PHASE_PF5, 110619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov PHASE_PF6, 111619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov PHASE_PF7, 112619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov NUM_OF_INIT_PHASES 113619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov}; 114619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov 115619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov/* Init Modes */ 116619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarovenum { 117619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov MODE_ASIC = 0x00000001, 118619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov MODE_FPGA = 0x00000002, 119619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov MODE_EMUL = 0x00000004, 120619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov MODE_E2 = 0x00000008, 121619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov MODE_E3 = 0x00000010, 122619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov MODE_PORT2 = 0x00000020, 123619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov MODE_PORT4 = 0x00000040, 124619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov MODE_SF = 0x00000080, 125619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov MODE_MF = 0x00000100, 126619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov MODE_MF_SD = 0x00000200, 127619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov MODE_MF_SI = 0x00000400, 128619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov MODE_MF_NIV = 0x00000800, 129619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov MODE_E3_A0 = 0x00001000, 130619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov MODE_E3_B0 = 0x00002000, 1316383c0b35b48bfbd0fc8c6fe126a6603c5a9a4b3Ariel Elior MODE_COS3 = 0x00004000, 1326383c0b35b48bfbd0fc8c6fe126a6603c5a9a4b3Ariel Elior MODE_COS6 = 0x00008000, 1336383c0b35b48bfbd0fc8c6fe126a6603c5a9a4b3Ariel Elior MODE_LITTLE_ENDIAN = 0x00010000, 1346383c0b35b48bfbd0fc8c6fe126a6603c5a9a4b3Ariel Elior MODE_BIG_ENDIAN = 0x00020000, 135619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov}; 136619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov 137619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov/* Init Blocks */ 138619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarovenum { 139619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_ATC, 140619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_BRB1, 141619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_CCM, 142619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_CDU, 143619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_CFC, 144619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_CSDM, 145619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_CSEM, 146619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_DBG, 147619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_DMAE, 148619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_DORQ, 149619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_HC, 150619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_IGU, 151619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_MISC, 152619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_NIG, 153619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_PBF, 154619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_PGLUE_B, 155619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_PRS, 156619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_PXP2, 157619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_PXP, 158619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_QM, 159619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_SRC, 160619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_TCM, 161619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_TM, 162619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_TSDM, 163619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_TSEM, 164619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_UCM, 165619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_UPB, 166619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_USDM, 167619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_USEM, 168619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_XCM, 169619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_XPB, 170619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_XSDM, 171619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_XSEM, 172619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BLOCK_MISC_AEU, 173619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov NUM_OF_INIT_BLOCKS 174a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir}; 175a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir 176619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov/* QM queue numbers */ 177619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define BNX2X_ETH_Q 0 178619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define BNX2X_TOE_Q 3 179619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define BNX2X_TOE_ACK_Q 6 180619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define BNX2X_ISCSI_Q 9 1816383c0b35b48bfbd0fc8c6fe126a6603c5a9a4b3Ariel Elior#define BNX2X_ISCSI_ACK_Q 11 182619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define BNX2X_FCOE_Q 10 183619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov 184619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov/* Vnics per mode */ 185619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define BNX2X_PORT2_MODE_NUM_VNICS 4 186619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define BNX2X_PORT4_MODE_NUM_VNICS 2 187619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov 188619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov/* COS offset for port1 in E3 B0 4port mode */ 189619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define BNX2X_E3B0_PORT1_COS_OFFSET 3 190619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov 191619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov/* QM Register addresses */ 192619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define BNX2X_Q_VOQ_REG_ADDR(pf_q_num)\ 193619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov (QM_REG_QVOQIDX_0 + 4 * (pf_q_num)) 194619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define BNX2X_VOQ_Q_REG_ADDR(cos, pf_q_num)\ 195619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov (QM_REG_VOQQMASK_0_LSB + 4 * ((cos) * 2 + ((pf_q_num) >> 5))) 196619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define BNX2X_Q_CMDQ_REG_ADDR(pf_q_num)\ 197619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov (QM_REG_BYTECRDCMDQ_0 + 4 * ((pf_q_num) >> 4)) 198619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov 199619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov/* extracts the QM queue number for the specified port and vnic */ 200619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define BNX2X_PF_Q_NUM(q_num, port, vnic)\ 201619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov ((((port) << 1) | (vnic)) * 16 + (q_num)) 202619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov 203619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov 204619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov/* Maps the specified queue to the specified COS */ 205619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarovstatic inline void bnx2x_map_q_cos(struct bnx2x *bp, u32 q_num, u32 new_cos) 206619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov{ 207619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov /* find current COS mapping */ 208619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov u32 curr_cos = REG_RD(bp, QM_REG_QVOQIDX_0 + q_num * 4); 209619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov 210619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov /* check if queue->COS mapping has changed */ 211619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov if (curr_cos != new_cos) { 212619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov u32 num_vnics = BNX2X_PORT2_MODE_NUM_VNICS; 213619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov u32 reg_addr, reg_bit_map, vnic; 214619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov 215619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov /* update parameters for 4port mode */ 216619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov if (INIT_MODE_FLAGS(bp) & MODE_PORT4) { 217619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov num_vnics = BNX2X_PORT4_MODE_NUM_VNICS; 218619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov if (BP_PORT(bp)) { 219619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov curr_cos += BNX2X_E3B0_PORT1_COS_OFFSET; 220619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov new_cos += BNX2X_E3B0_PORT1_COS_OFFSET; 221619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov } 222619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov } 223619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov 224619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov /* change queue mapping for each VNIC */ 225619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov for (vnic = 0; vnic < num_vnics; vnic++) { 226619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov u32 pf_q_num = 227619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov BNX2X_PF_Q_NUM(q_num, BP_PORT(bp), vnic); 228619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov u32 q_bit_map = 1 << (pf_q_num & 0x1f); 229619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov 230619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov /* overwrite queue->VOQ mapping */ 231619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov REG_WR(bp, BNX2X_Q_VOQ_REG_ADDR(pf_q_num), new_cos); 232619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov 233619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov /* clear queue bit from current COS bit map */ 234619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov reg_addr = BNX2X_VOQ_Q_REG_ADDR(curr_cos, pf_q_num); 235619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov reg_bit_map = REG_RD(bp, reg_addr); 236619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov REG_WR(bp, reg_addr, reg_bit_map & (~q_bit_map)); 237619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov 238619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov /* set queue bit in new COS bit map */ 239619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov reg_addr = BNX2X_VOQ_Q_REG_ADDR(new_cos, pf_q_num); 240619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov reg_bit_map = REG_RD(bp, reg_addr); 241619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov REG_WR(bp, reg_addr, reg_bit_map | q_bit_map); 242619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov 243619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov /* set/clear queue bit in command-queue bit map 244619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov (E2/E3A0 only, valid COS values are 0/1) */ 245619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov if (!(INIT_MODE_FLAGS(bp) & MODE_E3_B0)) { 246619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov reg_addr = BNX2X_Q_CMDQ_REG_ADDR(pf_q_num); 247619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov reg_bit_map = REG_RD(bp, reg_addr); 248619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov q_bit_map = 1 << (2 * (pf_q_num & 0xf)); 249619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov reg_bit_map = new_cos ? 250619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov (reg_bit_map | q_bit_map) : 251619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov (reg_bit_map & (~q_bit_map)); 252619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov REG_WR(bp, reg_addr, reg_bit_map); 253619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov } 254619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov } 255619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov } 256619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov} 257619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov 258619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov/* Configures the QM according to the specified per-traffic-type COSes */ 2596383c0b35b48bfbd0fc8c6fe126a6603c5a9a4b3Ariel Eliorstatic inline void bnx2x_dcb_config_qm(struct bnx2x *bp, enum cos_mode mode, 260619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov struct priority_cos *traffic_cos) 261619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov{ 262619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov bnx2x_map_q_cos(bp, BNX2X_FCOE_Q, 263619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov traffic_cos[LLFC_TRAFFIC_TYPE_FCOE].cos); 264619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov bnx2x_map_q_cos(bp, BNX2X_ISCSI_Q, 265619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov traffic_cos[LLFC_TRAFFIC_TYPE_ISCSI].cos); 2666383c0b35b48bfbd0fc8c6fe126a6603c5a9a4b3Ariel Elior bnx2x_map_q_cos(bp, BNX2X_ISCSI_ACK_Q, 2676383c0b35b48bfbd0fc8c6fe126a6603c5a9a4b3Ariel Elior traffic_cos[LLFC_TRAFFIC_TYPE_ISCSI].cos); 2686383c0b35b48bfbd0fc8c6fe126a6603c5a9a4b3Ariel Elior if (mode != STATIC_COS) { 269619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov /* required only in backward compatible COS mode */ 270619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov bnx2x_map_q_cos(bp, BNX2X_ETH_Q, 271619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov traffic_cos[LLFC_TRAFFIC_TYPE_NW].cos); 272619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov bnx2x_map_q_cos(bp, BNX2X_TOE_Q, 273619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov traffic_cos[LLFC_TRAFFIC_TYPE_NW].cos); 274619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov bnx2x_map_q_cos(bp, BNX2X_TOE_ACK_Q, 275619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov traffic_cos[LLFC_TRAFFIC_TYPE_NW].cos); 276619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov } 277619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov} 278619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov 279619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov 280619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov/* Returns the index of start or end of a specific block stage in ops array*/ 281619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define BLOCK_OPS_IDX(block, stage, end) \ 282619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov (2*(((block)*NUM_OF_INIT_PHASES) + (stage)) + (end)) 283619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov 284619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov 285523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define INITOP_SET 0 /* set the HW directly */ 286523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define INITOP_CLEAR 1 /* clear the HW directly */ 287523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define INITOP_INIT 2 /* set the init-value array */ 288523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov 289523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov/**************************************************************************** 290523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov* ILT management 291523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov****************************************************************************/ 292523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkovstruct ilt_line { 293523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov dma_addr_t page_mapping; 294523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov void *page; 295523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov u32 size; 296523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov}; 297523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov 298523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkovstruct ilt_client_info { 299523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov u32 page_size; 300523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov u16 start; 301523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov u16 end; 302523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov u16 client_num; 303523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov u16 flags; 304523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define ILT_CLIENT_SKIP_INIT 0x1 305523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define ILT_CLIENT_SKIP_MEM 0x2 306523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov}; 307523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov 308523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkovstruct bnx2x_ilt { 309523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov u32 start_line; 310523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov struct ilt_line *lines; 311523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov struct ilt_client_info clients[4]; 312523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define ILT_CLIENT_CDU 0 313523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define ILT_CLIENT_QM 1 314523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define ILT_CLIENT_SRC 2 315523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define ILT_CLIENT_TM 3 316523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov}; 317523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov 318523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov/**************************************************************************** 319523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov* SRC configuration 320523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov****************************************************************************/ 321523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkovstruct src_ent { 322523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov u8 opaque[56]; 323523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov u64 next; 324523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov}; 325523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov 3264a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov/**************************************************************************** 3274a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov* Parity configuration 3284a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov****************************************************************************/ 3298736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov#define BLOCK_PRTY_INFO(block, en_mask, m1, m1h, m2, m3) \ 3304a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov{ \ 3314a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov block##_REG_##block##_PRTY_MASK, \ 3324a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov block##_REG_##block##_PRTY_STS_CLR, \ 3338736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov en_mask, {m1, m1h, m2, m3}, #block \ 3344a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov} 3354a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 3368736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov#define BLOCK_PRTY_INFO_0(block, en_mask, m1, m1h, m2, m3) \ 3374a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov{ \ 3384a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov block##_REG_##block##_PRTY_MASK_0, \ 3394a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov block##_REG_##block##_PRTY_STS_CLR_0, \ 3408736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov en_mask, {m1, m1h, m2, m3}, #block"_0" \ 3414a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov} 3424a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 3438736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov#define BLOCK_PRTY_INFO_1(block, en_mask, m1, m1h, m2, m3) \ 3444a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov{ \ 3454a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov block##_REG_##block##_PRTY_MASK_1, \ 3464a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov block##_REG_##block##_PRTY_STS_CLR_1, \ 3478736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov en_mask, {m1, m1h, m2, m3}, #block"_1" \ 3484a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov} 3494a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 3504a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarovstatic const struct { 3514a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov u32 mask_addr; 3524a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov u32 sts_clr_addr; 3534a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov u32 en_mask; /* Mask to enable parity attentions */ 3544a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov struct { 3554a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov u32 e1; /* 57710 */ 3564a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov u32 e1h; /* 57711 */ 3574a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov u32 e2; /* 57712 */ 3588736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov u32 e3; /* 578xx */ 3594a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov } reg_mask; /* Register mask (all valid bits) */ 3604a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov char name[7]; /* Block's longest name is 6 characters long 3614a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * (name + suffix) 3624a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov */ 3634a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov} bnx2x_blocks_parity_data[] = { 3644a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov /* bit 19 masked */ 3654a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov /* REG_WR(bp, PXP_REG_PXP_PRTY_MASK, 0x80000); */ 3664a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov /* bit 5,18,20-31 */ 3674a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov /* REG_WR(bp, PXP2_REG_PXP2_PRTY_MASK_0, 0xfff40020); */ 3684a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov /* bit 5 */ 3694a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov /* REG_WR(bp, PXP2_REG_PXP2_PRTY_MASK_1, 0x20); */ 3704a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov /* REG_WR(bp, HC_REG_HC_PRTY_MASK, 0x0); */ 3714a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov /* REG_WR(bp, MISC_REG_MISC_PRTY_MASK, 0x0); */ 3724a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 3734a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov /* Block IGU, MISC, PXP and PXP2 parity errors as long as we don't 3744a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * want to handle "system kill" flow at the moment. 3754a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov */ 3768736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO(PXP, 0x7ffffff, 0x3ffffff, 0x3ffffff, 0x7ffffff, 3778736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov 0x7ffffff), 3788736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO_0(PXP2, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 3798736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov 0xffffffff), 3808736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO_1(PXP2, 0x1ffffff, 0x7f, 0x7f, 0x7ff, 0x1ffffff), 3818736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO(HC, 0x7, 0x7, 0x7, 0, 0), 3828736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO(NIG, 0xffffffff, 0x3fffffff, 0xffffffff, 0, 0), 3838736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO_0(NIG, 0xffffffff, 0, 0, 0xffffffff, 0xffffffff), 3848736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO_1(NIG, 0xffff, 0, 0, 0xff, 0xffff), 3858736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO(IGU, 0x7ff, 0, 0, 0x7ff, 0x7ff), 3868736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO(MISC, 0x1, 0x1, 0x1, 0x1, 0x1), 3878736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO(QM, 0, 0x1ff, 0xfff, 0xfff, 0xfff), 3888736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO(ATC, 0x1f, 0, 0, 0x1f, 0x1f), 3898736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO(PGLUE_B, 0x3, 0, 0, 0x3, 0x3), 3908736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO(DORQ, 0, 0x3, 0x3, 0x3, 0x3), 3914a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov {GRCBASE_UPB + PB_REG_PB_PRTY_MASK, 392c9ee92062424375fe6e73c4af5d52df289ccf9ebVladislav Zolotarov GRCBASE_UPB + PB_REG_PB_PRTY_STS_CLR, 0xf, 3938736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov {0xf, 0xf, 0xf, 0xf}, "UPB"}, 3944a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov {GRCBASE_XPB + PB_REG_PB_PRTY_MASK, 3954a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov GRCBASE_XPB + PB_REG_PB_PRTY_STS_CLR, 0, 3968736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov {0xf, 0xf, 0xf, 0xf}, "XPB"}, 3978736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO(SRC, 0x4, 0x7, 0x7, 0x7, 0x7), 3988736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO(CDU, 0, 0x1f, 0x1f, 0x1f, 0x1f), 3998736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO(CFC, 0, 0xf, 0xf, 0xf, 0x3f), 4008736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO(DBG, 0, 0x1, 0x1, 0x1, 0x1), 4018736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO(DMAE, 0, 0xf, 0xf, 0xf, 0xf), 4028736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO(BRB1, 0, 0xf, 0xf, 0xf, 0xf), 4038736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO(PRS, (1<<6), 0xff, 0xff, 0xff, 0xff), 4048736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO(PBF, 0, 0, 0x3ffff, 0xfffff, 0xfffffff), 4058736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO(TM, 0, 0, 0x7f, 0x7f, 0x7f), 4068736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO(TSDM, 0x18, 0x7ff, 0x7ff, 0x7ff, 0x7ff), 4078736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO(CSDM, 0x8, 0x7ff, 0x7ff, 0x7ff, 0x7ff), 4088736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO(USDM, 0x38, 0x7ff, 0x7ff, 0x7ff, 0x7ff), 4098736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO(XSDM, 0x8, 0x7ff, 0x7ff, 0x7ff, 0x7ff), 4108736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO(TCM, 0, 0, 0x7ffffff, 0x7ffffff, 0x7ffffff), 4118736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO(CCM, 0, 0, 0x7ffffff, 0x7ffffff, 0x7ffffff), 4128736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO(UCM, 0, 0, 0x7ffffff, 0x7ffffff, 0x7ffffff), 4138736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO(XCM, 0, 0, 0x3fffffff, 0x3fffffff, 0x3fffffff), 4148736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO_0(TSEM, 0, 0xffffffff, 0xffffffff, 0xffffffff, 4158736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov 0xffffffff), 4168736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO_1(TSEM, 0, 0x3, 0x1f, 0x3f, 0x3f), 4178736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO_0(USEM, 0, 0xffffffff, 0xffffffff, 0xffffffff, 4188736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov 0xffffffff), 4198736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO_1(USEM, 0, 0x3, 0x1f, 0x1f, 0x1f), 4208736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO_0(CSEM, 0, 0xffffffff, 0xffffffff, 0xffffffff, 4218736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov 0xffffffff), 4228736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO_1(CSEM, 0, 0x3, 0x1f, 0x1f, 0x1f), 4238736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO_0(XSEM, 0, 0xffffffff, 0xffffffff, 0xffffffff, 4248736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov 0xffffffff), 4258736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov BLOCK_PRTY_INFO_1(XSEM, 0, 0x3, 0x1f, 0x3f, 0x3f), 4264a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov}; 4274a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 4284a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 4294a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov/* [28] MCP Latched rom_parity 4304a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * [29] MCP Latched ump_rx_parity 4314a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * [30] MCP Latched ump_tx_parity 4324a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * [31] MCP Latched scpad_parity 4334a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov */ 4344a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov#define MISC_AEU_ENABLE_MCP_PRTY_BITS \ 4354a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov (AEU_INPUTS_ATTN_BITS_MCP_LATCHED_ROM_PARITY | \ 4364a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov AEU_INPUTS_ATTN_BITS_MCP_LATCHED_UMP_RX_PARITY | \ 4374a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov AEU_INPUTS_ATTN_BITS_MCP_LATCHED_UMP_TX_PARITY | \ 4384a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov AEU_INPUTS_ATTN_BITS_MCP_LATCHED_SCPAD_PARITY) 4394a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 4404a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov/* Below registers control the MCP parity attention output. When 4414a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * MISC_AEU_ENABLE_MCP_PRTY_BITS are set - attentions are 4424a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * enabled, when cleared - disabled. 4434a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov */ 4444a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarovstatic const u32 mcp_attn_ctl_regs[] = { 4454a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov MISC_REG_AEU_ENABLE4_FUNC_0_OUT_0, 4464a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov MISC_REG_AEU_ENABLE4_NIG_0, 4474a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov MISC_REG_AEU_ENABLE4_PXP_0, 4484a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov MISC_REG_AEU_ENABLE4_FUNC_1_OUT_0, 4494a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov MISC_REG_AEU_ENABLE4_NIG_1, 4504a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov MISC_REG_AEU_ENABLE4_PXP_1 4514a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov}; 4524a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 4534a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarovstatic inline void bnx2x_set_mcp_parity(struct bnx2x *bp, u8 enable) 4544a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov{ 4554a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov int i; 4564a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov u32 reg_val; 4574a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 4584a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov for (i = 0; i < ARRAY_SIZE(mcp_attn_ctl_regs); i++) { 4594a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov reg_val = REG_RD(bp, mcp_attn_ctl_regs[i]); 4604a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 4614a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov if (enable) 4624a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov reg_val |= MISC_AEU_ENABLE_MCP_PRTY_BITS; 4634a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov else 4644a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov reg_val &= ~MISC_AEU_ENABLE_MCP_PRTY_BITS; 4654a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 4664a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov REG_WR(bp, mcp_attn_ctl_regs[i], reg_val); 4674a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov } 4684a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov} 4694a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 4704a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarovstatic inline u32 bnx2x_parity_reg_mask(struct bnx2x *bp, int idx) 4714a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov{ 4724a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov if (CHIP_IS_E1(bp)) 4734a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov return bnx2x_blocks_parity_data[idx].reg_mask.e1; 4744a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov else if (CHIP_IS_E1H(bp)) 4754a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov return bnx2x_blocks_parity_data[idx].reg_mask.e1h; 4768736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov else if (CHIP_IS_E2(bp)) 4774a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov return bnx2x_blocks_parity_data[idx].reg_mask.e2; 4788736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov else /* CHIP_IS_E3 */ 4798736c82650500222c031dd7f59f0126e59808e36Vladislav Zolotarov return bnx2x_blocks_parity_data[idx].reg_mask.e3; 4804a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov} 4814a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 4824a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarovstatic inline void bnx2x_disable_blocks_parity(struct bnx2x *bp) 4834a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov{ 4844a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov int i; 4854a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 4864a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov for (i = 0; i < ARRAY_SIZE(bnx2x_blocks_parity_data); i++) { 4874a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov u32 dis_mask = bnx2x_parity_reg_mask(bp, i); 4884a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 4894a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov if (dis_mask) { 4904a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov REG_WR(bp, bnx2x_blocks_parity_data[i].mask_addr, 4914a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov dis_mask); 4924a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov DP(NETIF_MSG_HW, "Setting parity mask " 4934a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov "for %s to\t\t0x%x\n", 4944a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov bnx2x_blocks_parity_data[i].name, dis_mask); 4954a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov } 4964a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov } 4974a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 4984a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov /* Disable MCP parity attentions */ 4994a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov bnx2x_set_mcp_parity(bp, false); 5004a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov} 5014a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 5024a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov/** 5034a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * Clear the parity error status registers. 5044a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov */ 5054a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarovstatic inline void bnx2x_clear_blocks_parity(struct bnx2x *bp) 5064a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov{ 5074a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov int i; 5084a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov u32 reg_val, mcp_aeu_bits = 5094a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov AEU_INPUTS_ATTN_BITS_MCP_LATCHED_ROM_PARITY | 5104a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov AEU_INPUTS_ATTN_BITS_MCP_LATCHED_SCPAD_PARITY | 5114a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov AEU_INPUTS_ATTN_BITS_MCP_LATCHED_UMP_RX_PARITY | 5124a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov AEU_INPUTS_ATTN_BITS_MCP_LATCHED_UMP_TX_PARITY; 5134a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 5144a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov /* Clear SEM_FAST parities */ 5154a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov REG_WR(bp, XSEM_REG_FAST_MEMORY + SEM_FAST_REG_PARITY_RST, 0x1); 5164a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov REG_WR(bp, TSEM_REG_FAST_MEMORY + SEM_FAST_REG_PARITY_RST, 0x1); 5174a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov REG_WR(bp, USEM_REG_FAST_MEMORY + SEM_FAST_REG_PARITY_RST, 0x1); 5184a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov REG_WR(bp, CSEM_REG_FAST_MEMORY + SEM_FAST_REG_PARITY_RST, 0x1); 5194a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 5204a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov for (i = 0; i < ARRAY_SIZE(bnx2x_blocks_parity_data); i++) { 5214a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov u32 reg_mask = bnx2x_parity_reg_mask(bp, i); 5224a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 5234a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov if (reg_mask) { 5244a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov reg_val = REG_RD(bp, bnx2x_blocks_parity_data[i]. 5254a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov sts_clr_addr); 5264a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov if (reg_val & reg_mask) 5274a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov DP(NETIF_MSG_HW, 5284a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov "Parity errors in %s: 0x%x\n", 5294a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov bnx2x_blocks_parity_data[i].name, 5304a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov reg_val & reg_mask); 5314a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov } 5324a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov } 5334a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 5344a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov /* Check if there were parity attentions in MCP */ 5354a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov reg_val = REG_RD(bp, MISC_REG_AEU_AFTER_INVERT_4_MCP); 5364a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov if (reg_val & mcp_aeu_bits) 5374a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov DP(NETIF_MSG_HW, "Parity error in MCP: 0x%x\n", 5384a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov reg_val & mcp_aeu_bits); 5394a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 5404a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov /* Clear parity attentions in MCP: 5414a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * [7] clears Latched rom_parity 5424a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * [8] clears Latched ump_rx_parity 5434a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * [9] clears Latched ump_tx_parity 5444a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * [10] clears Latched scpad_parity (both ports) 5454a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov */ 5464a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov REG_WR(bp, MISC_REG_AEU_CLR_LATCH_SIGNAL, 0x780); 5474a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov} 5484a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 5494a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarovstatic inline void bnx2x_enable_blocks_parity(struct bnx2x *bp) 5504a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov{ 5514a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov int i; 5524a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 5534a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov for (i = 0; i < ARRAY_SIZE(bnx2x_blocks_parity_data); i++) { 5544a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov u32 reg_mask = bnx2x_parity_reg_mask(bp, i); 5554a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 5564a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov if (reg_mask) 5574a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov REG_WR(bp, bnx2x_blocks_parity_data[i].mask_addr, 5584a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov bnx2x_blocks_parity_data[i].en_mask & reg_mask); 5594a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov } 5604a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 5614a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov /* Enable MCP parity attentions */ 5624a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov bnx2x_set_mcp_parity(bp, true); 5634a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov} 5644a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 5654a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 566a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir#endif /* BNX2X_INIT_H */ 567a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir 568