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