bnx2x_init.h revision 4a33bc03ab66631e844080bf1189d2afd7aae929
1a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir/* bnx2x_init.h: Broadcom Everest network driver. 294a78b79cb5f14c09a42522738d6694c6a1cdd20Vladislav Zolotarov * Structures and macroes needed during the initialization. 3a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir * 42b1440230abc8fae0271b012711ecaf64eb38f86Eilon Greenstein * Copyright (c) 2007-2009 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 18490c3c9bf986545bdd99dcd4b0045c747564be39Eilon Greenstein/* RAM0 size in bytes */ 19490c3c9bf986545bdd99dcd4b0045c747564be39Eilon Greenstein#define STORM_INTMEM_SIZE_E1 0x5800 20490c3c9bf986545bdd99dcd4b0045c747564be39Eilon Greenstein#define STORM_INTMEM_SIZE_E1H 0x10000 21573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define STORM_INTMEM_SIZE(bp) ((CHIP_IS_E1(bp) ? STORM_INTMEM_SIZE_E1 : \ 22573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein STORM_INTMEM_SIZE_E1H) / 4) 23a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir 24a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir 25a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir/* Init operation types and structures */ 26ad8d394804b355bc623decc50748cd01dbc0783bEilon Greenstein/* Common for both E1 and E1H */ 27a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir#define OP_RD 0x1 /* read single register */ 28a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir#define OP_WR 0x2 /* write single register */ 29a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir#define OP_IW 0x3 /* write single register using mailbox */ 30a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir#define OP_SW 0x4 /* copy a string to the device */ 31a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir#define OP_SI 0x5 /* copy a string using mailbox */ 32a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir#define OP_ZR 0x6 /* clear memory */ 33a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir#define OP_ZP 0x7 /* unzip then copy with DMAE */ 34ad8d394804b355bc623decc50748cd01dbc0783bEilon Greenstein#define OP_WR_64 0x8 /* write 64 bit pattern */ 35ad8d394804b355bc623decc50748cd01dbc0783bEilon Greenstein#define OP_WB 0x9 /* copy a string using DMAE */ 36ad8d394804b355bc623decc50748cd01dbc0783bEilon Greenstein 37ad8d394804b355bc623decc50748cd01dbc0783bEilon Greenstein/* FPGA and EMUL specific operations */ 3894a78b79cb5f14c09a42522738d6694c6a1cdd20Vladislav Zolotarov#define OP_WR_EMUL 0xa /* write single register on Emulation */ 3994a78b79cb5f14c09a42522738d6694c6a1cdd20Vladislav Zolotarov#define OP_WR_FPGA 0xb /* write single register on FPGA */ 4094a78b79cb5f14c09a42522738d6694c6a1cdd20Vladislav Zolotarov#define OP_WR_ASIC 0xc /* write single register on ASIC */ 4194a78b79cb5f14c09a42522738d6694c6a1cdd20Vladislav Zolotarov 4294a78b79cb5f14c09a42522738d6694c6a1cdd20Vladislav Zolotarov/* Init stages */ 43573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein/* Never reorder stages !!! */ 44573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define COMMON_STAGE 0 45573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define PORT0_STAGE 1 46573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define PORT1_STAGE 2 47573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define FUNC0_STAGE 3 48573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define FUNC1_STAGE 4 49573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define FUNC2_STAGE 5 50573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define FUNC3_STAGE 6 51573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define FUNC4_STAGE 7 52573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define FUNC5_STAGE 8 53573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define FUNC6_STAGE 9 54573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define FUNC7_STAGE 10 55573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define STAGE_IDX_MAX 11 56573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein 57573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define STAGE_START 0 58573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define STAGE_END 1 5994a78b79cb5f14c09a42522738d6694c6a1cdd20Vladislav Zolotarov 6094a78b79cb5f14c09a42522738d6694c6a1cdd20Vladislav Zolotarov 6194a78b79cb5f14c09a42522738d6694c6a1cdd20Vladislav Zolotarov/* Indices of blocks */ 62573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define PRS_BLOCK 0 63573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define SRCH_BLOCK 1 64573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define TSDM_BLOCK 2 65573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define TCM_BLOCK 3 66573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define BRB1_BLOCK 4 67573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define TSEM_BLOCK 5 68573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define PXPCS_BLOCK 6 69573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define EMAC0_BLOCK 7 70573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define EMAC1_BLOCK 8 71573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define DBU_BLOCK 9 72573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define MISC_BLOCK 10 73573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define DBG_BLOCK 11 74573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define NIG_BLOCK 12 75573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define MCP_BLOCK 13 76573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define UPB_BLOCK 14 77573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define CSDM_BLOCK 15 78573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define USDM_BLOCK 16 79573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define CCM_BLOCK 17 80573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define UCM_BLOCK 18 81573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define USEM_BLOCK 19 82573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define CSEM_BLOCK 20 83573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define XPB_BLOCK 21 84573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define DQ_BLOCK 22 85573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define TIMERS_BLOCK 23 86573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define XSDM_BLOCK 24 87573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define QM_BLOCK 25 88573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define PBF_BLOCK 26 89573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define XCM_BLOCK 27 90573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define XSEM_BLOCK 28 91573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define CDU_BLOCK 29 92573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define DMAE_BLOCK 30 93573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define PXP_BLOCK 31 94573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define CFC_BLOCK 32 95573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define HC_BLOCK 33 96573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define PXP2_BLOCK 34 97573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define MISC_AEU_BLOCK 35 98573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define PGLUE_B_BLOCK 36 99573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein#define IGU_BLOCK 37 100f2e0899f0f275cc3f5e9c9726178d7d0ac19b2dbDmitry Kravkov#define ATC_BLOCK 38 101f2e0899f0f275cc3f5e9c9726178d7d0ac19b2dbDmitry Kravkov#define QM_4PORT_BLOCK 39 102f2e0899f0f275cc3f5e9c9726178d7d0ac19b2dbDmitry Kravkov#define XSEM_4PORT_BLOCK 40 103573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein 10494a78b79cb5f14c09a42522738d6694c6a1cdd20Vladislav Zolotarov 10594a78b79cb5f14c09a42522738d6694c6a1cdd20Vladislav Zolotarov/* Returns the index of start or end of a specific block stage in ops array*/ 10694a78b79cb5f14c09a42522738d6694c6a1cdd20Vladislav Zolotarov#define BLOCK_OPS_IDX(block, stage, end) \ 107573f203574581faaf80ca4fc079d33452327fc3bEilon Greenstein (2*(((block)*STAGE_IDX_MAX) + (stage)) + (end)) 108ad8d394804b355bc623decc50748cd01dbc0783bEilon Greenstein 109a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir 110a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamirstruct raw_op { 1116378c0253175e400525ac0efac9dd29f4e573cbfEilon Greenstein u32 op:8; 1126378c0253175e400525ac0efac9dd29f4e573cbfEilon Greenstein u32 offset:24; 113a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir u32 raw_data; 114a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir}; 115a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir 116a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamirstruct op_read { 1176378c0253175e400525ac0efac9dd29f4e573cbfEilon Greenstein u32 op:8; 1186378c0253175e400525ac0efac9dd29f4e573cbfEilon Greenstein u32 offset:24; 119a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir u32 pad; 120a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir}; 121a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir 122a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamirstruct op_write { 1236378c0253175e400525ac0efac9dd29f4e573cbfEilon Greenstein u32 op:8; 1246378c0253175e400525ac0efac9dd29f4e573cbfEilon Greenstein u32 offset:24; 125a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir u32 val; 126a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir}; 127a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir 128a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamirstruct op_string_write { 1296378c0253175e400525ac0efac9dd29f4e573cbfEilon Greenstein u32 op:8; 1306378c0253175e400525ac0efac9dd29f4e573cbfEilon Greenstein u32 offset:24; 131a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir#ifdef __LITTLE_ENDIAN 132a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir u16 data_off; 133a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir u16 data_len; 134a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir#else /* __BIG_ENDIAN */ 135a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir u16 data_len; 136a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir u16 data_off; 137a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir#endif 138a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir}; 139a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir 140a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamirstruct op_zero { 1416378c0253175e400525ac0efac9dd29f4e573cbfEilon Greenstein u32 op:8; 1426378c0253175e400525ac0efac9dd29f4e573cbfEilon Greenstein u32 offset:24; 143a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir u32 len; 144a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir}; 145a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir 146a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamirunion init_op { 147a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir struct op_read read; 148a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir struct op_write write; 149a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir struct op_string_write str_wr; 150a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir struct op_zero zero; 151a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir struct raw_op raw; 152a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir}; 153a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir 154523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define INITOP_SET 0 /* set the HW directly */ 155523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define INITOP_CLEAR 1 /* clear the HW directly */ 156523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define INITOP_INIT 2 /* set the init-value array */ 157523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov 158523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov/**************************************************************************** 159523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov* ILT management 160523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov****************************************************************************/ 161523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkovstruct ilt_line { 162523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov dma_addr_t page_mapping; 163523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov void *page; 164523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov u32 size; 165523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov}; 166523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov 167523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkovstruct ilt_client_info { 168523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov u32 page_size; 169523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov u16 start; 170523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov u16 end; 171523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov u16 client_num; 172523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov u16 flags; 173523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define ILT_CLIENT_SKIP_INIT 0x1 174523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define ILT_CLIENT_SKIP_MEM 0x2 175523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov}; 176523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov 177523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkovstruct bnx2x_ilt { 178523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov u32 start_line; 179523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov struct ilt_line *lines; 180523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov struct ilt_client_info clients[4]; 181523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define ILT_CLIENT_CDU 0 182523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define ILT_CLIENT_QM 1 183523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define ILT_CLIENT_SRC 2 184523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define ILT_CLIENT_TM 3 185523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov}; 186523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov 187523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov/**************************************************************************** 188523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov* SRC configuration 189523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov****************************************************************************/ 190523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkovstruct src_ent { 191523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov u8 opaque[56]; 192523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov u64 next; 193523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov}; 194523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov 1954a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov/**************************************************************************** 1964a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov* Parity configuration 1974a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov****************************************************************************/ 1984a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov#define BLOCK_PRTY_INFO(block, en_mask, m1, m1h, m2) \ 1994a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov{ \ 2004a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov block##_REG_##block##_PRTY_MASK, \ 2014a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov block##_REG_##block##_PRTY_STS_CLR, \ 2024a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov en_mask, {m1, m1h, m2}, #block \ 2034a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov} 2044a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 2054a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov#define BLOCK_PRTY_INFO_0(block, en_mask, m1, m1h, m2) \ 2064a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov{ \ 2074a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov block##_REG_##block##_PRTY_MASK_0, \ 2084a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov block##_REG_##block##_PRTY_STS_CLR_0, \ 2094a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov en_mask, {m1, m1h, m2}, #block"_0" \ 2104a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov} 2114a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 2124a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov#define BLOCK_PRTY_INFO_1(block, en_mask, m1, m1h, m2) \ 2134a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov{ \ 2144a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov block##_REG_##block##_PRTY_MASK_1, \ 2154a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov block##_REG_##block##_PRTY_STS_CLR_1, \ 2164a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov en_mask, {m1, m1h, m2}, #block"_1" \ 2174a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov} 2184a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 2194a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarovstatic const struct { 2204a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov u32 mask_addr; 2214a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov u32 sts_clr_addr; 2224a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov u32 en_mask; /* Mask to enable parity attentions */ 2234a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov struct { 2244a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov u32 e1; /* 57710 */ 2254a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov u32 e1h; /* 57711 */ 2264a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov u32 e2; /* 57712 */ 2274a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov } reg_mask; /* Register mask (all valid bits) */ 2284a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov char name[7]; /* Block's longest name is 6 characters long 2294a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * (name + suffix) 2304a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov */ 2314a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov} bnx2x_blocks_parity_data[] = { 2324a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov /* bit 19 masked */ 2334a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov /* REG_WR(bp, PXP_REG_PXP_PRTY_MASK, 0x80000); */ 2344a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov /* bit 5,18,20-31 */ 2354a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov /* REG_WR(bp, PXP2_REG_PXP2_PRTY_MASK_0, 0xfff40020); */ 2364a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov /* bit 5 */ 2374a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov /* REG_WR(bp, PXP2_REG_PXP2_PRTY_MASK_1, 0x20); */ 2384a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov /* REG_WR(bp, HC_REG_HC_PRTY_MASK, 0x0); */ 2394a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov /* REG_WR(bp, MISC_REG_MISC_PRTY_MASK, 0x0); */ 2404a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 2414a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov /* Block IGU, MISC, PXP and PXP2 parity errors as long as we don't 2424a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * want to handle "system kill" flow at the moment. 2434a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov */ 2444a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov BLOCK_PRTY_INFO(PXP, 0x3ffffff, 0x3ffffff, 0x3ffffff, 0x3ffffff), 2454a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov BLOCK_PRTY_INFO_0(PXP2, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff), 2464a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov BLOCK_PRTY_INFO_1(PXP2, 0x7ff, 0x7f, 0x7f, 0x7ff), 2474a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov BLOCK_PRTY_INFO(HC, 0x7, 0x7, 0x7, 0), 2484a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov BLOCK_PRTY_INFO(IGU, 0x7ff, 0, 0, 0x7ff), 2494a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov BLOCK_PRTY_INFO(MISC, 0x1, 0x1, 0x1, 0x1), 2504a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov BLOCK_PRTY_INFO(QM, 0, 0x1ff, 0xfff, 0xfff), 2514a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov BLOCK_PRTY_INFO(DORQ, 0, 0x3, 0x3, 0x3), 2524a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov {GRCBASE_UPB + PB_REG_PB_PRTY_MASK, 2534a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov GRCBASE_UPB + PB_REG_PB_PRTY_STS_CLR, 0, 2544a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov {0xf, 0xf, 0xf}, "UPB"}, 2554a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov {GRCBASE_XPB + PB_REG_PB_PRTY_MASK, 2564a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov GRCBASE_XPB + PB_REG_PB_PRTY_STS_CLR, 0, 2574a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov {0xf, 0xf, 0xf}, "XPB"}, 2584a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov BLOCK_PRTY_INFO(SRC, 0x4, 0x7, 0x7, 0x7), 2594a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov BLOCK_PRTY_INFO(CDU, 0, 0x1f, 0x1f, 0x1f), 2604a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov BLOCK_PRTY_INFO(CFC, 0, 0xf, 0xf, 0xf), 2614a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov BLOCK_PRTY_INFO(DBG, 0, 0x1, 0x1, 0x1), 2624a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov BLOCK_PRTY_INFO(DMAE, 0, 0xf, 0xf, 0xf), 2634a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov BLOCK_PRTY_INFO(BRB1, 0, 0xf, 0xf, 0xf), 2644a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov BLOCK_PRTY_INFO(PRS, (1<<6), 0xff, 0xff, 0xff), 2654a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov BLOCK_PRTY_INFO(TSDM, 0x18, 0x7ff, 0x7ff, 0x7ff), 2664a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov BLOCK_PRTY_INFO(CSDM, 0x8, 0x7ff, 0x7ff, 0x7ff), 2674a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov BLOCK_PRTY_INFO(USDM, 0x38, 0x7ff, 0x7ff, 0x7ff), 2684a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov BLOCK_PRTY_INFO(XSDM, 0x8, 0x7ff, 0x7ff, 0x7ff), 2694a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov BLOCK_PRTY_INFO_0(TSEM, 0, 0xffffffff, 0xffffffff, 0xffffffff), 2704a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov BLOCK_PRTY_INFO_1(TSEM, 0, 0x3, 0x1f, 0x3f), 2714a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov BLOCK_PRTY_INFO_0(USEM, 0, 0xffffffff, 0xffffffff, 0xffffffff), 2724a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov BLOCK_PRTY_INFO_1(USEM, 0, 0x3, 0x1f, 0x1f), 2734a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov BLOCK_PRTY_INFO_0(CSEM, 0, 0xffffffff, 0xffffffff, 0xffffffff), 2744a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov BLOCK_PRTY_INFO_1(CSEM, 0, 0x3, 0x1f, 0x1f), 2754a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov BLOCK_PRTY_INFO_0(XSEM, 0, 0xffffffff, 0xffffffff, 0xffffffff), 2764a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov BLOCK_PRTY_INFO_1(XSEM, 0, 0x3, 0x1f, 0x3f), 2774a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov}; 2784a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 2794a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 2804a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov/* [28] MCP Latched rom_parity 2814a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * [29] MCP Latched ump_rx_parity 2824a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * [30] MCP Latched ump_tx_parity 2834a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * [31] MCP Latched scpad_parity 2844a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov */ 2854a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov#define MISC_AEU_ENABLE_MCP_PRTY_BITS \ 2864a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov (AEU_INPUTS_ATTN_BITS_MCP_LATCHED_ROM_PARITY | \ 2874a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov AEU_INPUTS_ATTN_BITS_MCP_LATCHED_UMP_RX_PARITY | \ 2884a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov AEU_INPUTS_ATTN_BITS_MCP_LATCHED_UMP_TX_PARITY | \ 2894a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov AEU_INPUTS_ATTN_BITS_MCP_LATCHED_SCPAD_PARITY) 2904a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 2914a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov/* Below registers control the MCP parity attention output. When 2924a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * MISC_AEU_ENABLE_MCP_PRTY_BITS are set - attentions are 2934a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * enabled, when cleared - disabled. 2944a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov */ 2954a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarovstatic const u32 mcp_attn_ctl_regs[] = { 2964a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov MISC_REG_AEU_ENABLE4_FUNC_0_OUT_0, 2974a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov MISC_REG_AEU_ENABLE4_NIG_0, 2984a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov MISC_REG_AEU_ENABLE4_PXP_0, 2994a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov MISC_REG_AEU_ENABLE4_FUNC_1_OUT_0, 3004a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov MISC_REG_AEU_ENABLE4_NIG_1, 3014a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov MISC_REG_AEU_ENABLE4_PXP_1 3024a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov}; 3034a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 3044a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarovstatic inline void bnx2x_set_mcp_parity(struct bnx2x *bp, u8 enable) 3054a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov{ 3064a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov int i; 3074a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov u32 reg_val; 3084a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 3094a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov for (i = 0; i < ARRAY_SIZE(mcp_attn_ctl_regs); i++) { 3104a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov reg_val = REG_RD(bp, mcp_attn_ctl_regs[i]); 3114a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 3124a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov if (enable) 3134a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov reg_val |= MISC_AEU_ENABLE_MCP_PRTY_BITS; 3144a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov else 3154a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov reg_val &= ~MISC_AEU_ENABLE_MCP_PRTY_BITS; 3164a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 3174a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov REG_WR(bp, mcp_attn_ctl_regs[i], reg_val); 3184a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov } 3194a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov} 3204a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 3214a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarovstatic inline u32 bnx2x_parity_reg_mask(struct bnx2x *bp, int idx) 3224a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov{ 3234a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov if (CHIP_IS_E1(bp)) 3244a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov return bnx2x_blocks_parity_data[idx].reg_mask.e1; 3254a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov else if (CHIP_IS_E1H(bp)) 3264a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov return bnx2x_blocks_parity_data[idx].reg_mask.e1h; 3274a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov else 3284a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov return bnx2x_blocks_parity_data[idx].reg_mask.e2; 3294a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov} 3304a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 3314a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarovstatic inline void bnx2x_disable_blocks_parity(struct bnx2x *bp) 3324a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov{ 3334a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov int i; 3344a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 3354a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov for (i = 0; i < ARRAY_SIZE(bnx2x_blocks_parity_data); i++) { 3364a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov u32 dis_mask = bnx2x_parity_reg_mask(bp, i); 3374a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 3384a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov if (dis_mask) { 3394a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov REG_WR(bp, bnx2x_blocks_parity_data[i].mask_addr, 3404a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov dis_mask); 3414a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov DP(NETIF_MSG_HW, "Setting parity mask " 3424a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov "for %s to\t\t0x%x\n", 3434a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov bnx2x_blocks_parity_data[i].name, dis_mask); 3444a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov } 3454a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov } 3464a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 3474a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov /* Disable MCP parity attentions */ 3484a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov bnx2x_set_mcp_parity(bp, false); 3494a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov} 3504a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 3514a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov/** 3524a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * Clear the parity error status registers. 3534a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov */ 3544a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarovstatic inline void bnx2x_clear_blocks_parity(struct bnx2x *bp) 3554a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov{ 3564a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov int i; 3574a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov u32 reg_val, mcp_aeu_bits = 3584a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov AEU_INPUTS_ATTN_BITS_MCP_LATCHED_ROM_PARITY | 3594a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov AEU_INPUTS_ATTN_BITS_MCP_LATCHED_SCPAD_PARITY | 3604a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov AEU_INPUTS_ATTN_BITS_MCP_LATCHED_UMP_RX_PARITY | 3614a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov AEU_INPUTS_ATTN_BITS_MCP_LATCHED_UMP_TX_PARITY; 3624a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 3634a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov /* Clear SEM_FAST parities */ 3644a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov REG_WR(bp, XSEM_REG_FAST_MEMORY + SEM_FAST_REG_PARITY_RST, 0x1); 3654a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov REG_WR(bp, TSEM_REG_FAST_MEMORY + SEM_FAST_REG_PARITY_RST, 0x1); 3664a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov REG_WR(bp, USEM_REG_FAST_MEMORY + SEM_FAST_REG_PARITY_RST, 0x1); 3674a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov REG_WR(bp, CSEM_REG_FAST_MEMORY + SEM_FAST_REG_PARITY_RST, 0x1); 3684a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 3694a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov for (i = 0; i < ARRAY_SIZE(bnx2x_blocks_parity_data); i++) { 3704a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov u32 reg_mask = bnx2x_parity_reg_mask(bp, i); 3714a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 3724a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov if (reg_mask) { 3734a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov reg_val = REG_RD(bp, bnx2x_blocks_parity_data[i]. 3744a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov sts_clr_addr); 3754a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov if (reg_val & reg_mask) 3764a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov DP(NETIF_MSG_HW, 3774a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov "Parity errors in %s: 0x%x\n", 3784a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov bnx2x_blocks_parity_data[i].name, 3794a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov reg_val & reg_mask); 3804a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov } 3814a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov } 3824a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 3834a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov /* Check if there were parity attentions in MCP */ 3844a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov reg_val = REG_RD(bp, MISC_REG_AEU_AFTER_INVERT_4_MCP); 3854a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov if (reg_val & mcp_aeu_bits) 3864a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov DP(NETIF_MSG_HW, "Parity error in MCP: 0x%x\n", 3874a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov reg_val & mcp_aeu_bits); 3884a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 3894a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov /* Clear parity attentions in MCP: 3904a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * [7] clears Latched rom_parity 3914a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * [8] clears Latched ump_rx_parity 3924a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * [9] clears Latched ump_tx_parity 3934a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * [10] clears Latched scpad_parity (both ports) 3944a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov */ 3954a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov REG_WR(bp, MISC_REG_AEU_CLR_LATCH_SIGNAL, 0x780); 3964a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov} 3974a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 3984a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarovstatic inline void bnx2x_enable_blocks_parity(struct bnx2x *bp) 3994a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov{ 4004a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov int i; 4014a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 4024a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov for (i = 0; i < ARRAY_SIZE(bnx2x_blocks_parity_data); i++) { 4034a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov u32 reg_mask = bnx2x_parity_reg_mask(bp, i); 4044a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 4054a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov if (reg_mask) 4064a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov REG_WR(bp, bnx2x_blocks_parity_data[i].mask_addr, 4074a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov bnx2x_blocks_parity_data[i].en_mask & reg_mask); 4084a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov } 4094a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 4104a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov /* Enable MCP parity attentions */ 4114a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov bnx2x_set_mcp_parity(bp, true); 4124a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov} 4134a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 4144a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov 415a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir#endif /* BNX2X_INIT_H */ 416a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir 417