Lines Matching refs:hw

24 static s32 e1000_wait_autoneg(struct e1000_hw *hw);
25 static s32 e1000_access_phy_wakeup_reg_bm(struct e1000_hw *hw, u32 offset,
28 static s32 e1000_access_phy_debug_regs_hv(struct e1000_hw *hw, u32 offset,
61 s32 e1000e_check_reset_block_generic(struct e1000_hw *hw) in e1000e_check_reset_block_generic() argument
77 s32 e1000e_get_phy_id(struct e1000_hw *hw) in e1000e_get_phy_id() argument
79 struct e1000_phy_info *phy = &hw->phy; in e1000e_get_phy_id()
88 ret_val = e1e_rphy(hw, MII_PHYSID1, &phy_id); in e1000e_get_phy_id()
94 ret_val = e1e_rphy(hw, MII_PHYSID2, &phy_id); in e1000e_get_phy_id()
116 s32 e1000e_phy_reset_dsp(struct e1000_hw *hw) in e1000e_phy_reset_dsp() argument
120 ret_val = e1e_wphy(hw, M88E1000_PHY_GEN_CONTROL, 0xC1); in e1000e_phy_reset_dsp()
124 return e1e_wphy(hw, M88E1000_PHY_GEN_CONTROL, 0); in e1000e_phy_reset_dsp()
136 s32 e1000e_read_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 *data) in e1000e_read_phy_reg_mdic() argument
138 struct e1000_phy_info *phy = &hw->phy; in e1000e_read_phy_reg_mdic()
185 if (hw->mac.type == e1000_pch2lan) in e1000e_read_phy_reg_mdic()
199 s32 e1000e_write_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 data) in e1000e_write_phy_reg_mdic() argument
201 struct e1000_phy_info *phy = &hw->phy; in e1000e_write_phy_reg_mdic()
248 if (hw->mac.type == e1000_pch2lan) in e1000e_write_phy_reg_mdic()
264 s32 e1000e_read_phy_reg_m88(struct e1000_hw *hw, u32 offset, u16 *data) in e1000e_read_phy_reg_m88() argument
268 ret_val = hw->phy.ops.acquire(hw); in e1000e_read_phy_reg_m88()
272 ret_val = e1000e_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset, in e1000e_read_phy_reg_m88()
275 hw->phy.ops.release(hw); in e1000e_read_phy_reg_m88()
289 s32 e1000e_write_phy_reg_m88(struct e1000_hw *hw, u32 offset, u16 data) in e1000e_write_phy_reg_m88() argument
293 ret_val = hw->phy.ops.acquire(hw); in e1000e_write_phy_reg_m88()
297 ret_val = e1000e_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset, in e1000e_write_phy_reg_m88()
300 hw->phy.ops.release(hw); in e1000e_write_phy_reg_m88()
314 s32 e1000_set_page_igp(struct e1000_hw *hw, u16 page) in e1000_set_page_igp() argument
318 hw->phy.addr = 1; in e1000_set_page_igp()
320 return e1000e_write_phy_reg_mdic(hw, IGP01E1000_PHY_PAGE_SELECT, page); in e1000_set_page_igp()
334 static s32 __e1000e_read_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 *data, in __e1000e_read_phy_reg_igp() argument
340 if (!hw->phy.ops.acquire) in __e1000e_read_phy_reg_igp()
343 ret_val = hw->phy.ops.acquire(hw); in __e1000e_read_phy_reg_igp()
349 ret_val = e1000e_write_phy_reg_mdic(hw, in __e1000e_read_phy_reg_igp()
353 ret_val = e1000e_read_phy_reg_mdic(hw, in __e1000e_read_phy_reg_igp()
357 hw->phy.ops.release(hw); in __e1000e_read_phy_reg_igp()
372 s32 e1000e_read_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 *data) in e1000e_read_phy_reg_igp() argument
374 return __e1000e_read_phy_reg_igp(hw, offset, data, false); in e1000e_read_phy_reg_igp()
386 s32 e1000e_read_phy_reg_igp_locked(struct e1000_hw *hw, u32 offset, u16 *data) in e1000e_read_phy_reg_igp_locked() argument
388 return __e1000e_read_phy_reg_igp(hw, offset, data, true); in e1000e_read_phy_reg_igp_locked()
401 static s32 __e1000e_write_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 data, in __e1000e_write_phy_reg_igp() argument
407 if (!hw->phy.ops.acquire) in __e1000e_write_phy_reg_igp()
410 ret_val = hw->phy.ops.acquire(hw); in __e1000e_write_phy_reg_igp()
416 ret_val = e1000e_write_phy_reg_mdic(hw, in __e1000e_write_phy_reg_igp()
420 ret_val = e1000e_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & in __e1000e_write_phy_reg_igp()
423 hw->phy.ops.release(hw); in __e1000e_write_phy_reg_igp()
437 s32 e1000e_write_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 data) in e1000e_write_phy_reg_igp() argument
439 return __e1000e_write_phy_reg_igp(hw, offset, data, false); in e1000e_write_phy_reg_igp()
451 s32 e1000e_write_phy_reg_igp_locked(struct e1000_hw *hw, u32 offset, u16 data) in e1000e_write_phy_reg_igp_locked() argument
453 return __e1000e_write_phy_reg_igp(hw, offset, data, true); in e1000e_write_phy_reg_igp_locked()
467 static s32 __e1000_read_kmrn_reg(struct e1000_hw *hw, u32 offset, u16 *data, in __e1000_read_kmrn_reg() argument
475 if (!hw->phy.ops.acquire) in __e1000_read_kmrn_reg()
478 ret_val = hw->phy.ops.acquire(hw); in __e1000_read_kmrn_reg()
494 hw->phy.ops.release(hw); in __e1000_read_kmrn_reg()
509 s32 e1000e_read_kmrn_reg(struct e1000_hw *hw, u32 offset, u16 *data) in e1000e_read_kmrn_reg() argument
511 return __e1000_read_kmrn_reg(hw, offset, data, false); in e1000e_read_kmrn_reg()
524 s32 e1000e_read_kmrn_reg_locked(struct e1000_hw *hw, u32 offset, u16 *data) in e1000e_read_kmrn_reg_locked() argument
526 return __e1000_read_kmrn_reg(hw, offset, data, true); in e1000e_read_kmrn_reg_locked()
540 static s32 __e1000_write_kmrn_reg(struct e1000_hw *hw, u32 offset, u16 data, in __e1000_write_kmrn_reg() argument
548 if (!hw->phy.ops.acquire) in __e1000_write_kmrn_reg()
551 ret_val = hw->phy.ops.acquire(hw); in __e1000_write_kmrn_reg()
564 hw->phy.ops.release(hw); in __e1000_write_kmrn_reg()
578 s32 e1000e_write_kmrn_reg(struct e1000_hw *hw, u32 offset, u16 data) in e1000e_write_kmrn_reg() argument
580 return __e1000_write_kmrn_reg(hw, offset, data, false); in e1000e_write_kmrn_reg()
592 s32 e1000e_write_kmrn_reg_locked(struct e1000_hw *hw, u32 offset, u16 data) in e1000e_write_kmrn_reg_locked() argument
594 return __e1000_write_kmrn_reg(hw, offset, data, true); in e1000e_write_kmrn_reg_locked()
603 static s32 e1000_set_master_slave_mode(struct e1000_hw *hw) in e1000_set_master_slave_mode() argument
609 ret_val = e1e_rphy(hw, MII_CTRL1000, &phy_data); in e1000_set_master_slave_mode()
614 hw->phy.original_ms_type = (phy_data & CTL1000_ENABLE_MASTER) ? in e1000_set_master_slave_mode()
618 switch (hw->phy.ms_type) { in e1000_set_master_slave_mode()
633 return e1e_wphy(hw, MII_CTRL1000, phy_data); in e1000_set_master_slave_mode()
642 s32 e1000_copper_link_setup_82577(struct e1000_hw *hw) in e1000_copper_link_setup_82577() argument
648 ret_val = e1e_rphy(hw, I82577_CFG_REG, &phy_data); in e1000_copper_link_setup_82577()
657 ret_val = e1e_wphy(hw, I82577_CFG_REG, phy_data); in e1000_copper_link_setup_82577()
662 ret_val = e1e_rphy(hw, I82577_PHY_CTRL_2, &phy_data); in e1000_copper_link_setup_82577()
671 switch (hw->phy.mdix) { in e1000_copper_link_setup_82577()
682 ret_val = e1e_wphy(hw, I82577_PHY_CTRL_2, phy_data); in e1000_copper_link_setup_82577()
686 return e1000_set_master_slave_mode(hw); in e1000_copper_link_setup_82577()
696 s32 e1000e_copper_link_setup_m88(struct e1000_hw *hw) in e1000e_copper_link_setup_m88() argument
698 struct e1000_phy_info *phy = &hw->phy; in e1000e_copper_link_setup_m88()
703 ret_val = e1e_rphy(hw, M88E1000_PHY_SPEC_CTRL, &phy_data); in e1000e_copper_link_setup_m88()
751 ret_val = e1e_wphy(hw, M88E1000_PHY_SPEC_CTRL, in e1000e_copper_link_setup_m88()
756 ret_val = phy->ops.commit(hw); in e1000e_copper_link_setup_m88()
766 ret_val = e1e_wphy(hw, M88E1000_PHY_SPEC_CTRL, phy_data); in e1000e_copper_link_setup_m88()
776 ret_val = e1e_rphy(hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_data); in e1000e_copper_link_setup_m88()
793 ret_val = e1e_wphy(hw, M88E1000_EXT_PHY_SPEC_CTRL, phy_data); in e1000e_copper_link_setup_m88()
800 ret_val = e1e_wphy(hw, 29, 0x0003); in e1000e_copper_link_setup_m88()
805 ret_val = e1e_wphy(hw, 30, 0x0000); in e1000e_copper_link_setup_m88()
812 ret_val = phy->ops.commit(hw); in e1000e_copper_link_setup_m88()
820 ret_val = e1e_rphy(hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_data); in e1000e_copper_link_setup_m88()
827 ret_val = e1e_wphy(hw, M88E1000_EXT_PHY_SPEC_CTRL, phy_data); in e1000e_copper_link_setup_m88()
842 s32 e1000e_copper_link_setup_igp(struct e1000_hw *hw) in e1000e_copper_link_setup_igp() argument
844 struct e1000_phy_info *phy = &hw->phy; in e1000e_copper_link_setup_igp()
848 ret_val = e1000_phy_hw_reset(hw); in e1000e_copper_link_setup_igp()
860 if (hw->phy.ops.set_d0_lplu_state) { in e1000e_copper_link_setup_igp()
861 ret_val = hw->phy.ops.set_d0_lplu_state(hw, false); in e1000e_copper_link_setup_igp()
868 ret_val = e1e_rphy(hw, IGP01E1000_PHY_PORT_CTRL, &data); in e1000e_copper_link_setup_igp()
886 ret_val = e1e_wphy(hw, IGP01E1000_PHY_PORT_CTRL, data); in e1000e_copper_link_setup_igp()
891 if (hw->mac.autoneg) { in e1000e_copper_link_setup_igp()
898 ret_val = e1e_rphy(hw, IGP01E1000_PHY_PORT_CONFIG, in e1000e_copper_link_setup_igp()
904 ret_val = e1e_wphy(hw, IGP01E1000_PHY_PORT_CONFIG, in e1000e_copper_link_setup_igp()
910 ret_val = e1e_rphy(hw, MII_CTRL1000, &data); in e1000e_copper_link_setup_igp()
915 ret_val = e1e_wphy(hw, MII_CTRL1000, data); in e1000e_copper_link_setup_igp()
920 ret_val = e1000_set_master_slave_mode(hw); in e1000e_copper_link_setup_igp()
935 static s32 e1000_phy_setup_autoneg(struct e1000_hw *hw) in e1000_phy_setup_autoneg() argument
937 struct e1000_phy_info *phy = &hw->phy; in e1000_phy_setup_autoneg()
945 ret_val = e1e_rphy(hw, MII_ADVERTISE, &mii_autoneg_adv_reg); in e1000_phy_setup_autoneg()
951 ret_val = e1e_rphy(hw, MII_CTRL1000, &mii_1000t_ctrl_reg); in e1000_phy_setup_autoneg()
1025 switch (hw->fc.current_mode) { in e1000_phy_setup_autoneg()
1065 ret_val = e1e_wphy(hw, MII_ADVERTISE, mii_autoneg_adv_reg); in e1000_phy_setup_autoneg()
1072 ret_val = e1e_wphy(hw, MII_CTRL1000, mii_1000t_ctrl_reg); in e1000_phy_setup_autoneg()
1086 static s32 e1000_copper_link_autoneg(struct e1000_hw *hw) in e1000_copper_link_autoneg() argument
1088 struct e1000_phy_info *phy = &hw->phy; in e1000_copper_link_autoneg()
1104 ret_val = e1000_phy_setup_autoneg(hw); in e1000_copper_link_autoneg()
1114 ret_val = e1e_rphy(hw, MII_BMCR, &phy_ctrl); in e1000_copper_link_autoneg()
1119 ret_val = e1e_wphy(hw, MII_BMCR, phy_ctrl); in e1000_copper_link_autoneg()
1127 ret_val = e1000_wait_autoneg(hw); in e1000_copper_link_autoneg()
1134 hw->mac.get_link_status = true; in e1000_copper_link_autoneg()
1148 s32 e1000e_setup_copper_link(struct e1000_hw *hw) in e1000e_setup_copper_link() argument
1153 if (hw->mac.autoneg) { in e1000e_setup_copper_link()
1157 ret_val = e1000_copper_link_autoneg(hw); in e1000e_setup_copper_link()
1165 ret_val = hw->phy.ops.force_speed_duplex(hw); in e1000e_setup_copper_link()
1175 ret_val = e1000e_phy_has_link_generic(hw, COPPER_LINK_UP_LIMIT, 10, in e1000e_setup_copper_link()
1182 hw->mac.ops.config_collision_dist(hw); in e1000e_setup_copper_link()
1183 ret_val = e1000e_config_fc_after_link_up(hw); in e1000e_setup_copper_link()
1199 s32 e1000e_phy_force_speed_duplex_igp(struct e1000_hw *hw) in e1000e_phy_force_speed_duplex_igp() argument
1201 struct e1000_phy_info *phy = &hw->phy; in e1000e_phy_force_speed_duplex_igp()
1206 ret_val = e1e_rphy(hw, MII_BMCR, &phy_data); in e1000e_phy_force_speed_duplex_igp()
1210 e1000e_phy_force_speed_duplex_setup(hw, &phy_data); in e1000e_phy_force_speed_duplex_igp()
1212 ret_val = e1e_wphy(hw, MII_BMCR, phy_data); in e1000e_phy_force_speed_duplex_igp()
1219 ret_val = e1e_rphy(hw, IGP01E1000_PHY_PORT_CTRL, &phy_data); in e1000e_phy_force_speed_duplex_igp()
1226 ret_val = e1e_wphy(hw, IGP01E1000_PHY_PORT_CTRL, phy_data); in e1000e_phy_force_speed_duplex_igp()
1237 ret_val = e1000e_phy_has_link_generic(hw, PHY_FORCE_LIMIT, in e1000e_phy_force_speed_duplex_igp()
1246 ret_val = e1000e_phy_has_link_generic(hw, PHY_FORCE_LIMIT, in e1000e_phy_force_speed_duplex_igp()
1263 s32 e1000e_phy_force_speed_duplex_m88(struct e1000_hw *hw) in e1000e_phy_force_speed_duplex_m88() argument
1265 struct e1000_phy_info *phy = &hw->phy; in e1000e_phy_force_speed_duplex_m88()
1273 ret_val = e1e_rphy(hw, M88E1000_PHY_SPEC_CTRL, &phy_data); in e1000e_phy_force_speed_duplex_m88()
1278 ret_val = e1e_wphy(hw, M88E1000_PHY_SPEC_CTRL, phy_data); in e1000e_phy_force_speed_duplex_m88()
1284 ret_val = e1e_rphy(hw, MII_BMCR, &phy_data); in e1000e_phy_force_speed_duplex_m88()
1288 e1000e_phy_force_speed_duplex_setup(hw, &phy_data); in e1000e_phy_force_speed_duplex_m88()
1290 ret_val = e1e_wphy(hw, MII_BMCR, phy_data); in e1000e_phy_force_speed_duplex_m88()
1295 if (hw->phy.ops.commit) { in e1000e_phy_force_speed_duplex_m88()
1296 ret_val = hw->phy.ops.commit(hw); in e1000e_phy_force_speed_duplex_m88()
1304 ret_val = e1000e_phy_has_link_generic(hw, PHY_FORCE_LIMIT, in e1000e_phy_force_speed_duplex_m88()
1310 if (hw->phy.type != e1000_phy_m88) { in e1000e_phy_force_speed_duplex_m88()
1316 ret_val = e1e_wphy(hw, M88E1000_PHY_PAGE_SELECT, in e1000e_phy_force_speed_duplex_m88()
1320 ret_val = e1000e_phy_reset_dsp(hw); in e1000e_phy_force_speed_duplex_m88()
1327 ret_val = e1000e_phy_has_link_generic(hw, PHY_FORCE_LIMIT, in e1000e_phy_force_speed_duplex_m88()
1333 if (hw->phy.type != e1000_phy_m88) in e1000e_phy_force_speed_duplex_m88()
1336 ret_val = e1e_rphy(hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_data); in e1000e_phy_force_speed_duplex_m88()
1345 ret_val = e1e_wphy(hw, M88E1000_EXT_PHY_SPEC_CTRL, phy_data); in e1000e_phy_force_speed_duplex_m88()
1352 ret_val = e1e_rphy(hw, M88E1000_PHY_SPEC_CTRL, &phy_data); in e1000e_phy_force_speed_duplex_m88()
1357 ret_val = e1e_wphy(hw, M88E1000_PHY_SPEC_CTRL, phy_data); in e1000e_phy_force_speed_duplex_m88()
1370 s32 e1000_phy_force_speed_duplex_ife(struct e1000_hw *hw) in e1000_phy_force_speed_duplex_ife() argument
1372 struct e1000_phy_info *phy = &hw->phy; in e1000_phy_force_speed_duplex_ife()
1377 ret_val = e1e_rphy(hw, MII_BMCR, &data); in e1000_phy_force_speed_duplex_ife()
1381 e1000e_phy_force_speed_duplex_setup(hw, &data); in e1000_phy_force_speed_duplex_ife()
1383 ret_val = e1e_wphy(hw, MII_BMCR, data); in e1000_phy_force_speed_duplex_ife()
1388 ret_val = e1e_rphy(hw, IFE_PHY_MDIX_CONTROL, &data); in e1000_phy_force_speed_duplex_ife()
1395 ret_val = e1e_wphy(hw, IFE_PHY_MDIX_CONTROL, data); in e1000_phy_force_speed_duplex_ife()
1406 ret_val = e1000e_phy_has_link_generic(hw, PHY_FORCE_LIMIT, in e1000_phy_force_speed_duplex_ife()
1415 ret_val = e1000e_phy_has_link_generic(hw, PHY_FORCE_LIMIT, in e1000_phy_force_speed_duplex_ife()
1436 void e1000e_phy_force_speed_duplex_setup(struct e1000_hw *hw, u16 *phy_ctrl) in e1000e_phy_force_speed_duplex_setup() argument
1438 struct e1000_mac_info *mac = &hw->mac; in e1000e_phy_force_speed_duplex_setup()
1442 hw->fc.current_mode = e1000_fc_none; in e1000e_phy_force_speed_duplex_setup()
1478 hw->mac.ops.config_collision_dist(hw); in e1000e_phy_force_speed_duplex_setup()
1497 s32 e1000e_set_d3_lplu_state(struct e1000_hw *hw, bool active) in e1000e_set_d3_lplu_state() argument
1499 struct e1000_phy_info *phy = &hw->phy; in e1000e_set_d3_lplu_state()
1503 ret_val = e1e_rphy(hw, IGP02E1000_PHY_POWER_MGMT, &data); in e1000e_set_d3_lplu_state()
1509 ret_val = e1e_wphy(hw, IGP02E1000_PHY_POWER_MGMT, data); in e1000e_set_d3_lplu_state()
1518 ret_val = e1e_rphy(hw, IGP01E1000_PHY_PORT_CONFIG, in e1000e_set_d3_lplu_state()
1524 ret_val = e1e_wphy(hw, IGP01E1000_PHY_PORT_CONFIG, in e1000e_set_d3_lplu_state()
1529 ret_val = e1e_rphy(hw, IGP01E1000_PHY_PORT_CONFIG, in e1000e_set_d3_lplu_state()
1535 ret_val = e1e_wphy(hw, IGP01E1000_PHY_PORT_CONFIG, in e1000e_set_d3_lplu_state()
1544 ret_val = e1e_wphy(hw, IGP02E1000_PHY_POWER_MGMT, data); in e1000e_set_d3_lplu_state()
1549 ret_val = e1e_rphy(hw, IGP01E1000_PHY_PORT_CONFIG, &data); in e1000e_set_d3_lplu_state()
1554 ret_val = e1e_wphy(hw, IGP01E1000_PHY_PORT_CONFIG, data); in e1000e_set_d3_lplu_state()
1568 s32 e1000e_check_downshift(struct e1000_hw *hw) in e1000e_check_downshift() argument
1570 struct e1000_phy_info *phy = &hw->phy; in e1000e_check_downshift()
1593 ret_val = e1e_rphy(hw, offset, &phy_data); in e1000e_check_downshift()
1609 s32 e1000_check_polarity_m88(struct e1000_hw *hw) in e1000_check_polarity_m88() argument
1611 struct e1000_phy_info *phy = &hw->phy; in e1000_check_polarity_m88()
1615 ret_val = e1e_rphy(hw, M88E1000_PHY_SPEC_STATUS, &data); in e1000_check_polarity_m88()
1634 s32 e1000_check_polarity_igp(struct e1000_hw *hw) in e1000_check_polarity_igp() argument
1636 struct e1000_phy_info *phy = &hw->phy; in e1000_check_polarity_igp()
1643 ret_val = e1e_rphy(hw, IGP01E1000_PHY_PORT_STATUS, &data); in e1000_check_polarity_igp()
1659 ret_val = e1e_rphy(hw, offset, &data); in e1000_check_polarity_igp()
1675 s32 e1000_check_polarity_ife(struct e1000_hw *hw) in e1000_check_polarity_ife() argument
1677 struct e1000_phy_info *phy = &hw->phy; in e1000_check_polarity_ife()
1691 ret_val = e1e_rphy(hw, offset, &phy_data); in e1000_check_polarity_ife()
1708 static s32 e1000_wait_autoneg(struct e1000_hw *hw) in e1000_wait_autoneg() argument
1715 ret_val = e1e_rphy(hw, MII_BMSR, &phy_status); in e1000_wait_autoneg()
1718 ret_val = e1e_rphy(hw, MII_BMSR, &phy_status); in e1000_wait_autoneg()
1741 s32 e1000e_phy_has_link_generic(struct e1000_hw *hw, u32 iterations, in e1000e_phy_has_link_generic() argument
1752 ret_val = e1e_rphy(hw, MII_BMSR, &phy_status); in e1000e_phy_has_link_generic()
1763 ret_val = e1e_rphy(hw, MII_BMSR, &phy_status); in e1000e_phy_has_link_generic()
1794 s32 e1000e_get_cable_length_m88(struct e1000_hw *hw) in e1000e_get_cable_length_m88() argument
1796 struct e1000_phy_info *phy = &hw->phy; in e1000e_get_cable_length_m88()
1800 ret_val = e1e_rphy(hw, M88E1000_PHY_SPEC_STATUS, &phy_data); in e1000e_get_cable_length_m88()
1829 s32 e1000e_get_cable_length_igp_2(struct e1000_hw *hw) in e1000e_get_cable_length_igp_2() argument
1831 struct e1000_phy_info *phy = &hw->phy; in e1000e_get_cable_length_igp_2()
1845 ret_val = e1e_rphy(hw, agc_reg_array[i], &phy_data); in e1000e_get_cable_length_igp_2()
1897 s32 e1000e_get_phy_info_m88(struct e1000_hw *hw) in e1000e_get_phy_info_m88() argument
1899 struct e1000_phy_info *phy = &hw->phy; in e1000e_get_phy_info_m88()
1909 ret_val = e1000e_phy_has_link_generic(hw, 1, 0, &link); in e1000e_get_phy_info_m88()
1918 ret_val = e1e_rphy(hw, M88E1000_PHY_SPEC_CTRL, &phy_data); in e1000e_get_phy_info_m88()
1925 ret_val = e1000_check_polarity_m88(hw); in e1000e_get_phy_info_m88()
1929 ret_val = e1e_rphy(hw, M88E1000_PHY_SPEC_STATUS, &phy_data); in e1000e_get_phy_info_m88()
1936 ret_val = hw->phy.ops.get_cable_length(hw); in e1000e_get_phy_info_m88()
1940 ret_val = e1e_rphy(hw, MII_STAT1000, &phy_data); in e1000e_get_phy_info_m88()
1968 s32 e1000e_get_phy_info_igp(struct e1000_hw *hw) in e1000e_get_phy_info_igp() argument
1970 struct e1000_phy_info *phy = &hw->phy; in e1000e_get_phy_info_igp()
1975 ret_val = e1000e_phy_has_link_generic(hw, 1, 0, &link); in e1000e_get_phy_info_igp()
1986 ret_val = e1000_check_polarity_igp(hw); in e1000e_get_phy_info_igp()
1990 ret_val = e1e_rphy(hw, IGP01E1000_PHY_PORT_STATUS, &data); in e1000e_get_phy_info_igp()
1998 ret_val = phy->ops.get_cable_length(hw); in e1000e_get_phy_info_igp()
2002 ret_val = e1e_rphy(hw, MII_STAT1000, &data); in e1000e_get_phy_info_igp()
2026 s32 e1000_get_phy_info_ife(struct e1000_hw *hw) in e1000_get_phy_info_ife() argument
2028 struct e1000_phy_info *phy = &hw->phy; in e1000_get_phy_info_ife()
2033 ret_val = e1000e_phy_has_link_generic(hw, 1, 0, &link); in e1000_get_phy_info_ife()
2042 ret_val = e1e_rphy(hw, IFE_PHY_SPECIAL_CONTROL, &data); in e1000_get_phy_info_ife()
2048 ret_val = e1000_check_polarity_ife(hw); in e1000_get_phy_info_ife()
2058 ret_val = e1e_rphy(hw, IFE_PHY_MDIX_CONTROL, &data); in e1000_get_phy_info_ife()
2079 s32 e1000e_phy_sw_reset(struct e1000_hw *hw) in e1000e_phy_sw_reset() argument
2084 ret_val = e1e_rphy(hw, MII_BMCR, &phy_ctrl); in e1000e_phy_sw_reset()
2089 ret_val = e1e_wphy(hw, MII_BMCR, phy_ctrl); in e1000e_phy_sw_reset()
2107 s32 e1000e_phy_hw_reset_generic(struct e1000_hw *hw) in e1000e_phy_hw_reset_generic() argument
2109 struct e1000_phy_info *phy = &hw->phy; in e1000e_phy_hw_reset_generic()
2114 ret_val = phy->ops.check_reset_block(hw); in e1000e_phy_hw_reset_generic()
2119 ret_val = phy->ops.acquire(hw); in e1000e_phy_hw_reset_generic()
2134 phy->ops.release(hw); in e1000e_phy_hw_reset_generic()
2136 return phy->ops.get_cfg_done(hw); in e1000e_phy_hw_reset_generic()
2146 s32 e1000e_get_cfg_done_generic(struct e1000_hw __always_unused *hw) in e1000e_get_cfg_done_generic() argument
2159 s32 e1000e_phy_init_script_igp3(struct e1000_hw *hw) in e1000e_phy_init_script_igp3() argument
2165 e1e_wphy(hw, 0x2F5B, 0x9018); in e1000e_phy_init_script_igp3()
2167 e1e_wphy(hw, 0x2F52, 0x0000); in e1000e_phy_init_script_igp3()
2169 e1e_wphy(hw, 0x2FB1, 0x8B24); in e1000e_phy_init_script_igp3()
2171 e1e_wphy(hw, 0x2FB2, 0xF8F0); in e1000e_phy_init_script_igp3()
2173 e1e_wphy(hw, 0x2010, 0x10B0); in e1000e_phy_init_script_igp3()
2175 e1e_wphy(hw, 0x2011, 0x0000); in e1000e_phy_init_script_igp3()
2177 e1e_wphy(hw, 0x20DD, 0x249A); in e1000e_phy_init_script_igp3()
2179 e1e_wphy(hw, 0x20DE, 0x00D3); in e1000e_phy_init_script_igp3()
2181 e1e_wphy(hw, 0x28B4, 0x04CE); in e1000e_phy_init_script_igp3()
2183 e1e_wphy(hw, 0x2F70, 0x29E4); in e1000e_phy_init_script_igp3()
2185 e1e_wphy(hw, 0x0000, 0x0140); in e1000e_phy_init_script_igp3()
2187 e1e_wphy(hw, 0x1F30, 0x1606); in e1000e_phy_init_script_igp3()
2189 e1e_wphy(hw, 0x1F31, 0xB814); in e1000e_phy_init_script_igp3()
2191 e1e_wphy(hw, 0x1F35, 0x002A); in e1000e_phy_init_script_igp3()
2193 e1e_wphy(hw, 0x1F3E, 0x0067); in e1000e_phy_init_script_igp3()
2195 e1e_wphy(hw, 0x1F54, 0x0065); in e1000e_phy_init_script_igp3()
2197 e1e_wphy(hw, 0x1F55, 0x002A); in e1000e_phy_init_script_igp3()
2199 e1e_wphy(hw, 0x1F56, 0x002A); in e1000e_phy_init_script_igp3()
2201 e1e_wphy(hw, 0x1F72, 0x3FB0); in e1000e_phy_init_script_igp3()
2203 e1e_wphy(hw, 0x1F76, 0xC0FF); in e1000e_phy_init_script_igp3()
2205 e1e_wphy(hw, 0x1F77, 0x1DEC); in e1000e_phy_init_script_igp3()
2207 e1e_wphy(hw, 0x1F78, 0xF9EF); in e1000e_phy_init_script_igp3()
2209 e1e_wphy(hw, 0x1F79, 0x0210); in e1000e_phy_init_script_igp3()
2211 e1e_wphy(hw, 0x1895, 0x0003); in e1000e_phy_init_script_igp3()
2213 e1e_wphy(hw, 0x1796, 0x0008); in e1000e_phy_init_script_igp3()
2215 e1e_wphy(hw, 0x1798, 0xD008); in e1000e_phy_init_script_igp3()
2219 e1e_wphy(hw, 0x1898, 0xD918); in e1000e_phy_init_script_igp3()
2221 e1e_wphy(hw, 0x187A, 0x0800); in e1000e_phy_init_script_igp3()
2225 e1e_wphy(hw, 0x0019, 0x008D); in e1000e_phy_init_script_igp3()
2227 e1e_wphy(hw, 0x001B, 0x2080); in e1000e_phy_init_script_igp3()
2229 e1e_wphy(hw, 0x0014, 0x0045); in e1000e_phy_init_script_igp3()
2231 e1e_wphy(hw, 0x0000, 0x1340); in e1000e_phy_init_script_igp3()
2298 s32 e1000e_determine_phy_address(struct e1000_hw *hw) in e1000e_determine_phy_address() argument
2304 hw->phy.id = phy_type; in e1000e_determine_phy_address()
2307 hw->phy.addr = phy_addr; in e1000e_determine_phy_address()
2311 e1000e_get_phy_id(hw); in e1000e_determine_phy_address()
2312 phy_type = e1000e_get_phy_type_from_id(hw->phy.id); in e1000e_determine_phy_address()
2353 s32 e1000e_write_phy_reg_bm(struct e1000_hw *hw, u32 offset, u16 data) in e1000e_write_phy_reg_bm() argument
2358 ret_val = hw->phy.ops.acquire(hw); in e1000e_write_phy_reg_bm()
2364 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, &data, in e1000e_write_phy_reg_bm()
2369 hw->phy.addr = e1000_get_phy_addr_for_bm_page(page, offset); in e1000e_write_phy_reg_bm()
2378 if (hw->phy.addr == 1) { in e1000e_write_phy_reg_bm()
2387 ret_val = e1000e_write_phy_reg_mdic(hw, page_select, in e1000e_write_phy_reg_bm()
2393 ret_val = e1000e_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset, in e1000e_write_phy_reg_bm()
2397 hw->phy.ops.release(hw); in e1000e_write_phy_reg_bm()
2411 s32 e1000e_read_phy_reg_bm(struct e1000_hw *hw, u32 offset, u16 *data) in e1000e_read_phy_reg_bm() argument
2416 ret_val = hw->phy.ops.acquire(hw); in e1000e_read_phy_reg_bm()
2422 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, data, in e1000e_read_phy_reg_bm()
2427 hw->phy.addr = e1000_get_phy_addr_for_bm_page(page, offset); in e1000e_read_phy_reg_bm()
2436 if (hw->phy.addr == 1) { in e1000e_read_phy_reg_bm()
2445 ret_val = e1000e_write_phy_reg_mdic(hw, page_select, in e1000e_read_phy_reg_bm()
2451 ret_val = e1000e_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset, in e1000e_read_phy_reg_bm()
2454 hw->phy.ops.release(hw); in e1000e_read_phy_reg_bm()
2468 s32 e1000e_read_phy_reg_bm2(struct e1000_hw *hw, u32 offset, u16 *data) in e1000e_read_phy_reg_bm2() argument
2473 ret_val = hw->phy.ops.acquire(hw); in e1000e_read_phy_reg_bm2()
2479 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, data, in e1000e_read_phy_reg_bm2()
2484 hw->phy.addr = 1; in e1000e_read_phy_reg_bm2()
2488 ret_val = e1000e_write_phy_reg_mdic(hw, BM_PHY_PAGE_SELECT, in e1000e_read_phy_reg_bm2()
2495 ret_val = e1000e_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset, in e1000e_read_phy_reg_bm2()
2498 hw->phy.ops.release(hw); in e1000e_read_phy_reg_bm2()
2511 s32 e1000e_write_phy_reg_bm2(struct e1000_hw *hw, u32 offset, u16 data) in e1000e_write_phy_reg_bm2() argument
2516 ret_val = hw->phy.ops.acquire(hw); in e1000e_write_phy_reg_bm2()
2522 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, &data, in e1000e_write_phy_reg_bm2()
2527 hw->phy.addr = 1; in e1000e_write_phy_reg_bm2()
2531 ret_val = e1000e_write_phy_reg_mdic(hw, BM_PHY_PAGE_SELECT, in e1000e_write_phy_reg_bm2()
2538 ret_val = e1000e_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset, in e1000e_write_phy_reg_bm2()
2542 hw->phy.ops.release(hw); in e1000e_write_phy_reg_bm2()
2554 s32 e1000_enable_phy_wakeup_reg_access_bm(struct e1000_hw *hw, u16 *phy_reg) in e1000_enable_phy_wakeup_reg_access_bm() argument
2560 hw->phy.addr = 1; in e1000_enable_phy_wakeup_reg_access_bm()
2563 ret_val = e1000_set_page_igp(hw, (BM_PORT_CTRL_PAGE << IGP_PAGE_SHIFT)); in e1000_enable_phy_wakeup_reg_access_bm()
2569 ret_val = e1000e_read_phy_reg_mdic(hw, BM_WUC_ENABLE_REG, phy_reg); in e1000_enable_phy_wakeup_reg_access_bm()
2583 ret_val = e1000e_write_phy_reg_mdic(hw, BM_WUC_ENABLE_REG, temp); in e1000_enable_phy_wakeup_reg_access_bm()
2593 return e1000_set_page_igp(hw, (BM_WUC_PAGE << IGP_PAGE_SHIFT)); in e1000_enable_phy_wakeup_reg_access_bm()
2607 s32 e1000_disable_phy_wakeup_reg_access_bm(struct e1000_hw *hw, u16 *phy_reg) in e1000_disable_phy_wakeup_reg_access_bm() argument
2612 ret_val = e1000_set_page_igp(hw, (BM_PORT_CTRL_PAGE << IGP_PAGE_SHIFT)); in e1000_disable_phy_wakeup_reg_access_bm()
2619 ret_val = e1000e_write_phy_reg_mdic(hw, BM_WUC_ENABLE_REG, *phy_reg); in e1000_disable_phy_wakeup_reg_access_bm()
2652 static s32 e1000_access_phy_wakeup_reg_bm(struct e1000_hw *hw, u32 offset, in e1000_access_phy_wakeup_reg_bm() argument
2661 if ((hw->mac.type == e1000_pchlan) && in e1000_access_phy_wakeup_reg_bm()
2668 ret_val = e1000_enable_phy_wakeup_reg_access_bm(hw, &phy_reg); in e1000_access_phy_wakeup_reg_bm()
2678 ret_val = e1000e_write_phy_reg_mdic(hw, BM_WUC_ADDRESS_OPCODE, reg); in e1000_access_phy_wakeup_reg_bm()
2686 ret_val = e1000e_read_phy_reg_mdic(hw, BM_WUC_DATA_OPCODE, in e1000_access_phy_wakeup_reg_bm()
2690 ret_val = e1000e_write_phy_reg_mdic(hw, BM_WUC_DATA_OPCODE, in e1000_access_phy_wakeup_reg_bm()
2700 ret_val = e1000_disable_phy_wakeup_reg_access_bm(hw, &phy_reg); in e1000_access_phy_wakeup_reg_bm()
2713 void e1000_power_up_phy_copper(struct e1000_hw *hw) in e1000_power_up_phy_copper() argument
2718 e1e_rphy(hw, MII_BMCR, &mii_reg); in e1000_power_up_phy_copper()
2720 e1e_wphy(hw, MII_BMCR, mii_reg); in e1000_power_up_phy_copper()
2731 void e1000_power_down_phy_copper(struct e1000_hw *hw) in e1000_power_down_phy_copper() argument
2736 e1e_rphy(hw, MII_BMCR, &mii_reg); in e1000_power_down_phy_copper()
2738 e1e_wphy(hw, MII_BMCR, mii_reg); in e1000_power_down_phy_copper()
2753 static s32 __e1000_read_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 *data, in __e1000_read_phy_reg_hv() argument
2759 u32 phy_addr = hw->phy.addr = e1000_get_phy_addr_for_hv_page(page); in __e1000_read_phy_reg_hv()
2762 ret_val = hw->phy.ops.acquire(hw); in __e1000_read_phy_reg_hv()
2769 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, data, in __e1000_read_phy_reg_hv()
2775 ret_val = e1000_access_phy_debug_regs_hv(hw, offset, in __e1000_read_phy_reg_hv()
2786 ret_val = e1000_set_page_igp(hw, in __e1000_read_phy_reg_hv()
2789 hw->phy.addr = phy_addr; in __e1000_read_phy_reg_hv()
2799 ret_val = e1000e_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & reg, data); in __e1000_read_phy_reg_hv()
2802 hw->phy.ops.release(hw); in __e1000_read_phy_reg_hv()
2817 s32 e1000_read_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 *data) in e1000_read_phy_reg_hv() argument
2819 return __e1000_read_phy_reg_hv(hw, offset, data, false, false); in e1000_read_phy_reg_hv()
2831 s32 e1000_read_phy_reg_hv_locked(struct e1000_hw *hw, u32 offset, u16 *data) in e1000_read_phy_reg_hv_locked() argument
2833 return __e1000_read_phy_reg_hv(hw, offset, data, true, false); in e1000_read_phy_reg_hv_locked()
2845 s32 e1000_read_phy_reg_page_hv(struct e1000_hw *hw, u32 offset, u16 *data) in e1000_read_phy_reg_page_hv() argument
2847 return __e1000_read_phy_reg_hv(hw, offset, data, true, true); in e1000_read_phy_reg_page_hv()
2860 static s32 __e1000_write_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 data, in __e1000_write_phy_reg_hv() argument
2866 u32 phy_addr = hw->phy.addr = e1000_get_phy_addr_for_hv_page(page); in __e1000_write_phy_reg_hv()
2869 ret_val = hw->phy.ops.acquire(hw); in __e1000_write_phy_reg_hv()
2876 ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, &data, in __e1000_write_phy_reg_hv()
2882 ret_val = e1000_access_phy_debug_regs_hv(hw, offset, in __e1000_write_phy_reg_hv()
2894 if ((hw->phy.type == e1000_phy_82578) && in __e1000_write_phy_reg_hv()
2895 (hw->phy.revision >= 1) && in __e1000_write_phy_reg_hv()
2896 (hw->phy.addr == 2) && in __e1000_write_phy_reg_hv()
2900 ret_val = e1000_access_phy_debug_regs_hv(hw, in __e1000_write_phy_reg_hv()
2909 ret_val = e1000_set_page_igp(hw, in __e1000_write_phy_reg_hv()
2912 hw->phy.addr = phy_addr; in __e1000_write_phy_reg_hv()
2922 ret_val = e1000e_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & reg, in __e1000_write_phy_reg_hv()
2927 hw->phy.ops.release(hw); in __e1000_write_phy_reg_hv()
2941 s32 e1000_write_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 data) in e1000_write_phy_reg_hv() argument
2943 return __e1000_write_phy_reg_hv(hw, offset, data, false, false); in e1000_write_phy_reg_hv()
2955 s32 e1000_write_phy_reg_hv_locked(struct e1000_hw *hw, u32 offset, u16 data) in e1000_write_phy_reg_hv_locked() argument
2957 return __e1000_write_phy_reg_hv(hw, offset, data, true, false); in e1000_write_phy_reg_hv_locked()
2969 s32 e1000_write_phy_reg_page_hv(struct e1000_hw *hw, u32 offset, u16 data) in e1000_write_phy_reg_page_hv() argument
2971 return __e1000_write_phy_reg_hv(hw, offset, data, true, true); in e1000_write_phy_reg_page_hv()
3000 static s32 e1000_access_phy_debug_regs_hv(struct e1000_hw *hw, u32 offset, in e1000_access_phy_debug_regs_hv() argument
3008 addr_reg = ((hw->phy.type == e1000_phy_82578) ? in e1000_access_phy_debug_regs_hv()
3013 hw->phy.addr = 2; in e1000_access_phy_debug_regs_hv()
3016 ret_val = e1000e_write_phy_reg_mdic(hw, addr_reg, (u16)offset & 0x3F); in e1000_access_phy_debug_regs_hv()
3024 ret_val = e1000e_read_phy_reg_mdic(hw, data_reg, data); in e1000_access_phy_debug_regs_hv()
3026 ret_val = e1000e_write_phy_reg_mdic(hw, data_reg, *data); in e1000_access_phy_debug_regs_hv()
3045 s32 e1000_link_stall_workaround_hv(struct e1000_hw *hw) in e1000_link_stall_workaround_hv() argument
3050 if (hw->phy.type != e1000_phy_82578) in e1000_link_stall_workaround_hv()
3054 e1e_rphy(hw, MII_BMCR, &data); in e1000_link_stall_workaround_hv()
3059 ret_val = e1e_rphy(hw, BM_CS_STATUS, &data); in e1000_link_stall_workaround_hv()
3073 ret_val = e1e_wphy(hw, HV_MUX_DATA_CTRL, in e1000_link_stall_workaround_hv()
3079 return e1e_wphy(hw, HV_MUX_DATA_CTRL, HV_MUX_DATA_CTRL_GEN_TO_MAC); in e1000_link_stall_workaround_hv()
3090 s32 e1000_check_polarity_82577(struct e1000_hw *hw) in e1000_check_polarity_82577() argument
3092 struct e1000_phy_info *phy = &hw->phy; in e1000_check_polarity_82577()
3096 ret_val = e1e_rphy(hw, I82577_PHY_STATUS_2, &data); in e1000_check_polarity_82577()
3112 s32 e1000_phy_force_speed_duplex_82577(struct e1000_hw *hw) in e1000_phy_force_speed_duplex_82577() argument
3114 struct e1000_phy_info *phy = &hw->phy; in e1000_phy_force_speed_duplex_82577()
3119 ret_val = e1e_rphy(hw, MII_BMCR, &phy_data); in e1000_phy_force_speed_duplex_82577()
3123 e1000e_phy_force_speed_duplex_setup(hw, &phy_data); in e1000_phy_force_speed_duplex_82577()
3125 ret_val = e1e_wphy(hw, MII_BMCR, phy_data); in e1000_phy_force_speed_duplex_82577()
3134 ret_val = e1000e_phy_has_link_generic(hw, PHY_FORCE_LIMIT, in e1000_phy_force_speed_duplex_82577()
3143 ret_val = e1000e_phy_has_link_generic(hw, PHY_FORCE_LIMIT, in e1000_phy_force_speed_duplex_82577()
3159 s32 e1000_get_phy_info_82577(struct e1000_hw *hw) in e1000_get_phy_info_82577() argument
3161 struct e1000_phy_info *phy = &hw->phy; in e1000_get_phy_info_82577()
3166 ret_val = e1000e_phy_has_link_generic(hw, 1, 0, &link); in e1000_get_phy_info_82577()
3177 ret_val = e1000_check_polarity_82577(hw); in e1000_get_phy_info_82577()
3181 ret_val = e1e_rphy(hw, I82577_PHY_STATUS_2, &data); in e1000_get_phy_info_82577()
3189 ret_val = hw->phy.ops.get_cable_length(hw); in e1000_get_phy_info_82577()
3193 ret_val = e1e_rphy(hw, MII_STAT1000, &data); in e1000_get_phy_info_82577()
3218 s32 e1000_get_cable_length_82577(struct e1000_hw *hw) in e1000_get_cable_length_82577() argument
3220 struct e1000_phy_info *phy = &hw->phy; in e1000_get_cable_length_82577()
3224 ret_val = e1e_rphy(hw, I82577_PHY_DIAG_STATUS, &phy_data); in e1000_get_cable_length_82577()