|
@@ -33,29 +33,29 @@
|
|
|
|
|
|
static s32 igb_phy_setup_autoneg(struct e1000_hw *hw);
|
|
|
static void igb_phy_force_speed_duplex_setup(struct e1000_hw *hw,
|
|
|
- u16 *phy_ctrl);
|
|
|
+ u16 *phy_ctrl);
|
|
|
static s32 igb_wait_autoneg(struct e1000_hw *hw);
|
|
|
static s32 igb_set_master_slave_mode(struct e1000_hw *hw);
|
|
|
|
|
|
/* Cable length tables */
|
|
|
-static const u16 e1000_m88_cable_length_table[] =
|
|
|
- { 0, 50, 80, 110, 140, 140, E1000_CABLE_LENGTH_UNDEFINED };
|
|
|
+static const u16 e1000_m88_cable_length_table[] = {
|
|
|
+ 0, 50, 80, 110, 140, 140, E1000_CABLE_LENGTH_UNDEFINED };
|
|
|
#define M88E1000_CABLE_LENGTH_TABLE_SIZE \
|
|
|
- (sizeof(e1000_m88_cable_length_table) / \
|
|
|
- sizeof(e1000_m88_cable_length_table[0]))
|
|
|
-
|
|
|
-static const u16 e1000_igp_2_cable_length_table[] =
|
|
|
- { 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 8, 11, 13, 16, 18, 21,
|
|
|
- 0, 0, 0, 3, 6, 10, 13, 16, 19, 23, 26, 29, 32, 35, 38, 41,
|
|
|
- 6, 10, 14, 18, 22, 26, 30, 33, 37, 41, 44, 48, 51, 54, 58, 61,
|
|
|
- 21, 26, 31, 35, 40, 44, 49, 53, 57, 61, 65, 68, 72, 75, 79, 82,
|
|
|
- 40, 45, 51, 56, 61, 66, 70, 75, 79, 83, 87, 91, 94, 98, 101, 104,
|
|
|
- 60, 66, 72, 77, 82, 87, 92, 96, 100, 104, 108, 111, 114, 117, 119, 121,
|
|
|
- 83, 89, 95, 100, 105, 109, 113, 116, 119, 122, 124,
|
|
|
- 104, 109, 114, 118, 121, 124};
|
|
|
+ (sizeof(e1000_m88_cable_length_table) / \
|
|
|
+ sizeof(e1000_m88_cable_length_table[0]))
|
|
|
+
|
|
|
+static const u16 e1000_igp_2_cable_length_table[] = {
|
|
|
+ 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 8, 11, 13, 16, 18, 21,
|
|
|
+ 0, 0, 0, 3, 6, 10, 13, 16, 19, 23, 26, 29, 32, 35, 38, 41,
|
|
|
+ 6, 10, 14, 18, 22, 26, 30, 33, 37, 41, 44, 48, 51, 54, 58, 61,
|
|
|
+ 21, 26, 31, 35, 40, 44, 49, 53, 57, 61, 65, 68, 72, 75, 79, 82,
|
|
|
+ 40, 45, 51, 56, 61, 66, 70, 75, 79, 83, 87, 91, 94, 98, 101, 104,
|
|
|
+ 60, 66, 72, 77, 82, 87, 92, 96, 100, 104, 108, 111, 114, 117, 119, 121,
|
|
|
+ 83, 89, 95, 100, 105, 109, 113, 116, 119, 122, 124,
|
|
|
+ 104, 109, 114, 118, 121, 124};
|
|
|
#define IGP02E1000_CABLE_LENGTH_TABLE_SIZE \
|
|
|
- (sizeof(e1000_igp_2_cable_length_table) / \
|
|
|
- sizeof(e1000_igp_2_cable_length_table[0]))
|
|
|
+ (sizeof(e1000_igp_2_cable_length_table) / \
|
|
|
+ sizeof(e1000_igp_2_cable_length_table[0]))
|
|
|
|
|
|
/**
|
|
|
* igb_check_reset_block - Check if PHY reset is blocked
|
|
@@ -71,8 +71,7 @@ s32 igb_check_reset_block(struct e1000_hw *hw)
|
|
|
|
|
|
manc = rd32(E1000_MANC);
|
|
|
|
|
|
- return (manc & E1000_MANC_BLK_PHY_RST_ON_IDE) ?
|
|
|
- E1000_BLK_PHY_RESET : 0;
|
|
|
+ return (manc & E1000_MANC_BLK_PHY_RST_ON_IDE) ? E1000_BLK_PHY_RESET : 0;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -149,8 +148,7 @@ s32 igb_read_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 *data)
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
|
- /*
|
|
|
- * Set up Op-code, Phy Address, and register offset in the MDI
|
|
|
+ /* Set up Op-code, Phy Address, and register offset in the MDI
|
|
|
* Control register. The MAC will take care of interfacing with the
|
|
|
* PHY to retrieve the desired data.
|
|
|
*/
|
|
@@ -160,8 +158,7 @@ s32 igb_read_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 *data)
|
|
|
|
|
|
wr32(E1000_MDIC, mdic);
|
|
|
|
|
|
- /*
|
|
|
- * Poll the ready bit to see if the MDI read completed
|
|
|
+ /* Poll the ready bit to see if the MDI read completed
|
|
|
* Increasing the time out as testing showed failures with
|
|
|
* the lower time out
|
|
|
*/
|
|
@@ -207,8 +204,7 @@ s32 igb_write_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 data)
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
|
- /*
|
|
|
- * Set up Op-code, Phy Address, and register offset in the MDI
|
|
|
+ /* Set up Op-code, Phy Address, and register offset in the MDI
|
|
|
* Control register. The MAC will take care of interfacing with the
|
|
|
* PHY to retrieve the desired data.
|
|
|
*/
|
|
@@ -219,8 +215,7 @@ s32 igb_write_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 data)
|
|
|
|
|
|
wr32(E1000_MDIC, mdic);
|
|
|
|
|
|
- /*
|
|
|
- * Poll the ready bit to see if the MDI read completed
|
|
|
+ /* Poll the ready bit to see if the MDI read completed
|
|
|
* Increasing the time out as testing showed failures with
|
|
|
* the lower time out
|
|
|
*/
|
|
@@ -259,15 +254,13 @@ s32 igb_read_phy_reg_i2c(struct e1000_hw *hw, u32 offset, u16 *data)
|
|
|
struct e1000_phy_info *phy = &hw->phy;
|
|
|
u32 i, i2ccmd = 0;
|
|
|
|
|
|
-
|
|
|
- /*
|
|
|
- * Set up Op-code, Phy Address, and register address in the I2CCMD
|
|
|
+ /* Set up Op-code, Phy Address, and register address in the I2CCMD
|
|
|
* register. The MAC will take care of interfacing with the
|
|
|
* PHY to retrieve the desired data.
|
|
|
*/
|
|
|
i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) |
|
|
|
- (phy->addr << E1000_I2CCMD_PHY_ADDR_SHIFT) |
|
|
|
- (E1000_I2CCMD_OPCODE_READ));
|
|
|
+ (phy->addr << E1000_I2CCMD_PHY_ADDR_SHIFT) |
|
|
|
+ (E1000_I2CCMD_OPCODE_READ));
|
|
|
|
|
|
wr32(E1000_I2CCMD, i2ccmd);
|
|
|
|
|
@@ -317,15 +310,14 @@ s32 igb_write_phy_reg_i2c(struct e1000_hw *hw, u32 offset, u16 data)
|
|
|
/* Swap the data bytes for the I2C interface */
|
|
|
phy_data_swapped = ((data >> 8) & 0x00FF) | ((data << 8) & 0xFF00);
|
|
|
|
|
|
- /*
|
|
|
- * Set up Op-code, Phy Address, and register address in the I2CCMD
|
|
|
+ /* Set up Op-code, Phy Address, and register address in the I2CCMD
|
|
|
* register. The MAC will take care of interfacing with the
|
|
|
* PHY to retrieve the desired data.
|
|
|
*/
|
|
|
i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) |
|
|
|
- (phy->addr << E1000_I2CCMD_PHY_ADDR_SHIFT) |
|
|
|
- E1000_I2CCMD_OPCODE_WRITE |
|
|
|
- phy_data_swapped);
|
|
|
+ (phy->addr << E1000_I2CCMD_PHY_ADDR_SHIFT) |
|
|
|
+ E1000_I2CCMD_OPCODE_WRITE |
|
|
|
+ phy_data_swapped);
|
|
|
|
|
|
wr32(E1000_I2CCMD, i2ccmd);
|
|
|
|
|
@@ -371,8 +363,8 @@ s32 igb_read_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 *data)
|
|
|
|
|
|
if (offset > MAX_PHY_MULTI_PAGE_REG) {
|
|
|
ret_val = igb_write_phy_reg_mdic(hw,
|
|
|
- IGP01E1000_PHY_PAGE_SELECT,
|
|
|
- (u16)offset);
|
|
|
+ IGP01E1000_PHY_PAGE_SELECT,
|
|
|
+ (u16)offset);
|
|
|
if (ret_val) {
|
|
|
hw->phy.ops.release(hw);
|
|
|
goto out;
|
|
@@ -410,8 +402,8 @@ s32 igb_write_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 data)
|
|
|
|
|
|
if (offset > MAX_PHY_MULTI_PAGE_REG) {
|
|
|
ret_val = igb_write_phy_reg_mdic(hw,
|
|
|
- IGP01E1000_PHY_PAGE_SELECT,
|
|
|
- (u16)offset);
|
|
|
+ IGP01E1000_PHY_PAGE_SELECT,
|
|
|
+ (u16)offset);
|
|
|
if (ret_val) {
|
|
|
hw->phy.ops.release(hw);
|
|
|
goto out;
|
|
@@ -419,7 +411,7 @@ s32 igb_write_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 data)
|
|
|
}
|
|
|
|
|
|
ret_val = igb_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
|
|
|
- data);
|
|
|
+ data);
|
|
|
|
|
|
hw->phy.ops.release(hw);
|
|
|
|
|
@@ -439,7 +431,6 @@ s32 igb_copper_link_setup_82580(struct e1000_hw *hw)
|
|
|
s32 ret_val;
|
|
|
u16 phy_data;
|
|
|
|
|
|
-
|
|
|
if (phy->reset_disable) {
|
|
|
ret_val = 0;
|
|
|
goto out;
|
|
@@ -472,8 +463,7 @@ s32 igb_copper_link_setup_82580(struct e1000_hw *hw)
|
|
|
if (ret_val)
|
|
|
goto out;
|
|
|
phy_data &= ~I82580_PHY_CTRL2_MDIX_CFG_MASK;
|
|
|
- /*
|
|
|
- * Options:
|
|
|
+ /* Options:
|
|
|
* 0 - Auto (default)
|
|
|
* 1 - MDI mode
|
|
|
* 2 - MDI-X mode
|
|
@@ -520,8 +510,7 @@ s32 igb_copper_link_setup_m88(struct e1000_hw *hw)
|
|
|
|
|
|
phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
|
|
|
|
|
|
- /*
|
|
|
- * Options:
|
|
|
+ /* Options:
|
|
|
* MDI/MDI-X = 0 (default)
|
|
|
* 0 - Auto for all speeds
|
|
|
* 1 - MDI mode
|
|
@@ -546,8 +535,7 @@ s32 igb_copper_link_setup_m88(struct e1000_hw *hw)
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- /*
|
|
|
- * Options:
|
|
|
+ /* Options:
|
|
|
* disable_polarity_correction = 0 (default)
|
|
|
* Automatic Correction for Reversed Cable Polarity
|
|
|
* 0 - Disabled
|
|
@@ -562,12 +550,11 @@ s32 igb_copper_link_setup_m88(struct e1000_hw *hw)
|
|
|
goto out;
|
|
|
|
|
|
if (phy->revision < E1000_REVISION_4) {
|
|
|
- /*
|
|
|
- * Force TX_CLK in the Extended PHY Specific Control Register
|
|
|
+ /* Force TX_CLK in the Extended PHY Specific Control Register
|
|
|
* to 25MHz clock.
|
|
|
*/
|
|
|
ret_val = phy->ops.read_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL,
|
|
|
- &phy_data);
|
|
|
+ &phy_data);
|
|
|
if (ret_val)
|
|
|
goto out;
|
|
|
|
|
@@ -630,8 +617,7 @@ s32 igb_copper_link_setup_m88_gen2(struct e1000_hw *hw)
|
|
|
if (ret_val)
|
|
|
goto out;
|
|
|
|
|
|
- /*
|
|
|
- * Options:
|
|
|
+ /* Options:
|
|
|
* MDI/MDI-X = 0 (default)
|
|
|
* 0 - Auto for all speeds
|
|
|
* 1 - MDI mode
|
|
@@ -659,8 +645,7 @@ s32 igb_copper_link_setup_m88_gen2(struct e1000_hw *hw)
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- /*
|
|
|
- * Options:
|
|
|
+ /* Options:
|
|
|
* disable_polarity_correction = 0 (default)
|
|
|
* Automatic Correction for Reversed Cable Polarity
|
|
|
* 0 - Disabled
|
|
@@ -714,14 +699,12 @@ s32 igb_copper_link_setup_igp(struct e1000_hw *hw)
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
|
- /*
|
|
|
- * Wait 100ms for MAC to configure PHY from NVM settings, to avoid
|
|
|
+ /* Wait 100ms for MAC to configure PHY from NVM settings, to avoid
|
|
|
* timeout issues when LFS is enabled.
|
|
|
*/
|
|
|
msleep(100);
|
|
|
|
|
|
- /*
|
|
|
- * The NVM settings will configure LPLU in D3 for
|
|
|
+ /* The NVM settings will configure LPLU in D3 for
|
|
|
* non-IGP1 PHYs.
|
|
|
*/
|
|
|
if (phy->type == e1000_phy_igp) {
|
|
@@ -765,8 +748,7 @@ s32 igb_copper_link_setup_igp(struct e1000_hw *hw)
|
|
|
|
|
|
/* set auto-master slave resolution settings */
|
|
|
if (hw->mac.autoneg) {
|
|
|
- /*
|
|
|
- * when autonegotiation advertisement is only 1000Mbps then we
|
|
|
+ /* when autonegotiation advertisement is only 1000Mbps then we
|
|
|
* should disable SmartSpeed and enable Auto MasterSlave
|
|
|
* resolution as hardware default.
|
|
|
*/
|
|
@@ -844,14 +826,12 @@ static s32 igb_copper_link_autoneg(struct e1000_hw *hw)
|
|
|
s32 ret_val;
|
|
|
u16 phy_ctrl;
|
|
|
|
|
|
- /*
|
|
|
- * Perform some bounds checking on the autoneg advertisement
|
|
|
+ /* Perform some bounds checking on the autoneg advertisement
|
|
|
* parameter.
|
|
|
*/
|
|
|
phy->autoneg_advertised &= phy->autoneg_mask;
|
|
|
|
|
|
- /*
|
|
|
- * If autoneg_advertised is zero, we assume it was not defaulted
|
|
|
+ /* If autoneg_advertised is zero, we assume it was not defaulted
|
|
|
* by the calling code so we set to advertise full capability.
|
|
|
*/
|
|
|
if (phy->autoneg_advertised == 0)
|
|
@@ -865,8 +845,7 @@ static s32 igb_copper_link_autoneg(struct e1000_hw *hw)
|
|
|
}
|
|
|
hw_dbg("Restarting Auto-Neg\n");
|
|
|
|
|
|
- /*
|
|
|
- * Restart auto-negotiation by setting the Auto Neg Enable bit and
|
|
|
+ /* Restart auto-negotiation by setting the Auto Neg Enable bit and
|
|
|
* the Auto Neg Restart bit in the PHY control register.
|
|
|
*/
|
|
|
ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_ctrl);
|
|
@@ -878,8 +857,7 @@ static s32 igb_copper_link_autoneg(struct e1000_hw *hw)
|
|
|
if (ret_val)
|
|
|
goto out;
|
|
|
|
|
|
- /*
|
|
|
- * Does the user want to wait for Auto-Neg to complete here, or
|
|
|
+ /* Does the user want to wait for Auto-Neg to complete here, or
|
|
|
* check at a later time (for example, callback routine).
|
|
|
*/
|
|
|
if (phy->autoneg_wait_to_complete) {
|
|
@@ -928,16 +906,14 @@ static s32 igb_phy_setup_autoneg(struct e1000_hw *hw)
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
|
- /*
|
|
|
- * Need to parse both autoneg_advertised and fc and set up
|
|
|
+ /* Need to parse both autoneg_advertised and fc and set up
|
|
|
* the appropriate PHY registers. First we will parse for
|
|
|
* autoneg_advertised software override. Since we can advertise
|
|
|
* a plethora of combinations, we need to check each bit
|
|
|
* individually.
|
|
|
*/
|
|
|
|
|
|
- /*
|
|
|
- * First we clear all the 10/100 mb speed bits in the Auto-Neg
|
|
|
+ /* First we clear all the 10/100 mb speed bits in the Auto-Neg
|
|
|
* Advertisement Register (Address 4) and the 1000 mb speed bits in
|
|
|
* the 1000Base-T Control Register (Address 9).
|
|
|
*/
|
|
@@ -983,8 +959,7 @@ static s32 igb_phy_setup_autoneg(struct e1000_hw *hw)
|
|
|
mii_1000t_ctrl_reg |= CR_1000T_FD_CAPS;
|
|
|
}
|
|
|
|
|
|
- /*
|
|
|
- * Check for a software override of the flow control settings, and
|
|
|
+ /* Check for a software override of the flow control settings, and
|
|
|
* setup the PHY advertisement registers accordingly. If
|
|
|
* auto-negotiation is enabled, then software will have to set the
|
|
|
* "PAUSE" bits to the correct value in the Auto-Negotiation
|
|
@@ -1003,15 +978,13 @@ static s32 igb_phy_setup_autoneg(struct e1000_hw *hw)
|
|
|
*/
|
|
|
switch (hw->fc.current_mode) {
|
|
|
case e1000_fc_none:
|
|
|
- /*
|
|
|
- * Flow control (RX & TX) is completely disabled by a
|
|
|
+ /* Flow control (RX & TX) is completely disabled by a
|
|
|
* software over-ride.
|
|
|
*/
|
|
|
mii_autoneg_adv_reg &= ~(NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
|
|
|
break;
|
|
|
case e1000_fc_rx_pause:
|
|
|
- /*
|
|
|
- * RX Flow control is enabled, and TX Flow control is
|
|
|
+ /* RX Flow control is enabled, and TX Flow control is
|
|
|
* disabled, by a software over-ride.
|
|
|
*
|
|
|
* Since there really isn't a way to advertise that we are
|
|
@@ -1023,16 +996,14 @@ static s32 igb_phy_setup_autoneg(struct e1000_hw *hw)
|
|
|
mii_autoneg_adv_reg |= (NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
|
|
|
break;
|
|
|
case e1000_fc_tx_pause:
|
|
|
- /*
|
|
|
- * TX Flow control is enabled, and RX Flow control is
|
|
|
+ /* TX Flow control is enabled, and RX Flow control is
|
|
|
* disabled, by a software over-ride.
|
|
|
*/
|
|
|
mii_autoneg_adv_reg |= NWAY_AR_ASM_DIR;
|
|
|
mii_autoneg_adv_reg &= ~NWAY_AR_PAUSE;
|
|
|
break;
|
|
|
case e1000_fc_full:
|
|
|
- /*
|
|
|
- * Flow control (both RX and TX) is enabled by a software
|
|
|
+ /* Flow control (both RX and TX) is enabled by a software
|
|
|
* over-ride.
|
|
|
*/
|
|
|
mii_autoneg_adv_reg |= (NWAY_AR_ASM_DIR | NWAY_AR_PAUSE);
|
|
@@ -1075,18 +1046,15 @@ s32 igb_setup_copper_link(struct e1000_hw *hw)
|
|
|
s32 ret_val;
|
|
|
bool link;
|
|
|
|
|
|
-
|
|
|
if (hw->mac.autoneg) {
|
|
|
- /*
|
|
|
- * Setup autoneg and flow control advertisement and perform
|
|
|
+ /* Setup autoneg and flow control advertisement and perform
|
|
|
* autonegotiation.
|
|
|
*/
|
|
|
ret_val = igb_copper_link_autoneg(hw);
|
|
|
if (ret_val)
|
|
|
goto out;
|
|
|
} else {
|
|
|
- /*
|
|
|
- * PHY will be set to 10H, 10F, 100H or 100F
|
|
|
+ /* PHY will be set to 10H, 10F, 100H or 100F
|
|
|
* depending on user settings.
|
|
|
*/
|
|
|
hw_dbg("Forcing Speed and Duplex\n");
|
|
@@ -1097,14 +1065,10 @@ s32 igb_setup_copper_link(struct e1000_hw *hw)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /*
|
|
|
- * Check link status. Wait up to 100 microseconds for link to become
|
|
|
+ /* Check link status. Wait up to 100 microseconds for link to become
|
|
|
* valid.
|
|
|
*/
|
|
|
- ret_val = igb_phy_has_link(hw,
|
|
|
- COPPER_LINK_UP_LIMIT,
|
|
|
- 10,
|
|
|
- &link);
|
|
|
+ ret_val = igb_phy_has_link(hw, COPPER_LINK_UP_LIMIT, 10, &link);
|
|
|
if (ret_val)
|
|
|
goto out;
|
|
|
|
|
@@ -1145,8 +1109,7 @@ s32 igb_phy_force_speed_duplex_igp(struct e1000_hw *hw)
|
|
|
if (ret_val)
|
|
|
goto out;
|
|
|
|
|
|
- /*
|
|
|
- * Clear Auto-Crossover to force MDI manually. IGP requires MDI
|
|
|
+ /* Clear Auto-Crossover to force MDI manually. IGP requires MDI
|
|
|
* forced whenever speed and duplex are forced.
|
|
|
*/
|
|
|
ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CTRL, &phy_data);
|
|
@@ -1167,10 +1130,7 @@ s32 igb_phy_force_speed_duplex_igp(struct e1000_hw *hw)
|
|
|
if (phy->autoneg_wait_to_complete) {
|
|
|
hw_dbg("Waiting for forced speed/duplex link on IGP phy.\n");
|
|
|
|
|
|
- ret_val = igb_phy_has_link(hw,
|
|
|
- PHY_FORCE_LIMIT,
|
|
|
- 100000,
|
|
|
- &link);
|
|
|
+ ret_val = igb_phy_has_link(hw, PHY_FORCE_LIMIT, 100000, &link);
|
|
|
if (ret_val)
|
|
|
goto out;
|
|
|
|
|
@@ -1178,10 +1138,7 @@ s32 igb_phy_force_speed_duplex_igp(struct e1000_hw *hw)
|
|
|
hw_dbg("Link taking longer than expected.\n");
|
|
|
|
|
|
/* Try once more */
|
|
|
- ret_val = igb_phy_has_link(hw,
|
|
|
- PHY_FORCE_LIMIT,
|
|
|
- 100000,
|
|
|
- &link);
|
|
|
+ ret_val = igb_phy_has_link(hw, PHY_FORCE_LIMIT, 100000, &link);
|
|
|
if (ret_val)
|
|
|
goto out;
|
|
|
}
|
|
@@ -1209,8 +1166,7 @@ s32 igb_phy_force_speed_duplex_m88(struct e1000_hw *hw)
|
|
|
|
|
|
/* I210 and I211 devices support Auto-Crossover in forced operation. */
|
|
|
if (phy->type != e1000_phy_i210) {
|
|
|
- /*
|
|
|
- * Clear Auto-Crossover to force MDI manually. M88E1000
|
|
|
+ /* Clear Auto-Crossover to force MDI manually. M88E1000
|
|
|
* requires MDI forced whenever speed and duplex are forced.
|
|
|
*/
|
|
|
ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL,
|
|
@@ -1266,13 +1222,12 @@ s32 igb_phy_force_speed_duplex_m88(struct e1000_hw *hw)
|
|
|
if (!reset_dsp)
|
|
|
hw_dbg("Link taking longer than expected.\n");
|
|
|
else {
|
|
|
- /*
|
|
|
- * We didn't get link.
|
|
|
+ /* We didn't get link.
|
|
|
* Reset the DSP and cross our fingers.
|
|
|
*/
|
|
|
ret_val = phy->ops.write_reg(hw,
|
|
|
- M88E1000_PHY_PAGE_SELECT,
|
|
|
- 0x001d);
|
|
|
+ M88E1000_PHY_PAGE_SELECT,
|
|
|
+ 0x001d);
|
|
|
if (ret_val)
|
|
|
goto out;
|
|
|
ret_val = igb_phy_reset_dsp(hw);
|
|
@@ -1298,8 +1253,7 @@ s32 igb_phy_force_speed_duplex_m88(struct e1000_hw *hw)
|
|
|
if (ret_val)
|
|
|
goto out;
|
|
|
|
|
|
- /*
|
|
|
- * Resetting the phy means we need to re-force TX_CLK in the
|
|
|
+ /* Resetting the phy means we need to re-force TX_CLK in the
|
|
|
* Extended PHY Specific Control Register to 25MHz clock from
|
|
|
* the reset value of 2.5MHz.
|
|
|
*/
|
|
@@ -1308,8 +1262,7 @@ s32 igb_phy_force_speed_duplex_m88(struct e1000_hw *hw)
|
|
|
if (ret_val)
|
|
|
goto out;
|
|
|
|
|
|
- /*
|
|
|
- * In addition, we must re-enable CRS on Tx for both half and full
|
|
|
+ /* In addition, we must re-enable CRS on Tx for both half and full
|
|
|
* duplex.
|
|
|
*/
|
|
|
ret_val = phy->ops.read_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
|
|
@@ -1336,7 +1289,7 @@ out:
|
|
|
* take affect.
|
|
|
**/
|
|
|
static void igb_phy_force_speed_duplex_setup(struct e1000_hw *hw,
|
|
|
- u16 *phy_ctrl)
|
|
|
+ u16 *phy_ctrl)
|
|
|
{
|
|
|
struct e1000_mac_info *mac = &hw->mac;
|
|
|
u32 ctrl;
|
|
@@ -1417,8 +1370,7 @@ s32 igb_set_d3_lplu_state(struct e1000_hw *hw, bool active)
|
|
|
data);
|
|
|
if (ret_val)
|
|
|
goto out;
|
|
|
- /*
|
|
|
- * LPLU and SmartSpeed are mutually exclusive. LPLU is used
|
|
|
+ /* LPLU and SmartSpeed are mutually exclusive. LPLU is used
|
|
|
* during Dx states where the power conservation is most
|
|
|
* important. During driver activity we should enable
|
|
|
* SmartSpeed, so performance is maintained.
|
|
@@ -1461,13 +1413,13 @@ s32 igb_set_d3_lplu_state(struct e1000_hw *hw, bool active)
|
|
|
|
|
|
/* When LPLU is enabled, we should disable SmartSpeed */
|
|
|
ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
|
|
|
- &data);
|
|
|
+ &data);
|
|
|
if (ret_val)
|
|
|
goto out;
|
|
|
|
|
|
data &= ~IGP01E1000_PSCFR_SMART_SPEED;
|
|
|
ret_val = phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CONFIG,
|
|
|
- data);
|
|
|
+ data);
|
|
|
}
|
|
|
|
|
|
out:
|
|
@@ -1556,8 +1508,7 @@ static s32 igb_check_polarity_igp(struct e1000_hw *hw)
|
|
|
s32 ret_val;
|
|
|
u16 data, offset, mask;
|
|
|
|
|
|
- /*
|
|
|
- * Polarity is determined based on the speed of
|
|
|
+ /* Polarity is determined based on the speed of
|
|
|
* our connection.
|
|
|
*/
|
|
|
ret_val = phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_STATUS, &data);
|
|
@@ -1569,8 +1520,7 @@ static s32 igb_check_polarity_igp(struct e1000_hw *hw)
|
|
|
offset = IGP01E1000_PHY_PCS_INIT_REG;
|
|
|
mask = IGP01E1000_PHY_POLARITY_MASK;
|
|
|
} else {
|
|
|
- /*
|
|
|
- * This really only applies to 10Mbps since
|
|
|
+ /* This really only applies to 10Mbps since
|
|
|
* there is no polarity for 100Mbps (always 0).
|
|
|
*/
|
|
|
offset = IGP01E1000_PHY_PORT_STATUS;
|
|
@@ -1589,7 +1539,7 @@ out:
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * igb_wait_autoneg - Wait for auto-neg compeletion
|
|
|
+ * igb_wait_autoneg - Wait for auto-neg completion
|
|
|
* @hw: pointer to the HW structure
|
|
|
*
|
|
|
* Waits for auto-negotiation to complete or for the auto-negotiation time
|
|
@@ -1613,8 +1563,7 @@ static s32 igb_wait_autoneg(struct e1000_hw *hw)
|
|
|
msleep(100);
|
|
|
}
|
|
|
|
|
|
- /*
|
|
|
- * PHY_AUTO_NEG_TIME expiration doesn't guarantee auto-negotiation
|
|
|
+ /* PHY_AUTO_NEG_TIME expiration doesn't guarantee auto-negotiation
|
|
|
* has completed.
|
|
|
*/
|
|
|
return ret_val;
|
|
@@ -1630,21 +1579,19 @@ static s32 igb_wait_autoneg(struct e1000_hw *hw)
|
|
|
* Polls the PHY status register for link, 'iterations' number of times.
|
|
|
**/
|
|
|
s32 igb_phy_has_link(struct e1000_hw *hw, u32 iterations,
|
|
|
- u32 usec_interval, bool *success)
|
|
|
+ u32 usec_interval, bool *success)
|
|
|
{
|
|
|
s32 ret_val = 0;
|
|
|
u16 i, phy_status;
|
|
|
|
|
|
for (i = 0; i < iterations; i++) {
|
|
|
- /*
|
|
|
- * Some PHYs require the PHY_STATUS register to be read
|
|
|
+ /* Some PHYs require the PHY_STATUS register to be read
|
|
|
* twice due to the link bit being sticky. No harm doing
|
|
|
* it across the board.
|
|
|
*/
|
|
|
ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status);
|
|
|
if (ret_val) {
|
|
|
- /*
|
|
|
- * If the first read fails, another entity may have
|
|
|
+ /* If the first read fails, another entity may have
|
|
|
* ownership of the resources, wait and try again to
|
|
|
* see if they have relinquished the resources yet.
|
|
|
*/
|
|
@@ -1735,6 +1682,7 @@ s32 igb_get_cable_length_m88_gen2(struct e1000_hw *hw)
|
|
|
phy->max_cable_length = phy_data / (is_cm ? 100 : 1);
|
|
|
phy->cable_length = phy_data / (is_cm ? 100 : 1);
|
|
|
break;
|
|
|
+ case M88E1545_E_PHY_ID:
|
|
|
case I347AT4_E_PHY_ID:
|
|
|
/* Remember the original page select and set it to 7 */
|
|
|
ret_val = phy->ops.read_reg(hw, I347AT4_PAGE_SELECT,
|
|
@@ -1834,10 +1782,10 @@ s32 igb_get_cable_length_igp_2(struct e1000_hw *hw)
|
|
|
u16 cur_agc_index, max_agc_index = 0;
|
|
|
u16 min_agc_index = IGP02E1000_CABLE_LENGTH_TABLE_SIZE - 1;
|
|
|
static const u16 agc_reg_array[IGP02E1000_PHY_CHANNEL_NUM] = {
|
|
|
- IGP02E1000_PHY_AGC_A,
|
|
|
- IGP02E1000_PHY_AGC_B,
|
|
|
- IGP02E1000_PHY_AGC_C,
|
|
|
- IGP02E1000_PHY_AGC_D
|
|
|
+ IGP02E1000_PHY_AGC_A,
|
|
|
+ IGP02E1000_PHY_AGC_B,
|
|
|
+ IGP02E1000_PHY_AGC_C,
|
|
|
+ IGP02E1000_PHY_AGC_D
|
|
|
};
|
|
|
|
|
|
/* Read the AGC registers for all channels */
|
|
@@ -1846,8 +1794,7 @@ s32 igb_get_cable_length_igp_2(struct e1000_hw *hw)
|
|
|
if (ret_val)
|
|
|
goto out;
|
|
|
|
|
|
- /*
|
|
|
- * Getting bits 15:9, which represent the combination of
|
|
|
+ /* Getting bits 15:9, which represent the combination of
|
|
|
* coarse and fine gain values. The result is a number
|
|
|
* that can be put into the lookup table to obtain the
|
|
|
* approximate cable length.
|
|
@@ -2167,15 +2114,13 @@ s32 igb_phy_init_script_igp3(struct e1000_hw *hw)
|
|
|
hw->phy.ops.write_reg(hw, 0x1796, 0x0008);
|
|
|
/* Change cg_icount + enable integbp for channels BCD */
|
|
|
hw->phy.ops.write_reg(hw, 0x1798, 0xD008);
|
|
|
- /*
|
|
|
- * Change cg_icount + enable integbp + change prop_factor_master
|
|
|
+ /* Change cg_icount + enable integbp + change prop_factor_master
|
|
|
* to 8 for channel A
|
|
|
*/
|
|
|
hw->phy.ops.write_reg(hw, 0x1898, 0xD918);
|
|
|
/* Disable AHT in Slave mode on channel A */
|
|
|
hw->phy.ops.write_reg(hw, 0x187A, 0x0800);
|
|
|
- /*
|
|
|
- * Enable LPLU and disable AN to 1000 in non-D0a states,
|
|
|
+ /* Enable LPLU and disable AN to 1000 in non-D0a states,
|
|
|
* Enable SPD+B2B
|
|
|
*/
|
|
|
hw->phy.ops.write_reg(hw, 0x0019, 0x008D);
|
|
@@ -2257,8 +2202,8 @@ static s32 igb_check_polarity_82580(struct e1000_hw *hw)
|
|
|
|
|
|
if (!ret_val)
|
|
|
phy->cable_polarity = (data & I82580_PHY_STATUS2_REV_POLARITY)
|
|
|
- ? e1000_rev_polarity_reversed
|
|
|
- : e1000_rev_polarity_normal;
|
|
|
+ ? e1000_rev_polarity_reversed
|
|
|
+ : e1000_rev_polarity_normal;
|
|
|
|
|
|
return ret_val;
|
|
|
}
|
|
@@ -2278,7 +2223,6 @@ s32 igb_phy_force_speed_duplex_82580(struct e1000_hw *hw)
|
|
|
u16 phy_data;
|
|
|
bool link;
|
|
|
|
|
|
-
|
|
|
ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_data);
|
|
|
if (ret_val)
|
|
|
goto out;
|
|
@@ -2289,8 +2233,7 @@ s32 igb_phy_force_speed_duplex_82580(struct e1000_hw *hw)
|
|
|
if (ret_val)
|
|
|
goto out;
|
|
|
|
|
|
- /*
|
|
|
- * Clear Auto-Crossover to force MDI manually. 82580 requires MDI
|
|
|
+ /* Clear Auto-Crossover to force MDI manually. 82580 requires MDI
|
|
|
* forced whenever speed and duplex are forced.
|
|
|
*/
|
|
|
ret_val = phy->ops.read_reg(hw, I82580_PHY_CTRL_2, &phy_data);
|
|
@@ -2310,10 +2253,7 @@ s32 igb_phy_force_speed_duplex_82580(struct e1000_hw *hw)
|
|
|
if (phy->autoneg_wait_to_complete) {
|
|
|
hw_dbg("Waiting for forced speed/duplex link on 82580 phy\n");
|
|
|
|
|
|
- ret_val = igb_phy_has_link(hw,
|
|
|
- PHY_FORCE_LIMIT,
|
|
|
- 100000,
|
|
|
- &link);
|
|
|
+ ret_val = igb_phy_has_link(hw, PHY_FORCE_LIMIT, 100000, &link);
|
|
|
if (ret_val)
|
|
|
goto out;
|
|
|
|
|
@@ -2321,10 +2261,7 @@ s32 igb_phy_force_speed_duplex_82580(struct e1000_hw *hw)
|
|
|
hw_dbg("Link taking longer than expected.\n");
|
|
|
|
|
|
/* Try once more */
|
|
|
- ret_val = igb_phy_has_link(hw,
|
|
|
- PHY_FORCE_LIMIT,
|
|
|
- 100000,
|
|
|
- &link);
|
|
|
+ ret_val = igb_phy_has_link(hw, PHY_FORCE_LIMIT, 100000, &link);
|
|
|
if (ret_val)
|
|
|
goto out;
|
|
|
}
|
|
@@ -2349,7 +2286,6 @@ s32 igb_get_phy_info_82580(struct e1000_hw *hw)
|
|
|
u16 data;
|
|
|
bool link;
|
|
|
|
|
|
-
|
|
|
ret_val = igb_phy_has_link(hw, 1, 0, &link);
|
|
|
if (ret_val)
|
|
|
goto out;
|
|
@@ -2383,12 +2319,12 @@ s32 igb_get_phy_info_82580(struct e1000_hw *hw)
|
|
|
goto out;
|
|
|
|
|
|
phy->local_rx = (data & SR_1000T_LOCAL_RX_STATUS)
|
|
|
- ? e1000_1000t_rx_status_ok
|
|
|
- : e1000_1000t_rx_status_not_ok;
|
|
|
+ ? e1000_1000t_rx_status_ok
|
|
|
+ : e1000_1000t_rx_status_not_ok;
|
|
|
|
|
|
phy->remote_rx = (data & SR_1000T_REMOTE_RX_STATUS)
|
|
|
- ? e1000_1000t_rx_status_ok
|
|
|
- : e1000_1000t_rx_status_not_ok;
|
|
|
+ ? e1000_1000t_rx_status_ok
|
|
|
+ : e1000_1000t_rx_status_not_ok;
|
|
|
} else {
|
|
|
phy->cable_length = E1000_CABLE_LENGTH_UNDEFINED;
|
|
|
phy->local_rx = e1000_1000t_rx_status_undefined;
|
|
@@ -2412,13 +2348,12 @@ s32 igb_get_cable_length_82580(struct e1000_hw *hw)
|
|
|
s32 ret_val;
|
|
|
u16 phy_data, length;
|
|
|
|
|
|
-
|
|
|
ret_val = phy->ops.read_reg(hw, I82580_PHY_DIAG_STATUS, &phy_data);
|
|
|
if (ret_val)
|
|
|
goto out;
|
|
|
|
|
|
length = (phy_data & I82580_DSTATUS_CABLE_LENGTH) >>
|
|
|
- I82580_DSTATUS_CABLE_LENGTH_SHIFT;
|
|
|
+ I82580_DSTATUS_CABLE_LENGTH_SHIFT;
|
|
|
|
|
|
if (length == E1000_CABLE_LENGTH_UNDEFINED)
|
|
|
ret_val = -E1000_ERR_PHY;
|