bnx2x_init.h revision c9ee92062424375fe6e73c4af5d52df289ccf9eb
1a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir/* bnx2x_init.h: Broadcom Everest network driver.
294a78b79cb5f14c09a42522738d6694c6a1cdd20Vladislav Zolotarov *               Structures and macroes needed during the initialization.
3a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir *
45de924086aca9f17eee9ad569e0af2f699f591b3Dmitry Kravkov * Copyright (c) 2007-2011 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,
131619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	MODE_COS_BC                    = 0x00004000,
132619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	MODE_COS3                      = 0x00008000,
133619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	MODE_COS6                      = 0x00010000,
134619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	MODE_LITTLE_ENDIAN             = 0x00020000,
135619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	MODE_BIG_ENDIAN                = 0x00040000,
136619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov};
137619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov
138619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov/* Init Blocks */
139619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarovenum {
140619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_ATC,
141619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_BRB1,
142619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_CCM,
143619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_CDU,
144619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_CFC,
145619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_CSDM,
146619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_CSEM,
147619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_DBG,
148619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_DMAE,
149619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_DORQ,
150619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_HC,
151619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_IGU,
152619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_MISC,
153619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_NIG,
154619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_PBF,
155619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_PGLUE_B,
156619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_PRS,
157619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_PXP2,
158619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_PXP,
159619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_QM,
160619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_SRC,
161619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_TCM,
162619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_TM,
163619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_TSDM,
164619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_TSEM,
165619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_UCM,
166619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_UPB,
167619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_USDM,
168619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_USEM,
169619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_XCM,
170619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_XPB,
171619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_XSDM,
172619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_XSEM,
173619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	BLOCK_MISC_AEU,
174619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	NUM_OF_INIT_BLOCKS
175a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir};
176a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir
177619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov/* QM queue numbers */
178619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define BNX2X_ETH_Q		0
179619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define BNX2X_TOE_Q		3
180619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define BNX2X_TOE_ACK_Q		6
181619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define BNX2X_ISCSI_Q		9
182619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define BNX2X_ISCSI_ACK_Q	8
183619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define BNX2X_FCOE_Q		10
184619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov
185619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov/* Vnics per mode */
186619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define BNX2X_PORT2_MODE_NUM_VNICS 4
187619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define BNX2X_PORT4_MODE_NUM_VNICS 2
188619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov
189619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov/* COS offset for port1 in E3 B0 4port mode */
190619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define BNX2X_E3B0_PORT1_COS_OFFSET 3
191619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov
192619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov/* QM Register addresses */
193619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define BNX2X_Q_VOQ_REG_ADDR(pf_q_num)\
194619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	(QM_REG_QVOQIDX_0 + 4 * (pf_q_num))
195619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define BNX2X_VOQ_Q_REG_ADDR(cos, pf_q_num)\
196619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	(QM_REG_VOQQMASK_0_LSB + 4 * ((cos) * 2 + ((pf_q_num) >> 5)))
197619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define BNX2X_Q_CMDQ_REG_ADDR(pf_q_num)\
198619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	(QM_REG_BYTECRDCMDQ_0 + 4 * ((pf_q_num) >> 4))
199619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov
200619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov/* extracts the QM queue number for the specified port and vnic */
201619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define BNX2X_PF_Q_NUM(q_num, port, vnic)\
202619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	((((port) << 1) | (vnic)) * 16 + (q_num))
203619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov
204619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov
205619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov/* Maps the specified queue to the specified COS */
206619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarovstatic inline void bnx2x_map_q_cos(struct bnx2x *bp, u32 q_num, u32 new_cos)
207619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov{
208619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	/* find current COS mapping */
209619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	u32 curr_cos = REG_RD(bp, QM_REG_QVOQIDX_0 + q_num * 4);
210619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov
211619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	/* check if queue->COS mapping has changed */
212619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	if (curr_cos != new_cos) {
213619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov		u32 num_vnics = BNX2X_PORT2_MODE_NUM_VNICS;
214619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov		u32 reg_addr, reg_bit_map, vnic;
215619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov
216619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov		/* update parameters for 4port mode */
217619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov		if (INIT_MODE_FLAGS(bp) & MODE_PORT4) {
218619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov			num_vnics = BNX2X_PORT4_MODE_NUM_VNICS;
219619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov			if (BP_PORT(bp)) {
220619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov				curr_cos += BNX2X_E3B0_PORT1_COS_OFFSET;
221619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov				new_cos += BNX2X_E3B0_PORT1_COS_OFFSET;
222619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov			}
223619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov		}
224619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov
225619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov		/* change queue mapping for each VNIC */
226619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov		for (vnic = 0; vnic < num_vnics; vnic++) {
227619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov			u32 pf_q_num =
228619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov				BNX2X_PF_Q_NUM(q_num, BP_PORT(bp), vnic);
229619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov			u32 q_bit_map = 1 << (pf_q_num & 0x1f);
230619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov
231619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov			/* overwrite queue->VOQ mapping */
232619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov			REG_WR(bp, BNX2X_Q_VOQ_REG_ADDR(pf_q_num), new_cos);
233619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov
234619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov			/* clear queue bit from current COS bit map */
235619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov			reg_addr = BNX2X_VOQ_Q_REG_ADDR(curr_cos, pf_q_num);
236619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov			reg_bit_map = REG_RD(bp, reg_addr);
237619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov			REG_WR(bp, reg_addr, reg_bit_map & (~q_bit_map));
238619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov
239619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov			/* set queue bit in new COS bit map */
240619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov			reg_addr = BNX2X_VOQ_Q_REG_ADDR(new_cos, pf_q_num);
241619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov			reg_bit_map = REG_RD(bp, reg_addr);
242619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov			REG_WR(bp, reg_addr, reg_bit_map | q_bit_map);
243619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov
244619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov			/* set/clear queue bit in command-queue bit map
245619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov			(E2/E3A0 only, valid COS values are 0/1) */
246619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov			if (!(INIT_MODE_FLAGS(bp) & MODE_E3_B0)) {
247619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov				reg_addr = BNX2X_Q_CMDQ_REG_ADDR(pf_q_num);
248619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov				reg_bit_map = REG_RD(bp, reg_addr);
249619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov				q_bit_map = 1 << (2 * (pf_q_num & 0xf));
250619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov				reg_bit_map = new_cos ?
251619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov					      (reg_bit_map | q_bit_map) :
252619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov					      (reg_bit_map & (~q_bit_map));
253619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov				REG_WR(bp, reg_addr, reg_bit_map);
254619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov			}
255619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov		}
256619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	}
257619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov}
258619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov
259619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov/* Configures the QM according to the specified per-traffic-type COSes */
260619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarovstatic inline void bnx2x_dcb_config_qm(struct bnx2x *bp,
261619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov				       struct priority_cos *traffic_cos)
262619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov{
263619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	bnx2x_map_q_cos(bp, BNX2X_FCOE_Q,
264619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov			traffic_cos[LLFC_TRAFFIC_TYPE_FCOE].cos);
265619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	bnx2x_map_q_cos(bp, BNX2X_ISCSI_Q,
266619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov			traffic_cos[LLFC_TRAFFIC_TYPE_ISCSI].cos);
267619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	if (INIT_MODE_FLAGS(bp) & MODE_COS_BC) {
268619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov		/* required only in backward compatible COS mode */
269619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov		bnx2x_map_q_cos(bp, BNX2X_ETH_Q,
270619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov				traffic_cos[LLFC_TRAFFIC_TYPE_NW].cos);
271619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov		bnx2x_map_q_cos(bp, BNX2X_TOE_Q,
272619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov				traffic_cos[LLFC_TRAFFIC_TYPE_NW].cos);
273619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov		bnx2x_map_q_cos(bp, BNX2X_TOE_ACK_Q,
274619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov				traffic_cos[LLFC_TRAFFIC_TYPE_NW].cos);
275619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov		bnx2x_map_q_cos(bp, BNX2X_ISCSI_ACK_Q,
276619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov				traffic_cos[LLFC_TRAFFIC_TYPE_ISCSI].cos);
277619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov	}
278619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov}
279619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov
280619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov
281619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov/* Returns the index of start or end of a specific block stage in ops array*/
282619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov#define BLOCK_OPS_IDX(block, stage, end) \
283619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov			(2*(((block)*NUM_OF_INIT_PHASES) + (stage)) + (end))
284619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov
285619c5cb6885b936c44ae1422ef805b69c6291485Vlad Zolotarov
286523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define INITOP_SET		0	/* set the HW directly */
287523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define INITOP_CLEAR		1	/* clear the HW directly */
288523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define INITOP_INIT		2	/* set the init-value array */
289523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov
290523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov/****************************************************************************
291523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov* ILT management
292523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov****************************************************************************/
293523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkovstruct ilt_line {
294523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov	dma_addr_t page_mapping;
295523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov	void *page;
296523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov	u32 size;
297523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov};
298523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov
299523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkovstruct ilt_client_info {
300523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov	u32 page_size;
301523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov	u16 start;
302523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov	u16 end;
303523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov	u16 client_num;
304523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov	u16 flags;
305523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define ILT_CLIENT_SKIP_INIT	0x1
306523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define ILT_CLIENT_SKIP_MEM	0x2
307523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov};
308523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov
309523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkovstruct bnx2x_ilt {
310523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov	u32 start_line;
311523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov	struct ilt_line		*lines;
312523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov	struct ilt_client_info	clients[4];
313523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define ILT_CLIENT_CDU	0
314523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define ILT_CLIENT_QM	1
315523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define ILT_CLIENT_SRC	2
316523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov#define ILT_CLIENT_TM	3
317523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov};
318523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov
319523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov/****************************************************************************
320523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov* SRC configuration
321523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov****************************************************************************/
322523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkovstruct src_ent {
323523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov	u8 opaque[56];
324523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov	u64 next;
325523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov};
326523224a3b3cd407ce4e6731a087194e13a90db18Dmitry Kravkov
3274a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov/****************************************************************************
3284a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov* Parity configuration
3294a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov****************************************************************************/
3304a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov#define BLOCK_PRTY_INFO(block, en_mask, m1, m1h, m2) \
3314a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov{ \
3324a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	block##_REG_##block##_PRTY_MASK, \
3334a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	block##_REG_##block##_PRTY_STS_CLR, \
3344a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	en_mask, {m1, m1h, m2}, #block \
3354a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov}
3364a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov
3374a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov#define BLOCK_PRTY_INFO_0(block, en_mask, m1, m1h, m2) \
3384a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov{ \
3394a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	block##_REG_##block##_PRTY_MASK_0, \
3404a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	block##_REG_##block##_PRTY_STS_CLR_0, \
3414a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	en_mask, {m1, m1h, m2}, #block"_0" \
3424a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov}
3434a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov
3444a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov#define BLOCK_PRTY_INFO_1(block, en_mask, m1, m1h, m2) \
3454a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov{ \
3464a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	block##_REG_##block##_PRTY_MASK_1, \
3474a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	block##_REG_##block##_PRTY_STS_CLR_1, \
3484a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	en_mask, {m1, m1h, m2}, #block"_1" \
3494a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov}
3504a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov
3514a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarovstatic const struct {
3524a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	u32 mask_addr;
3534a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	u32 sts_clr_addr;
3544a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	u32 en_mask;		/* Mask to enable parity attentions */
3554a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	struct {
3564a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov		u32 e1;		/* 57710 */
3574a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov		u32 e1h;	/* 57711 */
3584a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov		u32 e2;		/* 57712 */
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	 */
376df213559f029047b4b3d06a25a36f4779de9b989Vladislav Zolotarov	BLOCK_PRTY_INFO(PXP, 0x7ffffff, 0x3ffffff, 0x3ffffff, 0x7ffffff),
3774a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	BLOCK_PRTY_INFO_0(PXP2,	0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff),
3784a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	BLOCK_PRTY_INFO_1(PXP2,	0x7ff, 0x7f, 0x7f, 0x7ff),
3794a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	BLOCK_PRTY_INFO(HC, 0x7, 0x7, 0x7, 0),
380c9ee92062424375fe6e73c4af5d52df289ccf9ebVladislav Zolotarov	BLOCK_PRTY_INFO(NIG, 0xffffffff, 0x3fffffff, 0xffffffff, 0),
381c9ee92062424375fe6e73c4af5d52df289ccf9ebVladislav Zolotarov	BLOCK_PRTY_INFO_0(NIG,	0xffffffff, 0, 0, 0xffffffff),
382c9ee92062424375fe6e73c4af5d52df289ccf9ebVladislav Zolotarov	BLOCK_PRTY_INFO_1(NIG,	0xffff, 0, 0, 0xffff),
3834a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	BLOCK_PRTY_INFO(IGU, 0x7ff, 0, 0, 0x7ff),
3844a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	BLOCK_PRTY_INFO(MISC, 0x1, 0x1, 0x1, 0x1),
3854a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	BLOCK_PRTY_INFO(QM, 0, 0x1ff, 0xfff, 0xfff),
3864a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	BLOCK_PRTY_INFO(DORQ, 0, 0x3, 0x3, 0x3),
3874a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	{GRCBASE_UPB + PB_REG_PB_PRTY_MASK,
388c9ee92062424375fe6e73c4af5d52df289ccf9ebVladislav Zolotarov		GRCBASE_UPB + PB_REG_PB_PRTY_STS_CLR, 0xf,
3894a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov		{0xf, 0xf, 0xf}, "UPB"},
3904a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	{GRCBASE_XPB + PB_REG_PB_PRTY_MASK,
3914a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov		GRCBASE_XPB + PB_REG_PB_PRTY_STS_CLR, 0,
3924a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov		{0xf, 0xf, 0xf}, "XPB"},
3934a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	BLOCK_PRTY_INFO(SRC, 0x4, 0x7, 0x7, 0x7),
3944a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	BLOCK_PRTY_INFO(CDU, 0, 0x1f, 0x1f, 0x1f),
3954a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	BLOCK_PRTY_INFO(CFC, 0, 0xf, 0xf, 0xf),
3964a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	BLOCK_PRTY_INFO(DBG, 0, 0x1, 0x1, 0x1),
3974a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	BLOCK_PRTY_INFO(DMAE, 0, 0xf, 0xf, 0xf),
3984a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	BLOCK_PRTY_INFO(BRB1, 0, 0xf, 0xf, 0xf),
3994a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	BLOCK_PRTY_INFO(PRS, (1<<6), 0xff, 0xff, 0xff),
400c9ee92062424375fe6e73c4af5d52df289ccf9ebVladislav Zolotarov	BLOCK_PRTY_INFO(PBF, 0, 0, 0x3ffff, 0xfffffff),
401c9ee92062424375fe6e73c4af5d52df289ccf9ebVladislav Zolotarov	BLOCK_PRTY_INFO(TM, 0, 0, 0x7f, 0x7f),
4024a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	BLOCK_PRTY_INFO(TSDM, 0x18, 0x7ff, 0x7ff, 0x7ff),
4034a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	BLOCK_PRTY_INFO(CSDM, 0x8, 0x7ff, 0x7ff, 0x7ff),
4044a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	BLOCK_PRTY_INFO(USDM, 0x38, 0x7ff, 0x7ff, 0x7ff),
4054a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	BLOCK_PRTY_INFO(XSDM, 0x8, 0x7ff, 0x7ff, 0x7ff),
406c9ee92062424375fe6e73c4af5d52df289ccf9ebVladislav Zolotarov	BLOCK_PRTY_INFO(TCM, 0, 0, 0x7ffffff, 0x7ffffff),
407c9ee92062424375fe6e73c4af5d52df289ccf9ebVladislav Zolotarov	BLOCK_PRTY_INFO(CCM, 0, 0, 0x7ffffff, 0x7ffffff),
408c9ee92062424375fe6e73c4af5d52df289ccf9ebVladislav Zolotarov	BLOCK_PRTY_INFO(UCM, 0, 0, 0x7ffffff, 0x7ffffff),
409c9ee92062424375fe6e73c4af5d52df289ccf9ebVladislav Zolotarov	BLOCK_PRTY_INFO(XCM, 0, 0, 0x3fffffff, 0x3fffffff),
4104a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	BLOCK_PRTY_INFO_0(TSEM, 0, 0xffffffff, 0xffffffff, 0xffffffff),
4114a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	BLOCK_PRTY_INFO_1(TSEM, 0, 0x3, 0x1f, 0x3f),
4124a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	BLOCK_PRTY_INFO_0(USEM, 0, 0xffffffff, 0xffffffff, 0xffffffff),
4134a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	BLOCK_PRTY_INFO_1(USEM, 0, 0x3, 0x1f, 0x1f),
4144a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	BLOCK_PRTY_INFO_0(CSEM, 0, 0xffffffff, 0xffffffff, 0xffffffff),
4154a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	BLOCK_PRTY_INFO_1(CSEM, 0, 0x3, 0x1f, 0x1f),
4164a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	BLOCK_PRTY_INFO_0(XSEM, 0, 0xffffffff, 0xffffffff, 0xffffffff),
4174a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	BLOCK_PRTY_INFO_1(XSEM, 0, 0x3, 0x1f, 0x3f),
4184a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov};
4194a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov
4204a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov
4214a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov/* [28] MCP Latched rom_parity
4224a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * [29] MCP Latched ump_rx_parity
4234a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * [30] MCP Latched ump_tx_parity
4244a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * [31] MCP Latched scpad_parity
4254a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov */
4264a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov#define MISC_AEU_ENABLE_MCP_PRTY_BITS	\
4274a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	(AEU_INPUTS_ATTN_BITS_MCP_LATCHED_ROM_PARITY | \
4284a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	 AEU_INPUTS_ATTN_BITS_MCP_LATCHED_UMP_RX_PARITY | \
4294a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	 AEU_INPUTS_ATTN_BITS_MCP_LATCHED_UMP_TX_PARITY | \
4304a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	 AEU_INPUTS_ATTN_BITS_MCP_LATCHED_SCPAD_PARITY)
4314a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov
4324a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov/* Below registers control the MCP parity attention output. When
4334a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * MISC_AEU_ENABLE_MCP_PRTY_BITS are set - attentions are
4344a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * enabled, when cleared - disabled.
4354a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov */
4364a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarovstatic const u32 mcp_attn_ctl_regs[] = {
4374a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	MISC_REG_AEU_ENABLE4_FUNC_0_OUT_0,
4384a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	MISC_REG_AEU_ENABLE4_NIG_0,
4394a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	MISC_REG_AEU_ENABLE4_PXP_0,
4404a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	MISC_REG_AEU_ENABLE4_FUNC_1_OUT_0,
4414a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	MISC_REG_AEU_ENABLE4_NIG_1,
4424a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	MISC_REG_AEU_ENABLE4_PXP_1
4434a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov};
4444a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov
4454a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarovstatic inline void bnx2x_set_mcp_parity(struct bnx2x *bp, u8 enable)
4464a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov{
4474a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	int i;
4484a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	u32 reg_val;
4494a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov
4504a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	for (i = 0; i < ARRAY_SIZE(mcp_attn_ctl_regs); i++) {
4514a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov		reg_val = REG_RD(bp, mcp_attn_ctl_regs[i]);
4524a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov
4534a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov		if (enable)
4544a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov			reg_val |= MISC_AEU_ENABLE_MCP_PRTY_BITS;
4554a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov		else
4564a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov			reg_val &= ~MISC_AEU_ENABLE_MCP_PRTY_BITS;
4574a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov
4584a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov		REG_WR(bp, mcp_attn_ctl_regs[i], reg_val);
4594a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	}
4604a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov}
4614a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov
4624a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarovstatic inline u32 bnx2x_parity_reg_mask(struct bnx2x *bp, int idx)
4634a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov{
4644a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	if (CHIP_IS_E1(bp))
4654a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov		return bnx2x_blocks_parity_data[idx].reg_mask.e1;
4664a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	else if (CHIP_IS_E1H(bp))
4674a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov		return bnx2x_blocks_parity_data[idx].reg_mask.e1h;
4684a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	else
4694a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov		return bnx2x_blocks_parity_data[idx].reg_mask.e2;
4704a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov}
4714a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov
4724a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarovstatic inline void bnx2x_disable_blocks_parity(struct bnx2x *bp)
4734a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov{
4744a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	int i;
4754a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov
4764a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	for (i = 0; i < ARRAY_SIZE(bnx2x_blocks_parity_data); i++) {
4774a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov		u32 dis_mask = bnx2x_parity_reg_mask(bp, i);
4784a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov
4794a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov		if (dis_mask) {
4804a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov			REG_WR(bp, bnx2x_blocks_parity_data[i].mask_addr,
4814a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov			       dis_mask);
4824a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov			DP(NETIF_MSG_HW, "Setting parity mask "
4834a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov						 "for %s to\t\t0x%x\n",
4844a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov				    bnx2x_blocks_parity_data[i].name, dis_mask);
4854a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov		}
4864a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	}
4874a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov
4884a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	/* Disable MCP parity attentions */
4894a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	bnx2x_set_mcp_parity(bp, false);
4904a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov}
4914a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov
4924a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov/**
4934a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov * Clear the parity error status registers.
4944a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov */
4954a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarovstatic inline void bnx2x_clear_blocks_parity(struct bnx2x *bp)
4964a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov{
4974a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	int i;
4984a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	u32 reg_val, mcp_aeu_bits =
4994a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov		AEU_INPUTS_ATTN_BITS_MCP_LATCHED_ROM_PARITY |
5004a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov		AEU_INPUTS_ATTN_BITS_MCP_LATCHED_SCPAD_PARITY |
5014a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov		AEU_INPUTS_ATTN_BITS_MCP_LATCHED_UMP_RX_PARITY |
5024a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov		AEU_INPUTS_ATTN_BITS_MCP_LATCHED_UMP_TX_PARITY;
5034a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov
5044a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	/* Clear SEM_FAST parities */
5054a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	REG_WR(bp, XSEM_REG_FAST_MEMORY + SEM_FAST_REG_PARITY_RST, 0x1);
5064a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	REG_WR(bp, TSEM_REG_FAST_MEMORY + SEM_FAST_REG_PARITY_RST, 0x1);
5074a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	REG_WR(bp, USEM_REG_FAST_MEMORY + SEM_FAST_REG_PARITY_RST, 0x1);
5084a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	REG_WR(bp, CSEM_REG_FAST_MEMORY + SEM_FAST_REG_PARITY_RST, 0x1);
5094a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov
5104a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	for (i = 0; i < ARRAY_SIZE(bnx2x_blocks_parity_data); i++) {
5114a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov		u32 reg_mask = bnx2x_parity_reg_mask(bp, i);
5124a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov
5134a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov		if (reg_mask) {
5144a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov			reg_val = REG_RD(bp, bnx2x_blocks_parity_data[i].
5154a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov					 sts_clr_addr);
5164a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov			if (reg_val & reg_mask)
5174a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov				DP(NETIF_MSG_HW,
5184a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov					    "Parity errors in %s: 0x%x\n",
5194a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov					    bnx2x_blocks_parity_data[i].name,
5204a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov					    reg_val & reg_mask);
5214a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov		}
5224a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	}
5234a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov
5244a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	/* Check if there were parity attentions in MCP */
5254a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	reg_val = REG_RD(bp, MISC_REG_AEU_AFTER_INVERT_4_MCP);
5264a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	if (reg_val & mcp_aeu_bits)
5274a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov		DP(NETIF_MSG_HW, "Parity error in MCP: 0x%x\n",
5284a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov		   reg_val & mcp_aeu_bits);
5294a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov
5304a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	/* Clear parity attentions in MCP:
5314a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	 * [7]  clears Latched rom_parity
5324a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	 * [8]  clears Latched ump_rx_parity
5334a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	 * [9]  clears Latched ump_tx_parity
5344a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	 * [10] clears Latched scpad_parity (both ports)
5354a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	 */
5364a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	REG_WR(bp, MISC_REG_AEU_CLR_LATCH_SIGNAL, 0x780);
5374a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov}
5384a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov
5394a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarovstatic inline void bnx2x_enable_blocks_parity(struct bnx2x *bp)
5404a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov{
5414a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	int i;
5424a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov
5434a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	for (i = 0; i < ARRAY_SIZE(bnx2x_blocks_parity_data); i++) {
5444a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov		u32 reg_mask = bnx2x_parity_reg_mask(bp, i);
5454a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov
5464a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov		if (reg_mask)
5474a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov			REG_WR(bp, bnx2x_blocks_parity_data[i].mask_addr,
5484a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov				bnx2x_blocks_parity_data[i].en_mask & reg_mask);
5494a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	}
5504a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov
5514a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	/* Enable MCP parity attentions */
5524a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov	bnx2x_set_mcp_parity(bp, true);
5534a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov}
5544a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov
5554a33bc03ab66631e844080bf1189d2afd7aae929Vladislav Zolotarov
556a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir#endif /* BNX2X_INIT_H */
557a2fbb9ea235467b0be6db3cec0132b6c83c0b9fbEliezer Tamir
558