1 /******************************************************************************
2
3 Copyright (c) 2001-2012, Intel Corporation
4 All rights reserved.
5
6 Redistribution and use in source and binary forms, with or without
7 modification, are permitted provided that the following conditions are met:
8
9 1. Redistributions of source code must retain the above copyright notice,
10 this list of conditions and the following disclaimer.
11
12 2. Redistributions in binary form must reproduce the above copyright
13 notice, this list of conditions and the following disclaimer in the
14 documentation and/or other materials provided with the distribution.
15
16 3. Neither the name of the Intel Corporation nor the names of its
17 contributors may be used to endorse or promote products derived from
18 this software without specific prior written permission.
19
20 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 POSSIBILITY OF SUCH DAMAGE.
31
32 ******************************************************************************/
33 /*$FreeBSD: src/sys/dev/ixgbe/ixgbe_phy.c,v 1.13 2012/07/05 20:51:44 jfv Exp $*/
34
35 #include "ixgbe_api.h"
36 #include "ixgbe_common.h"
37 #include "ixgbe_phy.h"
38
39 static void ixgbe_i2c_start(struct ixgbe_hw *hw);
40 static void ixgbe_i2c_stop(struct ixgbe_hw *hw);
41 static s32 ixgbe_clock_in_i2c_byte(struct ixgbe_hw *hw, u8 *data);
42 static s32 ixgbe_clock_out_i2c_byte(struct ixgbe_hw *hw, u8 data);
43 static s32 ixgbe_get_i2c_ack(struct ixgbe_hw *hw);
44 static s32 ixgbe_clock_in_i2c_bit(struct ixgbe_hw *hw, bool *data);
45 static s32 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data);
46 static void ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl);
47 static void ixgbe_lower_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl);
48 static s32 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data);
49 static bool ixgbe_get_i2c_data(u32 *i2cctl);
50
51 /**
52 * ixgbe_init_phy_ops_generic - Inits PHY function ptrs
53 * @hw: pointer to the hardware structure
54 *
55 * Initialize the function pointers.
56 **/
ixgbe_init_phy_ops_generic(struct ixgbe_hw * hw)57 s32 ixgbe_init_phy_ops_generic(struct ixgbe_hw *hw)
58 {
59 struct ixgbe_phy_info *phy = &hw->phy;
60
61 DEBUGFUNC("ixgbe_init_phy_ops_generic");
62
63 /* PHY */
64 phy->ops.identify = &ixgbe_identify_phy_generic;
65 phy->ops.reset = &ixgbe_reset_phy_generic;
66 phy->ops.read_reg = &ixgbe_read_phy_reg_generic;
67 phy->ops.write_reg = &ixgbe_write_phy_reg_generic;
68 phy->ops.setup_link = &ixgbe_setup_phy_link_generic;
69 phy->ops.setup_link_speed = &ixgbe_setup_phy_link_speed_generic;
70 phy->ops.check_link = NULL;
71 phy->ops.get_firmware_version = ixgbe_get_phy_firmware_version_generic;
72 phy->ops.read_i2c_byte = &ixgbe_read_i2c_byte_generic;
73 phy->ops.write_i2c_byte = &ixgbe_write_i2c_byte_generic;
74 phy->ops.read_i2c_eeprom = &ixgbe_read_i2c_eeprom_generic;
75 phy->ops.write_i2c_eeprom = &ixgbe_write_i2c_eeprom_generic;
76 phy->ops.i2c_bus_clear = &ixgbe_i2c_bus_clear;
77 phy->ops.identify_sfp = &ixgbe_identify_module_generic;
78 phy->sfp_type = ixgbe_sfp_type_unknown;
79 phy->ops.check_overtemp = &ixgbe_tn_check_overtemp;
80 return IXGBE_SUCCESS;
81 }
82
83 /**
84 * ixgbe_identify_phy_generic - Get physical layer module
85 * @hw: pointer to hardware structure
86 *
87 * Determines the physical layer module found on the current adapter.
88 **/
ixgbe_identify_phy_generic(struct ixgbe_hw * hw)89 s32 ixgbe_identify_phy_generic(struct ixgbe_hw *hw)
90 {
91 s32 status = IXGBE_ERR_PHY_ADDR_INVALID;
92 u32 phy_addr;
93 u16 ext_ability = 0;
94
95 DEBUGFUNC("ixgbe_identify_phy_generic");
96
97 if (hw->phy.type == ixgbe_phy_unknown) {
98 for (phy_addr = 0; phy_addr < IXGBE_MAX_PHY_ADDR; phy_addr++) {
99 if (ixgbe_validate_phy_addr(hw, phy_addr)) {
100 hw->phy.addr = phy_addr;
101 (void) ixgbe_get_phy_id(hw);
102 hw->phy.type =
103 ixgbe_get_phy_type_from_id(hw->phy.id);
104
105 if (hw->phy.type == ixgbe_phy_unknown) {
106 hw->phy.ops.read_reg(hw,
107 IXGBE_MDIO_PHY_EXT_ABILITY,
108 IXGBE_MDIO_PMA_PMD_DEV_TYPE,
109 &ext_ability);
110 if (ext_ability &
111 (IXGBE_MDIO_PHY_10GBASET_ABILITY |
112 IXGBE_MDIO_PHY_1000BASET_ABILITY))
113 hw->phy.type =
114 ixgbe_phy_cu_unknown;
115 else
116 hw->phy.type =
117 ixgbe_phy_generic;
118 }
119
120 status = IXGBE_SUCCESS;
121 break;
122 }
123 }
124 /* clear value if nothing found */
125 if (status != IXGBE_SUCCESS)
126 hw->phy.addr = 0;
127 } else {
128 status = IXGBE_SUCCESS;
129 }
130
131 return status;
132 }
133
134 /**
135 * ixgbe_validate_phy_addr - Determines phy address is valid
136 * @hw: pointer to hardware structure
137 *
138 **/
ixgbe_validate_phy_addr(struct ixgbe_hw * hw,u32 phy_addr)139 bool ixgbe_validate_phy_addr(struct ixgbe_hw *hw, u32 phy_addr)
140 {
141 u16 phy_id = 0;
142 bool valid = FALSE;
143
144 DEBUGFUNC("ixgbe_validate_phy_addr");
145
146 hw->phy.addr = phy_addr;
147 hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_ID_HIGH,
148 IXGBE_MDIO_PMA_PMD_DEV_TYPE, &phy_id);
149
150 if (phy_id != 0xFFFF && phy_id != 0x0)
151 valid = TRUE;
152
153 return valid;
154 }
155
156 /**
157 * ixgbe_get_phy_id - Get the phy type
158 * @hw: pointer to hardware structure
159 *
160 **/
ixgbe_get_phy_id(struct ixgbe_hw * hw)161 s32 ixgbe_get_phy_id(struct ixgbe_hw *hw)
162 {
163 u32 status;
164 u16 phy_id_high = 0;
165 u16 phy_id_low = 0;
166
167 DEBUGFUNC("ixgbe_get_phy_id");
168
169 status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_ID_HIGH,
170 IXGBE_MDIO_PMA_PMD_DEV_TYPE,
171 &phy_id_high);
172
173 if (status == IXGBE_SUCCESS) {
174 hw->phy.id = (u32)(phy_id_high << 16);
175 status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_ID_LOW,
176 IXGBE_MDIO_PMA_PMD_DEV_TYPE,
177 &phy_id_low);
178 hw->phy.id |= (u32)(phy_id_low & IXGBE_PHY_REVISION_MASK);
179 hw->phy.revision = (u32)(phy_id_low & ~IXGBE_PHY_REVISION_MASK);
180 }
181 return status;
182 }
183
184 /**
185 * ixgbe_get_phy_type_from_id - Get the phy type
186 * @hw: pointer to hardware structure
187 *
188 **/
ixgbe_get_phy_type_from_id(u32 phy_id)189 enum ixgbe_phy_type ixgbe_get_phy_type_from_id(u32 phy_id)
190 {
191 enum ixgbe_phy_type phy_type;
192
193 DEBUGFUNC("ixgbe_get_phy_type_from_id");
194
195 switch (phy_id) {
196 case TN1010_PHY_ID:
197 phy_type = ixgbe_phy_tn;
198 break;
199 case X540_PHY_ID:
200 phy_type = ixgbe_phy_aq;
201 break;
202 case QT2022_PHY_ID:
203 phy_type = ixgbe_phy_qt;
204 break;
205 case ATH_PHY_ID:
206 phy_type = ixgbe_phy_nl;
207 break;
208 default:
209 phy_type = ixgbe_phy_unknown;
210 break;
211 }
212
213 DEBUGOUT1("phy type found is %d\n", phy_type);
214 return phy_type;
215 }
216
217 /**
218 * ixgbe_reset_phy_generic - Performs a PHY reset
219 * @hw: pointer to hardware structure
220 **/
ixgbe_reset_phy_generic(struct ixgbe_hw * hw)221 s32 ixgbe_reset_phy_generic(struct ixgbe_hw *hw)
222 {
223 u32 i;
224 u16 ctrl = 0;
225 s32 status = IXGBE_SUCCESS;
226
227 DEBUGFUNC("ixgbe_reset_phy_generic");
228
229 if (hw->phy.type == ixgbe_phy_unknown)
230 status = ixgbe_identify_phy_generic(hw);
231
232 if (status != IXGBE_SUCCESS || hw->phy.type == ixgbe_phy_none)
233 goto out;
234
235 /* Don't reset PHY if it's shut down due to overtemp. */
236 if (!hw->phy.reset_if_overtemp &&
237 (IXGBE_ERR_OVERTEMP == hw->phy.ops.check_overtemp(hw)))
238 goto out;
239
240 /*
241 * Perform soft PHY reset to the PHY_XS.
242 * This will cause a soft reset to the PHY
243 */
244 hw->phy.ops.write_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL,
245 IXGBE_MDIO_PHY_XS_DEV_TYPE,
246 IXGBE_MDIO_PHY_XS_RESET);
247
248 /*
249 * Poll for reset bit to self-clear indicating reset is complete.
250 * Some PHYs could take up to 3 seconds to complete and need about
251 * 1.7 usec delay after the reset is complete.
252 */
253 for (i = 0; i < 30; i++) {
254 msec_delay(100);
255 hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL,
256 IXGBE_MDIO_PHY_XS_DEV_TYPE, &ctrl);
257 if (!(ctrl & IXGBE_MDIO_PHY_XS_RESET)) {
258 usec_delay(2);
259 break;
260 }
261 }
262
263 if (ctrl & IXGBE_MDIO_PHY_XS_RESET) {
264 status = IXGBE_ERR_RESET_FAILED;
265 DEBUGOUT("PHY reset polling failed to complete.\n");
266 }
267
268 out:
269 return status;
270 }
271
272 /**
273 * ixgbe_read_phy_reg_generic - Reads a value from a specified PHY register
274 * @hw: pointer to hardware structure
275 * @reg_addr: 32 bit address of PHY register to read
276 * @phy_data: Pointer to read data from PHY register
277 **/
ixgbe_read_phy_reg_generic(struct ixgbe_hw * hw,u32 reg_addr,u32 device_type,u16 * phy_data)278 s32 ixgbe_read_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
279 u32 device_type, u16 *phy_data)
280 {
281 u32 command;
282 u32 i;
283 u32 data;
284 s32 status = IXGBE_SUCCESS;
285 u16 gssr;
286
287 DEBUGFUNC("ixgbe_read_phy_reg_generic");
288
289 if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
290 gssr = IXGBE_GSSR_PHY1_SM;
291 else
292 gssr = IXGBE_GSSR_PHY0_SM;
293
294 if (hw->mac.ops.acquire_swfw_sync(hw, gssr) != IXGBE_SUCCESS)
295 status = IXGBE_ERR_SWFW_SYNC;
296
297 if (status == IXGBE_SUCCESS) {
298 /* Setup and write the address cycle command */
299 command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT) |
300 (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
301 (hw->phy.addr << IXGBE_MSCA_PHY_ADDR_SHIFT) |
302 (IXGBE_MSCA_ADDR_CYCLE | IXGBE_MSCA_MDI_COMMAND));
303
304 IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
305
306 /*
307 * Check every 10 usec to see if the address cycle completed.
308 * The MDI Command bit will clear when the operation is
309 * complete
310 */
311 for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
312 usec_delay(10);
313
314 command = IXGBE_READ_REG(hw, IXGBE_MSCA);
315
316 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
317 break;
318 }
319
320 if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
321 DEBUGOUT("PHY address command did not complete.\n");
322 status = IXGBE_ERR_PHY;
323 }
324
325 if (status == IXGBE_SUCCESS) {
326 /*
327 * Address cycle complete, setup and write the read
328 * command
329 */
330 command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT) |
331 (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
332 (hw->phy.addr << IXGBE_MSCA_PHY_ADDR_SHIFT) |
333 (IXGBE_MSCA_READ | IXGBE_MSCA_MDI_COMMAND));
334
335 IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
336
337 /*
338 * Check every 10 usec to see if the address cycle
339 * completed. The MDI Command bit will clear when the
340 * operation is complete
341 */
342 for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
343 usec_delay(10);
344
345 command = IXGBE_READ_REG(hw, IXGBE_MSCA);
346
347 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
348 break;
349 }
350
351 if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
352 DEBUGOUT("PHY read command didn't complete\n");
353 status = IXGBE_ERR_PHY;
354 } else {
355 /*
356 * Read operation is complete. Get the data
357 * from MSRWD
358 */
359 data = IXGBE_READ_REG(hw, IXGBE_MSRWD);
360 data >>= IXGBE_MSRWD_READ_DATA_SHIFT;
361 *phy_data = (u16)(data);
362 }
363 }
364
365 hw->mac.ops.release_swfw_sync(hw, gssr);
366 }
367
368 return status;
369 }
370
371 /**
372 * ixgbe_write_phy_reg_generic - Writes a value to specified PHY register
373 * @hw: pointer to hardware structure
374 * @reg_addr: 32 bit PHY register to write
375 * @device_type: 5 bit device type
376 * @phy_data: Data to write to the PHY register
377 **/
ixgbe_write_phy_reg_generic(struct ixgbe_hw * hw,u32 reg_addr,u32 device_type,u16 phy_data)378 s32 ixgbe_write_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
379 u32 device_type, u16 phy_data)
380 {
381 u32 command;
382 u32 i;
383 s32 status = IXGBE_SUCCESS;
384 u16 gssr;
385
386 DEBUGFUNC("ixgbe_write_phy_reg_generic");
387
388 if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
389 gssr = IXGBE_GSSR_PHY1_SM;
390 else
391 gssr = IXGBE_GSSR_PHY0_SM;
392
393 if (hw->mac.ops.acquire_swfw_sync(hw, gssr) != IXGBE_SUCCESS)
394 status = IXGBE_ERR_SWFW_SYNC;
395
396 if (status == IXGBE_SUCCESS) {
397 /* Put the data in the MDI single read and write data register*/
398 IXGBE_WRITE_REG(hw, IXGBE_MSRWD, (u32)phy_data);
399
400 /* Setup and write the address cycle command */
401 command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT) |
402 (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
403 (hw->phy.addr << IXGBE_MSCA_PHY_ADDR_SHIFT) |
404 (IXGBE_MSCA_ADDR_CYCLE | IXGBE_MSCA_MDI_COMMAND));
405
406 IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
407
408 /*
409 * Check every 10 usec to see if the address cycle completed.
410 * The MDI Command bit will clear when the operation is
411 * complete
412 */
413 for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
414 usec_delay(10);
415
416 command = IXGBE_READ_REG(hw, IXGBE_MSCA);
417
418 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
419 break;
420 }
421
422 if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
423 DEBUGOUT("PHY address cmd didn't complete\n");
424 status = IXGBE_ERR_PHY;
425 }
426
427 if (status == IXGBE_SUCCESS) {
428 /*
429 * Address cycle complete, setup and write the write
430 * command
431 */
432 command = ((reg_addr << IXGBE_MSCA_NP_ADDR_SHIFT) |
433 (device_type << IXGBE_MSCA_DEV_TYPE_SHIFT) |
434 (hw->phy.addr << IXGBE_MSCA_PHY_ADDR_SHIFT) |
435 (IXGBE_MSCA_WRITE | IXGBE_MSCA_MDI_COMMAND));
436
437 IXGBE_WRITE_REG(hw, IXGBE_MSCA, command);
438
439 /*
440 * Check every 10 usec to see if the address cycle
441 * completed. The MDI Command bit will clear when the
442 * operation is complete
443 */
444 for (i = 0; i < IXGBE_MDIO_COMMAND_TIMEOUT; i++) {
445 usec_delay(10);
446
447 command = IXGBE_READ_REG(hw, IXGBE_MSCA);
448
449 if ((command & IXGBE_MSCA_MDI_COMMAND) == 0)
450 break;
451 }
452
453 if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) {
454 DEBUGOUT("PHY address cmd didn't complete\n");
455 status = IXGBE_ERR_PHY;
456 }
457 }
458
459 hw->mac.ops.release_swfw_sync(hw, gssr);
460 }
461
462 return status;
463 }
464
465 /**
466 * ixgbe_setup_phy_link_generic - Set and restart autoneg
467 * @hw: pointer to hardware structure
468 *
469 * Restart autonegotiation and PHY and waits for completion.
470 **/
ixgbe_setup_phy_link_generic(struct ixgbe_hw * hw)471 s32 ixgbe_setup_phy_link_generic(struct ixgbe_hw *hw)
472 {
473 s32 status;
474 u32 time_out;
475 u32 max_time_out = 10;
476 u16 autoneg_reg = IXGBE_MII_AUTONEG_REG;
477 bool autoneg = FALSE;
478 ixgbe_link_speed speed;
479
480 DEBUGFUNC("ixgbe_setup_phy_link_generic");
481
482 status =
483 ixgbe_get_copper_link_capabilities_generic(hw, &speed, &autoneg);
484 if (status != IXGBE_SUCCESS)
485 return status;
486
487 if (speed & IXGBE_LINK_SPEED_10GB_FULL) {
488 /* Set or unset auto-negotiation 10G advertisement */
489 hw->phy.ops.read_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG,
490 IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
491 &autoneg_reg);
492
493 autoneg_reg &= ~IXGBE_MII_10GBASE_T_ADVERTISE;
494 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL)
495 autoneg_reg |= IXGBE_MII_10GBASE_T_ADVERTISE;
496
497 hw->phy.ops.write_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG,
498 IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
499 autoneg_reg);
500 }
501
502 if (speed & IXGBE_LINK_SPEED_1GB_FULL) {
503 /* Set or unset auto-negotiation 1G advertisement */
504 hw->phy.ops.read_reg(hw,
505 IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG,
506 IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
507 &autoneg_reg);
508
509 autoneg_reg &= ~IXGBE_MII_1GBASE_T_ADVERTISE;
510 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL)
511 autoneg_reg |= IXGBE_MII_1GBASE_T_ADVERTISE;
512
513 hw->phy.ops.write_reg(hw,
514 IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG,
515 IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
516 autoneg_reg);
517 }
518
519 if (speed & IXGBE_LINK_SPEED_100_FULL) {
520 /* Set or unset auto-negotiation 100M advertisement */
521 hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG,
522 IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
523 &autoneg_reg);
524
525 autoneg_reg &= ~(IXGBE_MII_100BASE_T_ADVERTISE |
526 IXGBE_MII_100BASE_T_ADVERTISE_HALF);
527 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL)
528 autoneg_reg |= IXGBE_MII_100BASE_T_ADVERTISE;
529
530 hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG,
531 IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
532 autoneg_reg);
533 }
534
535 /* Restart PHY autonegotiation and wait for completion */
536 hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
537 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &autoneg_reg);
538
539 autoneg_reg |= IXGBE_MII_RESTART;
540
541 hw->phy.ops.write_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
542 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, autoneg_reg);
543
544 /* Wait for autonegotiation to finish */
545 for (time_out = 0; time_out < max_time_out; time_out++) {
546 usec_delay(10);
547 /* Restart PHY autonegotiation and wait for completion */
548 status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_STATUS,
549 IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
550 &autoneg_reg);
551
552 autoneg_reg &= IXGBE_MII_AUTONEG_COMPLETE;
553 if (autoneg_reg == IXGBE_MII_AUTONEG_COMPLETE)
554 break;
555 }
556
557 if (time_out == max_time_out) {
558 status = IXGBE_ERR_LINK_SETUP;
559 DEBUGOUT("ixgbe_setup_phy_link_generic: time out");
560 }
561
562 return status;
563 }
564
565 /**
566 * ixgbe_setup_phy_link_speed_generic - Sets the auto advertised capabilities
567 * @hw: pointer to hardware structure
568 * @speed: new link speed
569 * @autoneg: TRUE if autonegotiation enabled
570 **/
ixgbe_setup_phy_link_speed_generic(struct ixgbe_hw * hw,ixgbe_link_speed speed,bool autoneg,bool autoneg_wait_to_complete)571 s32 ixgbe_setup_phy_link_speed_generic(struct ixgbe_hw *hw,
572 ixgbe_link_speed speed,
573 bool autoneg,
574 bool autoneg_wait_to_complete)
575 {
576 UNREFERENCED_2PARAMETER(autoneg, autoneg_wait_to_complete);
577
578 DEBUGFUNC("ixgbe_setup_phy_link_speed_generic");
579
580 /*
581 * Clear autoneg_advertised and set new values based on input link
582 * speed.
583 */
584 hw->phy.autoneg_advertised = 0;
585
586 if (speed & IXGBE_LINK_SPEED_10GB_FULL)
587 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_10GB_FULL;
588
589 if (speed & IXGBE_LINK_SPEED_1GB_FULL)
590 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_1GB_FULL;
591
592 if (speed & IXGBE_LINK_SPEED_100_FULL)
593 hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_100_FULL;
594
595 /* Setup link based on the new speed settings */
596 hw->phy.ops.setup_link(hw);
597
598 return IXGBE_SUCCESS;
599 }
600
601 /**
602 * ixgbe_get_copper_link_capabilities_generic - Determines link capabilities
603 * @hw: pointer to hardware structure
604 * @speed: pointer to link speed
605 * @autoneg: boolean auto-negotiation value
606 *
607 * Determines the link capabilities by reading the AUTOC register.
608 **/
ixgbe_get_copper_link_capabilities_generic(struct ixgbe_hw * hw,ixgbe_link_speed * speed,bool * autoneg)609 s32 ixgbe_get_copper_link_capabilities_generic(struct ixgbe_hw *hw,
610 ixgbe_link_speed *speed,
611 bool *autoneg)
612 {
613 s32 status = IXGBE_ERR_LINK_SETUP;
614 u16 speed_ability;
615
616 DEBUGFUNC("ixgbe_get_copper_link_capabilities_generic");
617
618 *speed = 0;
619 *autoneg = TRUE;
620
621 status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_SPEED_ABILITY,
622 IXGBE_MDIO_PMA_PMD_DEV_TYPE,
623 &speed_ability);
624
625 if (status == IXGBE_SUCCESS) {
626 if (speed_ability & IXGBE_MDIO_PHY_SPEED_10G)
627 *speed |= IXGBE_LINK_SPEED_10GB_FULL;
628 if (speed_ability & IXGBE_MDIO_PHY_SPEED_1G)
629 *speed |= IXGBE_LINK_SPEED_1GB_FULL;
630 if (speed_ability & IXGBE_MDIO_PHY_SPEED_100M)
631 *speed |= IXGBE_LINK_SPEED_100_FULL;
632 }
633
634 return status;
635 }
636
637 /**
638 * ixgbe_check_phy_link_tnx - Determine link and speed status
639 * @hw: pointer to hardware structure
640 *
641 * Reads the VS1 register to determine if link is up and the current speed for
642 * the PHY.
643 **/
ixgbe_check_phy_link_tnx(struct ixgbe_hw * hw,ixgbe_link_speed * speed,bool * link_up)644 s32 ixgbe_check_phy_link_tnx(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
645 bool *link_up)
646 {
647 s32 status = IXGBE_SUCCESS;
648 u32 time_out;
649 u32 max_time_out = 10;
650 u16 phy_link = 0;
651 u16 phy_speed = 0;
652 u16 phy_data = 0;
653
654 DEBUGFUNC("ixgbe_check_phy_link_tnx");
655
656 /* Initialize speed and link to default case */
657 *link_up = FALSE;
658 *speed = IXGBE_LINK_SPEED_10GB_FULL;
659
660 /*
661 * Check current speed and link status of the PHY register.
662 * This is a vendor specific register and may have to
663 * be changed for other copper PHYs.
664 */
665 for (time_out = 0; time_out < max_time_out; time_out++) {
666 usec_delay(10);
667 status = hw->phy.ops.read_reg(hw,
668 IXGBE_MDIO_VENDOR_SPECIFIC_1_STATUS,
669 IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE,
670 &phy_data);
671 phy_link = phy_data & IXGBE_MDIO_VENDOR_SPECIFIC_1_LINK_STATUS;
672 phy_speed = phy_data &
673 IXGBE_MDIO_VENDOR_SPECIFIC_1_SPEED_STATUS;
674 if (phy_link == IXGBE_MDIO_VENDOR_SPECIFIC_1_LINK_STATUS) {
675 *link_up = TRUE;
676 if (phy_speed ==
677 IXGBE_MDIO_VENDOR_SPECIFIC_1_SPEED_STATUS)
678 *speed = IXGBE_LINK_SPEED_1GB_FULL;
679 break;
680 }
681 }
682
683 return status;
684 }
685
686 /**
687 * ixgbe_setup_phy_link_tnx - Set and restart autoneg
688 * @hw: pointer to hardware structure
689 *
690 * Restart autonegotiation and PHY and waits for completion.
691 **/
ixgbe_setup_phy_link_tnx(struct ixgbe_hw * hw)692 s32 ixgbe_setup_phy_link_tnx(struct ixgbe_hw *hw)
693 {
694 s32 status;
695 u32 time_out;
696 u32 max_time_out = 10;
697 u16 autoneg_reg = IXGBE_MII_AUTONEG_REG;
698 bool autoneg = FALSE;
699 ixgbe_link_speed speed;
700
701 DEBUGFUNC("ixgbe_setup_phy_link_tnx");
702
703 status =
704 ixgbe_get_copper_link_capabilities_generic(hw, &speed, &autoneg);
705 if (status != IXGBE_SUCCESS)
706 return status;
707
708 if (speed & IXGBE_LINK_SPEED_10GB_FULL) {
709 /* Set or unset auto-negotiation 10G advertisement */
710 hw->phy.ops.read_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG,
711 IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
712 &autoneg_reg);
713
714 autoneg_reg &= ~IXGBE_MII_10GBASE_T_ADVERTISE;
715 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL)
716 autoneg_reg |= IXGBE_MII_10GBASE_T_ADVERTISE;
717
718 hw->phy.ops.write_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG,
719 IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
720 autoneg_reg);
721 }
722
723 if (speed & IXGBE_LINK_SPEED_1GB_FULL) {
724 /* Set or unset auto-negotiation 1G advertisement */
725 hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_XNP_TX_REG,
726 IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
727 &autoneg_reg);
728
729 autoneg_reg &= ~IXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX;
730 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL)
731 autoneg_reg |= IXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX;
732
733 hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_XNP_TX_REG,
734 IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
735 autoneg_reg);
736 }
737
738 if (speed & IXGBE_LINK_SPEED_100_FULL) {
739 /* Set or unset auto-negotiation 100M advertisement */
740 hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG,
741 IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
742 &autoneg_reg);
743
744 autoneg_reg &= ~IXGBE_MII_100BASE_T_ADVERTISE;
745 if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL)
746 autoneg_reg |= IXGBE_MII_100BASE_T_ADVERTISE;
747
748 hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG,
749 IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
750 autoneg_reg);
751 }
752
753 /* Restart PHY autonegotiation and wait for completion */
754 hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
755 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &autoneg_reg);
756
757 autoneg_reg |= IXGBE_MII_RESTART;
758
759 hw->phy.ops.write_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
760 IXGBE_MDIO_AUTO_NEG_DEV_TYPE, autoneg_reg);
761
762 /* Wait for autonegotiation to finish */
763 for (time_out = 0; time_out < max_time_out; time_out++) {
764 usec_delay(10);
765 /* Restart PHY autonegotiation and wait for completion */
766 status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_STATUS,
767 IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
768 &autoneg_reg);
769
770 autoneg_reg &= IXGBE_MII_AUTONEG_COMPLETE;
771 if (autoneg_reg == IXGBE_MII_AUTONEG_COMPLETE)
772 break;
773 }
774
775 if (time_out == max_time_out) {
776 status = IXGBE_ERR_LINK_SETUP;
777 DEBUGOUT("ixgbe_setup_phy_link_tnx: time out");
778 }
779
780 return status;
781 }
782
783 /**
784 * ixgbe_get_phy_firmware_version_tnx - Gets the PHY Firmware Version
785 * @hw: pointer to hardware structure
786 * @firmware_version: pointer to the PHY Firmware Version
787 **/
ixgbe_get_phy_firmware_version_tnx(struct ixgbe_hw * hw,u16 * firmware_version)788 s32 ixgbe_get_phy_firmware_version_tnx(struct ixgbe_hw *hw,
789 u16 *firmware_version)
790 {
791 s32 status = IXGBE_SUCCESS;
792
793 DEBUGFUNC("ixgbe_get_phy_firmware_version_tnx");
794
795 status = hw->phy.ops.read_reg(hw, TNX_FW_REV,
796 IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE,
797 firmware_version);
798
799 return status;
800 }
801
802 /**
803 * ixgbe_get_phy_firmware_version_generic - Gets the PHY Firmware Version
804 * @hw: pointer to hardware structure
805 * @firmware_version: pointer to the PHY Firmware Version
806 **/
ixgbe_get_phy_firmware_version_generic(struct ixgbe_hw * hw,u16 * firmware_version)807 s32 ixgbe_get_phy_firmware_version_generic(struct ixgbe_hw *hw,
808 u16 *firmware_version)
809 {
810 s32 status = IXGBE_SUCCESS;
811
812 DEBUGFUNC("ixgbe_get_phy_firmware_version_generic");
813
814 status = hw->phy.ops.read_reg(hw, AQ_FW_REV,
815 IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE,
816 firmware_version);
817
818 return status;
819 }
820
821 /**
822 * ixgbe_reset_phy_nl - Performs a PHY reset
823 * @hw: pointer to hardware structure
824 **/
ixgbe_reset_phy_nl(struct ixgbe_hw * hw)825 s32 ixgbe_reset_phy_nl(struct ixgbe_hw *hw)
826 {
827 u16 phy_offset, control, eword, edata, block_crc;
828 bool end_data = FALSE;
829 u16 list_offset, data_offset;
830 u16 phy_data = 0;
831 s32 ret_val = IXGBE_SUCCESS;
832 u32 i;
833
834 DEBUGFUNC("ixgbe_reset_phy_nl");
835
836 hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL,
837 IXGBE_MDIO_PHY_XS_DEV_TYPE, &phy_data);
838
839 /* reset the PHY and poll for completion */
840 hw->phy.ops.write_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL,
841 IXGBE_MDIO_PHY_XS_DEV_TYPE,
842 (phy_data | IXGBE_MDIO_PHY_XS_RESET));
843
844 for (i = 0; i < 100; i++) {
845 hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL,
846 IXGBE_MDIO_PHY_XS_DEV_TYPE, &phy_data);
847 if ((phy_data & IXGBE_MDIO_PHY_XS_RESET) == 0)
848 break;
849 msec_delay(10);
850 }
851
852 if ((phy_data & IXGBE_MDIO_PHY_XS_RESET) != 0) {
853 DEBUGOUT("PHY reset did not complete.\n");
854 ret_val = IXGBE_ERR_PHY;
855 goto out;
856 }
857
858 /* Get init offsets */
859 ret_val = ixgbe_get_sfp_init_sequence_offsets(hw, &list_offset,
860 &data_offset);
861 if (ret_val != IXGBE_SUCCESS)
862 goto out;
863
864 ret_val = hw->eeprom.ops.read(hw, data_offset, &block_crc);
865 data_offset++;
866 while (!end_data) {
867 /*
868 * Read control word from PHY init contents offset
869 */
870 ret_val = hw->eeprom.ops.read(hw, data_offset, &eword);
871 control = (eword & IXGBE_CONTROL_MASK_NL) >>
872 IXGBE_CONTROL_SHIFT_NL;
873 edata = eword & IXGBE_DATA_MASK_NL;
874 switch (control) {
875 case IXGBE_DELAY_NL:
876 data_offset++;
877 DEBUGOUT1("DELAY: %d MS\n", edata);
878 msec_delay(edata);
879 break;
880 case IXGBE_DATA_NL:
881 DEBUGOUT("DATA:\n");
882 data_offset++;
883 hw->eeprom.ops.read(hw, data_offset++,
884 &phy_offset);
885 for (i = 0; i < edata; i++) {
886 hw->eeprom.ops.read(hw, data_offset, &eword);
887 hw->phy.ops.write_reg(hw, phy_offset,
888 IXGBE_TWINAX_DEV, eword);
889 DEBUGOUT2("Wrote %4.4x to %4.4x\n", eword,
890 phy_offset);
891 data_offset++;
892 phy_offset++;
893 }
894 break;
895 case IXGBE_CONTROL_NL:
896 data_offset++;
897 DEBUGOUT("CONTROL:\n");
898 if (edata == IXGBE_CONTROL_EOL_NL) {
899 DEBUGOUT("EOL\n");
900 end_data = TRUE;
901 } else if (edata == IXGBE_CONTROL_SOL_NL) {
902 DEBUGOUT("SOL\n");
903 } else {
904 DEBUGOUT("Bad control value\n");
905 ret_val = IXGBE_ERR_PHY;
906 goto out;
907 }
908 break;
909 default:
910 DEBUGOUT("Bad control type\n");
911 ret_val = IXGBE_ERR_PHY;
912 goto out;
913 }
914 }
915
916 out:
917 return ret_val;
918 }
919
920 /**
921 * ixgbe_identify_module_generic - Identifies module type
922 * @hw: pointer to hardware structure
923 *
924 * Determines HW type and calls appropriate function.
925 **/
ixgbe_identify_module_generic(struct ixgbe_hw * hw)926 s32 ixgbe_identify_module_generic(struct ixgbe_hw *hw)
927 {
928 s32 status = IXGBE_ERR_SFP_NOT_PRESENT;
929
930 DEBUGFUNC("ixgbe_identify_module_generic");
931
932 switch (hw->mac.ops.get_media_type(hw)) {
933 case ixgbe_media_type_fiber:
934 status = ixgbe_identify_sfp_module_generic(hw);
935 break;
936
937
938 default:
939 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
940 status = IXGBE_ERR_SFP_NOT_PRESENT;
941 break;
942 }
943
944 return status;
945 }
946
947 /**
948 * ixgbe_identify_sfp_module_generic - Identifies SFP modules
949 * @hw: pointer to hardware structure
950 *
951 * Searches for and identifies the SFP module and assigns appropriate PHY type.
952 **/
ixgbe_identify_sfp_module_generic(struct ixgbe_hw * hw)953 s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
954 {
955 s32 status = IXGBE_ERR_PHY_ADDR_INVALID;
956 u32 vendor_oui = 0;
957 enum ixgbe_sfp_type stored_sfp_type = hw->phy.sfp_type;
958 u8 identifier = 0;
959 u8 comp_codes_1g = 0;
960 u8 comp_codes_10g = 0;
961 u8 oui_bytes[3] = {0, 0, 0};
962 u8 cable_tech = 0;
963 u8 cable_spec = 0;
964 u16 enforce_sfp = 0;
965
966 DEBUGFUNC("ixgbe_identify_sfp_module_generic");
967
968 if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_fiber) {
969 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
970 status = IXGBE_ERR_SFP_NOT_PRESENT;
971 goto out;
972 }
973
974 status = hw->phy.ops.read_i2c_eeprom(hw,
975 IXGBE_SFF_IDENTIFIER,
976 &identifier);
977
978 if (status == IXGBE_ERR_SWFW_SYNC ||
979 status == IXGBE_ERR_I2C ||
980 status == IXGBE_ERR_SFP_NOT_PRESENT)
981 goto err_read_i2c_eeprom;
982
983 /* LAN ID is needed for sfp_type determination */
984 hw->mac.ops.set_lan_id(hw);
985
986 if (identifier != IXGBE_SFF_IDENTIFIER_SFP) {
987 hw->phy.type = ixgbe_phy_sfp_unsupported;
988 status = IXGBE_ERR_SFP_NOT_SUPPORTED;
989 } else {
990 status = hw->phy.ops.read_i2c_eeprom(hw,
991 IXGBE_SFF_1GBE_COMP_CODES,
992 &comp_codes_1g);
993
994 if (status == IXGBE_ERR_SWFW_SYNC ||
995 status == IXGBE_ERR_I2C ||
996 status == IXGBE_ERR_SFP_NOT_PRESENT)
997 goto err_read_i2c_eeprom;
998
999 status = hw->phy.ops.read_i2c_eeprom(hw,
1000 IXGBE_SFF_10GBE_COMP_CODES,
1001 &comp_codes_10g);
1002
1003 if (status == IXGBE_ERR_SWFW_SYNC ||
1004 status == IXGBE_ERR_I2C ||
1005 status == IXGBE_ERR_SFP_NOT_PRESENT)
1006 goto err_read_i2c_eeprom;
1007 status = hw->phy.ops.read_i2c_eeprom(hw,
1008 IXGBE_SFF_CABLE_TECHNOLOGY,
1009 &cable_tech);
1010
1011 if (status == IXGBE_ERR_SWFW_SYNC ||
1012 status == IXGBE_ERR_I2C ||
1013 status == IXGBE_ERR_SFP_NOT_PRESENT)
1014 goto err_read_i2c_eeprom;
1015
1016 /* ID Module
1017 * =========
1018 * 0 SFP_DA_CU
1019 * 1 SFP_SR
1020 * 2 SFP_LR
1021 * 3 SFP_DA_CORE0 - 82599-specific
1022 * 4 SFP_DA_CORE1 - 82599-specific
1023 * 5 SFP_SR/LR_CORE0 - 82599-specific
1024 * 6 SFP_SR/LR_CORE1 - 82599-specific
1025 * 7 SFP_act_lmt_DA_CORE0 - 82599-specific
1026 * 8 SFP_act_lmt_DA_CORE1 - 82599-specific
1027 * 9 SFP_1g_cu_CORE0 - 82599-specific
1028 * 10 SFP_1g_cu_CORE1 - 82599-specific
1029 * 11 SFP_1g_sx_CORE0 - 82599-specific
1030 * 12 SFP_1g_sx_CORE1 - 82599-specific
1031 */
1032 if (hw->mac.type == ixgbe_mac_82598EB) {
1033 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1034 hw->phy.sfp_type = ixgbe_sfp_type_da_cu;
1035 else if (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)
1036 hw->phy.sfp_type = ixgbe_sfp_type_sr;
1037 else if (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)
1038 hw->phy.sfp_type = ixgbe_sfp_type_lr;
1039 else
1040 hw->phy.sfp_type = ixgbe_sfp_type_unknown;
1041 } else if (hw->mac.type == ixgbe_mac_82599EB) {
1042 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE) {
1043 if (hw->bus.lan_id == 0)
1044 hw->phy.sfp_type =
1045 ixgbe_sfp_type_da_cu_core0;
1046 else
1047 hw->phy.sfp_type =
1048 ixgbe_sfp_type_da_cu_core1;
1049 } else if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE) {
1050 hw->phy.ops.read_i2c_eeprom(
1051 hw, IXGBE_SFF_CABLE_SPEC_COMP,
1052 &cable_spec);
1053 if (cable_spec &
1054 IXGBE_SFF_DA_SPEC_ACTIVE_LIMITING) {
1055 if (hw->bus.lan_id == 0)
1056 hw->phy.sfp_type =
1057 ixgbe_sfp_type_da_act_lmt_core0;
1058 else
1059 hw->phy.sfp_type =
1060 ixgbe_sfp_type_da_act_lmt_core1;
1061 } else {
1062 hw->phy.sfp_type =
1063 ixgbe_sfp_type_unknown;
1064 }
1065 } else if (comp_codes_10g &
1066 (IXGBE_SFF_10GBASESR_CAPABLE |
1067 IXGBE_SFF_10GBASELR_CAPABLE)) {
1068 if (hw->bus.lan_id == 0)
1069 hw->phy.sfp_type =
1070 ixgbe_sfp_type_srlr_core0;
1071 else
1072 hw->phy.sfp_type =
1073 ixgbe_sfp_type_srlr_core1;
1074 } else if (comp_codes_1g & IXGBE_SFF_1GBASET_CAPABLE) {
1075 if (hw->bus.lan_id == 0)
1076 hw->phy.sfp_type =
1077 ixgbe_sfp_type_1g_cu_core0;
1078 else
1079 hw->phy.sfp_type =
1080 ixgbe_sfp_type_1g_cu_core1;
1081 } else if (comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) {
1082 if (hw->bus.lan_id == 0)
1083 hw->phy.sfp_type =
1084 ixgbe_sfp_type_1g_sx_core0;
1085 else
1086 hw->phy.sfp_type =
1087 ixgbe_sfp_type_1g_sx_core1;
1088 } else if (comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) {
1089 if (hw->bus.lan_id == 0)
1090 hw->phy.sfp_type =
1091 ixgbe_sfp_type_1g_lx_core0;
1092 else
1093 hw->phy.sfp_type =
1094 ixgbe_sfp_type_1g_lx_core1;
1095 } else {
1096 hw->phy.sfp_type = ixgbe_sfp_type_unknown;
1097 }
1098 }
1099
1100 if (hw->phy.sfp_type != stored_sfp_type)
1101 hw->phy.sfp_setup_needed = TRUE;
1102
1103 /* Determine if the SFP+ PHY is dual speed or not. */
1104 hw->phy.multispeed_fiber = FALSE;
1105 if (((comp_codes_1g & IXGBE_SFF_1GBASESX_CAPABLE) &&
1106 (comp_codes_10g & IXGBE_SFF_10GBASESR_CAPABLE)) ||
1107 ((comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) &&
1108 (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)))
1109 hw->phy.multispeed_fiber = TRUE;
1110
1111 /* Determine PHY vendor */
1112 if (hw->phy.type != ixgbe_phy_nl) {
1113 hw->phy.id = identifier;
1114 status = hw->phy.ops.read_i2c_eeprom(hw,
1115 IXGBE_SFF_VENDOR_OUI_BYTE0,
1116 &oui_bytes[0]);
1117
1118 if (status == IXGBE_ERR_SWFW_SYNC ||
1119 status == IXGBE_ERR_I2C ||
1120 status == IXGBE_ERR_SFP_NOT_PRESENT)
1121 goto err_read_i2c_eeprom;
1122
1123 status = hw->phy.ops.read_i2c_eeprom(hw,
1124 IXGBE_SFF_VENDOR_OUI_BYTE1,
1125 &oui_bytes[1]);
1126
1127 if (status == IXGBE_ERR_SWFW_SYNC ||
1128 status == IXGBE_ERR_I2C ||
1129 status == IXGBE_ERR_SFP_NOT_PRESENT)
1130 goto err_read_i2c_eeprom;
1131
1132 status = hw->phy.ops.read_i2c_eeprom(hw,
1133 IXGBE_SFF_VENDOR_OUI_BYTE2,
1134 &oui_bytes[2]);
1135
1136 if (status == IXGBE_ERR_SWFW_SYNC ||
1137 status == IXGBE_ERR_I2C ||
1138 status == IXGBE_ERR_SFP_NOT_PRESENT)
1139 goto err_read_i2c_eeprom;
1140
1141 vendor_oui =
1142 ((oui_bytes[0] << IXGBE_SFF_VENDOR_OUI_BYTE0_SHIFT) |
1143 (oui_bytes[1] << IXGBE_SFF_VENDOR_OUI_BYTE1_SHIFT) |
1144 (oui_bytes[2] << IXGBE_SFF_VENDOR_OUI_BYTE2_SHIFT));
1145
1146 switch (vendor_oui) {
1147 case IXGBE_SFF_VENDOR_OUI_TYCO:
1148 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1149 hw->phy.type =
1150 ixgbe_phy_sfp_passive_tyco;
1151 break;
1152 case IXGBE_SFF_VENDOR_OUI_FTL:
1153 if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE)
1154 hw->phy.type = ixgbe_phy_sfp_ftl_active;
1155 else
1156 hw->phy.type = ixgbe_phy_sfp_ftl;
1157 break;
1158 case IXGBE_SFF_VENDOR_OUI_AVAGO:
1159 hw->phy.type = ixgbe_phy_sfp_avago;
1160 break;
1161 case IXGBE_SFF_VENDOR_OUI_INTEL:
1162 hw->phy.type = ixgbe_phy_sfp_intel;
1163 break;
1164 default:
1165 if (cable_tech & IXGBE_SFF_DA_PASSIVE_CABLE)
1166 hw->phy.type =
1167 ixgbe_phy_sfp_passive_unknown;
1168 else if (cable_tech & IXGBE_SFF_DA_ACTIVE_CABLE)
1169 hw->phy.type =
1170 ixgbe_phy_sfp_active_unknown;
1171 else
1172 hw->phy.type = ixgbe_phy_sfp_unknown;
1173 break;
1174 }
1175 }
1176
1177 /* Allow any DA cable vendor */
1178 if (cable_tech & (IXGBE_SFF_DA_PASSIVE_CABLE |
1179 IXGBE_SFF_DA_ACTIVE_CABLE)) {
1180 status = IXGBE_SUCCESS;
1181 goto out;
1182 }
1183
1184 /* Verify supported 1G SFP modules */
1185 if (comp_codes_10g == 0 &&
1186 !(hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
1187 hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core0 ||
1188 hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core0 ||
1189 hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core1 ||
1190 hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core0 ||
1191 hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core1)) {
1192 hw->phy.type = ixgbe_phy_sfp_unsupported;
1193 status = IXGBE_ERR_SFP_NOT_SUPPORTED;
1194 goto out;
1195 }
1196
1197 /* Anything else 82598-based is supported */
1198 if (hw->mac.type == ixgbe_mac_82598EB) {
1199 status = IXGBE_SUCCESS;
1200 goto out;
1201 }
1202
1203 (void) ixgbe_get_device_caps(hw, &enforce_sfp);
1204 if (!(enforce_sfp & IXGBE_DEVICE_CAPS_ALLOW_ANY_SFP) &&
1205 !(hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core0 ||
1206 hw->phy.sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
1207 hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core0 ||
1208 hw->phy.sfp_type == ixgbe_sfp_type_1g_lx_core1 ||
1209 hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core0 ||
1210 hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core1)) {
1211 /* Make sure we're a supported PHY type */
1212 if (hw->phy.type == ixgbe_phy_sfp_intel) {
1213 status = IXGBE_SUCCESS;
1214 } else {
1215 if (hw->allow_unsupported_sfp == TRUE) {
1216 EWARN(hw, "WARNING: Intel (R) Network "
1217 "Connections are quality tested "
1218 "using Intel (R) Ethernet Optics."
1219 " Using untested modules is not "
1220 "supported and may cause unstable"
1221 " operation or damage to the "
1222 "module or the adapter. Intel "
1223 "Corporation is not responsible "
1224 "for any harm caused by using "
1225 "untested modules.\n", status);
1226 status = IXGBE_SUCCESS;
1227 } else {
1228 EWARN(hw, "SFP+ module not supported\n",
1229 status);
1230 hw->phy.type =
1231 ixgbe_phy_sfp_unsupported;
1232 status = IXGBE_ERR_SFP_NOT_SUPPORTED;
1233 }
1234 }
1235 } else {
1236 status = IXGBE_SUCCESS;
1237 }
1238 }
1239
1240 out:
1241 return status;
1242
1243 err_read_i2c_eeprom:
1244 hw->phy.sfp_type = ixgbe_sfp_type_not_present;
1245 if (hw->phy.type != ixgbe_phy_nl) {
1246 hw->phy.id = 0;
1247 hw->phy.type = ixgbe_phy_unknown;
1248 }
1249 return IXGBE_ERR_SFP_NOT_PRESENT;
1250 }
1251
1252
1253
1254 /**
1255 * ixgbe_get_sfp_init_sequence_offsets - Provides offset of PHY init sequence
1256 * @hw: pointer to hardware structure
1257 * @list_offset: offset to the SFP ID list
1258 * @data_offset: offset to the SFP data block
1259 *
1260 * Checks the MAC's EEPROM to see if it supports a given SFP+ module type, if
1261 * so it returns the offsets to the phy init sequence block.
1262 **/
ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw * hw,u16 * list_offset,u16 * data_offset)1263 s32 ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw *hw,
1264 u16 *list_offset,
1265 u16 *data_offset)
1266 {
1267 u16 sfp_id;
1268 u16 sfp_type = hw->phy.sfp_type;
1269
1270 DEBUGFUNC("ixgbe_get_sfp_init_sequence_offsets");
1271
1272 if (hw->phy.sfp_type == ixgbe_sfp_type_unknown)
1273 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1274
1275 if (hw->phy.sfp_type == ixgbe_sfp_type_not_present)
1276 return IXGBE_ERR_SFP_NOT_PRESENT;
1277
1278 if ((hw->device_id == IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM) &&
1279 (hw->phy.sfp_type == ixgbe_sfp_type_da_cu))
1280 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1281
1282 /*
1283 * Limiting active cables and 1G Phys must be initialized as
1284 * SR modules
1285 */
1286 if (sfp_type == ixgbe_sfp_type_da_act_lmt_core0 ||
1287 sfp_type == ixgbe_sfp_type_1g_lx_core0 ||
1288 sfp_type == ixgbe_sfp_type_1g_cu_core0 ||
1289 sfp_type == ixgbe_sfp_type_1g_sx_core0)
1290 sfp_type = ixgbe_sfp_type_srlr_core0;
1291 else if (sfp_type == ixgbe_sfp_type_da_act_lmt_core1 ||
1292 sfp_type == ixgbe_sfp_type_1g_lx_core1 ||
1293 sfp_type == ixgbe_sfp_type_1g_cu_core1 ||
1294 sfp_type == ixgbe_sfp_type_1g_sx_core1)
1295 sfp_type = ixgbe_sfp_type_srlr_core1;
1296
1297 /* Read offset to PHY init contents */
1298 hw->eeprom.ops.read(hw, IXGBE_PHY_INIT_OFFSET_NL, list_offset);
1299
1300 if ((!*list_offset) || (*list_offset == 0xFFFF))
1301 return IXGBE_ERR_SFP_NO_INIT_SEQ_PRESENT;
1302
1303 /* Shift offset to first ID word */
1304 (*list_offset)++;
1305
1306 /*
1307 * Find the matching SFP ID in the EEPROM
1308 * and program the init sequence
1309 */
1310 hw->eeprom.ops.read(hw, *list_offset, &sfp_id);
1311
1312 while (sfp_id != IXGBE_PHY_INIT_END_NL) {
1313 if (sfp_id == sfp_type) {
1314 (*list_offset)++;
1315 hw->eeprom.ops.read(hw, *list_offset, data_offset);
1316 if ((!*data_offset) || (*data_offset == 0xFFFF)) {
1317 DEBUGOUT("SFP+ module not supported\n");
1318 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1319 } else {
1320 break;
1321 }
1322 } else {
1323 (*list_offset) += 2;
1324 if (hw->eeprom.ops.read(hw, *list_offset, &sfp_id))
1325 return IXGBE_ERR_PHY;
1326 }
1327 }
1328
1329 if (sfp_id == IXGBE_PHY_INIT_END_NL) {
1330 DEBUGOUT("No matching SFP+ module found\n");
1331 return IXGBE_ERR_SFP_NOT_SUPPORTED;
1332 }
1333
1334 return IXGBE_SUCCESS;
1335 }
1336
1337 /**
1338 * ixgbe_read_i2c_eeprom_generic - Reads 8 bit EEPROM word over I2C interface
1339 * @hw: pointer to hardware structure
1340 * @byte_offset: EEPROM byte offset to read
1341 * @eeprom_data: value read
1342 *
1343 * Performs byte read operation to SFP module's EEPROM over I2C interface.
1344 **/
ixgbe_read_i2c_eeprom_generic(struct ixgbe_hw * hw,u8 byte_offset,u8 * eeprom_data)1345 s32 ixgbe_read_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset,
1346 u8 *eeprom_data)
1347 {
1348 DEBUGFUNC("ixgbe_read_i2c_eeprom_generic");
1349
1350 return hw->phy.ops.read_i2c_byte(hw, byte_offset,
1351 IXGBE_I2C_EEPROM_DEV_ADDR,
1352 eeprom_data);
1353 }
1354
1355 /**
1356 * ixgbe_write_i2c_eeprom_generic - Writes 8 bit EEPROM word over I2C interface
1357 * @hw: pointer to hardware structure
1358 * @byte_offset: EEPROM byte offset to write
1359 * @eeprom_data: value to write
1360 *
1361 * Performs byte write operation to SFP module's EEPROM over I2C interface.
1362 **/
ixgbe_write_i2c_eeprom_generic(struct ixgbe_hw * hw,u8 byte_offset,u8 eeprom_data)1363 s32 ixgbe_write_i2c_eeprom_generic(struct ixgbe_hw *hw, u8 byte_offset,
1364 u8 eeprom_data)
1365 {
1366 DEBUGFUNC("ixgbe_write_i2c_eeprom_generic");
1367
1368 return hw->phy.ops.write_i2c_byte(hw, byte_offset,
1369 IXGBE_I2C_EEPROM_DEV_ADDR,
1370 eeprom_data);
1371 }
1372
1373 /**
1374 * ixgbe_read_i2c_byte_generic - Reads 8 bit word over I2C
1375 * @hw: pointer to hardware structure
1376 * @byte_offset: byte offset to read
1377 * @data: value read
1378 *
1379 * Performs byte read operation to SFP module's EEPROM over I2C interface at
1380 * a specified device address.
1381 **/
ixgbe_read_i2c_byte_generic(struct ixgbe_hw * hw,u8 byte_offset,u8 dev_addr,u8 * data)1382 s32 ixgbe_read_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
1383 u8 dev_addr, u8 *data)
1384 {
1385 s32 status = IXGBE_SUCCESS;
1386 u32 max_retry = 10;
1387 u32 retry = 0;
1388 u16 swfw_mask = 0;
1389 bool nack = 1;
1390 *data = 0;
1391
1392 DEBUGFUNC("ixgbe_read_i2c_byte_generic");
1393
1394 if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
1395 swfw_mask = IXGBE_GSSR_PHY1_SM;
1396 else
1397 swfw_mask = IXGBE_GSSR_PHY0_SM;
1398
1399 do {
1400 if (hw->mac.ops.acquire_swfw_sync(hw, swfw_mask)
1401 != IXGBE_SUCCESS) {
1402 status = IXGBE_ERR_SWFW_SYNC;
1403 goto read_byte_out;
1404 }
1405
1406 ixgbe_i2c_start(hw);
1407
1408 /* Device Address and write indication */
1409 status = ixgbe_clock_out_i2c_byte(hw, dev_addr);
1410 if (status != IXGBE_SUCCESS)
1411 goto fail;
1412
1413 status = ixgbe_get_i2c_ack(hw);
1414 if (status != IXGBE_SUCCESS)
1415 goto fail;
1416
1417 status = ixgbe_clock_out_i2c_byte(hw, byte_offset);
1418 if (status != IXGBE_SUCCESS)
1419 goto fail;
1420
1421 status = ixgbe_get_i2c_ack(hw);
1422 if (status != IXGBE_SUCCESS)
1423 goto fail;
1424
1425 ixgbe_i2c_start(hw);
1426
1427 /* Device Address and read indication */
1428 status = ixgbe_clock_out_i2c_byte(hw, (dev_addr | 0x1));
1429 if (status != IXGBE_SUCCESS)
1430 goto fail;
1431
1432 status = ixgbe_get_i2c_ack(hw);
1433 if (status != IXGBE_SUCCESS)
1434 goto fail;
1435
1436 status = ixgbe_clock_in_i2c_byte(hw, data);
1437 if (status != IXGBE_SUCCESS)
1438 goto fail;
1439
1440 status = ixgbe_clock_out_i2c_bit(hw, nack);
1441 if (status != IXGBE_SUCCESS)
1442 goto fail;
1443
1444 ixgbe_i2c_stop(hw);
1445 break;
1446
1447 fail:
1448 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
1449 msec_delay(100);
1450 ixgbe_i2c_bus_clear(hw);
1451 retry++;
1452 if (retry < max_retry)
1453 DEBUGOUT("I2C byte read error - Retrying.\n");
1454 else
1455 DEBUGOUT("I2C byte read error.\n");
1456
1457 } while (retry < max_retry);
1458
1459 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
1460
1461 read_byte_out:
1462 return status;
1463 }
1464
1465 /**
1466 * ixgbe_write_i2c_byte_generic - Writes 8 bit word over I2C
1467 * @hw: pointer to hardware structure
1468 * @byte_offset: byte offset to write
1469 * @data: value to write
1470 *
1471 * Performs byte write operation to SFP module's EEPROM over I2C interface at
1472 * a specified device address.
1473 **/
ixgbe_write_i2c_byte_generic(struct ixgbe_hw * hw,u8 byte_offset,u8 dev_addr,u8 data)1474 s32 ixgbe_write_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset,
1475 u8 dev_addr, u8 data)
1476 {
1477 s32 status = IXGBE_SUCCESS;
1478 u32 max_retry = 1;
1479 u32 retry = 0;
1480 u16 swfw_mask = 0;
1481
1482 DEBUGFUNC("ixgbe_write_i2c_byte_generic");
1483
1484 if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
1485 swfw_mask = IXGBE_GSSR_PHY1_SM;
1486 else
1487 swfw_mask = IXGBE_GSSR_PHY0_SM;
1488
1489 if (hw->mac.ops.acquire_swfw_sync(hw, swfw_mask) != IXGBE_SUCCESS) {
1490 status = IXGBE_ERR_SWFW_SYNC;
1491 goto write_byte_out;
1492 }
1493
1494 do {
1495 ixgbe_i2c_start(hw);
1496
1497 status = ixgbe_clock_out_i2c_byte(hw, dev_addr);
1498 if (status != IXGBE_SUCCESS)
1499 goto fail;
1500
1501 status = ixgbe_get_i2c_ack(hw);
1502 if (status != IXGBE_SUCCESS)
1503 goto fail;
1504
1505 status = ixgbe_clock_out_i2c_byte(hw, byte_offset);
1506 if (status != IXGBE_SUCCESS)
1507 goto fail;
1508
1509 status = ixgbe_get_i2c_ack(hw);
1510 if (status != IXGBE_SUCCESS)
1511 goto fail;
1512
1513 status = ixgbe_clock_out_i2c_byte(hw, data);
1514 if (status != IXGBE_SUCCESS)
1515 goto fail;
1516
1517 status = ixgbe_get_i2c_ack(hw);
1518 if (status != IXGBE_SUCCESS)
1519 goto fail;
1520
1521 ixgbe_i2c_stop(hw);
1522 break;
1523
1524 fail:
1525 ixgbe_i2c_bus_clear(hw);
1526 retry++;
1527 if (retry < max_retry)
1528 DEBUGOUT("I2C byte write error - Retrying.\n");
1529 else
1530 DEBUGOUT("I2C byte write error.\n");
1531 } while (retry < max_retry);
1532
1533 hw->mac.ops.release_swfw_sync(hw, swfw_mask);
1534
1535 write_byte_out:
1536 return status;
1537 }
1538
1539 /**
1540 * ixgbe_i2c_start - Sets I2C start condition
1541 * @hw: pointer to hardware structure
1542 *
1543 * Sets I2C start condition (High -> Low on SDA while SCL is High)
1544 **/
ixgbe_i2c_start(struct ixgbe_hw * hw)1545 static void ixgbe_i2c_start(struct ixgbe_hw *hw)
1546 {
1547 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1548
1549 DEBUGFUNC("ixgbe_i2c_start");
1550
1551 /* Start condition must begin with data and clock high */
1552 (void) ixgbe_set_i2c_data(hw, &i2cctl, 1);
1553 ixgbe_raise_i2c_clk(hw, &i2cctl);
1554
1555 /* Setup time for start condition (4.7us) */
1556 usec_delay(IXGBE_I2C_T_SU_STA);
1557
1558 (void) ixgbe_set_i2c_data(hw, &i2cctl, 0);
1559
1560 /* Hold time for start condition (4us) */
1561 usec_delay(IXGBE_I2C_T_HD_STA);
1562
1563 ixgbe_lower_i2c_clk(hw, &i2cctl);
1564
1565 /* Minimum low period of clock is 4.7 us */
1566 usec_delay(IXGBE_I2C_T_LOW);
1567
1568 }
1569
1570 /**
1571 * ixgbe_i2c_stop - Sets I2C stop condition
1572 * @hw: pointer to hardware structure
1573 *
1574 * Sets I2C stop condition (Low -> High on SDA while SCL is High)
1575 **/
ixgbe_i2c_stop(struct ixgbe_hw * hw)1576 static void ixgbe_i2c_stop(struct ixgbe_hw *hw)
1577 {
1578 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1579
1580 DEBUGFUNC("ixgbe_i2c_stop");
1581
1582 /* Stop condition must begin with data low and clock high */
1583 (void) ixgbe_set_i2c_data(hw, &i2cctl, 0);
1584 ixgbe_raise_i2c_clk(hw, &i2cctl);
1585
1586 /* Setup time for stop condition (4us) */
1587 usec_delay(IXGBE_I2C_T_SU_STO);
1588
1589 (void) ixgbe_set_i2c_data(hw, &i2cctl, 1);
1590
1591 /* bus free time between stop and start (4.7us)*/
1592 usec_delay(IXGBE_I2C_T_BUF);
1593 }
1594
1595 /**
1596 * ixgbe_clock_in_i2c_byte - Clocks in one byte via I2C
1597 * @hw: pointer to hardware structure
1598 * @data: data byte to clock in
1599 *
1600 * Clocks in one byte data via I2C data/clock
1601 **/
ixgbe_clock_in_i2c_byte(struct ixgbe_hw * hw,u8 * data)1602 static s32 ixgbe_clock_in_i2c_byte(struct ixgbe_hw *hw, u8 *data)
1603 {
1604 s32 i, status = IXGBE_SUCCESS;
1605 bool bit = 0;
1606
1607 DEBUGFUNC("ixgbe_clock_in_i2c_byte");
1608
1609 for (i = 7; i >= 0; i--) {
1610 status = ixgbe_clock_in_i2c_bit(hw, &bit);
1611 if (status != IXGBE_SUCCESS)
1612 break;
1613 *data |= bit << i;
1614 }
1615
1616 return status;
1617 }
1618
1619 /**
1620 * ixgbe_clock_out_i2c_byte - Clocks out one byte via I2C
1621 * @hw: pointer to hardware structure
1622 * @data: data byte clocked out
1623 *
1624 * Clocks out one byte data via I2C data/clock
1625 **/
ixgbe_clock_out_i2c_byte(struct ixgbe_hw * hw,u8 data)1626 static s32 ixgbe_clock_out_i2c_byte(struct ixgbe_hw *hw, u8 data)
1627 {
1628 s32 status = IXGBE_SUCCESS;
1629 s32 i;
1630 u32 i2cctl;
1631 bool bit = 0;
1632
1633 DEBUGFUNC("ixgbe_clock_out_i2c_byte");
1634
1635 for (i = 7; i >= 0; i--) {
1636 bit = (data >> i) & 0x1;
1637 status = ixgbe_clock_out_i2c_bit(hw, bit);
1638
1639 if (status != IXGBE_SUCCESS)
1640 break;
1641 }
1642
1643 /* Release SDA line (set high) */
1644 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1645 i2cctl |= IXGBE_I2C_DATA_OUT;
1646 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, i2cctl);
1647 IXGBE_WRITE_FLUSH(hw);
1648
1649 return status;
1650 }
1651
1652 /**
1653 * ixgbe_get_i2c_ack - Polls for I2C ACK
1654 * @hw: pointer to hardware structure
1655 *
1656 * Clocks in/out one bit via I2C data/clock
1657 **/
ixgbe_get_i2c_ack(struct ixgbe_hw * hw)1658 static s32 ixgbe_get_i2c_ack(struct ixgbe_hw *hw)
1659 {
1660 s32 status = IXGBE_SUCCESS;
1661 u32 i = 0;
1662 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1663 u32 timeout = 10;
1664 bool ack = 1;
1665
1666 DEBUGFUNC("ixgbe_get_i2c_ack");
1667
1668 ixgbe_raise_i2c_clk(hw, &i2cctl);
1669
1670
1671 /* Minimum high period of clock is 4us */
1672 usec_delay(IXGBE_I2C_T_HIGH);
1673
1674 /* Poll for ACK. Note that ACK in I2C spec is
1675 * transition from 1 to 0 */
1676 for (i = 0; i < timeout; i++) {
1677 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1678 ack = ixgbe_get_i2c_data(&i2cctl);
1679
1680 usec_delay(1);
1681 if (ack == 0)
1682 break;
1683 }
1684
1685 if (ack == 1) {
1686 DEBUGOUT("I2C ack was not received.\n");
1687 status = IXGBE_ERR_I2C;
1688 }
1689
1690 ixgbe_lower_i2c_clk(hw, &i2cctl);
1691
1692 /* Minimum low period of clock is 4.7 us */
1693 usec_delay(IXGBE_I2C_T_LOW);
1694
1695 return status;
1696 }
1697
1698 /**
1699 * ixgbe_clock_in_i2c_bit - Clocks in one bit via I2C data/clock
1700 * @hw: pointer to hardware structure
1701 * @data: read data value
1702 *
1703 * Clocks in one bit via I2C data/clock
1704 **/
ixgbe_clock_in_i2c_bit(struct ixgbe_hw * hw,bool * data)1705 static s32 ixgbe_clock_in_i2c_bit(struct ixgbe_hw *hw, bool *data)
1706 {
1707 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1708
1709 DEBUGFUNC("ixgbe_clock_in_i2c_bit");
1710
1711 ixgbe_raise_i2c_clk(hw, &i2cctl);
1712
1713 /* Minimum high period of clock is 4us */
1714 usec_delay(IXGBE_I2C_T_HIGH);
1715
1716 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1717 *data = ixgbe_get_i2c_data(&i2cctl);
1718
1719 ixgbe_lower_i2c_clk(hw, &i2cctl);
1720
1721 /* Minimum low period of clock is 4.7 us */
1722 usec_delay(IXGBE_I2C_T_LOW);
1723
1724 return IXGBE_SUCCESS;
1725 }
1726
1727 /**
1728 * ixgbe_clock_out_i2c_bit - Clocks in/out one bit via I2C data/clock
1729 * @hw: pointer to hardware structure
1730 * @data: data value to write
1731 *
1732 * Clocks out one bit via I2C data/clock
1733 **/
ixgbe_clock_out_i2c_bit(struct ixgbe_hw * hw,bool data)1734 static s32 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data)
1735 {
1736 s32 status;
1737 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1738
1739 DEBUGFUNC("ixgbe_clock_out_i2c_bit");
1740
1741 status = ixgbe_set_i2c_data(hw, &i2cctl, data);
1742 if (status == IXGBE_SUCCESS) {
1743 ixgbe_raise_i2c_clk(hw, &i2cctl);
1744
1745 /* Minimum high period of clock is 4us */
1746 usec_delay(IXGBE_I2C_T_HIGH);
1747
1748 ixgbe_lower_i2c_clk(hw, &i2cctl);
1749
1750 /* Minimum low period of clock is 4.7 us.
1751 * This also takes care of the data hold time.
1752 */
1753 usec_delay(IXGBE_I2C_T_LOW);
1754 } else {
1755 status = IXGBE_ERR_I2C;
1756 DEBUGOUT1("I2C data was not set to %X\n", data);
1757 }
1758
1759 return status;
1760 }
1761 /**
1762 * ixgbe_raise_i2c_clk - Raises the I2C SCL clock
1763 * @hw: pointer to hardware structure
1764 * @i2cctl: Current value of I2CCTL register
1765 *
1766 * Raises the I2C clock line '0'->'1'
1767 **/
ixgbe_raise_i2c_clk(struct ixgbe_hw * hw,u32 * i2cctl)1768 static void ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
1769 {
1770 u32 i = 0;
1771 u32 timeout = IXGBE_I2C_CLOCK_STRETCHING_TIMEOUT;
1772 u32 i2cctl_r = 0;
1773
1774 DEBUGFUNC("ixgbe_raise_i2c_clk");
1775
1776 for (i = 0; i < timeout; i++) {
1777 *i2cctl |= IXGBE_I2C_CLK_OUT;
1778
1779 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl);
1780 IXGBE_WRITE_FLUSH(hw);
1781 /* SCL rise time (1000ns) */
1782 usec_delay(IXGBE_I2C_T_RISE);
1783
1784 i2cctl_r = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1785 if (i2cctl_r & IXGBE_I2C_CLK_IN)
1786 break;
1787 }
1788 }
1789
1790 /**
1791 * ixgbe_lower_i2c_clk - Lowers the I2C SCL clock
1792 * @hw: pointer to hardware structure
1793 * @i2cctl: Current value of I2CCTL register
1794 *
1795 * Lowers the I2C clock line '1'->'0'
1796 **/
ixgbe_lower_i2c_clk(struct ixgbe_hw * hw,u32 * i2cctl)1797 static void ixgbe_lower_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
1798 {
1799
1800 DEBUGFUNC("ixgbe_lower_i2c_clk");
1801
1802 *i2cctl &= ~IXGBE_I2C_CLK_OUT;
1803
1804 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl);
1805 IXGBE_WRITE_FLUSH(hw);
1806
1807 /* SCL fall time (300ns) */
1808 usec_delay(IXGBE_I2C_T_FALL);
1809 }
1810
1811 /**
1812 * ixgbe_set_i2c_data - Sets the I2C data bit
1813 * @hw: pointer to hardware structure
1814 * @i2cctl: Current value of I2CCTL register
1815 * @data: I2C data value (0 or 1) to set
1816 *
1817 * Sets the I2C data bit
1818 **/
ixgbe_set_i2c_data(struct ixgbe_hw * hw,u32 * i2cctl,bool data)1819 static s32 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data)
1820 {
1821 s32 status = IXGBE_SUCCESS;
1822
1823 DEBUGFUNC("ixgbe_set_i2c_data");
1824
1825 if (data)
1826 *i2cctl |= IXGBE_I2C_DATA_OUT;
1827 else
1828 *i2cctl &= ~IXGBE_I2C_DATA_OUT;
1829
1830 IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl);
1831 IXGBE_WRITE_FLUSH(hw);
1832
1833 /* Data rise/fall (1000ns/300ns) and set-up time (250ns) */
1834 usec_delay(IXGBE_I2C_T_RISE + IXGBE_I2C_T_FALL + IXGBE_I2C_T_SU_DATA);
1835
1836 /* Verify data was set correctly */
1837 *i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1838 if (data != ixgbe_get_i2c_data(i2cctl)) {
1839 status = IXGBE_ERR_I2C;
1840 DEBUGOUT1("Error - I2C data was not set to %X.\n", data);
1841 }
1842
1843 return status;
1844 }
1845
1846 /**
1847 * ixgbe_get_i2c_data - Reads the I2C SDA data bit
1848 * @hw: pointer to hardware structure
1849 * @i2cctl: Current value of I2CCTL register
1850 *
1851 * Returns the I2C data bit value
1852 **/
ixgbe_get_i2c_data(u32 * i2cctl)1853 static bool ixgbe_get_i2c_data(u32 *i2cctl)
1854 {
1855 bool data;
1856
1857 DEBUGFUNC("ixgbe_get_i2c_data");
1858
1859 if (*i2cctl & IXGBE_I2C_DATA_IN)
1860 data = 1;
1861 else
1862 data = 0;
1863
1864 return data;
1865 }
1866
1867 /**
1868 * ixgbe_i2c_bus_clear - Clears the I2C bus
1869 * @hw: pointer to hardware structure
1870 *
1871 * Clears the I2C bus by sending nine clock pulses.
1872 * Used when data line is stuck low.
1873 **/
ixgbe_i2c_bus_clear(struct ixgbe_hw * hw)1874 void ixgbe_i2c_bus_clear(struct ixgbe_hw *hw)
1875 {
1876 u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
1877 u32 i;
1878
1879 DEBUGFUNC("ixgbe_i2c_bus_clear");
1880
1881 ixgbe_i2c_start(hw);
1882
1883 (void) ixgbe_set_i2c_data(hw, &i2cctl, 1);
1884
1885 for (i = 0; i < 9; i++) {
1886 ixgbe_raise_i2c_clk(hw, &i2cctl);
1887
1888 /* Min high period of clock is 4us */
1889 usec_delay(IXGBE_I2C_T_HIGH);
1890
1891 ixgbe_lower_i2c_clk(hw, &i2cctl);
1892
1893 /* Min low period of clock is 4.7us*/
1894 usec_delay(IXGBE_I2C_T_LOW);
1895 }
1896
1897 ixgbe_i2c_start(hw);
1898
1899 /* Put the i2c bus back to default state */
1900 ixgbe_i2c_stop(hw);
1901 }
1902
1903 /**
1904 * ixgbe_tn_check_overtemp - Checks if an overtemp occurred.
1905 * @hw: pointer to hardware structure
1906 *
1907 * Checks if the LASI temp alarm status was triggered due to overtemp
1908 **/
ixgbe_tn_check_overtemp(struct ixgbe_hw * hw)1909 s32 ixgbe_tn_check_overtemp(struct ixgbe_hw *hw)
1910 {
1911 s32 status = IXGBE_SUCCESS;
1912 u16 phy_data = 0;
1913
1914 DEBUGFUNC("ixgbe_tn_check_overtemp");
1915
1916 if (hw->device_id != IXGBE_DEV_ID_82599_T3_LOM)
1917 goto out;
1918
1919 /* Check that the LASI temp alarm status was triggered */
1920 hw->phy.ops.read_reg(hw, IXGBE_TN_LASI_STATUS_REG,
1921 IXGBE_MDIO_PMA_PMD_DEV_TYPE, &phy_data);
1922
1923 if (!(phy_data & IXGBE_TN_LASI_STATUS_TEMP_ALARM))
1924 goto out;
1925
1926 status = IXGBE_ERR_OVERTEMP;
1927 out:
1928 return status;
1929 }
1930