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