1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2015-2020
8 #include "txgbe_type.h"
10 #define TXGBE_SFP_DETECT_RETRIES 10
11 #define TXGBE_MD_COMMAND_TIMEOUT 100 /* PHY Timeout for 1 GB mode */
14 /* ETH PHY Registers */
15 #define SR_XS_PCS_MMD_STATUS1 0x030001
16 #define SR_XS_PCS_CTRL2 0x030007
17 #define SR_PCS_CTRL2_TYPE_SEL MS16(0, 0x3)
18 #define SR_PCS_CTRL2_TYPE_SEL_R LS16(0, 0, 0x3)
19 #define SR_PCS_CTRL2_TYPE_SEL_X LS16(1, 0, 0x3)
20 #define SR_PCS_CTRL2_TYPE_SEL_W LS16(2, 0, 0x3)
21 #define SR_XS_PCS_KR_STS1 0x030020
22 #define SR_XS_PCS_KR_STS1_PLU MS16(12, 0x1)
23 #define SR_PMA_CTRL1 0x010000
24 #define SR_PMA_CTRL1_SS13 MS16(13, 0x1)
25 #define SR_PMA_CTRL1_SS13_KX LS16(0, 13, 0x1)
26 #define SR_PMA_CTRL1_SS13_KX4 LS16(1, 13, 0x1)
27 #define SR_PMA_CTRL1_LB MS16(0, 0x1)
28 #define SR_PMA_KR_PMD_CTRL 0x010096
29 #define SR_PMA_KR_PMD_CTRL_EN_TR MS16(1, 0x1)
30 #define SR_PMA_KR_PMD_CTRL_RS_TR MS16(0, 0x1)
31 #define SR_PMA_KR_PMD_STS 0x010097
32 #define SR_PMA_KR_PMD_STS_TR_FAIL MS16(3, 0x1)
33 #define SR_PMA_KR_PMD_STS_RCV MS16(0, 0x1)
34 #define SR_PMA_KR_LP_CEU 0x010098
35 #define SR_PMA_KR_LP_CESTS 0x010099
36 #define SR_PMA_KR_LP_CESTS_RR MS16(15, 0x1)
37 #define SR_PMA_KR_LD_CEU 0x01009A
38 #define SR_PMA_KR_LD_CESTS 0x01009B
39 #define SR_PMA_KR_LD_CESTS_RR MS16(15, 0x1)
40 #define SR_PMA_KR_FEC_CTRL 0x0100AB
41 #define SR_PMA_KR_FEC_CTRL_EN MS16(0, 0x1)
42 #define SR_MII_MMD_CTL 0x1F0000
43 #define SR_MII_MMD_CTL_AN_EN 0x1000
44 #define SR_MII_MMD_CTL_RESTART_AN 0x0200
45 #define SR_MII_MMD_DIGI_CTL 0x1F8000
46 #define SR_MII_MMD_AN_CTL 0x1F8001
47 #define SR_MII_MMD_AN_ADV 0x1F0004
48 #define SR_MII_MMD_AN_ADV_PAUSE(v) ((0x3 & (v)) << 7)
49 #define SR_MII_MMD_AN_ADV_PAUSE_ASM 0x80
50 #define SR_MII_MMD_AN_ADV_PAUSE_SYM 0x100
51 #define SR_MII_MMD_LP_BABL 0x1F0005
53 #define BP_TYPE_KX 0x20
54 #define BP_TYPE_KX4 0x40
55 #define BP_TYPE_KX4_KX 0x60
56 #define BP_TYPE_KR 0x80
57 #define BP_TYPE_KR_KX 0xA0
58 #define BP_TYPE_KR_KX4 0xC0
59 #define BP_TYPE_KR_KX4_KX 0xE0
61 #define SR_AN_CTRL 0x070000
62 #define SR_AN_CTRL_RSTRT_AN MS16(9, 0x1)
63 #define SR_AN_CTRL_AN_EN MS16(12, 0x1)
64 #define SR_AN_CTRL_EXT_NP MS16(13, 0x1)
65 #define SR_AN_MMD_ADV_REG1 0x070010
66 #define SR_AN_MMD_ADV_REG1_PAUSE(v) ((0x3 & (v)) << 10)
67 #define SR_AN_MMD_ADV_REG1_PAUSE_SYM 0x400
68 #define SR_AN_MMD_ADV_REG1_PAUSE_ASM 0x800
69 #define SR_AN_MMD_ADV_REG1_NP(v) RS16(v, 15, 0x1)
70 #define SR_AN_MMD_ADV_REG2 0x070011
71 #define SR_AN_MMD_ADV_REG2_BP_TYPE_KX4 BP_TYPE_KX4
72 #define SR_AN_MMD_ADV_REG2_BP_TYPE_KX BP_TYPE_KX
73 #define SR_AN_MMD_ADV_REG2_BP_TYPE_KR BP_TYPE_KR
74 #define SR_AN_MMD_ADV_REG2_BP_TYPE_KX4_KX BP_TYPE_KX4_KX
75 #define SR_AN_MMD_ADV_REG2_BP_TYPE_KR_KX BP_TYPE_KR_KX
76 #define SR_AN_MMD_ADV_REG2_BP_TYPE_KR_KX4 BP_TYPE_KR_KX4
77 #define SR_AN_MMD_ADV_REG2_BP_TYPE_KR_KX4_KX BP_TYPE_KR_KX4_KX
78 #define SR_AN_MMD_ADV_REG2_BP_TYPE_MASK 0xFFFF
79 #define SR_AN_MMD_ADV_REG3 0x070012
80 #define SR_AN_MMD_ADV_REG3_FCE(v) RS16(v, 14, 0x3)
81 #define SR_AN_MMD_LP_ABL1 0x070013
82 #define SR_MMD_LP_ABL1_ADV_NP(v) RS16(v, 15, 0x1)
83 #define SR_AN_MMD_LP_ABL2 0x070014
84 #define SR_AN_MMD_LP_ABL2_BP_TYPE_KX4 BP_TYPE_KX4
85 #define SR_AN_MMD_LP_ABL2_BP_TYPE_KX BP_TYPE_KX
86 #define SR_AN_MMD_LP_ABL2_BP_TYPE_KR BP_TYPE_KR
87 #define SR_AN_MMD_LP_ABL2_BP_TYPE_KX4_KX BP_TYPE_KX4_KX
88 #define SR_AN_MMD_LP_ABL2_BP_TYPE_KR_KX BP_TYPE_KR_KX
89 #define SR_AN_MMD_LP_ABL2_BP_TYPE_KR_KX4 BP_TYPE_KR_KX4
90 #define SR_AN_MMD_LP_ABL2_BP_TYPE_KR_KX4_KX BP_TYPE_KR_KX4_KX
91 #define SR_AN_MMD_LP_ABL2_BP_TYPE_MASK 0xFFFF
92 #define SR_AN_MMD_LP_ABL3 0x070015
93 #define SR_AN_MMD_LP_ABL3_FCE(v) RS16(v, 14, 0x3)
94 #define SR_AN_XNP_TX1 0x070016
95 #define SR_AN_XNP_TX1_NP MS16(15, 0x1)
96 #define SR_AN_LP_XNP_ABL1 0x070019
97 #define SR_AN_LP_XNP_ABL1_NP(v) RS16(v, 15, 0x1)
99 #define VR_AN_INTR_MSK 0x078001
100 #define VR_AN_INTR_CMPLT_IE MS16(0, 0x1)
101 #define VR_AN_INTR_LINK_IE MS16(1, 0x1)
102 #define VR_AN_INTR_PG_RCV_IE MS16(2, 0x1)
103 #define VR_AN_INTR 0x078002
104 #define VR_AN_INTR_CMPLT MS16(0, 0x1)
105 #define VR_AN_INTR_LINK MS16(1, 0x1)
106 #define VR_AN_INTR_PG_RCV MS16(2, 0x1)
107 #define VR_AN_KR_MODE_CL 0x078003
108 #define VR_AN_KR_MODE_CL_PDET MS16(0, 0x1)
109 #define VR_XS_OR_PCS_MMD_DIGI_CTL1 0x038000
110 #define VR_XS_OR_PCS_MMD_DIGI_CTL1_ENABLE 0x1000
111 #define VR_XS_OR_PCS_MMD_DIGI_CTL1_VR_RST 0x8000
112 #define VR_XS_OR_PCS_MMD_DIGI_CTL2 0x038001
113 #define VR_XS_OR_PCS_MMD_DIGI_STATUS 0x038010
114 #define VR_XS_OR_PCS_MMD_DIGI_STATUS_PSEQ_MASK 0x1C
115 #define VR_XS_OR_PCS_MMD_DIGI_STATUS_PSEQ_POWER_GOOD 0x10
116 #define VR_PMA_KRTR_PRBS_CTRL0 0x018003
117 #define VR_PMA_KRTR_PRBS31_EN MS16(1, 0x1)
118 #define VR_PMA_KRTR_PRBS_MODE_EN MS16(0, 0x1)
119 #define VR_PMA_KRTR_PRBS_CTRL1 0x018004
120 #define VR_PMA_KRTR_PRBS_TIME_LMT MS16(0, 0xFFFF)
121 #define VR_PMA_KRTR_PRBS_CTRL2 0x018005
122 #define VR_PMA_KRTR_PRBS_ERR_LIM MS16(0, 0x2FFF)
123 #define VR_PMA_KRTR_TIMER_CTRL0 0x018006
124 #define VR_PMA_KRTR_TIMER_MAX_WAIT MS16(0, 0xFFFF)
125 #define VR_PMA_KRTR_TIMER_CTRL2 0x018008
127 #define TXGBE_PHY_MPLLA_CTL0 0x018071
128 #define TXGBE_PHY_MPLLA_CTL3 0x018077
129 #define TXGBE_PHY_MISC_CTL0 0x018090
130 #define TXGBE_PHY_VCO_CAL_LD0 0x018092
131 #define TXGBE_PHY_VCO_CAL_LD1 0x018093
132 #define TXGBE_PHY_VCO_CAL_LD2 0x018094
133 #define TXGBE_PHY_VCO_CAL_LD3 0x018095
134 #define TXGBE_PHY_VCO_CAL_REF0 0x018096
135 #define TXGBE_PHY_VCO_CAL_REF1 0x018097
136 #define TXGBE_PHY_RX_AD_ACK 0x018098
137 #define TXGBE_PHY_AFE_DFE_ENABLE 0x01805D
138 #define TXGBE_PHY_DFE_TAP_CTL0 0x01805E
139 #define TXGBE_PHY_RX_EQ_ATT_LVL0 0x018057
140 #define TXGBE_PHY_RX_EQ_CTL0 0x018058
141 #define TXGBE_PHY_RX_EQ_CTL 0x01805C
142 #define TXGBE_PHY_TX_EQ_CTL0 0x018036
143 #define TXGBE_PHY_TX_EQ_CTL1 0x018037
144 #define TXGBE_PHY_TX_EQ_CTL1_DEF MS16(7, 0x1)
145 #define TXGBE_PHY_TX_RATE_CTL 0x018034
146 #define TXGBE_PHY_RX_RATE_CTL 0x018054
147 #define TXGBE_PHY_TX_GEN_CTL2 0x018032
148 #define TXGBE_PHY_RX_GEN_CTL2 0x018052
149 #define TXGBE_PHY_RX_GEN_CTL3 0x018053
150 #define TXGBE_PHY_MPLLA_CTL2 0x018073
151 #define TXGBE_PHY_RX_POWER_ST_CTL 0x018055
152 #define TXGBE_PHY_TX_POWER_ST_CTL 0x018035
153 #define TXGBE_PHY_TX_GENCTRL1 0x018031
154 #define TXGBE_PHY_EQ_INIT_CTL0 0x01803A
155 #define TXGBE_PHY_EQ_INIT_CTL1 0x01803B
157 #define TXGBE_PHY_MPLLA_CTL0_MULTIPLIER_1GBASEX_KX 32
158 #define TXGBE_PHY_MPLLA_CTL0_MULTIPLIER_10GBASER_KR 33
159 #define TXGBE_PHY_MPLLA_CTL0_MULTIPLIER_OTHER 40
160 #define TXGBE_PHY_MPLLA_CTL0_MULTIPLIER_MASK 0xFF
161 #define TXGBE_PHY_MPLLA_CTL3_MULTIPLIER_BW_1GBASEX_KX 0x56
162 #define TXGBE_PHY_MPLLA_CTL3_MULTIPLIER_BW_10GBASER_KR 0x7B
163 #define TXGBE_PHY_MPLLA_CTL3_MULTIPLIER_BW_OTHER 0x56
164 #define TXGBE_PHY_MPLLA_CTL3_MULTIPLIER_BW_MASK 0x7FF
165 #define TXGBE_PHY_MISC_CTL0_TX2RX_LB_EN_0 0x1
166 #define TXGBE_PHY_MISC_CTL0_TX2RX_LB_EN_3_1 0xE
167 #define TXGBE_PHY_MISC_CTL0_RX_VREF_CTRL 0x1F00
168 #define TXGBE_PHY_VCO_CAL_LD0_1GBASEX_KX 1344
169 #define TXGBE_PHY_VCO_CAL_LD0_10GBASER_KR 1353
170 #define TXGBE_PHY_VCO_CAL_LD0_OTHER 1360
171 #define TXGBE_PHY_VCO_CAL_LD0_MASK 0x1000
172 #define TXGBE_PHY_VCO_CAL_REF0_LD0_1GBASEX_KX 42
173 #define TXGBE_PHY_VCO_CAL_REF0_LD0_10GBASER_KR 41
174 #define TXGBE_PHY_VCO_CAL_REF0_LD0_OTHER 34
175 #define TXGBE_PHY_VCO_CAL_REF0_LD0_MASK 0x3F
176 #define TXGBE_PHY_AFE_DFE_ENABLE_DFE_EN0 0x10
177 #define TXGBE_PHY_AFE_DFE_ENABLE_AFE_EN0 0x1
178 #define TXGBE_PHY_AFE_DFE_ENABLE_MASK 0xFF
179 #define TXGBE_PHY_RX_EQ_CTL_CONT_ADAPT0 0x1
180 #define TXGBE_PHY_RX_EQ_CTL_CONT_ADAPT_MASK 0xF
181 #define TXGBE_PHY_TX_RATE_CTL_TX0_RATE_10GBASER_KR 0x0
182 #define TXGBE_PHY_TX_RATE_CTL_TX0_RATE_RXAUI 0x1
183 #define TXGBE_PHY_TX_RATE_CTL_TX0_RATE_1GBASEX_KX 0x3
184 #define TXGBE_PHY_TX_RATE_CTL_TX0_RATE_OTHER 0x2
185 #define TXGBE_PHY_TX_RATE_CTL_TX1_RATE_OTHER 0x20
186 #define TXGBE_PHY_TX_RATE_CTL_TX2_RATE_OTHER 0x200
187 #define TXGBE_PHY_TX_RATE_CTL_TX3_RATE_OTHER 0x2000
188 #define TXGBE_PHY_TX_RATE_CTL_TX0_RATE_MASK 0x7
189 #define TXGBE_PHY_TX_RATE_CTL_TX1_RATE_MASK 0x70
190 #define TXGBE_PHY_TX_RATE_CTL_TX2_RATE_MASK 0x700
191 #define TXGBE_PHY_TX_RATE_CTL_TX3_RATE_MASK 0x7000
192 #define TXGBE_PHY_RX_RATE_CTL_RX0_RATE_10GBASER_KR 0x0
193 #define TXGBE_PHY_RX_RATE_CTL_RX0_RATE_RXAUI 0x1
194 #define TXGBE_PHY_RX_RATE_CTL_RX0_RATE_1GBASEX_KX 0x3
195 #define TXGBE_PHY_RX_RATE_CTL_RX0_RATE_OTHER 0x2
196 #define TXGBE_PHY_RX_RATE_CTL_RX1_RATE_OTHER 0x20
197 #define TXGBE_PHY_RX_RATE_CTL_RX2_RATE_OTHER 0x200
198 #define TXGBE_PHY_RX_RATE_CTL_RX3_RATE_OTHER 0x2000
199 #define TXGBE_PHY_RX_RATE_CTL_RX0_RATE_MASK 0x7
200 #define TXGBE_PHY_RX_RATE_CTL_RX1_RATE_MASK 0x70
201 #define TXGBE_PHY_RX_RATE_CTL_RX2_RATE_MASK 0x700
202 #define TXGBE_PHY_RX_RATE_CTL_RX3_RATE_MASK 0x7000
203 #define TXGBE_PHY_TX_GEN_CTL2_TX0_WIDTH_10GBASER_KR 0x200
204 #define TXGBE_PHY_TX_GEN_CTL2_TX0_WIDTH_10GBASER_KR_RXAUI 0x300
205 #define TXGBE_PHY_TX_GEN_CTL2_TX0_WIDTH_OTHER 0x100
206 #define TXGBE_PHY_TX_GEN_CTL2_TX0_WIDTH_MASK 0x300
207 #define TXGBE_PHY_TX_GEN_CTL2_TX1_WIDTH_OTHER 0x400
208 #define TXGBE_PHY_TX_GEN_CTL2_TX1_WIDTH_MASK 0xC00
209 #define TXGBE_PHY_TX_GEN_CTL2_TX2_WIDTH_OTHER 0x1000
210 #define TXGBE_PHY_TX_GEN_CTL2_TX2_WIDTH_MASK 0x3000
211 #define TXGBE_PHY_TX_GEN_CTL2_TX3_WIDTH_OTHER 0x4000
212 #define TXGBE_PHY_TX_GEN_CTL2_TX3_WIDTH_MASK 0xC000
213 #define TXGBE_PHY_RX_GEN_CTL2_RX0_WIDTH_10GBASER_KR 0x200
214 #define TXGBE_PHY_RX_GEN_CTL2_RX0_WIDTH_10GBASER_KR_RXAUI 0x300
215 #define TXGBE_PHY_RX_GEN_CTL2_RX0_WIDTH_OTHER 0x100
216 #define TXGBE_PHY_RX_GEN_CTL2_RX0_WIDTH_MASK 0x300
217 #define TXGBE_PHY_RX_GEN_CTL2_RX1_WIDTH_OTHER 0x400
218 #define TXGBE_PHY_RX_GEN_CTL2_RX1_WIDTH_MASK 0xC00
219 #define TXGBE_PHY_RX_GEN_CTL2_RX2_WIDTH_OTHER 0x1000
220 #define TXGBE_PHY_RX_GEN_CTL2_RX2_WIDTH_MASK 0x3000
221 #define TXGBE_PHY_RX_GEN_CTL2_RX3_WIDTH_OTHER 0x4000
222 #define TXGBE_PHY_RX_GEN_CTL2_RX3_WIDTH_MASK 0xC000
223 #define TXGBE_PHY_MPLLA_CTL2_DIV_CLK_EN_8 0x100
224 #define TXGBE_PHY_MPLLA_CTL2_DIV_CLK_EN_10 0x200
225 #define TXGBE_PHY_MPLLA_CTL2_DIV_CLK_EN_16P5 0x400
226 #define TXGBE_PHY_MPLLA_CTL2_DIV_CLK_EN_MASK 0x700
227 #define TXGBE_PHY_LANE0_TX_EQ_CTL1 0x100E
228 #define TXGBE_PHY_LANE0_TX_EQ_CTL1_MAIN(v) RS16(v, 6, 0x3F)
229 #define TXGBE_PHY_LANE0_TX_EQ_CTL2 0x100F
230 #define TXGBE_PHY_LANE0_TX_EQ_CTL2_PRE MS16(0, 0x3F)
231 #define TXGBE_PHY_LANE0_TX_EQ_CTL2_POST(v) RS16(v, 6, 0x3F)
233 /******************************************************************************
235 ******************************************************************************/
236 /* SFP IDs: format of OUI is 0x[byte0][byte1][byte2][00] */
237 #define TXGBE_SFF_VENDOR_OUI_TYCO 0x00407600
238 #define TXGBE_SFF_VENDOR_OUI_FTL 0x00906500
239 #define TXGBE_SFF_VENDOR_OUI_AVAGO 0x00176A00
240 #define TXGBE_SFF_VENDOR_OUI_INTEL 0x001B2100
242 /* EEPROM (dev_addr = 0xA0) */
243 #define TXGBE_I2C_EEPROM_DEV_ADDR 0xA0
244 #define TXGBE_SFF_IDENTIFIER 0x00
245 #define TXGBE_SFF_IDENTIFIER_SFP 0x03
246 #define TXGBE_SFF_VENDOR_OUI_BYTE0 0x25
247 #define TXGBE_SFF_VENDOR_OUI_BYTE1 0x26
248 #define TXGBE_SFF_VENDOR_OUI_BYTE2 0x27
249 #define TXGBE_SFF_1GBE_COMP_CODES 0x06
250 #define TXGBE_SFF_10GBE_COMP_CODES 0x03
251 #define TXGBE_SFF_CABLE_TECHNOLOGY 0x08
252 #define TXGBE_SFF_CABLE_DA_PASSIVE 0x4
253 #define TXGBE_SFF_CABLE_DA_ACTIVE 0x8
254 #define TXGBE_SFF_CABLE_SPEC_COMP 0x3C
255 #define TXGBE_SFF_SFF_8472_SWAP 0x5C
256 #define TXGBE_SFF_SFF_8472_COMP 0x5E
257 #define TXGBE_SFF_SFF_8472_OSCB 0x6E
258 #define TXGBE_SFF_SFF_8472_ESCB 0x76
260 #define TXGBE_SFF_IDENTIFIER_QSFP_PLUS 0x0D
261 #define TXGBE_SFF_QSFP_VENDOR_OUI_BYTE0 0xA5
262 #define TXGBE_SFF_QSFP_VENDOR_OUI_BYTE1 0xA6
263 #define TXGBE_SFF_QSFP_VENDOR_OUI_BYTE2 0xA7
264 #define TXGBE_SFF_QSFP_CONNECTOR 0x82
265 #define TXGBE_SFF_QSFP_10GBE_COMP 0x83
266 #define TXGBE_SFF_QSFP_1GBE_COMP 0x86
267 #define TXGBE_SFF_QSFP_CABLE_LENGTH 0x92
268 #define TXGBE_SFF_QSFP_DEVICE_TECH 0x93
271 #define TXGBE_SFF_DA_SPEC_ACTIVE_LIMITING 0x4
272 #define TXGBE_SFF_1GBASESX_CAPABLE 0x1
273 #define TXGBE_SFF_1GBASELX_CAPABLE 0x2
274 #define TXGBE_SFF_1GBASET_CAPABLE 0x8
275 #define TXGBE_SFF_10GBASESR_CAPABLE 0x10
276 #define TXGBE_SFF_10GBASELR_CAPABLE 0x20
277 #define TXGBE_SFF_SOFT_RS_SELECT_MASK 0x8
278 #define TXGBE_SFF_SOFT_RS_SELECT_10G 0x8
279 #define TXGBE_SFF_SOFT_RS_SELECT_1G 0x0
280 #define TXGBE_SFF_ADDRESSING_MODE 0x4
281 #define TXGBE_SFF_QSFP_DA_ACTIVE_CABLE 0x1
282 #define TXGBE_SFF_QSFP_DA_PASSIVE_CABLE 0x8
283 #define TXGBE_SFF_QSFP_CONNECTOR_NOT_SEPARABLE 0x23
284 #define TXGBE_SFF_QSFP_TRANSMITTER_850NM_VCSEL 0x0
285 #define TXGBE_I2C_EEPROM_READ_MASK 0x100
286 #define TXGBE_I2C_EEPROM_STATUS_MASK 0x3
287 #define TXGBE_I2C_EEPROM_STATUS_NO_OPERATION 0x0
288 #define TXGBE_I2C_EEPROM_STATUS_PASS 0x1
289 #define TXGBE_I2C_EEPROM_STATUS_FAIL 0x2
290 #define TXGBE_I2C_EEPROM_STATUS_IN_PROGRESS 0x3
292 /* EEPROM for SFF-8472 (dev_addr = 0xA2) */
293 #define TXGBE_I2C_EEPROM_DEV_ADDR2 0xA2
295 /* SFP+ SFF-8472 Compliance */
296 #define TXGBE_SFF_SFF_8472_UNSUP 0x00
298 /******************************************************************************
299 * PHY MDIO Registers:
300 ******************************************************************************/
301 #define TXGBE_MAX_PHY_ADDR 32
303 #define TXGBE_PHYID_MTD3310 0x00000000U
304 #define TXGBE_PHYID_TN1010 0x00A19410U
305 #define TXGBE_PHYID_QT2022 0x0043A400U
306 #define TXGBE_PHYID_ATH 0x03429050U
309 #define TXGBE_MD_DEV_PMA_PMD 0x1
310 #define TXGBE_MD_PHY_ID_HIGH 0x2 /* PHY ID High Reg*/
311 #define TXGBE_MD_PHY_ID_LOW 0x3 /* PHY ID Low Reg*/
312 #define TXGBE_PHY_REVISION_MASK 0xFFFFFFF0
313 #define TXGBE_MD_PHY_SPEED_ABILITY 0x4 /* Speed Ability Reg */
314 #define TXGBE_MD_PHY_SPEED_10G 0x0001 /* 10G capable */
315 #define TXGBE_MD_PHY_SPEED_1G 0x0010 /* 1G capable */
316 #define TXGBE_MD_PHY_SPEED_100M 0x0020 /* 100M capable */
317 #define TXGBE_MD_PHY_EXT_ABILITY 0xB /* Ext Ability Reg */
318 #define TXGBE_MD_PHY_10GBASET_ABILITY 0x0004 /* 10GBaseT capable */
319 #define TXGBE_MD_PHY_1000BASET_ABILITY 0x0020 /* 1000BaseT capable */
320 #define TXGBE_MD_PHY_100BASETX_ABILITY 0x0080 /* 100BaseTX capable */
321 #define TXGBE_MD_PHY_SET_LOW_POWER_MODE 0x0800 /* Set low power mode */
323 #define TXGBE_MD_TX_VENDOR_ALARMS_3 0xCC02 /* Vendor Alarms 3 Reg */
324 #define TXGBE_MD_PMA_PMD_SDA_SCL_ADDR 0xC30A /* PHY_XS SDA/SCL Addr Reg */
325 #define TXGBE_MD_PMA_PMD_SDA_SCL_DATA 0xC30B /* PHY_XS SDA/SCL Data Reg */
326 #define TXGBE_MD_PMA_PMD_SDA_SCL_STAT 0xC30C /* PHY_XS SDA/SCL Status Reg */
328 #define TXGBE_MD_FW_REV_LO 0xC011
329 #define TXGBE_MD_FW_REV_HI 0xC012
331 #define TXGBE_TN_LASI_STATUS_REG 0x9005
332 #define TXGBE_TN_LASI_STATUS_TEMP_ALARM 0x0008
335 #define TXGBE_MD_DEV_PCS 0x3
336 #define TXGBE_PCRC8ECL 0x0E810 /* PCR CRC-8 Error Count Lo */
337 #define TXGBE_PCRC8ECH 0x0E811 /* PCR CRC-8 Error Count Hi */
338 #define TXGBE_PCRC8ECH_MASK 0x1F
339 #define TXGBE_LDPCECL 0x0E820 /* PCR Uncorrected Error Count Lo */
340 #define TXGBE_LDPCECH 0x0E821 /* PCR Uncorrected Error Count Hi */
343 #define TXGBE_MD_DEV_PHY_XS 0x4
344 #define TXGBE_MD_PHY_XS_CONTROL 0x0 /* PHY_XS Control Reg */
345 #define TXGBE_MD_PHY_XS_RESET 0x8000 /* PHY_XS Reset */
348 #define TXGBE_MD_DEV_AUTO_NEG 0x7
350 #define TXGBE_MD_AUTO_NEG_CONTROL 0x0 /* AUTO_NEG Control Reg */
351 #define TXGBE_MD_AUTO_NEG_STATUS 0x1 /* AUTO_NEG Status Reg */
352 #define TXGBE_MD_AUTO_NEG_VENDOR_STAT 0xC800 /*AUTO_NEG Vendor Status Reg*/
353 #define TXGBE_MD_AUTO_NEG_VENDOR_TX_ALARM 0xCC00 /* AUTO_NEG Vendor TX Reg */
354 #define TXGBE_MD_AUTO_NEG_VENDOR_TX_ALARM2 0xCC01 /* AUTO_NEG Vendor Tx Reg */
355 #define TXGBE_MD_AUTO_NEG_VEN_LSC 0x1 /* AUTO_NEG Vendor Tx LSC */
356 #define TXGBE_MD_AUTO_NEG_ADVT 0x10 /* AUTO_NEG Advt Reg */
357 #define TXGBE_TAF_SYM_PAUSE MS16(10, 0x3)
358 #define TXGBE_TAF_ASM_PAUSE MS16(11, 0x3)
360 #define TXGBE_MD_AUTO_NEG_LP 0x13 /* AUTO_NEG LP Status Reg */
361 #define TXGBE_MD_AUTO_NEG_EEE_ADVT 0x3C /* AUTO_NEG EEE Advt Reg */
362 /* PHY address definitions for new protocol MDIO commands */
363 #define TXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG 0x20 /* 10G Control Reg */
364 #define TXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG 0xC400 /* 1G Provisioning 1 */
365 #define TXGBE_MII_AUTONEG_XNP_TX_REG 0x17 /* 1G XNP Transmit */
366 #define TXGBE_MII_AUTONEG_ADVERTISE_REG 0x10 /* 100M Advertisement */
367 #define TXGBE_MII_10GBASE_T_ADVERTISE 0x1000 /* full duplex, bit:12*/
368 #define TXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX 0x4000 /* full duplex, bit:14*/
369 #define TXGBE_MII_1GBASE_T_ADVERTISE 0x8000 /* full duplex, bit:15*/
370 #define TXGBE_MII_2_5GBASE_T_ADVERTISE 0x0400
371 #define TXGBE_MII_5GBASE_T_ADVERTISE 0x0800
372 #define TXGBE_MII_100BASE_T_ADVERTISE 0x0100 /* full duplex, bit:8 */
373 #define TXGBE_MII_100BASE_T_ADVERTISE_HALF 0x0080 /* half duplex, bit:7 */
374 #define TXGBE_MII_RESTART 0x200
375 #define TXGBE_MII_AUTONEG_COMPLETE 0x20
376 #define TXGBE_MII_AUTONEG_LINK_UP 0x04
377 #define TXGBE_MII_AUTONEG_REG 0x0
378 #define TXGBE_MD_PMA_TX_VEN_LASI_INT_MASK 0xD401 /* PHY TX Vendor LASI */
379 #define TXGBE_MD_PMA_TX_VEN_LASI_INT_EN 0x1 /* PHY TX Vendor LASI enable */
380 #define TXGBE_MD_PMD_STD_TX_DISABLE_CNTR 0x9 /* Standard Transmit Dis Reg */
381 #define TXGBE_MD_PMD_GLOBAL_TX_DISABLE 0x0001 /* PMD Global Transmit Dis */
383 /* (dev_type = 30) */
384 #define TXGBE_MD_DEV_VENDOR_1 30
385 #define TXGBE_MD_DEV_XFI_DSP 30
386 #define TNX_FW_REV 0xB
387 #define TXGBE_MD_VENDOR_SPECIFIC_1_CONTROL 0x0 /* VS1 Ctrl Reg */
388 #define TXGBE_MD_VENDOR_SPECIFIC_1_STATUS 0x1 /* VS1 Status Reg */
389 #define TXGBE_MD_VENDOR_SPECIFIC_1_LINK_STATUS 0x0008 /* 1 = Link Up */
390 #define TXGBE_MD_VENDOR_SPECIFIC_1_SPEED_STATUS 0x0010 /* 0-10G, 1-1G */
391 #define TXGBE_MD_VENDOR_SPECIFIC_1_10G_SPEED 0x0018
392 #define TXGBE_MD_VENDOR_SPECIFIC_1_1G_SPEED 0x0010
394 /* (dev_type = 31) */
395 #define TXGBE_MD_DEV_GENERAL 31
396 #define TXGBE_MD_PORT_CTRL 0xF001
397 #define TXGBE_MD_PORT_CTRL_RESET MS16(14, 0x1)
399 #define TXGBE_BP_M_NULL 0
400 #define TXGBE_BP_M_SFI 1
401 #define TXGBE_BP_M_KR 2
402 #define TXGBE_BP_M_KX4 3
403 #define TXGBE_BP_M_KX 4
404 #define TXGBE_BP_M_NAUTO 0
405 #define TXGBE_BP_M_AUTO 1
407 #ifndef CL72_KRTR_PRBS_MODE_EN
408 #define CL72_KRTR_PRBS_MODE_EN 0xFFFF /* open kr prbs check */
411 /******************************************************************************
413 ******************************************************************************/
414 #define TXGBE_I2C_SLAVEADDR (0x50)
416 bool txgbe_validate_phy_addr(struct txgbe_hw *hw, u32 phy_addr);
417 enum txgbe_phy_type txgbe_get_phy_type_from_id(u32 phy_id);
418 s32 txgbe_get_phy_id(struct txgbe_hw *hw);
419 s32 txgbe_identify_phy(struct txgbe_hw *hw);
420 s32 txgbe_reset_phy(struct txgbe_hw *hw);
421 s32 txgbe_read_phy_reg_mdi(struct txgbe_hw *hw, u32 reg_addr, u32 device_type,
423 s32 txgbe_write_phy_reg_mdi(struct txgbe_hw *hw, u32 reg_addr, u32 device_type,
425 s32 txgbe_read_phy_reg(struct txgbe_hw *hw, u32 reg_addr,
426 u32 device_type, u16 *phy_data);
427 s32 txgbe_write_phy_reg(struct txgbe_hw *hw, u32 reg_addr,
428 u32 device_type, u16 phy_data);
429 s32 txgbe_setup_phy_link(struct txgbe_hw *hw);
430 s32 txgbe_setup_phy_link_speed(struct txgbe_hw *hw,
432 bool autoneg_wait_to_complete);
433 s32 txgbe_get_phy_fw_version(struct txgbe_hw *hw, u32 *fw_version);
434 s32 txgbe_get_copper_link_capabilities(struct txgbe_hw *hw,
437 s32 txgbe_check_reset_blocked(struct txgbe_hw *hw);
440 s32 txgbe_check_phy_link_tnx(struct txgbe_hw *hw,
443 s32 txgbe_setup_phy_link_tnx(struct txgbe_hw *hw);
445 s32 txgbe_identify_module(struct txgbe_hw *hw);
446 s32 txgbe_identify_sfp_module(struct txgbe_hw *hw);
447 s32 txgbe_identify_qsfp_module(struct txgbe_hw *hw);
449 s32 txgbe_read_i2c_byte(struct txgbe_hw *hw, u8 byte_offset,
450 u8 dev_addr, u8 *data);
451 s32 txgbe_read_i2c_byte_unlocked(struct txgbe_hw *hw, u8 byte_offset,
452 u8 dev_addr, u8 *data);
453 s32 txgbe_write_i2c_byte(struct txgbe_hw *hw, u8 byte_offset,
454 u8 dev_addr, u8 data);
455 s32 txgbe_write_i2c_byte_unlocked(struct txgbe_hw *hw, u8 byte_offset,
456 u8 dev_addr, u8 data);
457 s32 txgbe_read_i2c_sff8472(struct txgbe_hw *hw, u8 byte_offset,
459 s32 txgbe_read_i2c_eeprom(struct txgbe_hw *hw, u8 byte_offset,
461 s32 txgbe_write_i2c_eeprom(struct txgbe_hw *hw, u8 byte_offset,
463 u64 txgbe_autoc_read(struct txgbe_hw *hw);
464 void txgbe_autoc_write(struct txgbe_hw *hw, u64 value);
465 void txgbe_bp_mode_set(struct txgbe_hw *hw);
466 void txgbe_set_phy_temp(struct txgbe_hw *hw);
467 void txgbe_bp_down_event(struct txgbe_hw *hw);
468 s32 txgbe_kr_handle(struct txgbe_hw *hw);
470 #endif /* _TXGBE_PHY_H_ */