1 /*******************************************************************************
3 Intel PRO/1000 Linux driver
4 Copyright(c) 1999 - 2011 Intel Corporation.
6 This program is free software; you can redistribute it and/or modify it
7 under the terms and conditions of the GNU General Public License,
8 version 2, as published by the Free Software Foundation.
10 This program is distributed in the hope it will be useful, but WITHOUT
11 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
15 You should have received a copy of the GNU General Public License along with
16 this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
19 The full GNU General Public License is included in this distribution in
20 the file called "COPYING".
25 Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
27 *******************************************************************************/
29 #include <linux/delay.h>
33 static s32 e1000_get_phy_cfg_done(struct e1000_hw *hw);
34 static s32 e1000_phy_force_speed_duplex(struct e1000_hw *hw);
35 static s32 e1000_set_d0_lplu_state(struct e1000_hw *hw, bool active);
36 static s32 e1000_wait_autoneg(struct e1000_hw *hw);
37 static u32 e1000_get_phy_addr_for_bm_page(u32 page, u32 reg);
38 static s32 e1000_access_phy_wakeup_reg_bm(struct e1000_hw *hw, u32 offset,
39 u16 *data, bool read);
40 static u32 e1000_get_phy_addr_for_hv_page(u32 page);
41 static s32 e1000_access_phy_debug_regs_hv(struct e1000_hw *hw, u32 offset,
42 u16 *data, bool read);
44 /* Cable length tables */
45 static const u16 e1000_m88_cable_length_table[] = {
46 0, 50, 80, 110, 140, 140, E1000_CABLE_LENGTH_UNDEFINED };
47 #define M88E1000_CABLE_LENGTH_TABLE_SIZE \
48 ARRAY_SIZE(e1000_m88_cable_length_table)
50 static const u16 e1000_igp_2_cable_length_table[] = {
51 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 8, 11, 13, 16, 18, 21, 0, 0, 0, 3,
52 6, 10, 13, 16, 19, 23, 26, 29, 32, 35, 38, 41, 6, 10, 14, 18, 22,
53 26, 30, 33, 37, 41, 44, 48, 51, 54, 58, 61, 21, 26, 31, 35, 40,
54 44, 49, 53, 57, 61, 65, 68, 72, 75, 79, 82, 40, 45, 51, 56, 61,
55 66, 70, 75, 79, 83, 87, 91, 94, 98, 101, 104, 60, 66, 72, 77, 82,
56 87, 92, 96, 100, 104, 108, 111, 114, 117, 119, 121, 83, 89, 95,
57 100, 105, 109, 113, 116, 119, 122, 124, 104, 109, 114, 118, 121,
59 #define IGP02E1000_CABLE_LENGTH_TABLE_SIZE \
60 ARRAY_SIZE(e1000_igp_2_cable_length_table)
62 #define BM_PHY_REG_PAGE(offset) \
63 ((u16)(((offset) >> PHY_PAGE_SHIFT) & 0xFFFF))
64 #define BM_PHY_REG_NUM(offset) \
65 ((u16)(((offset) & MAX_PHY_REG_ADDRESS) |\
66 (((offset) >> (PHY_UPPER_SHIFT - PHY_PAGE_SHIFT)) &\
67 ~MAX_PHY_REG_ADDRESS)))
69 #define HV_INTC_FC_PAGE_START 768
70 #define I82578_ADDR_REG 29
71 #define I82577_ADDR_REG 16
72 #define I82577_CFG_REG 22
73 #define I82577_CFG_ASSERT_CRS_ON_TX (1 << 15)
74 #define I82577_CFG_ENABLE_DOWNSHIFT (3 << 10) /* auto downshift 100/10 */
75 #define I82577_CTRL_REG 23
77 /* 82577 specific PHY registers */
78 #define I82577_PHY_CTRL_2 18
79 #define I82577_PHY_STATUS_2 26
80 #define I82577_PHY_DIAG_STATUS 31
82 /* I82577 PHY Status 2 */
83 #define I82577_PHY_STATUS2_REV_POLARITY 0x0400
84 #define I82577_PHY_STATUS2_MDIX 0x0800
85 #define I82577_PHY_STATUS2_SPEED_MASK 0x0300
86 #define I82577_PHY_STATUS2_SPEED_1000MBPS 0x0200
88 /* I82577 PHY Control 2 */
89 #define I82577_PHY_CTRL2_AUTO_MDIX 0x0400
90 #define I82577_PHY_CTRL2_FORCE_MDI_MDIX 0x0200
92 /* I82577 PHY Diagnostics Status */
93 #define I82577_DSTATUS_CABLE_LENGTH 0x03FC
94 #define I82577_DSTATUS_CABLE_LENGTH_SHIFT 2
96 /* BM PHY Copper Specific Control 1 */
97 #define BM_CS_CTRL1 16
99 #define HV_MUX_DATA_CTRL PHY_REG(776, 16)
100 #define HV_MUX_DATA_CTRL_GEN_TO_MAC 0x0400
101 #define HV_MUX_DATA_CTRL_FORCE_SPEED 0x0004
104 * e1000e_check_reset_block_generic - Check if PHY reset is blocked
105 * @hw: pointer to the HW structure
107 * Read the PHY management control register and check whether a PHY reset
108 * is blocked. If a reset is not blocked return 0, otherwise
109 * return E1000_BLK_PHY_RESET (12).
111 s32 e1000e_check_reset_block_generic(struct e1000_hw *hw)
117 return (manc & E1000_MANC_BLK_PHY_RST_ON_IDE) ?
118 E1000_BLK_PHY_RESET : 0;
122 * e1000e_get_phy_id - Retrieve the PHY ID and revision
123 * @hw: pointer to the HW structure
125 * Reads the PHY registers and stores the PHY ID and possibly the PHY
126 * revision in the hardware structure.
128 s32 e1000e_get_phy_id(struct e1000_hw *hw)
130 struct e1000_phy_info *phy = &hw->phy;
135 if (!(phy->ops.read_reg))
138 while (retry_count < 2) {
139 ret_val = e1e_rphy(hw, PHY_ID1, &phy_id);
143 phy->id = (u32)(phy_id << 16);
145 ret_val = e1e_rphy(hw, PHY_ID2, &phy_id);
149 phy->id |= (u32)(phy_id & PHY_REVISION_MASK);
150 phy->revision = (u32)(phy_id & ~PHY_REVISION_MASK);
152 if (phy->id != 0 && phy->id != PHY_REVISION_MASK)
162 * e1000e_phy_reset_dsp - Reset PHY DSP
163 * @hw: pointer to the HW structure
165 * Reset the digital signal processor.
167 s32 e1000e_phy_reset_dsp(struct e1000_hw *hw)
171 ret_val = e1e_wphy(hw, M88E1000_PHY_GEN_CONTROL, 0xC1);
175 return e1e_wphy(hw, M88E1000_PHY_GEN_CONTROL, 0);
179 * e1000e_read_phy_reg_mdic - Read MDI control register
180 * @hw: pointer to the HW structure
181 * @offset: register offset to be read
182 * @data: pointer to the read data
184 * Reads the MDI control register in the PHY at offset and stores the
185 * information read to data.
187 s32 e1000e_read_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 *data)
189 struct e1000_phy_info *phy = &hw->phy;
192 if (offset > MAX_PHY_REG_ADDRESS) {
193 e_dbg("PHY Address %d is out of range\n", offset);
194 return -E1000_ERR_PARAM;
198 * Set up Op-code, Phy Address, and register offset in the MDI
199 * Control register. The MAC will take care of interfacing with the
200 * PHY to retrieve the desired data.
202 mdic = ((offset << E1000_MDIC_REG_SHIFT) |
203 (phy->addr << E1000_MDIC_PHY_SHIFT) |
204 (E1000_MDIC_OP_READ));
209 * Poll the ready bit to see if the MDI read completed
210 * Increasing the time out as testing showed failures with
213 for (i = 0; i < (E1000_GEN_POLL_TIMEOUT * 3); i++) {
216 if (mdic & E1000_MDIC_READY)
219 if (!(mdic & E1000_MDIC_READY)) {
220 e_dbg("MDI Read did not complete\n");
221 return -E1000_ERR_PHY;
223 if (mdic & E1000_MDIC_ERROR) {
224 e_dbg("MDI Error\n");
225 return -E1000_ERR_PHY;
230 * Allow some time after each MDIC transaction to avoid
231 * reading duplicate data in the next MDIC transaction.
233 if (hw->mac.type == e1000_pch2lan)
240 * e1000e_write_phy_reg_mdic - Write MDI control register
241 * @hw: pointer to the HW structure
242 * @offset: register offset to write to
243 * @data: data to write to register at offset
245 * Writes data to MDI control register in the PHY at offset.
247 s32 e1000e_write_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 data)
249 struct e1000_phy_info *phy = &hw->phy;
252 if (offset > MAX_PHY_REG_ADDRESS) {
253 e_dbg("PHY Address %d is out of range\n", offset);
254 return -E1000_ERR_PARAM;
258 * Set up Op-code, Phy Address, and register offset in the MDI
259 * Control register. The MAC will take care of interfacing with the
260 * PHY to retrieve the desired data.
262 mdic = (((u32)data) |
263 (offset << E1000_MDIC_REG_SHIFT) |
264 (phy->addr << E1000_MDIC_PHY_SHIFT) |
265 (E1000_MDIC_OP_WRITE));
270 * Poll the ready bit to see if the MDI read completed
271 * Increasing the time out as testing showed failures with
274 for (i = 0; i < (E1000_GEN_POLL_TIMEOUT * 3); i++) {
277 if (mdic & E1000_MDIC_READY)
280 if (!(mdic & E1000_MDIC_READY)) {
281 e_dbg("MDI Write did not complete\n");
282 return -E1000_ERR_PHY;
284 if (mdic & E1000_MDIC_ERROR) {
285 e_dbg("MDI Error\n");
286 return -E1000_ERR_PHY;
290 * Allow some time after each MDIC transaction to avoid
291 * reading duplicate data in the next MDIC transaction.
293 if (hw->mac.type == e1000_pch2lan)
300 * e1000e_read_phy_reg_m88 - Read m88 PHY register
301 * @hw: pointer to the HW structure
302 * @offset: register offset to be read
303 * @data: pointer to the read data
305 * Acquires semaphore, if necessary, then reads the PHY register at offset
306 * and storing the retrieved information in data. Release any acquired
307 * semaphores before exiting.
309 s32 e1000e_read_phy_reg_m88(struct e1000_hw *hw, u32 offset, u16 *data)
313 ret_val = hw->phy.ops.acquire(hw);
317 ret_val = e1000e_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
320 hw->phy.ops.release(hw);
326 * e1000e_write_phy_reg_m88 - Write m88 PHY register
327 * @hw: pointer to the HW structure
328 * @offset: register offset to write to
329 * @data: data to write at register offset
331 * Acquires semaphore, if necessary, then writes the data to PHY register
332 * at the offset. Release any acquired semaphores before exiting.
334 s32 e1000e_write_phy_reg_m88(struct e1000_hw *hw, u32 offset, u16 data)
338 ret_val = hw->phy.ops.acquire(hw);
342 ret_val = e1000e_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
345 hw->phy.ops.release(hw);
351 * __e1000e_read_phy_reg_igp - Read igp PHY register
352 * @hw: pointer to the HW structure
353 * @offset: register offset to be read
354 * @data: pointer to the read data
355 * @locked: semaphore has already been acquired or not
357 * Acquires semaphore, if necessary, then reads the PHY register at offset
358 * and stores the retrieved information in data. Release any acquired
359 * semaphores before exiting.
361 static s32 __e1000e_read_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 *data,
367 if (!(hw->phy.ops.acquire))
370 ret_val = hw->phy.ops.acquire(hw);
375 if (offset > MAX_PHY_MULTI_PAGE_REG) {
376 ret_val = e1000e_write_phy_reg_mdic(hw,
377 IGP01E1000_PHY_PAGE_SELECT,
383 ret_val = e1000e_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
388 hw->phy.ops.release(hw);
394 * e1000e_read_phy_reg_igp - Read igp PHY register
395 * @hw: pointer to the HW structure
396 * @offset: register offset to be read
397 * @data: pointer to the read data
399 * Acquires semaphore then reads the PHY register at offset and stores the
400 * retrieved information in data.
401 * Release the acquired semaphore before exiting.
403 s32 e1000e_read_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 *data)
405 return __e1000e_read_phy_reg_igp(hw, offset, data, false);
409 * e1000e_read_phy_reg_igp_locked - Read igp PHY register
410 * @hw: pointer to the HW structure
411 * @offset: register offset to be read
412 * @data: pointer to the read data
414 * Reads the PHY register at offset and stores the retrieved information
415 * in data. Assumes semaphore already acquired.
417 s32 e1000e_read_phy_reg_igp_locked(struct e1000_hw *hw, u32 offset, u16 *data)
419 return __e1000e_read_phy_reg_igp(hw, offset, data, true);
423 * e1000e_write_phy_reg_igp - Write igp PHY register
424 * @hw: pointer to the HW structure
425 * @offset: register offset to write to
426 * @data: data to write at register offset
427 * @locked: semaphore has already been acquired or not
429 * Acquires semaphore, if necessary, then writes the data to PHY register
430 * at the offset. Release any acquired semaphores before exiting.
432 static s32 __e1000e_write_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 data,
438 if (!(hw->phy.ops.acquire))
441 ret_val = hw->phy.ops.acquire(hw);
446 if (offset > MAX_PHY_MULTI_PAGE_REG) {
447 ret_val = e1000e_write_phy_reg_mdic(hw,
448 IGP01E1000_PHY_PAGE_SELECT,
454 ret_val = e1000e_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
459 hw->phy.ops.release(hw);
466 * e1000e_write_phy_reg_igp - Write igp PHY register
467 * @hw: pointer to the HW structure
468 * @offset: register offset to write to
469 * @data: data to write at register offset
471 * Acquires semaphore then writes the data to PHY register
472 * at the offset. Release any acquired semaphores before exiting.
474 s32 e1000e_write_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 data)
476 return __e1000e_write_phy_reg_igp(hw, offset, data, false);
480 * e1000e_write_phy_reg_igp_locked - Write igp PHY register
481 * @hw: pointer to the HW structure
482 * @offset: register offset to write to
483 * @data: data to write at register offset
485 * Writes the data to PHY register at the offset.
486 * Assumes semaphore already acquired.
488 s32 e1000e_write_phy_reg_igp_locked(struct e1000_hw *hw, u32 offset, u16 data)
490 return __e1000e_write_phy_reg_igp(hw, offset, data, true);
494 * __e1000_read_kmrn_reg - Read kumeran register
495 * @hw: pointer to the HW structure
496 * @offset: register offset to be read
497 * @data: pointer to the read data
498 * @locked: semaphore has already been acquired or not
500 * Acquires semaphore, if necessary. Then reads the PHY register at offset
501 * using the kumeran interface. The information retrieved is stored in data.
502 * Release any acquired semaphores before exiting.
504 static s32 __e1000_read_kmrn_reg(struct e1000_hw *hw, u32 offset, u16 *data,
511 if (!(hw->phy.ops.acquire))
514 ret_val = hw->phy.ops.acquire(hw);
519 kmrnctrlsta = ((offset << E1000_KMRNCTRLSTA_OFFSET_SHIFT) &
520 E1000_KMRNCTRLSTA_OFFSET) | E1000_KMRNCTRLSTA_REN;
521 ew32(KMRNCTRLSTA, kmrnctrlsta);
525 kmrnctrlsta = er32(KMRNCTRLSTA);
526 *data = (u16)kmrnctrlsta;
529 hw->phy.ops.release(hw);
536 * e1000e_read_kmrn_reg - Read kumeran register
537 * @hw: pointer to the HW structure
538 * @offset: register offset to be read
539 * @data: pointer to the read data
541 * Acquires semaphore then reads the PHY register at offset using the
542 * kumeran interface. The information retrieved is stored in data.
543 * Release the acquired semaphore before exiting.
545 s32 e1000e_read_kmrn_reg(struct e1000_hw *hw, u32 offset, u16 *data)
547 return __e1000_read_kmrn_reg(hw, offset, data, false);
551 * e1000e_read_kmrn_reg_locked - Read kumeran register
552 * @hw: pointer to the HW structure
553 * @offset: register offset to be read
554 * @data: pointer to the read data
556 * Reads the PHY register at offset using the kumeran interface. The
557 * information retrieved is stored in data.
558 * Assumes semaphore already acquired.
560 s32 e1000e_read_kmrn_reg_locked(struct e1000_hw *hw, u32 offset, u16 *data)
562 return __e1000_read_kmrn_reg(hw, offset, data, true);
566 * __e1000_write_kmrn_reg - Write kumeran register
567 * @hw: pointer to the HW structure
568 * @offset: register offset to write to
569 * @data: data to write at register offset
570 * @locked: semaphore has already been acquired or not
572 * Acquires semaphore, if necessary. Then write the data to PHY register
573 * at the offset using the kumeran interface. Release any acquired semaphores
576 static s32 __e1000_write_kmrn_reg(struct e1000_hw *hw, u32 offset, u16 data,
583 if (!(hw->phy.ops.acquire))
586 ret_val = hw->phy.ops.acquire(hw);
591 kmrnctrlsta = ((offset << E1000_KMRNCTRLSTA_OFFSET_SHIFT) &
592 E1000_KMRNCTRLSTA_OFFSET) | data;
593 ew32(KMRNCTRLSTA, kmrnctrlsta);
598 hw->phy.ops.release(hw);
605 * e1000e_write_kmrn_reg - Write kumeran register
606 * @hw: pointer to the HW structure
607 * @offset: register offset to write to
608 * @data: data to write at register offset
610 * Acquires semaphore then writes the data to the PHY register at the offset
611 * using the kumeran interface. Release the acquired semaphore before exiting.
613 s32 e1000e_write_kmrn_reg(struct e1000_hw *hw, u32 offset, u16 data)
615 return __e1000_write_kmrn_reg(hw, offset, data, false);
619 * e1000e_write_kmrn_reg_locked - Write kumeran register
620 * @hw: pointer to the HW structure
621 * @offset: register offset to write to
622 * @data: data to write at register offset
624 * Write the data to PHY register at the offset using the kumeran interface.
625 * Assumes semaphore already acquired.
627 s32 e1000e_write_kmrn_reg_locked(struct e1000_hw *hw, u32 offset, u16 data)
629 return __e1000_write_kmrn_reg(hw, offset, data, true);
633 * e1000_copper_link_setup_82577 - Setup 82577 PHY for copper link
634 * @hw: pointer to the HW structure
636 * Sets up Carrier-sense on Transmit and downshift values.
638 s32 e1000_copper_link_setup_82577(struct e1000_hw *hw)
643 /* Enable CRS on Tx. This must be set for half-duplex operation. */
644 ret_val = e1e_rphy(hw, I82577_CFG_REG, &phy_data);
648 phy_data |= I82577_CFG_ASSERT_CRS_ON_TX;
650 /* Enable downshift */
651 phy_data |= I82577_CFG_ENABLE_DOWNSHIFT;
653 ret_val = e1e_wphy(hw, I82577_CFG_REG, phy_data);
660 * e1000e_copper_link_setup_m88 - Setup m88 PHY's for copper link
661 * @hw: pointer to the HW structure
663 * Sets up MDI/MDI-X and polarity for m88 PHY's. If necessary, transmit clock
664 * and downshift values are set also.
666 s32 e1000e_copper_link_setup_m88(struct e1000_hw *hw)
668 struct e1000_phy_info *phy = &hw->phy;
672 /* Enable CRS on Tx. This must be set for half-duplex operation. */
673 ret_val = e1e_rphy(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
677 /* For BM PHY this bit is downshift enable */
678 if (phy->type != e1000_phy_bm)
679 phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
683 * MDI/MDI-X = 0 (default)
684 * 0 - Auto for all speeds
687 * 3 - Auto for 1000Base-T only (MDI-X for 10/100Base-T modes)
689 phy_data &= ~M88E1000_PSCR_AUTO_X_MODE;
693 phy_data |= M88E1000_PSCR_MDI_MANUAL_MODE;
696 phy_data |= M88E1000_PSCR_MDIX_MANUAL_MODE;
699 phy_data |= M88E1000_PSCR_AUTO_X_1000T;
703 phy_data |= M88E1000_PSCR_AUTO_X_MODE;
709 * disable_polarity_correction = 0 (default)
710 * Automatic Correction for Reversed Cable Polarity
714 phy_data &= ~M88E1000_PSCR_POLARITY_REVERSAL;
715 if (phy->disable_polarity_correction == 1)
716 phy_data |= M88E1000_PSCR_POLARITY_REVERSAL;
718 /* Enable downshift on BM (disabled by default) */
719 if (phy->type == e1000_phy_bm)
720 phy_data |= BME1000_PSCR_ENABLE_DOWNSHIFT;
722 ret_val = e1e_wphy(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
726 if ((phy->type == e1000_phy_m88) &&
727 (phy->revision < E1000_REVISION_4) &&
728 (phy->id != BME1000_E_PHY_ID_R2)) {
730 * Force TX_CLK in the Extended PHY Specific Control Register
733 ret_val = e1e_rphy(hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_data);
737 phy_data |= M88E1000_EPSCR_TX_CLK_25;
739 if ((phy->revision == 2) &&
740 (phy->id == M88E1111_I_PHY_ID)) {
741 /* 82573L PHY - set the downshift counter to 5x. */
742 phy_data &= ~M88EC018_EPSCR_DOWNSHIFT_COUNTER_MASK;
743 phy_data |= M88EC018_EPSCR_DOWNSHIFT_COUNTER_5X;
745 /* Configure Master and Slave downshift values */
746 phy_data &= ~(M88E1000_EPSCR_MASTER_DOWNSHIFT_MASK |
747 M88E1000_EPSCR_SLAVE_DOWNSHIFT_MASK);
748 phy_data |= (M88E1000_EPSCR_MASTER_DOWNSHIFT_1X |
749 M88E1000_EPSCR_SLAVE_DOWNSHIFT_1X);
751 ret_val = e1e_wphy(hw, M88E1000_EXT_PHY_SPEC_CTRL, phy_data);
756 if ((phy->type == e1000_phy_bm) && (phy->id == BME1000_E_PHY_ID_R2)) {
757 /* Set PHY page 0, register 29 to 0x0003 */
758 ret_val = e1e_wphy(hw, 29, 0x0003);
762 /* Set PHY page 0, register 30 to 0x0000 */
763 ret_val = e1e_wphy(hw, 30, 0x0000);
768 /* Commit the changes. */
769 ret_val = e1000e_commit_phy(hw);
771 e_dbg("Error committing the PHY changes\n");
775 if (phy->type == e1000_phy_82578) {
776 ret_val = e1e_rphy(hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_data);
780 /* 82578 PHY - set the downshift count to 1x. */
781 phy_data |= I82578_EPSCR_DOWNSHIFT_ENABLE;
782 phy_data &= ~I82578_EPSCR_DOWNSHIFT_COUNTER_MASK;
783 ret_val = e1e_wphy(hw, M88E1000_EXT_PHY_SPEC_CTRL, phy_data);
792 * e1000e_copper_link_setup_igp - Setup igp PHY's for copper link
793 * @hw: pointer to the HW structure
795 * Sets up LPLU, MDI/MDI-X, polarity, Smartspeed and Master/Slave config for
798 s32 e1000e_copper_link_setup_igp(struct e1000_hw *hw)
800 struct e1000_phy_info *phy = &hw->phy;
804 ret_val = e1000_phy_hw_reset(hw);
806 e_dbg("Error resetting the PHY.\n");
811 * Wait 100ms for MAC to configure PHY from NVM settings, to avoid
812 * timeout issues when LFS is enabled.
816 /* disable lplu d0 during driver init */
817 ret_val = e1000_set_d0_lplu_state(hw, false);
819 e_dbg("Error Disabling LPLU D0\n");
822 /* Configure mdi-mdix settings */
823 ret_val = e1e_rphy(hw, IGP01E1000_PHY_PORT_CTRL, &data);
827 data &= ~IGP01E1000_PSCR_AUTO_MDIX;
831 data &= ~IGP01E1000_PSCR_FORCE_MDI_MDIX;
834 data |= IGP01E1000_PSCR_FORCE_MDI_MDIX;
838 data |= IGP01E1000_PSCR_AUTO_MDIX;
841 ret_val = e1e_wphy(hw, IGP01E1000_PHY_PORT_CTRL, data);
845 /* set auto-master slave resolution settings */
846 if (hw->mac.autoneg) {
848 * when autonegotiation advertisement is only 1000Mbps then we
849 * should disable SmartSpeed and enable Auto MasterSlave
850 * resolution as hardware default.
852 if (phy->autoneg_advertised == ADVERTISE_1000_FULL) {
853 /* Disable SmartSpeed */
854 ret_val = e1e_rphy(hw, IGP01E1000_PHY_PORT_CONFIG,
859 data &= ~IGP01E1000_PSCFR_SMART_SPEED;
860 ret_val = e1e_wphy(hw, IGP01E1000_PHY_PORT_CONFIG,
865 /* Set auto Master/Slave resolution process */
866 ret_val = e1e_rphy(hw, PHY_1000T_CTRL, &data);
870 data &= ~CR_1000T_MS_ENABLE;
871 ret_val = e1e_wphy(hw, PHY_1000T_CTRL, data);
876 ret_val = e1e_rphy(hw, PHY_1000T_CTRL, &data);
880 /* load defaults for future use */
881 phy->original_ms_type = (data & CR_1000T_MS_ENABLE) ?
882 ((data & CR_1000T_MS_VALUE) ?
883 e1000_ms_force_master :
884 e1000_ms_force_slave) :
887 switch (phy->ms_type) {
888 case e1000_ms_force_master:
889 data |= (CR_1000T_MS_ENABLE | CR_1000T_MS_VALUE);
891 case e1000_ms_force_slave:
892 data |= CR_1000T_MS_ENABLE;
893 data &= ~(CR_1000T_MS_VALUE);
896 data &= ~CR_1000T_MS_ENABLE;
900 ret_val = e1e_wphy(hw, PHY_1000T_CTRL, data);
907 * e1000_phy_setup_autoneg - Configure PHY for auto-negotiation
908 * @hw: pointer to the HW structure
910 * Reads the MII auto-neg advertisement register and/or the 1000T control
911 * register and if the PHY is already setup for auto-negotiation, then
912 * return successful. Otherwise, setup advertisement and flow control to
913 * the appropriate values for the wanted auto-negotiation.
915 static s32 e1000_phy_setup_autoneg(struct e1000_hw *hw)
917 struct e1000_phy_info *phy = &hw->phy;
919 u16 mii_autoneg_adv_reg;
920 u16 mii_1000t_ctrl_reg = 0;
922 phy->autoneg_advertised &= phy->autoneg_mask;
924 /* Read the MII Auto-Neg Advertisement Register (Address 4). */
925 ret_val = e1e_rphy(hw, PHY_AUTONEG_ADV, &mii_autoneg_adv_reg);
929 if (phy->autoneg_mask & ADVERTISE_1000_FULL) {
930 /* Read the MII 1000Base-T Control Register (Address 9). */
931 ret_val = e1e_rphy(hw, PHY_1000T_CTRL, &mii_1000t_ctrl_reg);
937 * Need to parse both autoneg_advertised and fc and set up
938 * the appropriate PHY registers. First we will parse for
939 * autoneg_advertised software override. Since we can advertise
940 * a plethora of combinations, we need to check each bit
945 * First we clear all the 10/100 mb speed bits in the Auto-Neg
946 * Advertisement Register (Address 4) and the 1000 mb speed bits in
947 * the 1000Base-T Control Register (Address 9).
949 mii_autoneg_adv_reg &= ~(NWAY_AR_100TX_FD_CAPS |
950 NWAY_AR_100TX_HD_CAPS |
951 NWAY_AR_10T_FD_CAPS |
952 NWAY_AR_10T_HD_CAPS);
953 mii_1000t_ctrl_reg &= ~(CR_1000T_HD_CAPS | CR_1000T_FD_CAPS);
955 e_dbg("autoneg_advertised %x\n", phy->autoneg_advertised);
957 /* Do we want to advertise 10 Mb Half Duplex? */
958 if (phy->autoneg_advertised & ADVERTISE_10_HALF) {
959 e_dbg("Advertise 10mb Half duplex\n");
960 mii_autoneg_adv_reg |= NWAY_AR_10T_HD_CAPS;
963 /* Do we want to advertise 10 Mb Full Duplex? */
964 if (phy->autoneg_advertised & ADVERTISE_10_FULL) {
965 e_dbg("Advertise 10mb Full duplex\n");
966 mii_autoneg_adv_reg |= NWAY_AR_10T_FD_CAPS;
969 /* Do we want to advertise 100 Mb Half Duplex? */
970 if (phy->autoneg_advertised & ADVERTISE_100_HALF) {
971 e_dbg("Advertise 100mb Half duplex\n");
972 mii_autoneg_adv_reg |= NWAY_AR_100TX_HD_CAPS;
975 /* Do we want to advertise 100 Mb Full Duplex? */
976 if (phy->autoneg_advertised & ADVERTISE_100_FULL) {
977 e_dbg("Advertise 100mb Full duplex\n");
978 mii_autoneg_adv_reg |= NWAY_AR_100TX_FD_CAPS;
981 /* We do not allow the Phy to advertise 1000 Mb Half Duplex */
982 if (phy->autoneg_advertised & ADVERTISE_1000_HALF)
983 e_dbg("Advertise 1000mb Half duplex request denied!\n");
985 /* Do we want to advertise 1000 Mb Full Duplex? */
986 if (phy->autoneg_advertised & ADVERTISE_1000_FULL) {
987 e_dbg("Advertise 1000mb Full duplex\n");
988 mii_1000t_ctrl_reg |= CR_1000T_FD_CAPS;
992 * Check for a software override of the flow control settings, and
993 * setup the PHY advertisement registers accordingly. If
994 * auto-negotiation is enabled, then software will have to set the
995 * "PAUSE" bits to the correct value in the Auto-Negotiation
996 * Advertisement Register (PHY_AUTONEG_ADV) and re-start auto-
999 * The possible values of the "fc" parameter are:
1000 * 0: Flow control is completely disabled
1001 * 1: Rx flow control is enabled (we can receive pause frames
1002 * but not send pause frames).
1003 * 2: Tx flow control is enabled (we can send pause frames
1004 * but we do not support receiving pause frames).
1005 * 3: Both Rx and Tx flow control (symmetric) are enabled.
1006 * other: No software override. The flow control configuration
1007 * in the EEPROM is used.
1009 switch (hw->fc.current_mode) {
1012 * Flow control (Rx & Tx) is completely disabled by a
1013 * software over-ride.
1015 mii_autoneg_adv_reg &= ~(NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
1017 case e1000_fc_rx_pause:
1019 * Rx Flow control is enabled, and Tx Flow control is
1020 * disabled, by a software over-ride.
1022 * Since there really isn't a way to advertise that we are
1023 * capable of Rx Pause ONLY, we will advertise that we
1024 * support both symmetric and asymmetric Rx PAUSE. Later
1025 * (in e1000e_config_fc_after_link_up) we will disable the
1026 * hw's ability to send PAUSE frames.
1028 mii_autoneg_adv_reg |= (NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
1030 case e1000_fc_tx_pause:
1032 * Tx Flow control is enabled, and Rx Flow control is
1033 * disabled, by a software over-ride.
1035 mii_autoneg_adv_reg |= NWAY_AR_ASM_DIR;
1036 mii_autoneg_adv_reg &= ~NWAY_AR_PAUSE;
1040 * Flow control (both Rx and Tx) is enabled by a software
1043 mii_autoneg_adv_reg |= (NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
1046 e_dbg("Flow control param set incorrectly\n");
1047 ret_val = -E1000_ERR_CONFIG;
1051 ret_val = e1e_wphy(hw, PHY_AUTONEG_ADV, mii_autoneg_adv_reg);
1055 e_dbg("Auto-Neg Advertising %x\n", mii_autoneg_adv_reg);
1057 if (phy->autoneg_mask & ADVERTISE_1000_FULL)
1058 ret_val = e1e_wphy(hw, PHY_1000T_CTRL, mii_1000t_ctrl_reg);
1064 * e1000_copper_link_autoneg - Setup/Enable autoneg for copper link
1065 * @hw: pointer to the HW structure
1067 * Performs initial bounds checking on autoneg advertisement parameter, then
1068 * configure to advertise the full capability. Setup the PHY to autoneg
1069 * and restart the negotiation process between the link partner. If
1070 * autoneg_wait_to_complete, then wait for autoneg to complete before exiting.
1072 static s32 e1000_copper_link_autoneg(struct e1000_hw *hw)
1074 struct e1000_phy_info *phy = &hw->phy;
1079 * Perform some bounds checking on the autoneg advertisement
1082 phy->autoneg_advertised &= phy->autoneg_mask;
1085 * If autoneg_advertised is zero, we assume it was not defaulted
1086 * by the calling code so we set to advertise full capability.
1088 if (phy->autoneg_advertised == 0)
1089 phy->autoneg_advertised = phy->autoneg_mask;
1091 e_dbg("Reconfiguring auto-neg advertisement params\n");
1092 ret_val = e1000_phy_setup_autoneg(hw);
1094 e_dbg("Error Setting up Auto-Negotiation\n");
1097 e_dbg("Restarting Auto-Neg\n");
1100 * Restart auto-negotiation by setting the Auto Neg Enable bit and
1101 * the Auto Neg Restart bit in the PHY control register.
1103 ret_val = e1e_rphy(hw, PHY_CONTROL, &phy_ctrl);
1107 phy_ctrl |= (MII_CR_AUTO_NEG_EN | MII_CR_RESTART_AUTO_NEG);
1108 ret_val = e1e_wphy(hw, PHY_CONTROL, phy_ctrl);
1113 * Does the user want to wait for Auto-Neg to complete here, or
1114 * check at a later time (for example, callback routine).
1116 if (phy->autoneg_wait_to_complete) {
1117 ret_val = e1000_wait_autoneg(hw);
1119 e_dbg("Error while waiting for "
1120 "autoneg to complete\n");
1125 hw->mac.get_link_status = 1;
1131 * e1000e_setup_copper_link - Configure copper link settings
1132 * @hw: pointer to the HW structure
1134 * Calls the appropriate function to configure the link for auto-neg or forced
1135 * speed and duplex. Then we check for link, once link is established calls
1136 * to configure collision distance and flow control are called. If link is
1137 * not established, we return -E1000_ERR_PHY (-2).
1139 s32 e1000e_setup_copper_link(struct e1000_hw *hw)
1144 if (hw->mac.autoneg) {
1146 * Setup autoneg and flow control advertisement and perform
1149 ret_val = e1000_copper_link_autoneg(hw);
1154 * PHY will be set to 10H, 10F, 100H or 100F
1155 * depending on user settings.
1157 e_dbg("Forcing Speed and Duplex\n");
1158 ret_val = e1000_phy_force_speed_duplex(hw);
1160 e_dbg("Error Forcing Speed and Duplex\n");
1166 * Check link status. Wait up to 100 microseconds for link to become
1169 ret_val = e1000e_phy_has_link_generic(hw,
1170 COPPER_LINK_UP_LIMIT,
1177 e_dbg("Valid link established!!!\n");
1178 e1000e_config_collision_dist(hw);
1179 ret_val = e1000e_config_fc_after_link_up(hw);
1181 e_dbg("Unable to establish link!!!\n");
1188 * e1000e_phy_force_speed_duplex_igp - Force speed/duplex for igp PHY
1189 * @hw: pointer to the HW structure
1191 * Calls the PHY setup function to force speed and duplex. Clears the
1192 * auto-crossover to force MDI manually. Waits for link and returns
1193 * successful if link up is successful, else -E1000_ERR_PHY (-2).
1195 s32 e1000e_phy_force_speed_duplex_igp(struct e1000_hw *hw)
1197 struct e1000_phy_info *phy = &hw->phy;
1202 ret_val = e1e_rphy(hw, PHY_CONTROL, &phy_data);
1206 e1000e_phy_force_speed_duplex_setup(hw, &phy_data);
1208 ret_val = e1e_wphy(hw, PHY_CONTROL, phy_data);
1213 * Clear Auto-Crossover to force MDI manually. IGP requires MDI
1214 * forced whenever speed and duplex are forced.
1216 ret_val = e1e_rphy(hw, IGP01E1000_PHY_PORT_CTRL, &phy_data);
1220 phy_data &= ~IGP01E1000_PSCR_AUTO_MDIX;
1221 phy_data &= ~IGP01E1000_PSCR_FORCE_MDI_MDIX;
1223 ret_val = e1e_wphy(hw, IGP01E1000_PHY_PORT_CTRL, phy_data);
1227 e_dbg("IGP PSCR: %X\n", phy_data);
1231 if (phy->autoneg_wait_to_complete) {
1232 e_dbg("Waiting for forced speed/duplex link on IGP phy.\n");
1234 ret_val = e1000e_phy_has_link_generic(hw,
1242 e_dbg("Link taking longer than expected.\n");
1245 ret_val = e1000e_phy_has_link_generic(hw,
1257 * e1000e_phy_force_speed_duplex_m88 - Force speed/duplex for m88 PHY
1258 * @hw: pointer to the HW structure
1260 * Calls the PHY setup function to force speed and duplex. Clears the
1261 * auto-crossover to force MDI manually. Resets the PHY to commit the
1262 * changes. If time expires while waiting for link up, we reset the DSP.
1263 * After reset, TX_CLK and CRS on Tx must be set. Return successful upon
1264 * successful completion, else return corresponding error code.
1266 s32 e1000e_phy_force_speed_duplex_m88(struct e1000_hw *hw)
1268 struct e1000_phy_info *phy = &hw->phy;
1274 * Clear Auto-Crossover to force MDI manually. M88E1000 requires MDI
1275 * forced whenever speed and duplex are forced.
1277 ret_val = e1e_rphy(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
1281 phy_data &= ~M88E1000_PSCR_AUTO_X_MODE;
1282 ret_val = e1e_wphy(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
1286 e_dbg("M88E1000 PSCR: %X\n", phy_data);
1288 ret_val = e1e_rphy(hw, PHY_CONTROL, &phy_data);
1292 e1000e_phy_force_speed_duplex_setup(hw, &phy_data);
1294 ret_val = e1e_wphy(hw, PHY_CONTROL, phy_data);
1298 /* Reset the phy to commit changes. */
1299 ret_val = e1000e_commit_phy(hw);
1303 if (phy->autoneg_wait_to_complete) {
1304 e_dbg("Waiting for forced speed/duplex link on M88 phy.\n");
1306 ret_val = e1000e_phy_has_link_generic(hw, PHY_FORCE_LIMIT,
1312 if (hw->phy.type != e1000_phy_m88) {
1313 e_dbg("Link taking longer than expected.\n");
1316 * We didn't get link.
1317 * Reset the DSP and cross our fingers.
1319 ret_val = e1e_wphy(hw, M88E1000_PHY_PAGE_SELECT,
1323 ret_val = e1000e_phy_reset_dsp(hw);
1330 ret_val = e1000e_phy_has_link_generic(hw, PHY_FORCE_LIMIT,
1336 if (hw->phy.type != e1000_phy_m88)
1339 ret_val = e1e_rphy(hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_data);
1344 * Resetting the phy means we need to re-force TX_CLK in the
1345 * Extended PHY Specific Control Register to 25MHz clock from
1346 * the reset value of 2.5MHz.
1348 phy_data |= M88E1000_EPSCR_TX_CLK_25;
1349 ret_val = e1e_wphy(hw, M88E1000_EXT_PHY_SPEC_CTRL, phy_data);
1354 * In addition, we must re-enable CRS on Tx for both half and full
1357 ret_val = e1e_rphy(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
1361 phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
1362 ret_val = e1e_wphy(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
1368 * e1000_phy_force_speed_duplex_ife - Force PHY speed & duplex
1369 * @hw: pointer to the HW structure
1371 * Forces the speed and duplex settings of the PHY.
1372 * This is a function pointer entry point only called by
1373 * PHY setup routines.
1375 s32 e1000_phy_force_speed_duplex_ife(struct e1000_hw *hw)
1377 struct e1000_phy_info *phy = &hw->phy;
1382 ret_val = e1e_rphy(hw, PHY_CONTROL, &data);
1386 e1000e_phy_force_speed_duplex_setup(hw, &data);
1388 ret_val = e1e_wphy(hw, PHY_CONTROL, data);
1392 /* Disable MDI-X support for 10/100 */
1393 ret_val = e1e_rphy(hw, IFE_PHY_MDIX_CONTROL, &data);
1397 data &= ~IFE_PMC_AUTO_MDIX;
1398 data &= ~IFE_PMC_FORCE_MDIX;
1400 ret_val = e1e_wphy(hw, IFE_PHY_MDIX_CONTROL, data);
1404 e_dbg("IFE PMC: %X\n", data);
1408 if (phy->autoneg_wait_to_complete) {
1409 e_dbg("Waiting for forced speed/duplex link on IFE phy.\n");
1411 ret_val = e1000e_phy_has_link_generic(hw,
1419 e_dbg("Link taking longer than expected.\n");
1422 ret_val = e1000e_phy_has_link_generic(hw,
1435 * e1000e_phy_force_speed_duplex_setup - Configure forced PHY speed/duplex
1436 * @hw: pointer to the HW structure
1437 * @phy_ctrl: pointer to current value of PHY_CONTROL
1439 * Forces speed and duplex on the PHY by doing the following: disable flow
1440 * control, force speed/duplex on the MAC, disable auto speed detection,
1441 * disable auto-negotiation, configure duplex, configure speed, configure
1442 * the collision distance, write configuration to CTRL register. The
1443 * caller must write to the PHY_CONTROL register for these settings to
1446 void e1000e_phy_force_speed_duplex_setup(struct e1000_hw *hw, u16 *phy_ctrl)
1448 struct e1000_mac_info *mac = &hw->mac;
1451 /* Turn off flow control when forcing speed/duplex */
1452 hw->fc.current_mode = e1000_fc_none;
1454 /* Force speed/duplex on the mac */
1456 ctrl |= (E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
1457 ctrl &= ~E1000_CTRL_SPD_SEL;
1459 /* Disable Auto Speed Detection */
1460 ctrl &= ~E1000_CTRL_ASDE;
1462 /* Disable autoneg on the phy */
1463 *phy_ctrl &= ~MII_CR_AUTO_NEG_EN;
1465 /* Forcing Full or Half Duplex? */
1466 if (mac->forced_speed_duplex & E1000_ALL_HALF_DUPLEX) {
1467 ctrl &= ~E1000_CTRL_FD;
1468 *phy_ctrl &= ~MII_CR_FULL_DUPLEX;
1469 e_dbg("Half Duplex\n");
1471 ctrl |= E1000_CTRL_FD;
1472 *phy_ctrl |= MII_CR_FULL_DUPLEX;
1473 e_dbg("Full Duplex\n");
1476 /* Forcing 10mb or 100mb? */
1477 if (mac->forced_speed_duplex & E1000_ALL_100_SPEED) {
1478 ctrl |= E1000_CTRL_SPD_100;
1479 *phy_ctrl |= MII_CR_SPEED_100;
1480 *phy_ctrl &= ~(MII_CR_SPEED_1000 | MII_CR_SPEED_10);
1481 e_dbg("Forcing 100mb\n");
1483 ctrl &= ~(E1000_CTRL_SPD_1000 | E1000_CTRL_SPD_100);
1484 *phy_ctrl |= MII_CR_SPEED_10;
1485 *phy_ctrl &= ~(MII_CR_SPEED_1000 | MII_CR_SPEED_100);
1486 e_dbg("Forcing 10mb\n");
1489 e1000e_config_collision_dist(hw);
1495 * e1000e_set_d3_lplu_state - Sets low power link up state for D3
1496 * @hw: pointer to the HW structure
1497 * @active: boolean used to enable/disable lplu
1499 * Success returns 0, Failure returns 1
1501 * The low power link up (lplu) state is set to the power management level D3
1502 * and SmartSpeed is disabled when active is true, else clear lplu for D3
1503 * and enable Smartspeed. LPLU and Smartspeed are mutually exclusive. LPLU
1504 * is used during Dx states where the power conservation is most important.
1505 * During driver activity, SmartSpeed should be enabled so performance is
1508 s32 e1000e_set_d3_lplu_state(struct e1000_hw *hw, bool active)
1510 struct e1000_phy_info *phy = &hw->phy;
1514 ret_val = e1e_rphy(hw, IGP02E1000_PHY_POWER_MGMT, &data);
1519 data &= ~IGP02E1000_PM_D3_LPLU;
1520 ret_val = e1e_wphy(hw, IGP02E1000_PHY_POWER_MGMT, data);
1524 * LPLU and SmartSpeed are mutually exclusive. LPLU is used
1525 * during Dx states where the power conservation is most
1526 * important. During driver activity we should enable
1527 * SmartSpeed, so performance is maintained.
1529 if (phy->smart_speed == e1000_smart_speed_on) {
1530 ret_val = e1e_rphy(hw, IGP01E1000_PHY_PORT_CONFIG,
1535 data |= IGP01E1000_PSCFR_SMART_SPEED;
1536 ret_val = e1e_wphy(hw, IGP01E1000_PHY_PORT_CONFIG,
1540 } else if (phy->smart_speed == e1000_smart_speed_off) {
1541 ret_val = e1e_rphy(hw, IGP01E1000_PHY_PORT_CONFIG,
1546 data &= ~IGP01E1000_PSCFR_SMART_SPEED;
1547 ret_val = e1e_wphy(hw, IGP01E1000_PHY_PORT_CONFIG,
1552 } else if ((phy->autoneg_advertised == E1000_ALL_SPEED_DUPLEX) ||
1553 (phy->autoneg_advertised == E1000_ALL_NOT_GIG) ||
1554 (phy->autoneg_advertised == E1000_ALL_10_SPEED)) {
1555 data |= IGP02E1000_PM_D3_LPLU;
1556 ret_val = e1e_wphy(hw, IGP02E1000_PHY_POWER_MGMT, data);
1560 /* When LPLU is enabled, we should disable SmartSpeed */
1561 ret_val = e1e_rphy(hw, IGP01E1000_PHY_PORT_CONFIG, &data);
1565 data &= ~IGP01E1000_PSCFR_SMART_SPEED;
1566 ret_val = e1e_wphy(hw, IGP01E1000_PHY_PORT_CONFIG, data);
1573 * e1000e_check_downshift - Checks whether a downshift in speed occurred
1574 * @hw: pointer to the HW structure
1576 * Success returns 0, Failure returns 1
1578 * A downshift is detected by querying the PHY link health.
1580 s32 e1000e_check_downshift(struct e1000_hw *hw)
1582 struct e1000_phy_info *phy = &hw->phy;
1584 u16 phy_data, offset, mask;
1586 switch (phy->type) {
1588 case e1000_phy_gg82563:
1590 case e1000_phy_82578:
1591 offset = M88E1000_PHY_SPEC_STATUS;
1592 mask = M88E1000_PSSR_DOWNSHIFT;
1594 case e1000_phy_igp_2:
1595 case e1000_phy_igp_3:
1596 offset = IGP01E1000_PHY_LINK_HEALTH;
1597 mask = IGP01E1000_PLHR_SS_DOWNGRADE;
1600 /* speed downshift not supported */
1601 phy->speed_downgraded = false;
1605 ret_val = e1e_rphy(hw, offset, &phy_data);
1608 phy->speed_downgraded = (phy_data & mask);
1614 * e1000_check_polarity_m88 - Checks the polarity.
1615 * @hw: pointer to the HW structure
1617 * Success returns 0, Failure returns -E1000_ERR_PHY (-2)
1619 * Polarity is determined based on the PHY specific status register.
1621 s32 e1000_check_polarity_m88(struct e1000_hw *hw)
1623 struct e1000_phy_info *phy = &hw->phy;
1627 ret_val = e1e_rphy(hw, M88E1000_PHY_SPEC_STATUS, &data);
1630 phy->cable_polarity = (data & M88E1000_PSSR_REV_POLARITY)
1631 ? e1000_rev_polarity_reversed
1632 : e1000_rev_polarity_normal;
1638 * e1000_check_polarity_igp - Checks the polarity.
1639 * @hw: pointer to the HW structure
1641 * Success returns 0, Failure returns -E1000_ERR_PHY (-2)
1643 * Polarity is determined based on the PHY port status register, and the
1644 * current speed (since there is no polarity at 100Mbps).
1646 s32 e1000_check_polarity_igp(struct e1000_hw *hw)
1648 struct e1000_phy_info *phy = &hw->phy;
1650 u16 data, offset, mask;
1653 * Polarity is determined based on the speed of
1656 ret_val = e1e_rphy(hw, IGP01E1000_PHY_PORT_STATUS, &data);
1660 if ((data & IGP01E1000_PSSR_SPEED_MASK) ==
1661 IGP01E1000_PSSR_SPEED_1000MBPS) {
1662 offset = IGP01E1000_PHY_PCS_INIT_REG;
1663 mask = IGP01E1000_PHY_POLARITY_MASK;
1666 * This really only applies to 10Mbps since
1667 * there is no polarity for 100Mbps (always 0).
1669 offset = IGP01E1000_PHY_PORT_STATUS;
1670 mask = IGP01E1000_PSSR_POLARITY_REVERSED;
1673 ret_val = e1e_rphy(hw, offset, &data);
1676 phy->cable_polarity = (data & mask)
1677 ? e1000_rev_polarity_reversed
1678 : e1000_rev_polarity_normal;
1684 * e1000_check_polarity_ife - Check cable polarity for IFE PHY
1685 * @hw: pointer to the HW structure
1687 * Polarity is determined on the polarity reversal feature being enabled.
1689 s32 e1000_check_polarity_ife(struct e1000_hw *hw)
1691 struct e1000_phy_info *phy = &hw->phy;
1693 u16 phy_data, offset, mask;
1696 * Polarity is determined based on the reversal feature being enabled.
1698 if (phy->polarity_correction) {
1699 offset = IFE_PHY_EXTENDED_STATUS_CONTROL;
1700 mask = IFE_PESC_POLARITY_REVERSED;
1702 offset = IFE_PHY_SPECIAL_CONTROL;
1703 mask = IFE_PSC_FORCE_POLARITY;
1706 ret_val = e1e_rphy(hw, offset, &phy_data);
1709 phy->cable_polarity = (phy_data & mask)
1710 ? e1000_rev_polarity_reversed
1711 : e1000_rev_polarity_normal;
1717 * e1000_wait_autoneg - Wait for auto-neg completion
1718 * @hw: pointer to the HW structure
1720 * Waits for auto-negotiation to complete or for the auto-negotiation time
1721 * limit to expire, which ever happens first.
1723 static s32 e1000_wait_autoneg(struct e1000_hw *hw)
1728 /* Break after autoneg completes or PHY_AUTO_NEG_LIMIT expires. */
1729 for (i = PHY_AUTO_NEG_LIMIT; i > 0; i--) {
1730 ret_val = e1e_rphy(hw, PHY_STATUS, &phy_status);
1733 ret_val = e1e_rphy(hw, PHY_STATUS, &phy_status);
1736 if (phy_status & MII_SR_AUTONEG_COMPLETE)
1742 * PHY_AUTO_NEG_TIME expiration doesn't guarantee auto-negotiation
1749 * e1000e_phy_has_link_generic - Polls PHY for link
1750 * @hw: pointer to the HW structure
1751 * @iterations: number of times to poll for link
1752 * @usec_interval: delay between polling attempts
1753 * @success: pointer to whether polling was successful or not
1755 * Polls the PHY status register for link, 'iterations' number of times.
1757 s32 e1000e_phy_has_link_generic(struct e1000_hw *hw, u32 iterations,
1758 u32 usec_interval, bool *success)
1763 for (i = 0; i < iterations; i++) {
1765 * Some PHYs require the PHY_STATUS register to be read
1766 * twice due to the link bit being sticky. No harm doing
1767 * it across the board.
1769 ret_val = e1e_rphy(hw, PHY_STATUS, &phy_status);
1772 * If the first read fails, another entity may have
1773 * ownership of the resources, wait and try again to
1774 * see if they have relinquished the resources yet.
1776 udelay(usec_interval);
1777 ret_val = e1e_rphy(hw, PHY_STATUS, &phy_status);
1780 if (phy_status & MII_SR_LINK_STATUS)
1782 if (usec_interval >= 1000)
1783 mdelay(usec_interval/1000);
1785 udelay(usec_interval);
1788 *success = (i < iterations);
1794 * e1000e_get_cable_length_m88 - Determine cable length for m88 PHY
1795 * @hw: pointer to the HW structure
1797 * Reads the PHY specific status register to retrieve the cable length
1798 * information. The cable length is determined by averaging the minimum and
1799 * maximum values to get the "average" cable length. The m88 PHY has four
1800 * possible cable length values, which are:
1801 * Register Value Cable Length
1805 * 3 110 - 140 meters
1808 s32 e1000e_get_cable_length_m88(struct e1000_hw *hw)
1810 struct e1000_phy_info *phy = &hw->phy;
1812 u16 phy_data, index;
1814 ret_val = e1e_rphy(hw, M88E1000_PHY_SPEC_STATUS, &phy_data);
1818 index = (phy_data & M88E1000_PSSR_CABLE_LENGTH) >>
1819 M88E1000_PSSR_CABLE_LENGTH_SHIFT;
1820 if (index >= M88E1000_CABLE_LENGTH_TABLE_SIZE - 1) {
1821 ret_val = -E1000_ERR_PHY;
1825 phy->min_cable_length = e1000_m88_cable_length_table[index];
1826 phy->max_cable_length = e1000_m88_cable_length_table[index + 1];
1828 phy->cable_length = (phy->min_cable_length + phy->max_cable_length) / 2;
1835 * e1000e_get_cable_length_igp_2 - Determine cable length for igp2 PHY
1836 * @hw: pointer to the HW structure
1838 * The automatic gain control (agc) normalizes the amplitude of the
1839 * received signal, adjusting for the attenuation produced by the
1840 * cable. By reading the AGC registers, which represent the
1841 * combination of coarse and fine gain value, the value can be put
1842 * into a lookup table to obtain the approximate cable length
1845 s32 e1000e_get_cable_length_igp_2(struct e1000_hw *hw)
1847 struct e1000_phy_info *phy = &hw->phy;
1849 u16 phy_data, i, agc_value = 0;
1850 u16 cur_agc_index, max_agc_index = 0;
1851 u16 min_agc_index = IGP02E1000_CABLE_LENGTH_TABLE_SIZE - 1;
1852 static const u16 agc_reg_array[IGP02E1000_PHY_CHANNEL_NUM] = {
1853 IGP02E1000_PHY_AGC_A,
1854 IGP02E1000_PHY_AGC_B,
1855 IGP02E1000_PHY_AGC_C,
1856 IGP02E1000_PHY_AGC_D
1859 /* Read the AGC registers for all channels */
1860 for (i = 0; i < IGP02E1000_PHY_CHANNEL_NUM; i++) {
1861 ret_val = e1e_rphy(hw, agc_reg_array[i], &phy_data);
1866 * Getting bits 15:9, which represent the combination of
1867 * coarse and fine gain values. The result is a number
1868 * that can be put into the lookup table to obtain the
1869 * approximate cable length.
1871 cur_agc_index = (phy_data >> IGP02E1000_AGC_LENGTH_SHIFT) &
1872 IGP02E1000_AGC_LENGTH_MASK;
1874 /* Array index bound check. */
1875 if ((cur_agc_index >= IGP02E1000_CABLE_LENGTH_TABLE_SIZE) ||
1876 (cur_agc_index == 0))
1877 return -E1000_ERR_PHY;
1879 /* Remove min & max AGC values from calculation. */
1880 if (e1000_igp_2_cable_length_table[min_agc_index] >
1881 e1000_igp_2_cable_length_table[cur_agc_index])
1882 min_agc_index = cur_agc_index;
1883 if (e1000_igp_2_cable_length_table[max_agc_index] <
1884 e1000_igp_2_cable_length_table[cur_agc_index])
1885 max_agc_index = cur_agc_index;
1887 agc_value += e1000_igp_2_cable_length_table[cur_agc_index];
1890 agc_value -= (e1000_igp_2_cable_length_table[min_agc_index] +
1891 e1000_igp_2_cable_length_table[max_agc_index]);
1892 agc_value /= (IGP02E1000_PHY_CHANNEL_NUM - 2);
1894 /* Calculate cable length with the error range of +/- 10 meters. */
1895 phy->min_cable_length = ((agc_value - IGP02E1000_AGC_RANGE) > 0) ?
1896 (agc_value - IGP02E1000_AGC_RANGE) : 0;
1897 phy->max_cable_length = agc_value + IGP02E1000_AGC_RANGE;
1899 phy->cable_length = (phy->min_cable_length + phy->max_cable_length) / 2;
1905 * e1000e_get_phy_info_m88 - Retrieve PHY information
1906 * @hw: pointer to the HW structure
1908 * Valid for only copper links. Read the PHY status register (sticky read)
1909 * to verify that link is up. Read the PHY special control register to
1910 * determine the polarity and 10base-T extended distance. Read the PHY
1911 * special status register to determine MDI/MDIx and current speed. If
1912 * speed is 1000, then determine cable length, local and remote receiver.
1914 s32 e1000e_get_phy_info_m88(struct e1000_hw *hw)
1916 struct e1000_phy_info *phy = &hw->phy;
1921 if (phy->media_type != e1000_media_type_copper) {
1922 e_dbg("Phy info is only valid for copper media\n");
1923 return -E1000_ERR_CONFIG;
1926 ret_val = e1000e_phy_has_link_generic(hw, 1, 0, &link);
1931 e_dbg("Phy info is only valid if link is up\n");
1932 return -E1000_ERR_CONFIG;
1935 ret_val = e1e_rphy(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
1939 phy->polarity_correction = (phy_data &
1940 M88E1000_PSCR_POLARITY_REVERSAL);
1942 ret_val = e1000_check_polarity_m88(hw);
1946 ret_val = e1e_rphy(hw, M88E1000_PHY_SPEC_STATUS, &phy_data);
1950 phy->is_mdix = (phy_data & M88E1000_PSSR_MDIX);
1952 if ((phy_data & M88E1000_PSSR_SPEED) == M88E1000_PSSR_1000MBS) {
1953 ret_val = e1000_get_cable_length(hw);
1957 ret_val = e1e_rphy(hw, PHY_1000T_STATUS, &phy_data);
1961 phy->local_rx = (phy_data & SR_1000T_LOCAL_RX_STATUS)
1962 ? e1000_1000t_rx_status_ok
1963 : e1000_1000t_rx_status_not_ok;
1965 phy->remote_rx = (phy_data & SR_1000T_REMOTE_RX_STATUS)
1966 ? e1000_1000t_rx_status_ok
1967 : e1000_1000t_rx_status_not_ok;
1969 /* Set values to "undefined" */
1970 phy->cable_length = E1000_CABLE_LENGTH_UNDEFINED;
1971 phy->local_rx = e1000_1000t_rx_status_undefined;
1972 phy->remote_rx = e1000_1000t_rx_status_undefined;
1979 * e1000e_get_phy_info_igp - Retrieve igp PHY information
1980 * @hw: pointer to the HW structure
1982 * Read PHY status to determine if link is up. If link is up, then
1983 * set/determine 10base-T extended distance and polarity correction. Read
1984 * PHY port status to determine MDI/MDIx and speed. Based on the speed,
1985 * determine on the cable length, local and remote receiver.
1987 s32 e1000e_get_phy_info_igp(struct e1000_hw *hw)
1989 struct e1000_phy_info *phy = &hw->phy;
1994 ret_val = e1000e_phy_has_link_generic(hw, 1, 0, &link);
1999 e_dbg("Phy info is only valid if link is up\n");
2000 return -E1000_ERR_CONFIG;
2003 phy->polarity_correction = true;
2005 ret_val = e1000_check_polarity_igp(hw);
2009 ret_val = e1e_rphy(hw, IGP01E1000_PHY_PORT_STATUS, &data);
2013 phy->is_mdix = (data & IGP01E1000_PSSR_MDIX);
2015 if ((data & IGP01E1000_PSSR_SPEED_MASK) ==
2016 IGP01E1000_PSSR_SPEED_1000MBPS) {
2017 ret_val = e1000_get_cable_length(hw);
2021 ret_val = e1e_rphy(hw, PHY_1000T_STATUS, &data);
2025 phy->local_rx = (data & SR_1000T_LOCAL_RX_STATUS)
2026 ? e1000_1000t_rx_status_ok
2027 : e1000_1000t_rx_status_not_ok;
2029 phy->remote_rx = (data & SR_1000T_REMOTE_RX_STATUS)
2030 ? e1000_1000t_rx_status_ok
2031 : e1000_1000t_rx_status_not_ok;
2033 phy->cable_length = E1000_CABLE_LENGTH_UNDEFINED;
2034 phy->local_rx = e1000_1000t_rx_status_undefined;
2035 phy->remote_rx = e1000_1000t_rx_status_undefined;
2042 * e1000_get_phy_info_ife - Retrieves various IFE PHY states
2043 * @hw: pointer to the HW structure
2045 * Populates "phy" structure with various feature states.
2047 s32 e1000_get_phy_info_ife(struct e1000_hw *hw)
2049 struct e1000_phy_info *phy = &hw->phy;
2054 ret_val = e1000e_phy_has_link_generic(hw, 1, 0, &link);
2059 e_dbg("Phy info is only valid if link is up\n");
2060 ret_val = -E1000_ERR_CONFIG;
2064 ret_val = e1e_rphy(hw, IFE_PHY_SPECIAL_CONTROL, &data);
2067 phy->polarity_correction = (data & IFE_PSC_AUTO_POLARITY_DISABLE)
2070 if (phy->polarity_correction) {
2071 ret_val = e1000_check_polarity_ife(hw);
2075 /* Polarity is forced */
2076 phy->cable_polarity = (data & IFE_PSC_FORCE_POLARITY)
2077 ? e1000_rev_polarity_reversed
2078 : e1000_rev_polarity_normal;
2081 ret_val = e1e_rphy(hw, IFE_PHY_MDIX_CONTROL, &data);
2085 phy->is_mdix = (data & IFE_PMC_MDIX_STATUS) ? true : false;
2087 /* The following parameters are undefined for 10/100 operation. */
2088 phy->cable_length = E1000_CABLE_LENGTH_UNDEFINED;
2089 phy->local_rx = e1000_1000t_rx_status_undefined;
2090 phy->remote_rx = e1000_1000t_rx_status_undefined;
2097 * e1000e_phy_sw_reset - PHY software reset
2098 * @hw: pointer to the HW structure
2100 * Does a software reset of the PHY by reading the PHY control register and
2101 * setting/write the control register reset bit to the PHY.
2103 s32 e1000e_phy_sw_reset(struct e1000_hw *hw)
2108 ret_val = e1e_rphy(hw, PHY_CONTROL, &phy_ctrl);
2112 phy_ctrl |= MII_CR_RESET;
2113 ret_val = e1e_wphy(hw, PHY_CONTROL, phy_ctrl);
2123 * e1000e_phy_hw_reset_generic - PHY hardware reset
2124 * @hw: pointer to the HW structure
2126 * Verify the reset block is not blocking us from resetting. Acquire
2127 * semaphore (if necessary) and read/set/write the device control reset
2128 * bit in the PHY. Wait the appropriate delay time for the device to
2129 * reset and release the semaphore (if necessary).
2131 s32 e1000e_phy_hw_reset_generic(struct e1000_hw *hw)
2133 struct e1000_phy_info *phy = &hw->phy;
2137 ret_val = e1000_check_reset_block(hw);
2141 ret_val = phy->ops.acquire(hw);
2146 ew32(CTRL, ctrl | E1000_CTRL_PHY_RST);
2149 udelay(phy->reset_delay_us);
2156 phy->ops.release(hw);
2158 return e1000_get_phy_cfg_done(hw);
2162 * e1000e_get_cfg_done - Generic configuration done
2163 * @hw: pointer to the HW structure
2165 * Generic function to wait 10 milli-seconds for configuration to complete
2166 * and return success.
2168 s32 e1000e_get_cfg_done(struct e1000_hw *hw)
2175 * e1000e_phy_init_script_igp3 - Inits the IGP3 PHY
2176 * @hw: pointer to the HW structure
2178 * Initializes a Intel Gigabit PHY3 when an EEPROM is not present.
2180 s32 e1000e_phy_init_script_igp3(struct e1000_hw *hw)
2182 e_dbg("Running IGP 3 PHY init script\n");
2184 /* PHY init IGP 3 */
2185 /* Enable rise/fall, 10-mode work in class-A */
2186 e1e_wphy(hw, 0x2F5B, 0x9018);
2187 /* Remove all caps from Replica path filter */
2188 e1e_wphy(hw, 0x2F52, 0x0000);
2189 /* Bias trimming for ADC, AFE and Driver (Default) */
2190 e1e_wphy(hw, 0x2FB1, 0x8B24);
2191 /* Increase Hybrid poly bias */
2192 e1e_wphy(hw, 0x2FB2, 0xF8F0);
2193 /* Add 4% to Tx amplitude in Gig mode */
2194 e1e_wphy(hw, 0x2010, 0x10B0);
2195 /* Disable trimming (TTT) */
2196 e1e_wphy(hw, 0x2011, 0x0000);
2197 /* Poly DC correction to 94.6% + 2% for all channels */
2198 e1e_wphy(hw, 0x20DD, 0x249A);
2199 /* ABS DC correction to 95.9% */
2200 e1e_wphy(hw, 0x20DE, 0x00D3);
2201 /* BG temp curve trim */
2202 e1e_wphy(hw, 0x28B4, 0x04CE);
2203 /* Increasing ADC OPAMP stage 1 currents to max */
2204 e1e_wphy(hw, 0x2F70, 0x29E4);
2205 /* Force 1000 ( required for enabling PHY regs configuration) */
2206 e1e_wphy(hw, 0x0000, 0x0140);
2207 /* Set upd_freq to 6 */
2208 e1e_wphy(hw, 0x1F30, 0x1606);
2210 e1e_wphy(hw, 0x1F31, 0xB814);
2211 /* Disable adaptive fixed FFE (Default) */
2212 e1e_wphy(hw, 0x1F35, 0x002A);
2213 /* Enable FFE hysteresis */
2214 e1e_wphy(hw, 0x1F3E, 0x0067);
2215 /* Fixed FFE for short cable lengths */
2216 e1e_wphy(hw, 0x1F54, 0x0065);
2217 /* Fixed FFE for medium cable lengths */
2218 e1e_wphy(hw, 0x1F55, 0x002A);
2219 /* Fixed FFE for long cable lengths */
2220 e1e_wphy(hw, 0x1F56, 0x002A);
2221 /* Enable Adaptive Clip Threshold */
2222 e1e_wphy(hw, 0x1F72, 0x3FB0);
2223 /* AHT reset limit to 1 */
2224 e1e_wphy(hw, 0x1F76, 0xC0FF);
2225 /* Set AHT master delay to 127 msec */
2226 e1e_wphy(hw, 0x1F77, 0x1DEC);
2227 /* Set scan bits for AHT */
2228 e1e_wphy(hw, 0x1F78, 0xF9EF);
2229 /* Set AHT Preset bits */
2230 e1e_wphy(hw, 0x1F79, 0x0210);
2231 /* Change integ_factor of channel A to 3 */
2232 e1e_wphy(hw, 0x1895, 0x0003);
2233 /* Change prop_factor of channels BCD to 8 */
2234 e1e_wphy(hw, 0x1796, 0x0008);
2235 /* Change cg_icount + enable integbp for channels BCD */
2236 e1e_wphy(hw, 0x1798, 0xD008);
2238 * Change cg_icount + enable integbp + change prop_factor_master
2239 * to 8 for channel A
2241 e1e_wphy(hw, 0x1898, 0xD918);
2242 /* Disable AHT in Slave mode on channel A */
2243 e1e_wphy(hw, 0x187A, 0x0800);
2245 * Enable LPLU and disable AN to 1000 in non-D0a states,
2248 e1e_wphy(hw, 0x0019, 0x008D);
2249 /* Enable restart AN on an1000_dis change */
2250 e1e_wphy(hw, 0x001B, 0x2080);
2251 /* Enable wh_fifo read clock in 10/100 modes */
2252 e1e_wphy(hw, 0x0014, 0x0045);
2253 /* Restart AN, Speed selection is 1000 */
2254 e1e_wphy(hw, 0x0000, 0x1340);
2259 /* Internal function pointers */
2262 * e1000_get_phy_cfg_done - Generic PHY configuration done
2263 * @hw: pointer to the HW structure
2265 * Return success if silicon family did not implement a family specific
2266 * get_cfg_done function.
2268 static s32 e1000_get_phy_cfg_done(struct e1000_hw *hw)
2270 if (hw->phy.ops.get_cfg_done)
2271 return hw->phy.ops.get_cfg_done(hw);
2277 * e1000_phy_force_speed_duplex - Generic force PHY speed/duplex
2278 * @hw: pointer to the HW structure
2280 * When the silicon family has not implemented a forced speed/duplex
2281 * function for the PHY, simply return 0.
2283 static s32 e1000_phy_force_speed_duplex(struct e1000_hw *hw)
2285 if (hw->phy.ops.force_speed_duplex)
2286 return hw->phy.ops.force_speed_duplex(hw);
2292 * e1000e_get_phy_type_from_id - Get PHY type from id
2293 * @phy_id: phy_id read from the phy
2295 * Returns the phy type from the id.
2297 enum e1000_phy_type e1000e_get_phy_type_from_id(u32 phy_id)
2299 enum e1000_phy_type phy_type = e1000_phy_unknown;
2302 case M88E1000_I_PHY_ID:
2303 case M88E1000_E_PHY_ID:
2304 case M88E1111_I_PHY_ID:
2305 case M88E1011_I_PHY_ID:
2306 phy_type = e1000_phy_m88;
2308 case IGP01E1000_I_PHY_ID: /* IGP 1 & 2 share this */
2309 phy_type = e1000_phy_igp_2;
2311 case GG82563_E_PHY_ID:
2312 phy_type = e1000_phy_gg82563;
2314 case IGP03E1000_E_PHY_ID:
2315 phy_type = e1000_phy_igp_3;
2318 case IFE_PLUS_E_PHY_ID:
2319 case IFE_C_E_PHY_ID:
2320 phy_type = e1000_phy_ife;
2322 case BME1000_E_PHY_ID:
2323 case BME1000_E_PHY_ID_R2:
2324 phy_type = e1000_phy_bm;
2326 case I82578_E_PHY_ID:
2327 phy_type = e1000_phy_82578;
2329 case I82577_E_PHY_ID:
2330 phy_type = e1000_phy_82577;
2332 case I82579_E_PHY_ID:
2333 phy_type = e1000_phy_82579;
2336 phy_type = e1000_phy_unknown;
2343 * e1000e_determine_phy_address - Determines PHY address.
2344 * @hw: pointer to the HW structure
2346 * This uses a trial and error method to loop through possible PHY
2347 * addresses. It tests each by reading the PHY ID registers and
2348 * checking for a match.
2350 s32 e1000e_determine_phy_address(struct e1000_hw *hw)
2352 s32 ret_val = -E1000_ERR_PHY_TYPE;
2355 enum e1000_phy_type phy_type = e1000_phy_unknown;
2357 hw->phy.id = phy_type;
2359 for (phy_addr = 0; phy_addr < E1000_MAX_PHY_ADDR; phy_addr++) {
2360 hw->phy.addr = phy_addr;
2364 e1000e_get_phy_id(hw);
2365 phy_type = e1000e_get_phy_type_from_id(hw->phy.id);
2368 * If phy_type is valid, break - we found our
2371 if (phy_type != e1000_phy_unknown) {
2385 * e1000_get_phy_addr_for_bm_page - Retrieve PHY page address
2386 * @page: page to access
2388 * Returns the phy address for the page requested.
2390 static u32 e1000_get_phy_addr_for_bm_page(u32 page, u32 reg)
2394 if ((page >= 768) || (page == 0 && reg == 25) || (reg == 31))
2401 * e1000e_write_phy_reg_bm - Write BM PHY register
2402 * @hw: pointer to the HW structure
2403 * @offset: register offset to write to
2404 * @data: data to write at register offset
2406 * Acquires semaphore, if necessary, then writes the data to PHY register
2407 * at the offset. Release any acquired semaphores before exiting.
2409 s32 e1000e_write_phy_reg_bm(struct e1000_hw *hw, u32 offset, u16 data)
2412 u32 page_select = 0;
2413 u32 page = offset >> IGP_PAGE_SHIFT;
2416 ret_val = hw->phy.ops.acquire(hw);
2420 /* Page 800 works differently than the rest so it has its own func */
2421 if (page == BM_WUC_PAGE) {
2422 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, &data,
2427 hw->phy.addr = e1000_get_phy_addr_for_bm_page(page, offset);
2429 if (offset > MAX_PHY_MULTI_PAGE_REG) {
2431 * Page select is register 31 for phy address 1 and 22 for
2432 * phy address 2 and 3. Page select is shifted only for
2435 if (hw->phy.addr == 1) {
2436 page_shift = IGP_PAGE_SHIFT;
2437 page_select = IGP01E1000_PHY_PAGE_SELECT;
2440 page_select = BM_PHY_PAGE_SELECT;
2443 /* Page is shifted left, PHY expects (page x 32) */
2444 ret_val = e1000e_write_phy_reg_mdic(hw, page_select,
2445 (page << page_shift));
2450 ret_val = e1000e_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
2454 hw->phy.ops.release(hw);
2459 * e1000e_read_phy_reg_bm - Read BM PHY register
2460 * @hw: pointer to the HW structure
2461 * @offset: register offset to be read
2462 * @data: pointer to the read data
2464 * Acquires semaphore, if necessary, then reads the PHY register at offset
2465 * and storing the retrieved information in data. Release any acquired
2466 * semaphores before exiting.
2468 s32 e1000e_read_phy_reg_bm(struct e1000_hw *hw, u32 offset, u16 *data)
2471 u32 page_select = 0;
2472 u32 page = offset >> IGP_PAGE_SHIFT;
2475 ret_val = hw->phy.ops.acquire(hw);
2479 /* Page 800 works differently than the rest so it has its own func */
2480 if (page == BM_WUC_PAGE) {
2481 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, data,
2486 hw->phy.addr = e1000_get_phy_addr_for_bm_page(page, offset);
2488 if (offset > MAX_PHY_MULTI_PAGE_REG) {
2490 * Page select is register 31 for phy address 1 and 22 for
2491 * phy address 2 and 3. Page select is shifted only for
2494 if (hw->phy.addr == 1) {
2495 page_shift = IGP_PAGE_SHIFT;
2496 page_select = IGP01E1000_PHY_PAGE_SELECT;
2499 page_select = BM_PHY_PAGE_SELECT;
2502 /* Page is shifted left, PHY expects (page x 32) */
2503 ret_val = e1000e_write_phy_reg_mdic(hw, page_select,
2504 (page << page_shift));
2509 ret_val = e1000e_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
2512 hw->phy.ops.release(hw);
2517 * e1000e_read_phy_reg_bm2 - Read BM PHY register
2518 * @hw: pointer to the HW structure
2519 * @offset: register offset to be read
2520 * @data: pointer to the read data
2522 * Acquires semaphore, if necessary, then reads the PHY register at offset
2523 * and storing the retrieved information in data. Release any acquired
2524 * semaphores before exiting.
2526 s32 e1000e_read_phy_reg_bm2(struct e1000_hw *hw, u32 offset, u16 *data)
2529 u16 page = (u16)(offset >> IGP_PAGE_SHIFT);
2531 ret_val = hw->phy.ops.acquire(hw);
2535 /* Page 800 works differently than the rest so it has its own func */
2536 if (page == BM_WUC_PAGE) {
2537 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, data,
2544 if (offset > MAX_PHY_MULTI_PAGE_REG) {
2546 /* Page is shifted left, PHY expects (page x 32) */
2547 ret_val = e1000e_write_phy_reg_mdic(hw, BM_PHY_PAGE_SELECT,
2554 ret_val = e1000e_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
2557 hw->phy.ops.release(hw);
2562 * e1000e_write_phy_reg_bm2 - Write BM PHY register
2563 * @hw: pointer to the HW structure
2564 * @offset: register offset to write to
2565 * @data: data to write at register offset
2567 * Acquires semaphore, if necessary, then writes the data to PHY register
2568 * at the offset. Release any acquired semaphores before exiting.
2570 s32 e1000e_write_phy_reg_bm2(struct e1000_hw *hw, u32 offset, u16 data)
2573 u16 page = (u16)(offset >> IGP_PAGE_SHIFT);
2575 ret_val = hw->phy.ops.acquire(hw);
2579 /* Page 800 works differently than the rest so it has its own func */
2580 if (page == BM_WUC_PAGE) {
2581 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, &data,
2588 if (offset > MAX_PHY_MULTI_PAGE_REG) {
2589 /* Page is shifted left, PHY expects (page x 32) */
2590 ret_val = e1000e_write_phy_reg_mdic(hw, BM_PHY_PAGE_SELECT,
2597 ret_val = e1000e_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
2601 hw->phy.ops.release(hw);
2606 * e1000_access_phy_wakeup_reg_bm - Read BM PHY wakeup register
2607 * @hw: pointer to the HW structure
2608 * @offset: register offset to be read or written
2609 * @data: pointer to the data to read or write
2610 * @read: determines if operation is read or write
2612 * Acquires semaphore, if necessary, then reads the PHY register at offset
2613 * and storing the retrieved information in data. Release any acquired
2614 * semaphores before exiting. Note that procedure to read the wakeup
2615 * registers are different. It works as such:
2616 * 1) Set page 769, register 17, bit 2 = 1
2617 * 2) Set page to 800 for host (801 if we were manageability)
2618 * 3) Write the address using the address opcode (0x11)
2619 * 4) Read or write the data using the data opcode (0x12)
2620 * 5) Restore 769_17.2 to its original value
2622 * Assumes semaphore already acquired.
2624 static s32 e1000_access_phy_wakeup_reg_bm(struct e1000_hw *hw, u32 offset,
2625 u16 *data, bool read)
2628 u16 reg = BM_PHY_REG_NUM(offset);
2631 /* Gig must be disabled for MDIO accesses to page 800 */
2632 if ((hw->mac.type == e1000_pchlan) &&
2633 (!(er32(PHY_CTRL) & E1000_PHY_CTRL_GBE_DISABLE)))
2634 e_dbg("Attempting to access page 800 while gig enabled.\n");
2636 /* All operations in this function are phy address 1 */
2640 e1000e_write_phy_reg_mdic(hw, IGP01E1000_PHY_PAGE_SELECT,
2641 (BM_WUC_ENABLE_PAGE << IGP_PAGE_SHIFT));
2643 ret_val = e1000e_read_phy_reg_mdic(hw, BM_WUC_ENABLE_REG, &phy_reg);
2645 e_dbg("Could not read PHY page 769\n");
2649 /* First clear bit 4 to avoid a power state change */
2650 phy_reg &= ~(BM_WUC_HOST_WU_BIT);
2651 ret_val = e1000e_write_phy_reg_mdic(hw, BM_WUC_ENABLE_REG, phy_reg);
2653 e_dbg("Could not clear PHY page 769 bit 4\n");
2657 /* Write bit 2 = 1, and clear bit 4 to 769_17 */
2658 ret_val = e1000e_write_phy_reg_mdic(hw, BM_WUC_ENABLE_REG,
2659 phy_reg | BM_WUC_ENABLE_BIT);
2661 e_dbg("Could not write PHY page 769 bit 2\n");
2665 /* Select page 800 */
2666 ret_val = e1000e_write_phy_reg_mdic(hw, IGP01E1000_PHY_PAGE_SELECT,
2667 (BM_WUC_PAGE << IGP_PAGE_SHIFT));
2669 /* Write the page 800 offset value using opcode 0x11 */
2670 ret_val = e1000e_write_phy_reg_mdic(hw, BM_WUC_ADDRESS_OPCODE, reg);
2672 e_dbg("Could not write address opcode to page 800\n");
2677 /* Read the page 800 value using opcode 0x12 */
2678 ret_val = e1000e_read_phy_reg_mdic(hw, BM_WUC_DATA_OPCODE,
2681 /* Write the page 800 value using opcode 0x12 */
2682 ret_val = e1000e_write_phy_reg_mdic(hw, BM_WUC_DATA_OPCODE,
2687 e_dbg("Could not access data value from page 800\n");
2692 * Restore 769_17.2 to its original value
2695 e1000e_write_phy_reg_mdic(hw, IGP01E1000_PHY_PAGE_SELECT,
2696 (BM_WUC_ENABLE_PAGE << IGP_PAGE_SHIFT));
2698 /* Clear 769_17.2 */
2699 ret_val = e1000e_write_phy_reg_mdic(hw, BM_WUC_ENABLE_REG, phy_reg);
2701 e_dbg("Could not clear PHY page 769 bit 2\n");
2710 * e1000_power_up_phy_copper - Restore copper link in case of PHY power down
2711 * @hw: pointer to the HW structure
2713 * In the case of a PHY power down to save power, or to turn off link during a
2714 * driver unload, or wake on lan is not enabled, restore the link to previous
2717 void e1000_power_up_phy_copper(struct e1000_hw *hw)
2721 /* The PHY will retain its settings across a power down/up cycle */
2722 e1e_rphy(hw, PHY_CONTROL, &mii_reg);
2723 mii_reg &= ~MII_CR_POWER_DOWN;
2724 e1e_wphy(hw, PHY_CONTROL, mii_reg);
2728 * e1000_power_down_phy_copper - Restore copper link in case of PHY power down
2729 * @hw: pointer to the HW structure
2731 * In the case of a PHY power down to save power, or to turn off link during a
2732 * driver unload, or wake on lan is not enabled, restore the link to previous
2735 void e1000_power_down_phy_copper(struct e1000_hw *hw)
2739 /* The PHY will retain its settings across a power down/up cycle */
2740 e1e_rphy(hw, PHY_CONTROL, &mii_reg);
2741 mii_reg |= MII_CR_POWER_DOWN;
2742 e1e_wphy(hw, PHY_CONTROL, mii_reg);
2747 * e1000e_commit_phy - Soft PHY reset
2748 * @hw: pointer to the HW structure
2750 * Performs a soft PHY reset on those that apply. This is a function pointer
2751 * entry point called by drivers.
2753 s32 e1000e_commit_phy(struct e1000_hw *hw)
2755 if (hw->phy.ops.commit)
2756 return hw->phy.ops.commit(hw);
2762 * e1000_set_d0_lplu_state - Sets low power link up state for D0
2763 * @hw: pointer to the HW structure
2764 * @active: boolean used to enable/disable lplu
2766 * Success returns 0, Failure returns 1
2768 * The low power link up (lplu) state is set to the power management level D0
2769 * and SmartSpeed is disabled when active is true, else clear lplu for D0
2770 * and enable Smartspeed. LPLU and Smartspeed are mutually exclusive. LPLU
2771 * is used during Dx states where the power conservation is most important.
2772 * During driver activity, SmartSpeed should be enabled so performance is
2773 * maintained. This is a function pointer entry point called by drivers.
2775 static s32 e1000_set_d0_lplu_state(struct e1000_hw *hw, bool active)
2777 if (hw->phy.ops.set_d0_lplu_state)
2778 return hw->phy.ops.set_d0_lplu_state(hw, active);
2784 * __e1000_read_phy_reg_hv - Read HV PHY register
2785 * @hw: pointer to the HW structure
2786 * @offset: register offset to be read
2787 * @data: pointer to the read data
2788 * @locked: semaphore has already been acquired or not
2790 * Acquires semaphore, if necessary, then reads the PHY register at offset
2791 * and stores the retrieved information in data. Release any acquired
2792 * semaphore before exiting.
2794 static s32 __e1000_read_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 *data,
2798 u16 page = BM_PHY_REG_PAGE(offset);
2799 u16 reg = BM_PHY_REG_NUM(offset);
2802 ret_val = hw->phy.ops.acquire(hw);
2807 /* Page 800 works differently than the rest so it has its own func */
2808 if (page == BM_WUC_PAGE) {
2809 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset,
2814 if (page > 0 && page < HV_INTC_FC_PAGE_START) {
2815 ret_val = e1000_access_phy_debug_regs_hv(hw, offset,
2820 hw->phy.addr = e1000_get_phy_addr_for_hv_page(page);
2822 if (page == HV_INTC_FC_PAGE_START)
2825 if (reg > MAX_PHY_MULTI_PAGE_REG) {
2826 u32 phy_addr = hw->phy.addr;
2830 /* Page is shifted left, PHY expects (page x 32) */
2831 ret_val = e1000e_write_phy_reg_mdic(hw,
2832 IGP01E1000_PHY_PAGE_SELECT,
2833 (page << IGP_PAGE_SHIFT));
2834 hw->phy.addr = phy_addr;
2840 ret_val = e1000e_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & reg,
2844 hw->phy.ops.release(hw);
2850 * e1000_read_phy_reg_hv - Read HV PHY register
2851 * @hw: pointer to the HW structure
2852 * @offset: register offset to be read
2853 * @data: pointer to the read data
2855 * Acquires semaphore then reads the PHY register at offset and stores
2856 * the retrieved information in data. Release the acquired semaphore
2859 s32 e1000_read_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 *data)
2861 return __e1000_read_phy_reg_hv(hw, offset, data, false);
2865 * e1000_read_phy_reg_hv_locked - Read HV PHY register
2866 * @hw: pointer to the HW structure
2867 * @offset: register offset to be read
2868 * @data: pointer to the read data
2870 * Reads the PHY register at offset and stores the retrieved information
2871 * in data. Assumes semaphore already acquired.
2873 s32 e1000_read_phy_reg_hv_locked(struct e1000_hw *hw, u32 offset, u16 *data)
2875 return __e1000_read_phy_reg_hv(hw, offset, data, true);
2879 * __e1000_write_phy_reg_hv - Write HV PHY register
2880 * @hw: pointer to the HW structure
2881 * @offset: register offset to write to
2882 * @data: data to write at register offset
2883 * @locked: semaphore has already been acquired or not
2885 * Acquires semaphore, if necessary, then writes the data to PHY register
2886 * at the offset. Release any acquired semaphores before exiting.
2888 static s32 __e1000_write_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 data,
2892 u16 page = BM_PHY_REG_PAGE(offset);
2893 u16 reg = BM_PHY_REG_NUM(offset);
2896 ret_val = hw->phy.ops.acquire(hw);
2901 /* Page 800 works differently than the rest so it has its own func */
2902 if (page == BM_WUC_PAGE) {
2903 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset,
2908 if (page > 0 && page < HV_INTC_FC_PAGE_START) {
2909 ret_val = e1000_access_phy_debug_regs_hv(hw, offset,
2914 hw->phy.addr = e1000_get_phy_addr_for_hv_page(page);
2916 if (page == HV_INTC_FC_PAGE_START)
2920 * Workaround MDIO accesses being disabled after entering IEEE Power
2921 * Down (whenever bit 11 of the PHY Control register is set)
2923 if ((hw->phy.type == e1000_phy_82578) &&
2924 (hw->phy.revision >= 1) &&
2925 (hw->phy.addr == 2) &&
2926 ((MAX_PHY_REG_ADDRESS & reg) == 0) &&
2927 (data & (1 << 11))) {
2929 ret_val = e1000_access_phy_debug_regs_hv(hw, (1 << 6) | 0x3,
2935 if (reg > MAX_PHY_MULTI_PAGE_REG) {
2936 u32 phy_addr = hw->phy.addr;
2940 /* Page is shifted left, PHY expects (page x 32) */
2941 ret_val = e1000e_write_phy_reg_mdic(hw,
2942 IGP01E1000_PHY_PAGE_SELECT,
2943 (page << IGP_PAGE_SHIFT));
2944 hw->phy.addr = phy_addr;
2950 ret_val = e1000e_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & reg,
2955 hw->phy.ops.release(hw);
2961 * e1000_write_phy_reg_hv - Write HV PHY register
2962 * @hw: pointer to the HW structure
2963 * @offset: register offset to write to
2964 * @data: data to write at register offset
2966 * Acquires semaphore then writes the data to PHY register at the offset.
2967 * Release the acquired semaphores before exiting.
2969 s32 e1000_write_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 data)
2971 return __e1000_write_phy_reg_hv(hw, offset, data, false);
2975 * e1000_write_phy_reg_hv_locked - Write HV PHY register
2976 * @hw: pointer to the HW structure
2977 * @offset: register offset to write to
2978 * @data: data to write at register offset
2980 * Writes the data to PHY register at the offset. Assumes semaphore
2983 s32 e1000_write_phy_reg_hv_locked(struct e1000_hw *hw, u32 offset, u16 data)
2985 return __e1000_write_phy_reg_hv(hw, offset, data, true);
2989 * e1000_get_phy_addr_for_hv_page - Get PHY address based on page
2990 * @page: page to be accessed
2992 static u32 e1000_get_phy_addr_for_hv_page(u32 page)
2996 if (page >= HV_INTC_FC_PAGE_START)
3003 * e1000_access_phy_debug_regs_hv - Read HV PHY vendor specific high registers
3004 * @hw: pointer to the HW structure
3005 * @offset: register offset to be read or written
3006 * @data: pointer to the data to be read or written
3007 * @read: determines if operation is read or written
3009 * Reads the PHY register at offset and stores the retreived information
3010 * in data. Assumes semaphore already acquired. Note that the procedure
3011 * to read these regs uses the address port and data port to read/write.
3013 static s32 e1000_access_phy_debug_regs_hv(struct e1000_hw *hw, u32 offset,
3014 u16 *data, bool read)
3020 /* This takes care of the difference with desktop vs mobile phy */
3021 addr_reg = (hw->phy.type == e1000_phy_82578) ?
3022 I82578_ADDR_REG : I82577_ADDR_REG;
3023 data_reg = addr_reg + 1;
3025 /* All operations in this function are phy address 2 */
3028 /* masking with 0x3F to remove the page from offset */
3029 ret_val = e1000e_write_phy_reg_mdic(hw, addr_reg, (u16)offset & 0x3F);
3031 e_dbg("Could not write PHY the HV address register\n");
3035 /* Read or write the data value next */
3037 ret_val = e1000e_read_phy_reg_mdic(hw, data_reg, data);
3039 ret_val = e1000e_write_phy_reg_mdic(hw, data_reg, *data);
3042 e_dbg("Could not read data value from HV data register\n");
3051 * e1000_link_stall_workaround_hv - Si workaround
3052 * @hw: pointer to the HW structure
3054 * This function works around a Si bug where the link partner can get
3055 * a link up indication before the PHY does. If small packets are sent
3056 * by the link partner they can be placed in the packet buffer without
3057 * being properly accounted for by the PHY and will stall preventing
3058 * further packets from being received. The workaround is to clear the
3059 * packet buffer after the PHY detects link up.
3061 s32 e1000_link_stall_workaround_hv(struct e1000_hw *hw)
3066 if (hw->phy.type != e1000_phy_82578)
3069 /* Do not apply workaround if in PHY loopback bit 14 set */
3070 e1e_rphy(hw, PHY_CONTROL, &data);
3071 if (data & PHY_CONTROL_LB)
3074 /* check if link is up and at 1Gbps */
3075 ret_val = e1e_rphy(hw, BM_CS_STATUS, &data);
3079 data &= BM_CS_STATUS_LINK_UP |
3080 BM_CS_STATUS_RESOLVED |
3081 BM_CS_STATUS_SPEED_MASK;
3083 if (data != (BM_CS_STATUS_LINK_UP |
3084 BM_CS_STATUS_RESOLVED |
3085 BM_CS_STATUS_SPEED_1000))
3090 /* flush the packets in the fifo buffer */
3091 ret_val = e1e_wphy(hw, HV_MUX_DATA_CTRL, HV_MUX_DATA_CTRL_GEN_TO_MAC |
3092 HV_MUX_DATA_CTRL_FORCE_SPEED);
3096 ret_val = e1e_wphy(hw, HV_MUX_DATA_CTRL, HV_MUX_DATA_CTRL_GEN_TO_MAC);
3103 * e1000_check_polarity_82577 - Checks the polarity.
3104 * @hw: pointer to the HW structure
3106 * Success returns 0, Failure returns -E1000_ERR_PHY (-2)
3108 * Polarity is determined based on the PHY specific status register.
3110 s32 e1000_check_polarity_82577(struct e1000_hw *hw)
3112 struct e1000_phy_info *phy = &hw->phy;
3116 ret_val = e1e_rphy(hw, I82577_PHY_STATUS_2, &data);
3119 phy->cable_polarity = (data & I82577_PHY_STATUS2_REV_POLARITY)
3120 ? e1000_rev_polarity_reversed
3121 : e1000_rev_polarity_normal;
3127 * e1000_phy_force_speed_duplex_82577 - Force speed/duplex for I82577 PHY
3128 * @hw: pointer to the HW structure
3130 * Calls the PHY setup function to force speed and duplex.
3132 s32 e1000_phy_force_speed_duplex_82577(struct e1000_hw *hw)
3134 struct e1000_phy_info *phy = &hw->phy;
3139 ret_val = e1e_rphy(hw, PHY_CONTROL, &phy_data);
3143 e1000e_phy_force_speed_duplex_setup(hw, &phy_data);
3145 ret_val = e1e_wphy(hw, PHY_CONTROL, phy_data);
3151 if (phy->autoneg_wait_to_complete) {
3152 e_dbg("Waiting for forced speed/duplex link on 82577 phy\n");
3154 ret_val = e1000e_phy_has_link_generic(hw,
3162 e_dbg("Link taking longer than expected.\n");
3165 ret_val = e1000e_phy_has_link_generic(hw,
3178 * e1000_get_phy_info_82577 - Retrieve I82577 PHY information
3179 * @hw: pointer to the HW structure
3181 * Read PHY status to determine if link is up. If link is up, then
3182 * set/determine 10base-T extended distance and polarity correction. Read
3183 * PHY port status to determine MDI/MDIx and speed. Based on the speed,
3184 * determine on the cable length, local and remote receiver.
3186 s32 e1000_get_phy_info_82577(struct e1000_hw *hw)
3188 struct e1000_phy_info *phy = &hw->phy;
3193 ret_val = e1000e_phy_has_link_generic(hw, 1, 0, &link);
3198 e_dbg("Phy info is only valid if link is up\n");
3199 ret_val = -E1000_ERR_CONFIG;
3203 phy->polarity_correction = true;
3205 ret_val = e1000_check_polarity_82577(hw);
3209 ret_val = e1e_rphy(hw, I82577_PHY_STATUS_2, &data);
3213 phy->is_mdix = (data & I82577_PHY_STATUS2_MDIX) ? true : false;
3215 if ((data & I82577_PHY_STATUS2_SPEED_MASK) ==
3216 I82577_PHY_STATUS2_SPEED_1000MBPS) {
3217 ret_val = hw->phy.ops.get_cable_length(hw);
3221 ret_val = e1e_rphy(hw, PHY_1000T_STATUS, &data);
3225 phy->local_rx = (data & SR_1000T_LOCAL_RX_STATUS)
3226 ? e1000_1000t_rx_status_ok
3227 : e1000_1000t_rx_status_not_ok;
3229 phy->remote_rx = (data & SR_1000T_REMOTE_RX_STATUS)
3230 ? e1000_1000t_rx_status_ok
3231 : e1000_1000t_rx_status_not_ok;
3233 phy->cable_length = E1000_CABLE_LENGTH_UNDEFINED;
3234 phy->local_rx = e1000_1000t_rx_status_undefined;
3235 phy->remote_rx = e1000_1000t_rx_status_undefined;
3243 * e1000_get_cable_length_82577 - Determine cable length for 82577 PHY
3244 * @hw: pointer to the HW structure
3246 * Reads the diagnostic status register and verifies result is valid before
3247 * placing it in the phy_cable_length field.
3249 s32 e1000_get_cable_length_82577(struct e1000_hw *hw)
3251 struct e1000_phy_info *phy = &hw->phy;
3253 u16 phy_data, length;
3255 ret_val = e1e_rphy(hw, I82577_PHY_DIAG_STATUS, &phy_data);
3259 length = (phy_data & I82577_DSTATUS_CABLE_LENGTH) >>
3260 I82577_DSTATUS_CABLE_LENGTH_SHIFT;
3262 if (length == E1000_CABLE_LENGTH_UNDEFINED)
3263 ret_val = -E1000_ERR_PHY;
3265 phy->cable_length = length;