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