|
@@ -1719,30 +1719,10 @@ s32 igb_get_cable_length_m88_gen2(struct e1000_hw *hw)
|
|
|
u16 phy_data, phy_data2, index, default_page, is_cm;
|
|
|
|
|
|
switch (hw->phy.id) {
|
|
|
- case I210_I_PHY_ID:
|
|
|
- /* Get cable length from PHY Cable Diagnostics Control Reg */
|
|
|
- ret_val = phy->ops.read_reg(hw, (0x7 << GS40G_PAGE_SHIFT) +
|
|
|
- (I347AT4_PCDL + phy->addr),
|
|
|
- &phy_data);
|
|
|
- if (ret_val)
|
|
|
- return ret_val;
|
|
|
-
|
|
|
- /* Check if the unit of cable length is meters or cm */
|
|
|
- ret_val = phy->ops.read_reg(hw, (0x7 << GS40G_PAGE_SHIFT) +
|
|
|
- I347AT4_PCDC, &phy_data2);
|
|
|
- if (ret_val)
|
|
|
- return ret_val;
|
|
|
-
|
|
|
- is_cm = !(phy_data2 & I347AT4_PCDC_CABLE_LENGTH_UNIT);
|
|
|
-
|
|
|
- /* Populate the phy structure with cable length in meters */
|
|
|
- phy->min_cable_length = phy_data / (is_cm ? 100 : 1);
|
|
|
- phy->max_cable_length = phy_data / (is_cm ? 100 : 1);
|
|
|
- phy->cable_length = phy_data / (is_cm ? 100 : 1);
|
|
|
- break;
|
|
|
case M88E1543_E_PHY_ID:
|
|
|
case M88E1512_E_PHY_ID:
|
|
|
case I347AT4_E_PHY_ID:
|
|
|
+ case I210_I_PHY_ID:
|
|
|
/* Remember the original page select and set it to 7 */
|
|
|
ret_val = phy->ops.read_reg(hw, I347AT4_PAGE_SELECT,
|
|
|
&default_page);
|
|
@@ -2587,66 +2567,6 @@ out:
|
|
|
return ret_val;
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * igb_write_phy_reg_gs40g - Write GS40G PHY register
|
|
|
- * @hw: pointer to the HW structure
|
|
|
- * @offset: lower half is register offset to write to
|
|
|
- * upper half is page to use.
|
|
|
- * @data: data to write at register offset
|
|
|
- *
|
|
|
- * Acquires semaphore, if necessary, then writes the data to PHY register
|
|
|
- * at the offset. Release any acquired semaphores before exiting.
|
|
|
- **/
|
|
|
-s32 igb_write_phy_reg_gs40g(struct e1000_hw *hw, u32 offset, u16 data)
|
|
|
-{
|
|
|
- s32 ret_val;
|
|
|
- u16 page = offset >> GS40G_PAGE_SHIFT;
|
|
|
-
|
|
|
- offset = offset & GS40G_OFFSET_MASK;
|
|
|
- ret_val = hw->phy.ops.acquire(hw);
|
|
|
- if (ret_val)
|
|
|
- return ret_val;
|
|
|
-
|
|
|
- ret_val = igb_write_phy_reg_mdic(hw, GS40G_PAGE_SELECT, page);
|
|
|
- if (ret_val)
|
|
|
- goto release;
|
|
|
- ret_val = igb_write_phy_reg_mdic(hw, offset, data);
|
|
|
-
|
|
|
-release:
|
|
|
- hw->phy.ops.release(hw);
|
|
|
- return ret_val;
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * igb_read_phy_reg_gs40g - Read GS40G PHY register
|
|
|
- * @hw: pointer to the HW structure
|
|
|
- * @offset: lower half is register offset to read to
|
|
|
- * upper half is page to use.
|
|
|
- * @data: data to read at register offset
|
|
|
- *
|
|
|
- * Acquires semaphore, if necessary, then reads the data in the PHY register
|
|
|
- * at the offset. Release any acquired semaphores before exiting.
|
|
|
- **/
|
|
|
-s32 igb_read_phy_reg_gs40g(struct e1000_hw *hw, u32 offset, u16 *data)
|
|
|
-{
|
|
|
- s32 ret_val;
|
|
|
- u16 page = offset >> GS40G_PAGE_SHIFT;
|
|
|
-
|
|
|
- offset = offset & GS40G_OFFSET_MASK;
|
|
|
- ret_val = hw->phy.ops.acquire(hw);
|
|
|
- if (ret_val)
|
|
|
- return ret_val;
|
|
|
-
|
|
|
- ret_val = igb_write_phy_reg_mdic(hw, GS40G_PAGE_SELECT, page);
|
|
|
- if (ret_val)
|
|
|
- goto release;
|
|
|
- ret_val = igb_read_phy_reg_mdic(hw, offset, data);
|
|
|
-
|
|
|
-release:
|
|
|
- hw->phy.ops.release(hw);
|
|
|
- return ret_val;
|
|
|
-}
|
|
|
-
|
|
|
/**
|
|
|
* igb_set_master_slave_mode - Setup PHY for Master/slave mode
|
|
|
* @hw: pointer to the HW structure
|