1 /*******************************************************************************
3 Intel(R) Gigabit Ethernet Linux driver
4 Copyright(c) 2007-2009 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".
24 Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
26 *******************************************************************************/
28 #include <linux/if_ether.h>
29 #include <linux/delay.h>
31 #include "e1000_mac.h"
32 #include "e1000_phy.h"
34 static s32 igb_phy_setup_autoneg(struct e1000_hw *hw);
35 static void igb_phy_force_speed_duplex_setup(struct e1000_hw *hw,
37 static s32 igb_wait_autoneg(struct e1000_hw *hw);
39 /* Cable length tables */
40 static const u16 e1000_m88_cable_length_table[] =
41 { 0, 50, 80, 110, 140, 140, E1000_CABLE_LENGTH_UNDEFINED };
42 #define M88E1000_CABLE_LENGTH_TABLE_SIZE \
43 (sizeof(e1000_m88_cable_length_table) / \
44 sizeof(e1000_m88_cable_length_table[0]))
46 static const u16 e1000_igp_2_cable_length_table[] =
47 { 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 8, 11, 13, 16, 18, 21,
48 0, 0, 0, 3, 6, 10, 13, 16, 19, 23, 26, 29, 32, 35, 38, 41,
49 6, 10, 14, 18, 22, 26, 30, 33, 37, 41, 44, 48, 51, 54, 58, 61,
50 21, 26, 31, 35, 40, 44, 49, 53, 57, 61, 65, 68, 72, 75, 79, 82,
51 40, 45, 51, 56, 61, 66, 70, 75, 79, 83, 87, 91, 94, 98, 101, 104,
52 60, 66, 72, 77, 82, 87, 92, 96, 100, 104, 108, 111, 114, 117, 119, 121,
53 83, 89, 95, 100, 105, 109, 113, 116, 119, 122, 124,
54 104, 109, 114, 118, 121, 124};
55 #define IGP02E1000_CABLE_LENGTH_TABLE_SIZE \
56 (sizeof(e1000_igp_2_cable_length_table) / \
57 sizeof(e1000_igp_2_cable_length_table[0]))
60 * igb_check_reset_block - Check if PHY reset is blocked
61 * @hw: pointer to the HW structure
63 * Read the PHY management control register and check whether a PHY reset
64 * is blocked. If a reset is not blocked return 0, otherwise
65 * return E1000_BLK_PHY_RESET (12).
67 s32 igb_check_reset_block(struct e1000_hw *hw)
71 manc = rd32(E1000_MANC);
73 return (manc & E1000_MANC_BLK_PHY_RST_ON_IDE) ?
74 E1000_BLK_PHY_RESET : 0;
78 * igb_get_phy_id - Retrieve the PHY ID and revision
79 * @hw: pointer to the HW structure
81 * Reads the PHY registers and stores the PHY ID and possibly the PHY
82 * revision in the hardware structure.
84 s32 igb_get_phy_id(struct e1000_hw *hw)
86 struct e1000_phy_info *phy = &hw->phy;
90 ret_val = phy->ops.read_reg(hw, PHY_ID1, &phy_id);
94 phy->id = (u32)(phy_id << 16);
96 ret_val = phy->ops.read_reg(hw, PHY_ID2, &phy_id);
100 phy->id |= (u32)(phy_id & PHY_REVISION_MASK);
101 phy->revision = (u32)(phy_id & ~PHY_REVISION_MASK);
108 * igb_phy_reset_dsp - Reset PHY DSP
109 * @hw: pointer to the HW structure
111 * Reset the digital signal processor.
113 static s32 igb_phy_reset_dsp(struct e1000_hw *hw)
117 if (!(hw->phy.ops.write_reg))
120 ret_val = hw->phy.ops.write_reg(hw, M88E1000_PHY_GEN_CONTROL, 0xC1);
124 ret_val = hw->phy.ops.write_reg(hw, M88E1000_PHY_GEN_CONTROL, 0);
131 * igb_read_phy_reg_mdic - Read MDI control register
132 * @hw: pointer to the HW structure
133 * @offset: register offset to be read
134 * @data: pointer to the read data
136 * Reads the MDI control regsiter in the PHY at offset and stores the
137 * information read to data.
139 s32 igb_read_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 *data)
141 struct e1000_phy_info *phy = &hw->phy;
145 if (offset > MAX_PHY_REG_ADDRESS) {
146 hw_dbg("PHY Address %d is out of range\n", offset);
147 ret_val = -E1000_ERR_PARAM;
152 * Set up Op-code, Phy Address, and register offset in the MDI
153 * Control register. The MAC will take care of interfacing with the
154 * PHY to retrieve the desired data.
156 mdic = ((offset << E1000_MDIC_REG_SHIFT) |
157 (phy->addr << E1000_MDIC_PHY_SHIFT) |
158 (E1000_MDIC_OP_READ));
160 wr32(E1000_MDIC, mdic);
163 * Poll the ready bit to see if the MDI read completed
164 * Increasing the time out as testing showed failures with
167 for (i = 0; i < (E1000_GEN_POLL_TIMEOUT * 3); i++) {
169 mdic = rd32(E1000_MDIC);
170 if (mdic & E1000_MDIC_READY)
173 if (!(mdic & E1000_MDIC_READY)) {
174 hw_dbg("MDI Read did not complete\n");
175 ret_val = -E1000_ERR_PHY;
178 if (mdic & E1000_MDIC_ERROR) {
179 hw_dbg("MDI Error\n");
180 ret_val = -E1000_ERR_PHY;
190 * igb_write_phy_reg_mdic - Write MDI control register
191 * @hw: pointer to the HW structure
192 * @offset: register offset to write to
193 * @data: data to write to register at offset
195 * Writes data to MDI control register in the PHY at offset.
197 s32 igb_write_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 data)
199 struct e1000_phy_info *phy = &hw->phy;
203 if (offset > MAX_PHY_REG_ADDRESS) {
204 hw_dbg("PHY Address %d is out of range\n", offset);
205 ret_val = -E1000_ERR_PARAM;
210 * Set up Op-code, Phy Address, and register offset in the MDI
211 * Control register. The MAC will take care of interfacing with the
212 * PHY to retrieve the desired data.
214 mdic = (((u32)data) |
215 (offset << E1000_MDIC_REG_SHIFT) |
216 (phy->addr << E1000_MDIC_PHY_SHIFT) |
217 (E1000_MDIC_OP_WRITE));
219 wr32(E1000_MDIC, mdic);
222 * Poll the ready bit to see if the MDI read completed
223 * Increasing the time out as testing showed failures with
226 for (i = 0; i < (E1000_GEN_POLL_TIMEOUT * 3); i++) {
228 mdic = rd32(E1000_MDIC);
229 if (mdic & E1000_MDIC_READY)
232 if (!(mdic & E1000_MDIC_READY)) {
233 hw_dbg("MDI Write did not complete\n");
234 ret_val = -E1000_ERR_PHY;
237 if (mdic & E1000_MDIC_ERROR) {
238 hw_dbg("MDI Error\n");
239 ret_val = -E1000_ERR_PHY;
248 * igb_read_phy_reg_i2c - Read PHY register using i2c
249 * @hw: pointer to the HW structure
250 * @offset: register offset to be read
251 * @data: pointer to the read data
253 * Reads the PHY register at offset using the i2c interface and stores the
254 * retrieved information in data.
256 s32 igb_read_phy_reg_i2c(struct e1000_hw *hw, u32 offset, u16 *data)
258 struct e1000_phy_info *phy = &hw->phy;
263 * Set up Op-code, Phy Address, and register address in the I2CCMD
264 * register. The MAC will take care of interfacing with the
265 * PHY to retrieve the desired data.
267 i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) |
268 (phy->addr << E1000_I2CCMD_PHY_ADDR_SHIFT) |
269 (E1000_I2CCMD_OPCODE_READ));
271 wr32(E1000_I2CCMD, i2ccmd);
273 /* Poll the ready bit to see if the I2C read completed */
274 for (i = 0; i < E1000_I2CCMD_PHY_TIMEOUT; i++) {
276 i2ccmd = rd32(E1000_I2CCMD);
277 if (i2ccmd & E1000_I2CCMD_READY)
280 if (!(i2ccmd & E1000_I2CCMD_READY)) {
281 hw_dbg("I2CCMD Read did not complete\n");
282 return -E1000_ERR_PHY;
284 if (i2ccmd & E1000_I2CCMD_ERROR) {
285 hw_dbg("I2CCMD Error bit set\n");
286 return -E1000_ERR_PHY;
289 /* Need to byte-swap the 16-bit value. */
290 *data = ((i2ccmd >> 8) & 0x00FF) | ((i2ccmd << 8) & 0xFF00);
296 * igb_write_phy_reg_i2c - Write PHY register using i2c
297 * @hw: pointer to the HW structure
298 * @offset: register offset to write to
299 * @data: data to write at register offset
301 * Writes the data to PHY register at the offset using the i2c interface.
303 s32 igb_write_phy_reg_i2c(struct e1000_hw *hw, u32 offset, u16 data)
305 struct e1000_phy_info *phy = &hw->phy;
307 u16 phy_data_swapped;
310 /* Swap the data bytes for the I2C interface */
311 phy_data_swapped = ((data >> 8) & 0x00FF) | ((data << 8) & 0xFF00);
314 * Set up Op-code, Phy Address, and register address in the I2CCMD
315 * register. The MAC will take care of interfacing with the
316 * PHY to retrieve the desired data.
318 i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) |
319 (phy->addr << E1000_I2CCMD_PHY_ADDR_SHIFT) |
320 E1000_I2CCMD_OPCODE_WRITE |
323 wr32(E1000_I2CCMD, i2ccmd);
325 /* Poll the ready bit to see if the I2C read completed */
326 for (i = 0; i < E1000_I2CCMD_PHY_TIMEOUT; i++) {
328 i2ccmd = rd32(E1000_I2CCMD);
329 if (i2ccmd & E1000_I2CCMD_READY)
332 if (!(i2ccmd & E1000_I2CCMD_READY)) {
333 hw_dbg("I2CCMD Write did not complete\n");
334 return -E1000_ERR_PHY;
336 if (i2ccmd & E1000_I2CCMD_ERROR) {
337 hw_dbg("I2CCMD Error bit set\n");
338 return -E1000_ERR_PHY;
345 * igb_read_phy_reg_igp - Read igp PHY register
346 * @hw: pointer to the HW structure
347 * @offset: register offset to be read
348 * @data: pointer to the read data
350 * Acquires semaphore, if necessary, then reads the PHY register at offset
351 * and storing the retrieved information in data. Release any acquired
352 * semaphores before exiting.
354 s32 igb_read_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 *data)
358 if (!(hw->phy.ops.acquire))
361 ret_val = hw->phy.ops.acquire(hw);
365 if (offset > MAX_PHY_MULTI_PAGE_REG) {
366 ret_val = igb_write_phy_reg_mdic(hw,
367 IGP01E1000_PHY_PAGE_SELECT,
370 hw->phy.ops.release(hw);
375 ret_val = igb_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
378 hw->phy.ops.release(hw);
385 * igb_write_phy_reg_igp - Write igp PHY register
386 * @hw: pointer to the HW structure
387 * @offset: register offset to write to
388 * @data: data to write at register offset
390 * Acquires semaphore, if necessary, then writes the data to PHY register
391 * at the offset. Release any acquired semaphores before exiting.
393 s32 igb_write_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 data)
397 if (!(hw->phy.ops.acquire))
400 ret_val = hw->phy.ops.acquire(hw);
404 if (offset > MAX_PHY_MULTI_PAGE_REG) {
405 ret_val = igb_write_phy_reg_mdic(hw,
406 IGP01E1000_PHY_PAGE_SELECT,
409 hw->phy.ops.release(hw);
414 ret_val = igb_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
417 hw->phy.ops.release(hw);
424 * igb_copper_link_setup_82580 - Setup 82580 PHY for copper link
425 * @hw: pointer to the HW structure
427 * Sets up Carrier-sense on Transmit and downshift values.
429 s32 igb_copper_link_setup_82580(struct e1000_hw *hw)
431 struct e1000_phy_info *phy = &hw->phy;
436 if (phy->reset_disable) {
441 if (phy->type == e1000_phy_82580) {
442 ret_val = hw->phy.ops.reset(hw);
444 hw_dbg("Error resetting the PHY.\n");
449 /* Enable CRS on TX. This must be set for half-duplex operation. */
450 ret_val = phy->ops.read_reg(hw, I82580_CFG_REG, &phy_data);
454 phy_data |= I82580_CFG_ASSERT_CRS_ON_TX;
456 /* Enable downshift */
457 phy_data |= I82580_CFG_ENABLE_DOWNSHIFT;
459 ret_val = phy->ops.write_reg(hw, I82580_CFG_REG, phy_data);
466 * igb_copper_link_setup_m88 - Setup m88 PHY's for copper link
467 * @hw: pointer to the HW structure
469 * Sets up MDI/MDI-X and polarity for m88 PHY's. If necessary, transmit clock
470 * and downshift values are set also.
472 s32 igb_copper_link_setup_m88(struct e1000_hw *hw)
474 struct e1000_phy_info *phy = &hw->phy;
478 if (phy->reset_disable) {
483 /* Enable CRS on TX. This must be set for half-duplex operation. */
484 ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
488 phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
492 * MDI/MDI-X = 0 (default)
493 * 0 - Auto for all speeds
496 * 3 - Auto for 1000Base-T only (MDI-X for 10/100Base-T modes)
498 phy_data &= ~M88E1000_PSCR_AUTO_X_MODE;
502 phy_data |= M88E1000_PSCR_MDI_MANUAL_MODE;
505 phy_data |= M88E1000_PSCR_MDIX_MANUAL_MODE;
508 phy_data |= M88E1000_PSCR_AUTO_X_1000T;
512 phy_data |= M88E1000_PSCR_AUTO_X_MODE;
518 * disable_polarity_correction = 0 (default)
519 * Automatic Correction for Reversed Cable Polarity
523 phy_data &= ~M88E1000_PSCR_POLARITY_REVERSAL;
524 if (phy->disable_polarity_correction == 1)
525 phy_data |= M88E1000_PSCR_POLARITY_REVERSAL;
527 ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
531 if (phy->revision < E1000_REVISION_4) {
533 * Force TX_CLK in the Extended PHY Specific Control Register
536 ret_val = phy->ops.read_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL,
541 phy_data |= M88E1000_EPSCR_TX_CLK_25;
543 if ((phy->revision == E1000_REVISION_2) &&
544 (phy->id == M88E1111_I_PHY_ID)) {
545 /* 82573L PHY - set the downshift counter to 5x. */
546 phy_data &= ~M88EC018_EPSCR_DOWNSHIFT_COUNTER_MASK;
547 phy_data |= M88EC018_EPSCR_DOWNSHIFT_COUNTER_5X;
549 /* Configure Master and Slave downshift values */
550 phy_data &= ~(M88E1000_EPSCR_MASTER_DOWNSHIFT_MASK |
551 M88E1000_EPSCR_SLAVE_DOWNSHIFT_MASK);
552 phy_data |= (M88E1000_EPSCR_MASTER_DOWNSHIFT_1X |
553 M88E1000_EPSCR_SLAVE_DOWNSHIFT_1X);
555 ret_val = phy->ops.write_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL,
561 /* Commit the changes. */
562 ret_val = igb_phy_sw_reset(hw);
564 hw_dbg("Error committing the PHY changes\n");
573 * igb_copper_link_setup_m88_gen2 - Setup m88 PHY's for copper link
574 * @hw: pointer to the HW structure
576 * Sets up MDI/MDI-X and polarity for i347-AT4, m88e1322 and m88e1112 PHY's.
577 * Also enables and sets the downshift parameters.
579 s32 igb_copper_link_setup_m88_gen2(struct e1000_hw *hw)
581 struct e1000_phy_info *phy = &hw->phy;
585 if (phy->reset_disable) {
590 /* Enable CRS on Tx. This must be set for half-duplex operation. */
591 ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
597 * MDI/MDI-X = 0 (default)
598 * 0 - Auto for all speeds
601 * 3 - Auto for 1000Base-T only (MDI-X for 10/100Base-T modes)
603 phy_data &= ~M88E1000_PSCR_AUTO_X_MODE;
607 phy_data |= M88E1000_PSCR_MDI_MANUAL_MODE;
610 phy_data |= M88E1000_PSCR_MDIX_MANUAL_MODE;
613 /* M88E1112 does not support this mode) */
614 if (phy->id != M88E1112_E_PHY_ID) {
615 phy_data |= M88E1000_PSCR_AUTO_X_1000T;
620 phy_data |= M88E1000_PSCR_AUTO_X_MODE;
626 * disable_polarity_correction = 0 (default)
627 * Automatic Correction for Reversed Cable Polarity
631 phy_data &= ~M88E1000_PSCR_POLARITY_REVERSAL;
632 if (phy->disable_polarity_correction == 1)
633 phy_data |= M88E1000_PSCR_POLARITY_REVERSAL;
635 /* Enable downshift and setting it to X6 */
636 phy_data &= ~I347AT4_PSCR_DOWNSHIFT_MASK;
637 phy_data |= I347AT4_PSCR_DOWNSHIFT_6X;
638 phy_data |= I347AT4_PSCR_DOWNSHIFT_ENABLE;
640 ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
644 /* Commit the changes. */
645 ret_val = igb_phy_sw_reset(hw);
647 hw_dbg("Error committing the PHY changes\n");
656 * igb_copper_link_setup_igp - Setup igp PHY's for copper link
657 * @hw: pointer to the HW structure
659 * Sets up LPLU, MDI/MDI-X, polarity, Smartspeed and Master/Slave config for
662 s32 igb_copper_link_setup_igp(struct e1000_hw *hw)
664 struct e1000_phy_info *phy = &hw->phy;
668 if (phy->reset_disable) {
673 ret_val = phy->ops.reset(hw);
675 hw_dbg("Error resetting the PHY.\n");
680 * Wait 100ms for MAC to configure PHY from NVM settings, to avoid
681 * timeout issues when LFS is enabled.
686 * The NVM settings will configure LPLU in D3 for
689 if (phy->type == e1000_phy_igp) {
690 /* disable lplu d3 during driver init */
691 if (phy->ops.set_d3_lplu_state)
692 ret_val = phy->ops.set_d3_lplu_state(hw, false);
694 hw_dbg("Error Disabling LPLU D3\n");
699 /* disable lplu d0 during driver init */
700 ret_val = phy->ops.set_d0_lplu_state(hw, false);
702 hw_dbg("Error Disabling LPLU D0\n");
705 /* Configure mdi-mdix settings */
706 ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CTRL, &data);
710 data &= ~IGP01E1000_PSCR_AUTO_MDIX;
714 data &= ~IGP01E1000_PSCR_FORCE_MDI_MDIX;
717 data |= IGP01E1000_PSCR_FORCE_MDI_MDIX;
721 data |= IGP01E1000_PSCR_AUTO_MDIX;
724 ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CTRL, data);
728 /* set auto-master slave resolution settings */
729 if (hw->mac.autoneg) {
731 * when autonegotiation advertisement is only 1000Mbps then we
732 * should disable SmartSpeed and enable Auto MasterSlave
733 * resolution as hardware default.
735 if (phy->autoneg_advertised == ADVERTISE_1000_FULL) {
736 /* Disable SmartSpeed */
737 ret_val = phy->ops.read_reg(hw,
738 IGP01E1000_PHY_PORT_CONFIG,
743 data &= ~IGP01E1000_PSCFR_SMART_SPEED;
744 ret_val = phy->ops.write_reg(hw,
745 IGP01E1000_PHY_PORT_CONFIG,
750 /* Set auto Master/Slave resolution process */
751 ret_val = phy->ops.read_reg(hw, PHY_1000T_CTRL, &data);
755 data &= ~CR_1000T_MS_ENABLE;
756 ret_val = phy->ops.write_reg(hw, PHY_1000T_CTRL, data);
761 ret_val = phy->ops.read_reg(hw, PHY_1000T_CTRL, &data);
765 /* load defaults for future use */
766 phy->original_ms_type = (data & CR_1000T_MS_ENABLE) ?
767 ((data & CR_1000T_MS_VALUE) ?
768 e1000_ms_force_master :
769 e1000_ms_force_slave) :
772 switch (phy->ms_type) {
773 case e1000_ms_force_master:
774 data |= (CR_1000T_MS_ENABLE | CR_1000T_MS_VALUE);
776 case e1000_ms_force_slave:
777 data |= CR_1000T_MS_ENABLE;
778 data &= ~(CR_1000T_MS_VALUE);
781 data &= ~CR_1000T_MS_ENABLE;
785 ret_val = phy->ops.write_reg(hw, PHY_1000T_CTRL, data);
795 * igb_copper_link_autoneg - Setup/Enable autoneg for copper link
796 * @hw: pointer to the HW structure
798 * Performs initial bounds checking on autoneg advertisement parameter, then
799 * configure to advertise the full capability. Setup the PHY to autoneg
800 * and restart the negotiation process between the link partner. If
801 * autoneg_wait_to_complete, then wait for autoneg to complete before exiting.
803 static s32 igb_copper_link_autoneg(struct e1000_hw *hw)
805 struct e1000_phy_info *phy = &hw->phy;
810 * Perform some bounds checking on the autoneg advertisement
813 phy->autoneg_advertised &= phy->autoneg_mask;
816 * If autoneg_advertised is zero, we assume it was not defaulted
817 * by the calling code so we set to advertise full capability.
819 if (phy->autoneg_advertised == 0)
820 phy->autoneg_advertised = phy->autoneg_mask;
822 hw_dbg("Reconfiguring auto-neg advertisement params\n");
823 ret_val = igb_phy_setup_autoneg(hw);
825 hw_dbg("Error Setting up Auto-Negotiation\n");
828 hw_dbg("Restarting Auto-Neg\n");
831 * Restart auto-negotiation by setting the Auto Neg Enable bit and
832 * the Auto Neg Restart bit in the PHY control register.
834 ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_ctrl);
838 phy_ctrl |= (MII_CR_AUTO_NEG_EN | MII_CR_RESTART_AUTO_NEG);
839 ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_ctrl);
844 * Does the user want to wait for Auto-Neg to complete here, or
845 * check at a later time (for example, callback routine).
847 if (phy->autoneg_wait_to_complete) {
848 ret_val = igb_wait_autoneg(hw);
850 hw_dbg("Error while waiting for "
851 "autoneg to complete\n");
856 hw->mac.get_link_status = true;
863 * igb_phy_setup_autoneg - Configure PHY for auto-negotiation
864 * @hw: pointer to the HW structure
866 * Reads the MII auto-neg advertisement register and/or the 1000T control
867 * register and if the PHY is already setup for auto-negotiation, then
868 * return successful. Otherwise, setup advertisement and flow control to
869 * the appropriate values for the wanted auto-negotiation.
871 static s32 igb_phy_setup_autoneg(struct e1000_hw *hw)
873 struct e1000_phy_info *phy = &hw->phy;
875 u16 mii_autoneg_adv_reg;
876 u16 mii_1000t_ctrl_reg = 0;
878 phy->autoneg_advertised &= phy->autoneg_mask;
880 /* Read the MII Auto-Neg Advertisement Register (Address 4). */
881 ret_val = phy->ops.read_reg(hw, PHY_AUTONEG_ADV, &mii_autoneg_adv_reg);
885 if (phy->autoneg_mask & ADVERTISE_1000_FULL) {
886 /* Read the MII 1000Base-T Control Register (Address 9). */
887 ret_val = phy->ops.read_reg(hw, PHY_1000T_CTRL,
888 &mii_1000t_ctrl_reg);
894 * Need to parse both autoneg_advertised and fc and set up
895 * the appropriate PHY registers. First we will parse for
896 * autoneg_advertised software override. Since we can advertise
897 * a plethora of combinations, we need to check each bit
902 * First we clear all the 10/100 mb speed bits in the Auto-Neg
903 * Advertisement Register (Address 4) and the 1000 mb speed bits in
904 * the 1000Base-T Control Register (Address 9).
906 mii_autoneg_adv_reg &= ~(NWAY_AR_100TX_FD_CAPS |
907 NWAY_AR_100TX_HD_CAPS |
908 NWAY_AR_10T_FD_CAPS |
909 NWAY_AR_10T_HD_CAPS);
910 mii_1000t_ctrl_reg &= ~(CR_1000T_HD_CAPS | CR_1000T_FD_CAPS);
912 hw_dbg("autoneg_advertised %x\n", phy->autoneg_advertised);
914 /* Do we want to advertise 10 Mb Half Duplex? */
915 if (phy->autoneg_advertised & ADVERTISE_10_HALF) {
916 hw_dbg("Advertise 10mb Half duplex\n");
917 mii_autoneg_adv_reg |= NWAY_AR_10T_HD_CAPS;
920 /* Do we want to advertise 10 Mb Full Duplex? */
921 if (phy->autoneg_advertised & ADVERTISE_10_FULL) {
922 hw_dbg("Advertise 10mb Full duplex\n");
923 mii_autoneg_adv_reg |= NWAY_AR_10T_FD_CAPS;
926 /* Do we want to advertise 100 Mb Half Duplex? */
927 if (phy->autoneg_advertised & ADVERTISE_100_HALF) {
928 hw_dbg("Advertise 100mb Half duplex\n");
929 mii_autoneg_adv_reg |= NWAY_AR_100TX_HD_CAPS;
932 /* Do we want to advertise 100 Mb Full Duplex? */
933 if (phy->autoneg_advertised & ADVERTISE_100_FULL) {
934 hw_dbg("Advertise 100mb Full duplex\n");
935 mii_autoneg_adv_reg |= NWAY_AR_100TX_FD_CAPS;
938 /* We do not allow the Phy to advertise 1000 Mb Half Duplex */
939 if (phy->autoneg_advertised & ADVERTISE_1000_HALF)
940 hw_dbg("Advertise 1000mb Half duplex request denied!\n");
942 /* Do we want to advertise 1000 Mb Full Duplex? */
943 if (phy->autoneg_advertised & ADVERTISE_1000_FULL) {
944 hw_dbg("Advertise 1000mb Full duplex\n");
945 mii_1000t_ctrl_reg |= CR_1000T_FD_CAPS;
949 * Check for a software override of the flow control settings, and
950 * setup the PHY advertisement registers accordingly. If
951 * auto-negotiation is enabled, then software will have to set the
952 * "PAUSE" bits to the correct value in the Auto-Negotiation
953 * Advertisement Register (PHY_AUTONEG_ADV) and re-start auto-
956 * The possible values of the "fc" parameter are:
957 * 0: Flow control is completely disabled
958 * 1: Rx flow control is enabled (we can receive pause frames
959 * but not send pause frames).
960 * 2: Tx flow control is enabled (we can send pause frames
961 * but we do not support receiving pause frames).
962 * 3: Both Rx and TX flow control (symmetric) are enabled.
963 * other: No software override. The flow control configuration
964 * in the EEPROM is used.
966 switch (hw->fc.current_mode) {
969 * Flow control (RX & TX) is completely disabled by a
970 * software over-ride.
972 mii_autoneg_adv_reg &= ~(NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
974 case e1000_fc_rx_pause:
976 * RX Flow control is enabled, and TX Flow control is
977 * disabled, by a software over-ride.
979 * Since there really isn't a way to advertise that we are
980 * capable of RX Pause ONLY, we will advertise that we
981 * support both symmetric and asymmetric RX PAUSE. Later
982 * (in e1000_config_fc_after_link_up) we will disable the
983 * hw's ability to send PAUSE frames.
985 mii_autoneg_adv_reg |= (NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
987 case e1000_fc_tx_pause:
989 * TX Flow control is enabled, and RX Flow control is
990 * disabled, by a software over-ride.
992 mii_autoneg_adv_reg |= NWAY_AR_ASM_DIR;
993 mii_autoneg_adv_reg &= ~NWAY_AR_PAUSE;
997 * Flow control (both RX and TX) is enabled by a software
1000 mii_autoneg_adv_reg |= (NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
1003 hw_dbg("Flow control param set incorrectly\n");
1004 ret_val = -E1000_ERR_CONFIG;
1008 ret_val = phy->ops.write_reg(hw, PHY_AUTONEG_ADV, mii_autoneg_adv_reg);
1012 hw_dbg("Auto-Neg Advertising %x\n", mii_autoneg_adv_reg);
1014 if (phy->autoneg_mask & ADVERTISE_1000_FULL) {
1015 ret_val = phy->ops.write_reg(hw,
1017 mii_1000t_ctrl_reg);
1027 * igb_setup_copper_link - Configure copper link settings
1028 * @hw: pointer to the HW structure
1030 * Calls the appropriate function to configure the link for auto-neg or forced
1031 * speed and duplex. Then we check for link, once link is established calls
1032 * to configure collision distance and flow control are called. If link is
1033 * not established, we return -E1000_ERR_PHY (-2).
1035 s32 igb_setup_copper_link(struct e1000_hw *hw)
1041 if (hw->mac.autoneg) {
1043 * Setup autoneg and flow control advertisement and perform
1046 ret_val = igb_copper_link_autoneg(hw);
1051 * PHY will be set to 10H, 10F, 100H or 100F
1052 * depending on user settings.
1054 hw_dbg("Forcing Speed and Duplex\n");
1055 ret_val = hw->phy.ops.force_speed_duplex(hw);
1057 hw_dbg("Error Forcing Speed and Duplex\n");
1063 * Check link status. Wait up to 100 microseconds for link to become
1066 ret_val = igb_phy_has_link(hw,
1067 COPPER_LINK_UP_LIMIT,
1074 hw_dbg("Valid link established!!!\n");
1075 igb_config_collision_dist(hw);
1076 ret_val = igb_config_fc_after_link_up(hw);
1078 hw_dbg("Unable to establish link!!!\n");
1086 * igb_phy_force_speed_duplex_igp - Force speed/duplex for igp PHY
1087 * @hw: pointer to the HW structure
1089 * Calls the PHY setup function to force speed and duplex. Clears the
1090 * auto-crossover to force MDI manually. Waits for link and returns
1091 * successful if link up is successful, else -E1000_ERR_PHY (-2).
1093 s32 igb_phy_force_speed_duplex_igp(struct e1000_hw *hw)
1095 struct e1000_phy_info *phy = &hw->phy;
1100 ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_data);
1104 igb_phy_force_speed_duplex_setup(hw, &phy_data);
1106 ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_data);
1111 * Clear Auto-Crossover to force MDI manually. IGP requires MDI
1112 * forced whenever speed and duplex are forced.
1114 ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CTRL, &phy_data);
1118 phy_data &= ~IGP01E1000_PSCR_AUTO_MDIX;
1119 phy_data &= ~IGP01E1000_PSCR_FORCE_MDI_MDIX;
1121 ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CTRL, phy_data);
1125 hw_dbg("IGP PSCR: %X\n", phy_data);
1129 if (phy->autoneg_wait_to_complete) {
1130 hw_dbg("Waiting for forced speed/duplex link on IGP phy.\n");
1132 ret_val = igb_phy_has_link(hw,
1140 hw_dbg("Link taking longer than expected.\n");
1143 ret_val = igb_phy_has_link(hw,
1156 * igb_phy_force_speed_duplex_m88 - Force speed/duplex for m88 PHY
1157 * @hw: pointer to the HW structure
1159 * Calls the PHY setup function to force speed and duplex. Clears the
1160 * auto-crossover to force MDI manually. Resets the PHY to commit the
1161 * changes. If time expires while waiting for link up, we reset the DSP.
1162 * After reset, TX_CLK and CRS on TX must be set. Return successful upon
1163 * successful completion, else return corresponding error code.
1165 s32 igb_phy_force_speed_duplex_m88(struct e1000_hw *hw)
1167 struct e1000_phy_info *phy = &hw->phy;
1173 * Clear Auto-Crossover to force MDI manually. M88E1000 requires MDI
1174 * forced whenever speed and duplex are forced.
1176 ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
1180 phy_data &= ~M88E1000_PSCR_AUTO_X_MODE;
1181 ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
1185 hw_dbg("M88E1000 PSCR: %X\n", phy_data);
1187 ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_data);
1191 igb_phy_force_speed_duplex_setup(hw, &phy_data);
1193 ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_data);
1197 /* Reset the phy to commit changes. */
1198 ret_val = igb_phy_sw_reset(hw);
1202 if (phy->autoneg_wait_to_complete) {
1203 hw_dbg("Waiting for forced speed/duplex link on M88 phy.\n");
1205 ret_val = igb_phy_has_link(hw, PHY_FORCE_LIMIT, 100000, &link);
1210 if (hw->phy.type != e1000_phy_m88 ||
1211 hw->phy.id == I347AT4_E_PHY_ID ||
1212 hw->phy.id == M88E1112_E_PHY_ID) {
1213 hw_dbg("Link taking longer than expected.\n");
1217 * We didn't get link.
1218 * Reset the DSP and cross our fingers.
1220 ret_val = phy->ops.write_reg(hw,
1221 M88E1000_PHY_PAGE_SELECT,
1225 ret_val = igb_phy_reset_dsp(hw);
1232 ret_val = igb_phy_has_link(hw, PHY_FORCE_LIMIT,
1238 if (hw->phy.type != e1000_phy_m88 ||
1239 hw->phy.id == I347AT4_E_PHY_ID ||
1240 hw->phy.id == M88E1112_E_PHY_ID)
1243 ret_val = phy->ops.read_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_data);
1248 * Resetting the phy means we need to re-force TX_CLK in the
1249 * Extended PHY Specific Control Register to 25MHz clock from
1250 * the reset value of 2.5MHz.
1252 phy_data |= M88E1000_EPSCR_TX_CLK_25;
1253 ret_val = phy->ops.write_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, phy_data);
1258 * In addition, we must re-enable CRS on Tx for both half and full
1261 ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
1265 phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
1266 ret_val = phy->ops.write_reg(hw, M88E1000_PHY_SPEC_CTRL, phy_data);
1273 * igb_phy_force_speed_duplex_setup - Configure forced PHY speed/duplex
1274 * @hw: pointer to the HW structure
1275 * @phy_ctrl: pointer to current value of PHY_CONTROL
1277 * Forces speed and duplex on the PHY by doing the following: disable flow
1278 * control, force speed/duplex on the MAC, disable auto speed detection,
1279 * disable auto-negotiation, configure duplex, configure speed, configure
1280 * the collision distance, write configuration to CTRL register. The
1281 * caller must write to the PHY_CONTROL register for these settings to
1284 static void igb_phy_force_speed_duplex_setup(struct e1000_hw *hw,
1287 struct e1000_mac_info *mac = &hw->mac;
1290 /* Turn off flow control when forcing speed/duplex */
1291 hw->fc.current_mode = e1000_fc_none;
1293 /* Force speed/duplex on the mac */
1294 ctrl = rd32(E1000_CTRL);
1295 ctrl |= (E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
1296 ctrl &= ~E1000_CTRL_SPD_SEL;
1298 /* Disable Auto Speed Detection */
1299 ctrl &= ~E1000_CTRL_ASDE;
1301 /* Disable autoneg on the phy */
1302 *phy_ctrl &= ~MII_CR_AUTO_NEG_EN;
1304 /* Forcing Full or Half Duplex? */
1305 if (mac->forced_speed_duplex & E1000_ALL_HALF_DUPLEX) {
1306 ctrl &= ~E1000_CTRL_FD;
1307 *phy_ctrl &= ~MII_CR_FULL_DUPLEX;
1308 hw_dbg("Half Duplex\n");
1310 ctrl |= E1000_CTRL_FD;
1311 *phy_ctrl |= MII_CR_FULL_DUPLEX;
1312 hw_dbg("Full Duplex\n");
1315 /* Forcing 10mb or 100mb? */
1316 if (mac->forced_speed_duplex & E1000_ALL_100_SPEED) {
1317 ctrl |= E1000_CTRL_SPD_100;
1318 *phy_ctrl |= MII_CR_SPEED_100;
1319 *phy_ctrl &= ~(MII_CR_SPEED_1000 | MII_CR_SPEED_10);
1320 hw_dbg("Forcing 100mb\n");
1322 ctrl &= ~(E1000_CTRL_SPD_1000 | E1000_CTRL_SPD_100);
1323 *phy_ctrl |= MII_CR_SPEED_10;
1324 *phy_ctrl &= ~(MII_CR_SPEED_1000 | MII_CR_SPEED_100);
1325 hw_dbg("Forcing 10mb\n");
1328 igb_config_collision_dist(hw);
1330 wr32(E1000_CTRL, ctrl);
1334 * igb_set_d3_lplu_state - Sets low power link up state for D3
1335 * @hw: pointer to the HW structure
1336 * @active: boolean used to enable/disable lplu
1338 * Success returns 0, Failure returns 1
1340 * The low power link up (lplu) state is set to the power management level D3
1341 * and SmartSpeed is disabled when active is true, else clear lplu for D3
1342 * and enable Smartspeed. LPLU and Smartspeed are mutually exclusive. LPLU
1343 * is used during Dx states where the power conservation is most important.
1344 * During driver activity, SmartSpeed should be enabled so performance is
1347 s32 igb_set_d3_lplu_state(struct e1000_hw *hw, bool active)
1349 struct e1000_phy_info *phy = &hw->phy;
1353 if (!(hw->phy.ops.read_reg))
1356 ret_val = phy->ops.read_reg(hw, IGP02E1000_PHY_POWER_MGMT, &data);
1361 data &= ~IGP02E1000_PM_D3_LPLU;
1362 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
1367 * LPLU and SmartSpeed are mutually exclusive. LPLU is used
1368 * during Dx states where the power conservation is most
1369 * important. During driver activity we should enable
1370 * SmartSpeed, so performance is maintained.
1372 if (phy->smart_speed == e1000_smart_speed_on) {
1373 ret_val = phy->ops.read_reg(hw,
1374 IGP01E1000_PHY_PORT_CONFIG,
1379 data |= IGP01E1000_PSCFR_SMART_SPEED;
1380 ret_val = phy->ops.write_reg(hw,
1381 IGP01E1000_PHY_PORT_CONFIG,
1385 } else if (phy->smart_speed == e1000_smart_speed_off) {
1386 ret_val = phy->ops.read_reg(hw,
1387 IGP01E1000_PHY_PORT_CONFIG,
1392 data &= ~IGP01E1000_PSCFR_SMART_SPEED;
1393 ret_val = phy->ops.write_reg(hw,
1394 IGP01E1000_PHY_PORT_CONFIG,
1399 } else if ((phy->autoneg_advertised == E1000_ALL_SPEED_DUPLEX) ||
1400 (phy->autoneg_advertised == E1000_ALL_NOT_GIG) ||
1401 (phy->autoneg_advertised == E1000_ALL_10_SPEED)) {
1402 data |= IGP02E1000_PM_D3_LPLU;
1403 ret_val = phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT,
1408 /* When LPLU is enabled, we should disable SmartSpeed */
1409 ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
1414 data &= ~IGP01E1000_PSCFR_SMART_SPEED;
1415 ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
1424 * igb_check_downshift - Checks whether a downshift in speed occured
1425 * @hw: pointer to the HW structure
1427 * Success returns 0, Failure returns 1
1429 * A downshift is detected by querying the PHY link health.
1431 s32 igb_check_downshift(struct e1000_hw *hw)
1433 struct e1000_phy_info *phy = &hw->phy;
1435 u16 phy_data, offset, mask;
1437 switch (phy->type) {
1439 case e1000_phy_gg82563:
1440 offset = M88E1000_PHY_SPEC_STATUS;
1441 mask = M88E1000_PSSR_DOWNSHIFT;
1443 case e1000_phy_igp_2:
1445 case e1000_phy_igp_3:
1446 offset = IGP01E1000_PHY_LINK_HEALTH;
1447 mask = IGP01E1000_PLHR_SS_DOWNGRADE;
1450 /* speed downshift not supported */
1451 phy->speed_downgraded = false;
1456 ret_val = phy->ops.read_reg(hw, offset, &phy_data);
1459 phy->speed_downgraded = (phy_data & mask) ? true : false;
1466 * igb_check_polarity_m88 - Checks the polarity.
1467 * @hw: pointer to the HW structure
1469 * Success returns 0, Failure returns -E1000_ERR_PHY (-2)
1471 * Polarity is determined based on the PHY specific status register.
1473 static s32 igb_check_polarity_m88(struct e1000_hw *hw)
1475 struct e1000_phy_info *phy = &hw->phy;
1479 ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_STATUS, &data);
1482 phy->cable_polarity = (data & M88E1000_PSSR_REV_POLARITY)
1483 ? e1000_rev_polarity_reversed
1484 : e1000_rev_polarity_normal;
1490 * igb_check_polarity_igp - Checks the polarity.
1491 * @hw: pointer to the HW structure
1493 * Success returns 0, Failure returns -E1000_ERR_PHY (-2)
1495 * Polarity is determined based on the PHY port status register, and the
1496 * current speed (since there is no polarity at 100Mbps).
1498 static s32 igb_check_polarity_igp(struct e1000_hw *hw)
1500 struct e1000_phy_info *phy = &hw->phy;
1502 u16 data, offset, mask;
1505 * Polarity is determined based on the speed of
1508 ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_STATUS, &data);
1512 if ((data & IGP01E1000_PSSR_SPEED_MASK) ==
1513 IGP01E1000_PSSR_SPEED_1000MBPS) {
1514 offset = IGP01E1000_PHY_PCS_INIT_REG;
1515 mask = IGP01E1000_PHY_POLARITY_MASK;
1518 * This really only applies to 10Mbps since
1519 * there is no polarity for 100Mbps (always 0).
1521 offset = IGP01E1000_PHY_PORT_STATUS;
1522 mask = IGP01E1000_PSSR_POLARITY_REVERSED;
1525 ret_val = phy->ops.read_reg(hw, offset, &data);
1528 phy->cable_polarity = (data & mask)
1529 ? e1000_rev_polarity_reversed
1530 : e1000_rev_polarity_normal;
1537 * igb_wait_autoneg - Wait for auto-neg compeletion
1538 * @hw: pointer to the HW structure
1540 * Waits for auto-negotiation to complete or for the auto-negotiation time
1541 * limit to expire, which ever happens first.
1543 static s32 igb_wait_autoneg(struct e1000_hw *hw)
1548 /* Break after autoneg completes or PHY_AUTO_NEG_LIMIT expires. */
1549 for (i = PHY_AUTO_NEG_LIMIT; i > 0; i--) {
1550 ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status);
1553 ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status);
1556 if (phy_status & MII_SR_AUTONEG_COMPLETE)
1562 * PHY_AUTO_NEG_TIME expiration doesn't guarantee auto-negotiation
1569 * igb_phy_has_link - Polls PHY for link
1570 * @hw: pointer to the HW structure
1571 * @iterations: number of times to poll for link
1572 * @usec_interval: delay between polling attempts
1573 * @success: pointer to whether polling was successful or not
1575 * Polls the PHY status register for link, 'iterations' number of times.
1577 s32 igb_phy_has_link(struct e1000_hw *hw, u32 iterations,
1578 u32 usec_interval, bool *success)
1583 for (i = 0; i < iterations; i++) {
1585 * Some PHYs require the PHY_STATUS register to be read
1586 * twice due to the link bit being sticky. No harm doing
1587 * it across the board.
1589 ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status);
1592 * If the first read fails, another entity may have
1593 * ownership of the resources, wait and try again to
1594 * see if they have relinquished the resources yet.
1596 udelay(usec_interval);
1598 ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status);
1601 if (phy_status & MII_SR_LINK_STATUS)
1603 if (usec_interval >= 1000)
1604 mdelay(usec_interval/1000);
1606 udelay(usec_interval);
1609 *success = (i < iterations) ? true : false;
1615 * igb_get_cable_length_m88 - Determine cable length for m88 PHY
1616 * @hw: pointer to the HW structure
1618 * Reads the PHY specific status register to retrieve the cable length
1619 * information. The cable length is determined by averaging the minimum and
1620 * maximum values to get the "average" cable length. The m88 PHY has four
1621 * possible cable length values, which are:
1622 * Register Value Cable Length
1626 * 3 110 - 140 meters
1629 s32 igb_get_cable_length_m88(struct e1000_hw *hw)
1631 struct e1000_phy_info *phy = &hw->phy;
1633 u16 phy_data, index;
1635 ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data);
1639 index = (phy_data & M88E1000_PSSR_CABLE_LENGTH) >>
1640 M88E1000_PSSR_CABLE_LENGTH_SHIFT;
1641 if (index >= M88E1000_CABLE_LENGTH_TABLE_SIZE - 1) {
1642 ret_val = -E1000_ERR_PHY;
1646 phy->min_cable_length = e1000_m88_cable_length_table[index];
1647 phy->max_cable_length = e1000_m88_cable_length_table[index + 1];
1649 phy->cable_length = (phy->min_cable_length + phy->max_cable_length) / 2;
1655 s32 igb_get_cable_length_m88_gen2(struct e1000_hw *hw)
1657 struct e1000_phy_info *phy = &hw->phy;
1659 u16 phy_data, phy_data2, index, default_page, is_cm;
1661 switch (hw->phy.id) {
1662 case I347AT4_E_PHY_ID:
1663 /* Remember the original page select and set it to 7 */
1664 ret_val = phy->ops.read_reg(hw, I347AT4_PAGE_SELECT,
1669 ret_val = phy->ops.write_reg(hw, I347AT4_PAGE_SELECT, 0x07);
1673 /* Get cable length from PHY Cable Diagnostics Control Reg */
1674 ret_val = phy->ops.read_reg(hw, (I347AT4_PCDL + phy->addr),
1679 /* Check if the unit of cable length is meters or cm */
1680 ret_val = phy->ops.read_reg(hw, I347AT4_PCDC, &phy_data2);
1684 is_cm = !(phy_data & I347AT4_PCDC_CABLE_LENGTH_UNIT);
1686 /* Populate the phy structure with cable length in meters */
1687 phy->min_cable_length = phy_data / (is_cm ? 100 : 1);
1688 phy->max_cable_length = phy_data / (is_cm ? 100 : 1);
1689 phy->cable_length = phy_data / (is_cm ? 100 : 1);
1691 /* Reset the page selec to its original value */
1692 ret_val = phy->ops.write_reg(hw, I347AT4_PAGE_SELECT,
1697 case M88E1112_E_PHY_ID:
1698 /* Remember the original page select and set it to 5 */
1699 ret_val = phy->ops.read_reg(hw, I347AT4_PAGE_SELECT,
1704 ret_val = phy->ops.write_reg(hw, I347AT4_PAGE_SELECT, 0x05);
1708 ret_val = phy->ops.read_reg(hw, M88E1112_VCT_DSP_DISTANCE,
1713 index = (phy_data & M88E1000_PSSR_CABLE_LENGTH) >>
1714 M88E1000_PSSR_CABLE_LENGTH_SHIFT;
1715 if (index >= M88E1000_CABLE_LENGTH_TABLE_SIZE - 1) {
1716 ret_val = -E1000_ERR_PHY;
1720 phy->min_cable_length = e1000_m88_cable_length_table[index];
1721 phy->max_cable_length = e1000_m88_cable_length_table[index + 1];
1723 phy->cable_length = (phy->min_cable_length +
1724 phy->max_cable_length) / 2;
1726 /* Reset the page select to its original value */
1727 ret_val = phy->ops.write_reg(hw, I347AT4_PAGE_SELECT,
1734 ret_val = -E1000_ERR_PHY;
1743 * igb_get_cable_length_igp_2 - Determine cable length for igp2 PHY
1744 * @hw: pointer to the HW structure
1746 * The automatic gain control (agc) normalizes the amplitude of the
1747 * received signal, adjusting for the attenuation produced by the
1748 * cable. By reading the AGC registers, which represent the
1749 * combination of coarse and fine gain value, the value can be put
1750 * into a lookup table to obtain the approximate cable length
1753 s32 igb_get_cable_length_igp_2(struct e1000_hw *hw)
1755 struct e1000_phy_info *phy = &hw->phy;
1757 u16 phy_data, i, agc_value = 0;
1758 u16 cur_agc_index, max_agc_index = 0;
1759 u16 min_agc_index = IGP02E1000_CABLE_LENGTH_TABLE_SIZE - 1;
1760 static const u16 agc_reg_array[IGP02E1000_PHY_CHANNEL_NUM] = {
1761 IGP02E1000_PHY_AGC_A,
1762 IGP02E1000_PHY_AGC_B,
1763 IGP02E1000_PHY_AGC_C,
1764 IGP02E1000_PHY_AGC_D
1767 /* Read the AGC registers for all channels */
1768 for (i = 0; i < IGP02E1000_PHY_CHANNEL_NUM; i++) {
1769 ret_val = phy->ops.read_reg(hw, agc_reg_array[i], &phy_data);
1774 * Getting bits 15:9, which represent the combination of
1775 * coarse and fine gain values. The result is a number
1776 * that can be put into the lookup table to obtain the
1777 * approximate cable length.
1779 cur_agc_index = (phy_data >> IGP02E1000_AGC_LENGTH_SHIFT) &
1780 IGP02E1000_AGC_LENGTH_MASK;
1782 /* Array index bound check. */
1783 if ((cur_agc_index >= IGP02E1000_CABLE_LENGTH_TABLE_SIZE) ||
1784 (cur_agc_index == 0)) {
1785 ret_val = -E1000_ERR_PHY;
1789 /* Remove min & max AGC values from calculation. */
1790 if (e1000_igp_2_cable_length_table[min_agc_index] >
1791 e1000_igp_2_cable_length_table[cur_agc_index])
1792 min_agc_index = cur_agc_index;
1793 if (e1000_igp_2_cable_length_table[max_agc_index] <
1794 e1000_igp_2_cable_length_table[cur_agc_index])
1795 max_agc_index = cur_agc_index;
1797 agc_value += e1000_igp_2_cable_length_table[cur_agc_index];
1800 agc_value -= (e1000_igp_2_cable_length_table[min_agc_index] +
1801 e1000_igp_2_cable_length_table[max_agc_index]);
1802 agc_value /= (IGP02E1000_PHY_CHANNEL_NUM - 2);
1804 /* Calculate cable length with the error range of +/- 10 meters. */
1805 phy->min_cable_length = ((agc_value - IGP02E1000_AGC_RANGE) > 0) ?
1806 (agc_value - IGP02E1000_AGC_RANGE) : 0;
1807 phy->max_cable_length = agc_value + IGP02E1000_AGC_RANGE;
1809 phy->cable_length = (phy->min_cable_length + phy->max_cable_length) / 2;
1816 * igb_get_phy_info_m88 - Retrieve PHY information
1817 * @hw: pointer to the HW structure
1819 * Valid for only copper links. Read the PHY status register (sticky read)
1820 * to verify that link is up. Read the PHY special control register to
1821 * determine the polarity and 10base-T extended distance. Read the PHY
1822 * special status register to determine MDI/MDIx and current speed. If
1823 * speed is 1000, then determine cable length, local and remote receiver.
1825 s32 igb_get_phy_info_m88(struct e1000_hw *hw)
1827 struct e1000_phy_info *phy = &hw->phy;
1832 if (phy->media_type != e1000_media_type_copper) {
1833 hw_dbg("Phy info is only valid for copper media\n");
1834 ret_val = -E1000_ERR_CONFIG;
1838 ret_val = igb_phy_has_link(hw, 1, 0, &link);
1843 hw_dbg("Phy info is only valid if link is up\n");
1844 ret_val = -E1000_ERR_CONFIG;
1848 ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
1852 phy->polarity_correction = (phy_data & M88E1000_PSCR_POLARITY_REVERSAL)
1855 ret_val = igb_check_polarity_m88(hw);
1859 ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data);
1863 phy->is_mdix = (phy_data & M88E1000_PSSR_MDIX) ? true : false;
1865 if ((phy_data & M88E1000_PSSR_SPEED) == M88E1000_PSSR_1000MBS) {
1866 ret_val = phy->ops.get_cable_length(hw);
1870 ret_val = phy->ops.read_reg(hw, PHY_1000T_STATUS, &phy_data);
1874 phy->local_rx = (phy_data & SR_1000T_LOCAL_RX_STATUS)
1875 ? e1000_1000t_rx_status_ok
1876 : e1000_1000t_rx_status_not_ok;
1878 phy->remote_rx = (phy_data & SR_1000T_REMOTE_RX_STATUS)
1879 ? e1000_1000t_rx_status_ok
1880 : e1000_1000t_rx_status_not_ok;
1882 /* Set values to "undefined" */
1883 phy->cable_length = E1000_CABLE_LENGTH_UNDEFINED;
1884 phy->local_rx = e1000_1000t_rx_status_undefined;
1885 phy->remote_rx = e1000_1000t_rx_status_undefined;
1893 * igb_get_phy_info_igp - Retrieve igp PHY information
1894 * @hw: pointer to the HW structure
1896 * Read PHY status to determine if link is up. If link is up, then
1897 * set/determine 10base-T extended distance and polarity correction. Read
1898 * PHY port status to determine MDI/MDIx and speed. Based on the speed,
1899 * determine on the cable length, local and remote receiver.
1901 s32 igb_get_phy_info_igp(struct e1000_hw *hw)
1903 struct e1000_phy_info *phy = &hw->phy;
1908 ret_val = igb_phy_has_link(hw, 1, 0, &link);
1913 hw_dbg("Phy info is only valid if link is up\n");
1914 ret_val = -E1000_ERR_CONFIG;
1918 phy->polarity_correction = true;
1920 ret_val = igb_check_polarity_igp(hw);
1924 ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_STATUS, &data);
1928 phy->is_mdix = (data & IGP01E1000_PSSR_MDIX) ? true : false;
1930 if ((data & IGP01E1000_PSSR_SPEED_MASK) ==
1931 IGP01E1000_PSSR_SPEED_1000MBPS) {
1932 ret_val = phy->ops.get_cable_length(hw);
1936 ret_val = phy->ops.read_reg(hw, PHY_1000T_STATUS, &data);
1940 phy->local_rx = (data & SR_1000T_LOCAL_RX_STATUS)
1941 ? e1000_1000t_rx_status_ok
1942 : e1000_1000t_rx_status_not_ok;
1944 phy->remote_rx = (data & SR_1000T_REMOTE_RX_STATUS)
1945 ? e1000_1000t_rx_status_ok
1946 : e1000_1000t_rx_status_not_ok;
1948 phy->cable_length = E1000_CABLE_LENGTH_UNDEFINED;
1949 phy->local_rx = e1000_1000t_rx_status_undefined;
1950 phy->remote_rx = e1000_1000t_rx_status_undefined;
1958 * igb_phy_sw_reset - PHY software reset
1959 * @hw: pointer to the HW structure
1961 * Does a software reset of the PHY by reading the PHY control register and
1962 * setting/write the control register reset bit to the PHY.
1964 s32 igb_phy_sw_reset(struct e1000_hw *hw)
1969 if (!(hw->phy.ops.read_reg))
1972 ret_val = hw->phy.ops.read_reg(hw, PHY_CONTROL, &phy_ctrl);
1976 phy_ctrl |= MII_CR_RESET;
1977 ret_val = hw->phy.ops.write_reg(hw, PHY_CONTROL, phy_ctrl);
1988 * igb_phy_hw_reset - PHY hardware reset
1989 * @hw: pointer to the HW structure
1991 * Verify the reset block is not blocking us from resetting. Acquire
1992 * semaphore (if necessary) and read/set/write the device control reset
1993 * bit in the PHY. Wait the appropriate delay time for the device to
1994 * reset and relase the semaphore (if necessary).
1996 s32 igb_phy_hw_reset(struct e1000_hw *hw)
1998 struct e1000_phy_info *phy = &hw->phy;
2002 ret_val = igb_check_reset_block(hw);
2008 ret_val = phy->ops.acquire(hw);
2012 ctrl = rd32(E1000_CTRL);
2013 wr32(E1000_CTRL, ctrl | E1000_CTRL_PHY_RST);
2016 udelay(phy->reset_delay_us);
2018 wr32(E1000_CTRL, ctrl);
2023 phy->ops.release(hw);
2025 ret_val = phy->ops.get_cfg_done(hw);
2032 * igb_phy_init_script_igp3 - Inits the IGP3 PHY
2033 * @hw: pointer to the HW structure
2035 * Initializes a Intel Gigabit PHY3 when an EEPROM is not present.
2037 s32 igb_phy_init_script_igp3(struct e1000_hw *hw)
2039 hw_dbg("Running IGP 3 PHY init script\n");
2041 /* PHY init IGP 3 */
2042 /* Enable rise/fall, 10-mode work in class-A */
2043 hw->phy.ops.write_reg(hw, 0x2F5B, 0x9018);
2044 /* Remove all caps from Replica path filter */
2045 hw->phy.ops.write_reg(hw, 0x2F52, 0x0000);
2046 /* Bias trimming for ADC, AFE and Driver (Default) */
2047 hw->phy.ops.write_reg(hw, 0x2FB1, 0x8B24);
2048 /* Increase Hybrid poly bias */
2049 hw->phy.ops.write_reg(hw, 0x2FB2, 0xF8F0);
2050 /* Add 4% to TX amplitude in Giga mode */
2051 hw->phy.ops.write_reg(hw, 0x2010, 0x10B0);
2052 /* Disable trimming (TTT) */
2053 hw->phy.ops.write_reg(hw, 0x2011, 0x0000);
2054 /* Poly DC correction to 94.6% + 2% for all channels */
2055 hw->phy.ops.write_reg(hw, 0x20DD, 0x249A);
2056 /* ABS DC correction to 95.9% */
2057 hw->phy.ops.write_reg(hw, 0x20DE, 0x00D3);
2058 /* BG temp curve trim */
2059 hw->phy.ops.write_reg(hw, 0x28B4, 0x04CE);
2060 /* Increasing ADC OPAMP stage 1 currents to max */
2061 hw->phy.ops.write_reg(hw, 0x2F70, 0x29E4);
2062 /* Force 1000 ( required for enabling PHY regs configuration) */
2063 hw->phy.ops.write_reg(hw, 0x0000, 0x0140);
2064 /* Set upd_freq to 6 */
2065 hw->phy.ops.write_reg(hw, 0x1F30, 0x1606);
2067 hw->phy.ops.write_reg(hw, 0x1F31, 0xB814);
2068 /* Disable adaptive fixed FFE (Default) */
2069 hw->phy.ops.write_reg(hw, 0x1F35, 0x002A);
2070 /* Enable FFE hysteresis */
2071 hw->phy.ops.write_reg(hw, 0x1F3E, 0x0067);
2072 /* Fixed FFE for short cable lengths */
2073 hw->phy.ops.write_reg(hw, 0x1F54, 0x0065);
2074 /* Fixed FFE for medium cable lengths */
2075 hw->phy.ops.write_reg(hw, 0x1F55, 0x002A);
2076 /* Fixed FFE for long cable lengths */
2077 hw->phy.ops.write_reg(hw, 0x1F56, 0x002A);
2078 /* Enable Adaptive Clip Threshold */
2079 hw->phy.ops.write_reg(hw, 0x1F72, 0x3FB0);
2080 /* AHT reset limit to 1 */
2081 hw->phy.ops.write_reg(hw, 0x1F76, 0xC0FF);
2082 /* Set AHT master delay to 127 msec */
2083 hw->phy.ops.write_reg(hw, 0x1F77, 0x1DEC);
2084 /* Set scan bits for AHT */
2085 hw->phy.ops.write_reg(hw, 0x1F78, 0xF9EF);
2086 /* Set AHT Preset bits */
2087 hw->phy.ops.write_reg(hw, 0x1F79, 0x0210);
2088 /* Change integ_factor of channel A to 3 */
2089 hw->phy.ops.write_reg(hw, 0x1895, 0x0003);
2090 /* Change prop_factor of channels BCD to 8 */
2091 hw->phy.ops.write_reg(hw, 0x1796, 0x0008);
2092 /* Change cg_icount + enable integbp for channels BCD */
2093 hw->phy.ops.write_reg(hw, 0x1798, 0xD008);
2095 * Change cg_icount + enable integbp + change prop_factor_master
2096 * to 8 for channel A
2098 hw->phy.ops.write_reg(hw, 0x1898, 0xD918);
2099 /* Disable AHT in Slave mode on channel A */
2100 hw->phy.ops.write_reg(hw, 0x187A, 0x0800);
2102 * Enable LPLU and disable AN to 1000 in non-D0a states,
2105 hw->phy.ops.write_reg(hw, 0x0019, 0x008D);
2106 /* Enable restart AN on an1000_dis change */
2107 hw->phy.ops.write_reg(hw, 0x001B, 0x2080);
2108 /* Enable wh_fifo read clock in 10/100 modes */
2109 hw->phy.ops.write_reg(hw, 0x0014, 0x0045);
2110 /* Restart AN, Speed selection is 1000 */
2111 hw->phy.ops.write_reg(hw, 0x0000, 0x1340);
2117 * igb_power_up_phy_copper - Restore copper link in case of PHY power down
2118 * @hw: pointer to the HW structure
2120 * In the case of a PHY power down to save power, or to turn off link during a
2121 * driver unload, restore the link to previous settings.
2123 void igb_power_up_phy_copper(struct e1000_hw *hw)
2127 /* The PHY will retain its settings across a power down/up cycle */
2128 hw->phy.ops.read_reg(hw, PHY_CONTROL, &mii_reg);
2129 mii_reg &= ~MII_CR_POWER_DOWN;
2130 hw->phy.ops.write_reg(hw, PHY_CONTROL, mii_reg);
2134 * igb_power_down_phy_copper - Power down copper PHY
2135 * @hw: pointer to the HW structure
2137 * Power down PHY to save power when interface is down and wake on lan
2140 void igb_power_down_phy_copper(struct e1000_hw *hw)
2144 /* The PHY will retain its settings across a power down/up cycle */
2145 hw->phy.ops.read_reg(hw, PHY_CONTROL, &mii_reg);
2146 mii_reg |= MII_CR_POWER_DOWN;
2147 hw->phy.ops.write_reg(hw, PHY_CONTROL, mii_reg);
2152 * igb_check_polarity_82580 - Checks the polarity.
2153 * @hw: pointer to the HW structure
2155 * Success returns 0, Failure returns -E1000_ERR_PHY (-2)
2157 * Polarity is determined based on the PHY specific status register.
2159 static s32 igb_check_polarity_82580(struct e1000_hw *hw)
2161 struct e1000_phy_info *phy = &hw->phy;
2166 ret_val = phy->ops.read_reg(hw, I82580_PHY_STATUS_2, &data);
2169 phy->cable_polarity = (data & I82580_PHY_STATUS2_REV_POLARITY)
2170 ? e1000_rev_polarity_reversed
2171 : e1000_rev_polarity_normal;
2177 * igb_phy_force_speed_duplex_82580 - Force speed/duplex for I82580 PHY
2178 * @hw: pointer to the HW structure
2180 * Calls the PHY setup function to force speed and duplex. Clears the
2181 * auto-crossover to force MDI manually. Waits for link and returns
2182 * successful if link up is successful, else -E1000_ERR_PHY (-2).
2184 s32 igb_phy_force_speed_duplex_82580(struct e1000_hw *hw)
2186 struct e1000_phy_info *phy = &hw->phy;
2192 ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_data);
2196 igb_phy_force_speed_duplex_setup(hw, &phy_data);
2198 ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_data);
2203 * Clear Auto-Crossover to force MDI manually. 82580 requires MDI
2204 * forced whenever speed and duplex are forced.
2206 ret_val = phy->ops.read_reg(hw, I82580_PHY_CTRL_2, &phy_data);
2210 phy_data &= ~I82580_PHY_CTRL2_AUTO_MDIX;
2211 phy_data &= ~I82580_PHY_CTRL2_FORCE_MDI_MDIX;
2213 ret_val = phy->ops.write_reg(hw, I82580_PHY_CTRL_2, phy_data);
2217 hw_dbg("I82580_PHY_CTRL_2: %X\n", phy_data);
2221 if (phy->autoneg_wait_to_complete) {
2222 hw_dbg("Waiting for forced speed/duplex link on 82580 phy\n");
2224 ret_val = igb_phy_has_link(hw,
2232 hw_dbg("Link taking longer than expected.\n");
2235 ret_val = igb_phy_has_link(hw,
2248 * igb_get_phy_info_82580 - Retrieve I82580 PHY information
2249 * @hw: pointer to the HW structure
2251 * Read PHY status to determine if link is up. If link is up, then
2252 * set/determine 10base-T extended distance and polarity correction. Read
2253 * PHY port status to determine MDI/MDIx and speed. Based on the speed,
2254 * determine on the cable length, local and remote receiver.
2256 s32 igb_get_phy_info_82580(struct e1000_hw *hw)
2258 struct e1000_phy_info *phy = &hw->phy;
2264 ret_val = igb_phy_has_link(hw, 1, 0, &link);
2269 hw_dbg("Phy info is only valid if link is up\n");
2270 ret_val = -E1000_ERR_CONFIG;
2274 phy->polarity_correction = true;
2276 ret_val = igb_check_polarity_82580(hw);
2280 ret_val = phy->ops.read_reg(hw, I82580_PHY_STATUS_2, &data);
2284 phy->is_mdix = (data & I82580_PHY_STATUS2_MDIX) ? true : false;
2286 if ((data & I82580_PHY_STATUS2_SPEED_MASK) ==
2287 I82580_PHY_STATUS2_SPEED_1000MBPS) {
2288 ret_val = hw->phy.ops.get_cable_length(hw);
2292 ret_val = phy->ops.read_reg(hw, PHY_1000T_STATUS, &data);
2296 phy->local_rx = (data & SR_1000T_LOCAL_RX_STATUS)
2297 ? e1000_1000t_rx_status_ok
2298 : e1000_1000t_rx_status_not_ok;
2300 phy->remote_rx = (data & SR_1000T_REMOTE_RX_STATUS)
2301 ? e1000_1000t_rx_status_ok
2302 : e1000_1000t_rx_status_not_ok;
2304 phy->cable_length = E1000_CABLE_LENGTH_UNDEFINED;
2305 phy->local_rx = e1000_1000t_rx_status_undefined;
2306 phy->remote_rx = e1000_1000t_rx_status_undefined;
2314 * igb_get_cable_length_82580 - Determine cable length for 82580 PHY
2315 * @hw: pointer to the HW structure
2317 * Reads the diagnostic status register and verifies result is valid before
2318 * placing it in the phy_cable_length field.
2320 s32 igb_get_cable_length_82580(struct e1000_hw *hw)
2322 struct e1000_phy_info *phy = &hw->phy;
2324 u16 phy_data, length;
2327 ret_val = phy->ops.read_reg(hw, I82580_PHY_DIAG_STATUS, &phy_data);
2331 length = (phy_data & I82580_DSTATUS_CABLE_LENGTH) >>
2332 I82580_DSTATUS_CABLE_LENGTH_SHIFT;
2334 if (length == E1000_CABLE_LENGTH_UNDEFINED)
2335 ret_val = -E1000_ERR_PHY;
2337 phy->cable_length = length;