Lines Matching refs:hw
39 static s32 e1000_setup_copper_link_80003es2lan(struct e1000_hw *hw);
40 static s32 e1000_acquire_swfw_sync_80003es2lan(struct e1000_hw *hw, u16 mask);
41 static void e1000_release_swfw_sync_80003es2lan(struct e1000_hw *hw, u16 mask);
42 static void e1000_initialize_hw_bits_80003es2lan(struct e1000_hw *hw);
43 static void e1000_clear_hw_cntrs_80003es2lan(struct e1000_hw *hw);
44 static s32 e1000_cfg_kmrn_1000_80003es2lan(struct e1000_hw *hw);
45 static s32 e1000_cfg_kmrn_10_100_80003es2lan(struct e1000_hw *hw, u16 duplex);
46 static s32 e1000_read_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset,
48 static s32 e1000_write_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset,
50 static void e1000_power_down_phy_copper_80003es2lan(struct e1000_hw *hw);
56 static s32 e1000_init_phy_params_80003es2lan(struct e1000_hw *hw) in e1000_init_phy_params_80003es2lan() argument
58 struct e1000_phy_info *phy = &hw->phy; in e1000_init_phy_params_80003es2lan()
61 if (hw->phy.media_type != e1000_media_type_copper) { in e1000_init_phy_params_80003es2lan()
75 ret_val = e1000e_get_phy_id(hw); in e1000_init_phy_params_80003es2lan()
88 static s32 e1000_init_nvm_params_80003es2lan(struct e1000_hw *hw) in e1000_init_nvm_params_80003es2lan() argument
90 struct e1000_nvm_info *nvm = &hw->nvm; in e1000_init_nvm_params_80003es2lan()
133 static s32 e1000_init_mac_params_80003es2lan(struct e1000_hw *hw) in e1000_init_mac_params_80003es2lan() argument
135 struct e1000_mac_info *mac = &hw->mac; in e1000_init_mac_params_80003es2lan()
138 switch (hw->adapter->pdev->device) { in e1000_init_mac_params_80003es2lan()
140 hw->phy.media_type = e1000_media_type_internal_serdes; in e1000_init_mac_params_80003es2lan()
146 hw->phy.media_type = e1000_media_type_copper; in e1000_init_mac_params_80003es2lan()
165 hw->mac.ops.set_lan_id(hw); in e1000_init_mac_params_80003es2lan()
172 struct e1000_hw *hw = &adapter->hw; in e1000_get_variants_80003es2lan() local
175 rc = e1000_init_mac_params_80003es2lan(hw); in e1000_get_variants_80003es2lan()
179 rc = e1000_init_nvm_params_80003es2lan(hw); in e1000_get_variants_80003es2lan()
183 rc = e1000_init_phy_params_80003es2lan(hw); in e1000_get_variants_80003es2lan()
196 static s32 e1000_acquire_phy_80003es2lan(struct e1000_hw *hw) in e1000_acquire_phy_80003es2lan() argument
200 mask = hw->bus.func ? E1000_SWFW_PHY1_SM : E1000_SWFW_PHY0_SM; in e1000_acquire_phy_80003es2lan()
201 return e1000_acquire_swfw_sync_80003es2lan(hw, mask); in e1000_acquire_phy_80003es2lan()
210 static void e1000_release_phy_80003es2lan(struct e1000_hw *hw) in e1000_release_phy_80003es2lan() argument
214 mask = hw->bus.func ? E1000_SWFW_PHY1_SM : E1000_SWFW_PHY0_SM; in e1000_release_phy_80003es2lan()
215 e1000_release_swfw_sync_80003es2lan(hw, mask); in e1000_release_phy_80003es2lan()
225 static s32 e1000_acquire_mac_csr_80003es2lan(struct e1000_hw *hw) in e1000_acquire_mac_csr_80003es2lan() argument
231 return e1000_acquire_swfw_sync_80003es2lan(hw, mask); in e1000_acquire_mac_csr_80003es2lan()
240 static void e1000_release_mac_csr_80003es2lan(struct e1000_hw *hw) in e1000_release_mac_csr_80003es2lan() argument
246 e1000_release_swfw_sync_80003es2lan(hw, mask); in e1000_release_mac_csr_80003es2lan()
255 static s32 e1000_acquire_nvm_80003es2lan(struct e1000_hw *hw) in e1000_acquire_nvm_80003es2lan() argument
259 ret_val = e1000_acquire_swfw_sync_80003es2lan(hw, E1000_SWFW_EEP_SM); in e1000_acquire_nvm_80003es2lan()
263 ret_val = e1000e_acquire_nvm(hw); in e1000_acquire_nvm_80003es2lan()
266 e1000_release_swfw_sync_80003es2lan(hw, E1000_SWFW_EEP_SM); in e1000_acquire_nvm_80003es2lan()
277 static void e1000_release_nvm_80003es2lan(struct e1000_hw *hw) in e1000_release_nvm_80003es2lan() argument
279 e1000e_release_nvm(hw); in e1000_release_nvm_80003es2lan()
280 e1000_release_swfw_sync_80003es2lan(hw, E1000_SWFW_EEP_SM); in e1000_release_nvm_80003es2lan()
291 static s32 e1000_acquire_swfw_sync_80003es2lan(struct e1000_hw *hw, u16 mask) in e1000_acquire_swfw_sync_80003es2lan() argument
300 if (e1000e_get_hw_semaphore(hw)) in e1000_acquire_swfw_sync_80003es2lan()
310 e1000e_put_hw_semaphore(hw); in e1000_acquire_swfw_sync_80003es2lan()
323 e1000e_put_hw_semaphore(hw); in e1000_acquire_swfw_sync_80003es2lan()
336 static void e1000_release_swfw_sync_80003es2lan(struct e1000_hw *hw, u16 mask) in e1000_release_swfw_sync_80003es2lan() argument
340 while (e1000e_get_hw_semaphore(hw) != 0) in e1000_release_swfw_sync_80003es2lan()
347 e1000e_put_hw_semaphore(hw); in e1000_release_swfw_sync_80003es2lan()
358 static s32 e1000_read_phy_reg_gg82563_80003es2lan(struct e1000_hw *hw, in e1000_read_phy_reg_gg82563_80003es2lan() argument
365 ret_val = e1000_acquire_phy_80003es2lan(hw); in e1000_read_phy_reg_gg82563_80003es2lan()
380 ret_val = e1000e_write_phy_reg_mdic(hw, page_select, temp); in e1000_read_phy_reg_gg82563_80003es2lan()
382 e1000_release_phy_80003es2lan(hw); in e1000_read_phy_reg_gg82563_80003es2lan()
386 if (hw->dev_spec.e80003es2lan.mdic_wa_enable) { in e1000_read_phy_reg_gg82563_80003es2lan()
394 ret_val = e1000e_read_phy_reg_mdic(hw, page_select, &temp); in e1000_read_phy_reg_gg82563_80003es2lan()
397 e1000_release_phy_80003es2lan(hw); in e1000_read_phy_reg_gg82563_80003es2lan()
403 ret_val = e1000e_read_phy_reg_mdic(hw, in e1000_read_phy_reg_gg82563_80003es2lan()
409 ret_val = e1000e_read_phy_reg_mdic(hw, in e1000_read_phy_reg_gg82563_80003es2lan()
414 e1000_release_phy_80003es2lan(hw); in e1000_read_phy_reg_gg82563_80003es2lan()
427 static s32 e1000_write_phy_reg_gg82563_80003es2lan(struct e1000_hw *hw, in e1000_write_phy_reg_gg82563_80003es2lan() argument
434 ret_val = e1000_acquire_phy_80003es2lan(hw); in e1000_write_phy_reg_gg82563_80003es2lan()
449 ret_val = e1000e_write_phy_reg_mdic(hw, page_select, temp); in e1000_write_phy_reg_gg82563_80003es2lan()
451 e1000_release_phy_80003es2lan(hw); in e1000_write_phy_reg_gg82563_80003es2lan()
455 if (hw->dev_spec.e80003es2lan.mdic_wa_enable) { in e1000_write_phy_reg_gg82563_80003es2lan()
463 ret_val = e1000e_read_phy_reg_mdic(hw, page_select, &temp); in e1000_write_phy_reg_gg82563_80003es2lan()
466 e1000_release_phy_80003es2lan(hw); in e1000_write_phy_reg_gg82563_80003es2lan()
472 ret_val = e1000e_write_phy_reg_mdic(hw, in e1000_write_phy_reg_gg82563_80003es2lan()
478 ret_val = e1000e_write_phy_reg_mdic(hw, in e1000_write_phy_reg_gg82563_80003es2lan()
483 e1000_release_phy_80003es2lan(hw); in e1000_write_phy_reg_gg82563_80003es2lan()
497 static s32 e1000_write_nvm_80003es2lan(struct e1000_hw *hw, u16 offset, in e1000_write_nvm_80003es2lan() argument
500 return e1000e_write_nvm_spi(hw, offset, words, data); in e1000_write_nvm_80003es2lan()
510 static s32 e1000_get_cfg_done_80003es2lan(struct e1000_hw *hw) in e1000_get_cfg_done_80003es2lan() argument
515 if (hw->bus.func == 1) in e1000_get_cfg_done_80003es2lan()
539 static s32 e1000_phy_force_speed_duplex_80003es2lan(struct e1000_hw *hw) in e1000_phy_force_speed_duplex_80003es2lan() argument
548 ret_val = e1e_rphy(hw, M88E1000_PHY_SPEC_CTRL, &phy_data); in e1000_phy_force_speed_duplex_80003es2lan()
553 ret_val = e1e_wphy(hw, GG82563_PHY_SPEC_CTRL, phy_data); in e1000_phy_force_speed_duplex_80003es2lan()
559 ret_val = e1e_rphy(hw, MII_BMCR, &phy_data); in e1000_phy_force_speed_duplex_80003es2lan()
563 e1000e_phy_force_speed_duplex_setup(hw, &phy_data); in e1000_phy_force_speed_duplex_80003es2lan()
568 ret_val = e1e_wphy(hw, MII_BMCR, phy_data); in e1000_phy_force_speed_duplex_80003es2lan()
574 if (hw->phy.autoneg_wait_to_complete) { in e1000_phy_force_speed_duplex_80003es2lan()
577 ret_val = e1000e_phy_has_link_generic(hw, PHY_FORCE_LIMIT, in e1000_phy_force_speed_duplex_80003es2lan()
586 ret_val = e1000e_phy_reset_dsp(hw); in e1000_phy_force_speed_duplex_80003es2lan()
592 ret_val = e1000e_phy_has_link_generic(hw, PHY_FORCE_LIMIT, in e1000_phy_force_speed_duplex_80003es2lan()
598 ret_val = e1e_rphy(hw, GG82563_PHY_MAC_SPEC_CTRL, &phy_data); in e1000_phy_force_speed_duplex_80003es2lan()
606 if (hw->mac.forced_speed_duplex & E1000_ALL_10_SPEED) in e1000_phy_force_speed_duplex_80003es2lan()
615 ret_val = e1e_wphy(hw, GG82563_PHY_MAC_SPEC_CTRL, phy_data); in e1000_phy_force_speed_duplex_80003es2lan()
627 static s32 e1000_get_cable_length_80003es2lan(struct e1000_hw *hw) in e1000_get_cable_length_80003es2lan() argument
629 struct e1000_phy_info *phy = &hw->phy; in e1000_get_cable_length_80003es2lan()
633 ret_val = e1e_rphy(hw, GG82563_PHY_DSP_DISTANCE, &phy_data); in e1000_get_cable_length_80003es2lan()
658 static s32 e1000_get_link_up_info_80003es2lan(struct e1000_hw *hw, u16 *speed, in e1000_get_link_up_info_80003es2lan() argument
663 if (hw->phy.media_type == e1000_media_type_copper) { in e1000_get_link_up_info_80003es2lan()
664 ret_val = e1000e_get_speed_and_duplex_copper(hw, speed, duplex); in e1000_get_link_up_info_80003es2lan()
665 hw->phy.ops.cfg_on_link_up(hw); in e1000_get_link_up_info_80003es2lan()
667 ret_val = e1000e_get_speed_and_duplex_fiber_serdes(hw, in e1000_get_link_up_info_80003es2lan()
681 static s32 e1000_reset_hw_80003es2lan(struct e1000_hw *hw) in e1000_reset_hw_80003es2lan() argument
690 ret_val = e1000e_disable_pcie_master(hw); in e1000_reset_hw_80003es2lan()
705 ret_val = e1000_acquire_phy_80003es2lan(hw); in e1000_reset_hw_80003es2lan()
711 e1000_release_phy_80003es2lan(hw); in e1000_reset_hw_80003es2lan()
715 e1000_read_kmrn_reg_80003es2lan(hw, E1000_KMRNCTRLSTA_INBAND_PARAM, in e1000_reset_hw_80003es2lan()
720 e1000_write_kmrn_reg_80003es2lan(hw, E1000_KMRNCTRLSTA_INBAND_PARAM, in e1000_reset_hw_80003es2lan()
723 ret_val = e1000e_get_auto_rd_done(hw); in e1000_reset_hw_80003es2lan()
732 return e1000_check_alt_mac_addr_generic(hw); in e1000_reset_hw_80003es2lan()
741 static s32 e1000_init_hw_80003es2lan(struct e1000_hw *hw) in e1000_init_hw_80003es2lan() argument
743 struct e1000_mac_info *mac = &hw->mac; in e1000_init_hw_80003es2lan()
749 e1000_initialize_hw_bits_80003es2lan(hw); in e1000_init_hw_80003es2lan()
752 ret_val = mac->ops.id_led_init(hw); in e1000_init_hw_80003es2lan()
759 mac->ops.clear_vfta(hw); in e1000_init_hw_80003es2lan()
762 e1000e_init_rx_addrs(hw, mac->rar_entry_count); in e1000_init_hw_80003es2lan()
767 E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, 0); in e1000_init_hw_80003es2lan()
770 ret_val = mac->ops.setup_link(hw); in e1000_init_hw_80003es2lan()
775 e1000_read_kmrn_reg_80003es2lan(hw, E1000_KMRNCTRLSTA_INBAND_PARAM, in e1000_init_hw_80003es2lan()
778 e1000_write_kmrn_reg_80003es2lan(hw, E1000_KMRNCTRLSTA_INBAND_PARAM, in e1000_init_hw_80003es2lan()
810 reg_data = E1000_READ_REG_ARRAY(hw, E1000_FFLT, 0x0001); in e1000_init_hw_80003es2lan()
812 E1000_WRITE_REG_ARRAY(hw, E1000_FFLT, 0x0001, reg_data); in e1000_init_hw_80003es2lan()
815 hw->dev_spec.e80003es2lan.mdic_wa_enable = true; in e1000_init_hw_80003es2lan()
818 e1000_read_kmrn_reg_80003es2lan(hw, E1000_KMRNCTRLSTA_OFFSET >> in e1000_init_hw_80003es2lan()
823 hw->dev_spec.e80003es2lan.mdic_wa_enable = false; in e1000_init_hw_80003es2lan()
831 e1000_clear_hw_cntrs_80003es2lan(hw); in e1000_init_hw_80003es2lan()
842 static void e1000_initialize_hw_bits_80003es2lan(struct e1000_hw *hw) in e1000_initialize_hw_bits_80003es2lan() argument
859 if (hw->phy.media_type != e1000_media_type_copper) in e1000_initialize_hw_bits_80003es2lan()
885 static s32 e1000_copper_link_setup_gg82563_80003es2lan(struct e1000_hw *hw) in e1000_copper_link_setup_gg82563_80003es2lan() argument
887 struct e1000_phy_info *phy = &hw->phy; in e1000_copper_link_setup_gg82563_80003es2lan()
892 ret_val = e1e_rphy(hw, GG82563_PHY_MAC_SPEC_CTRL, &data); in e1000_copper_link_setup_gg82563_80003es2lan()
900 ret_val = e1e_wphy(hw, GG82563_PHY_MAC_SPEC_CTRL, data); in e1000_copper_link_setup_gg82563_80003es2lan()
911 ret_val = e1e_rphy(hw, GG82563_PHY_SPEC_CTRL, &data); in e1000_copper_link_setup_gg82563_80003es2lan()
940 ret_val = e1e_wphy(hw, GG82563_PHY_SPEC_CTRL, data); in e1000_copper_link_setup_gg82563_80003es2lan()
945 ret_val = hw->phy.ops.commit(hw); in e1000_copper_link_setup_gg82563_80003es2lan()
955 ret_val = e1000_write_kmrn_reg_80003es2lan(hw, reg, data); in e1000_copper_link_setup_gg82563_80003es2lan()
960 ret_val = e1000_read_kmrn_reg_80003es2lan(hw, reg, &data); in e1000_copper_link_setup_gg82563_80003es2lan()
964 ret_val = e1000_write_kmrn_reg_80003es2lan(hw, reg, data); in e1000_copper_link_setup_gg82563_80003es2lan()
968 ret_val = e1e_rphy(hw, GG82563_PHY_SPEC_CTRL_2, &data); in e1000_copper_link_setup_gg82563_80003es2lan()
973 ret_val = e1e_wphy(hw, GG82563_PHY_SPEC_CTRL_2, data); in e1000_copper_link_setup_gg82563_80003es2lan()
981 ret_val = e1e_rphy(hw, GG82563_PHY_PWR_MGMT_CTRL, &data); in e1000_copper_link_setup_gg82563_80003es2lan()
989 if (!hw->mac.ops.check_mng_mode(hw)) { in e1000_copper_link_setup_gg82563_80003es2lan()
992 ret_val = e1e_wphy(hw, GG82563_PHY_PWR_MGMT_CTRL, data); in e1000_copper_link_setup_gg82563_80003es2lan()
996 ret_val = e1e_rphy(hw, GG82563_PHY_KMRN_MODE_CTRL, &data); in e1000_copper_link_setup_gg82563_80003es2lan()
1001 ret_val = e1e_wphy(hw, GG82563_PHY_KMRN_MODE_CTRL, data); in e1000_copper_link_setup_gg82563_80003es2lan()
1009 ret_val = e1e_rphy(hw, GG82563_PHY_INBAND_CTRL, &data); in e1000_copper_link_setup_gg82563_80003es2lan()
1014 ret_val = e1e_wphy(hw, GG82563_PHY_INBAND_CTRL, data); in e1000_copper_link_setup_gg82563_80003es2lan()
1028 static s32 e1000_setup_copper_link_80003es2lan(struct e1000_hw *hw) in e1000_setup_copper_link_80003es2lan() argument
1043 ret_val = e1000_write_kmrn_reg_80003es2lan(hw, GG82563_REG(0x34, 4), in e1000_setup_copper_link_80003es2lan()
1047 ret_val = e1000_read_kmrn_reg_80003es2lan(hw, GG82563_REG(0x34, 9), in e1000_setup_copper_link_80003es2lan()
1052 ret_val = e1000_write_kmrn_reg_80003es2lan(hw, GG82563_REG(0x34, 9), in e1000_setup_copper_link_80003es2lan()
1057 e1000_read_kmrn_reg_80003es2lan(hw, in e1000_setup_copper_link_80003es2lan()
1064 e1000_write_kmrn_reg_80003es2lan(hw, in e1000_setup_copper_link_80003es2lan()
1070 ret_val = e1000_copper_link_setup_gg82563_80003es2lan(hw); in e1000_setup_copper_link_80003es2lan()
1074 return e1000e_setup_copper_link(hw); in e1000_setup_copper_link_80003es2lan()
1085 static s32 e1000_cfg_on_link_up_80003es2lan(struct e1000_hw *hw) in e1000_cfg_on_link_up_80003es2lan() argument
1091 if (hw->phy.media_type == e1000_media_type_copper) { in e1000_cfg_on_link_up_80003es2lan()
1092 ret_val = e1000e_get_speed_and_duplex_copper(hw, &speed, in e1000_cfg_on_link_up_80003es2lan()
1098 ret_val = e1000_cfg_kmrn_1000_80003es2lan(hw); in e1000_cfg_on_link_up_80003es2lan()
1100 ret_val = e1000_cfg_kmrn_10_100_80003es2lan(hw, duplex); in e1000_cfg_on_link_up_80003es2lan()
1114 static s32 e1000_cfg_kmrn_10_100_80003es2lan(struct e1000_hw *hw, u16 duplex) in e1000_cfg_kmrn_10_100_80003es2lan() argument
1123 e1000_write_kmrn_reg_80003es2lan(hw, in e1000_cfg_kmrn_10_100_80003es2lan()
1136 ret_val = e1e_rphy(hw, GG82563_PHY_KMRN_MODE_CTRL, ®_data); in e1000_cfg_kmrn_10_100_80003es2lan()
1140 ret_val = e1e_rphy(hw, GG82563_PHY_KMRN_MODE_CTRL, ®_data2); in e1000_cfg_kmrn_10_100_80003es2lan()
1151 return e1e_wphy(hw, GG82563_PHY_KMRN_MODE_CTRL, reg_data); in e1000_cfg_kmrn_10_100_80003es2lan()
1161 static s32 e1000_cfg_kmrn_1000_80003es2lan(struct e1000_hw *hw) in e1000_cfg_kmrn_1000_80003es2lan() argument
1170 e1000_write_kmrn_reg_80003es2lan(hw, in e1000_cfg_kmrn_1000_80003es2lan()
1183 ret_val = e1e_rphy(hw, GG82563_PHY_KMRN_MODE_CTRL, ®_data); in e1000_cfg_kmrn_1000_80003es2lan()
1187 ret_val = e1e_rphy(hw, GG82563_PHY_KMRN_MODE_CTRL, ®_data2); in e1000_cfg_kmrn_1000_80003es2lan()
1195 return e1e_wphy(hw, GG82563_PHY_KMRN_MODE_CTRL, reg_data); in e1000_cfg_kmrn_1000_80003es2lan()
1208 static s32 e1000_read_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset, in e1000_read_kmrn_reg_80003es2lan() argument
1214 ret_val = e1000_acquire_mac_csr_80003es2lan(hw); in e1000_read_kmrn_reg_80003es2lan()
1228 e1000_release_mac_csr_80003es2lan(hw); in e1000_read_kmrn_reg_80003es2lan()
1243 static s32 e1000_write_kmrn_reg_80003es2lan(struct e1000_hw *hw, u32 offset, in e1000_write_kmrn_reg_80003es2lan() argument
1249 ret_val = e1000_acquire_mac_csr_80003es2lan(hw); in e1000_write_kmrn_reg_80003es2lan()
1260 e1000_release_mac_csr_80003es2lan(hw); in e1000_write_kmrn_reg_80003es2lan()
1269 static s32 e1000_read_mac_addr_80003es2lan(struct e1000_hw *hw) in e1000_read_mac_addr_80003es2lan() argument
1277 ret_val = e1000_check_alt_mac_addr_generic(hw); in e1000_read_mac_addr_80003es2lan()
1281 return e1000_read_mac_addr_generic(hw); in e1000_read_mac_addr_80003es2lan()
1291 static void e1000_power_down_phy_copper_80003es2lan(struct e1000_hw *hw) in e1000_power_down_phy_copper_80003es2lan() argument
1294 if (!(hw->mac.ops.check_mng_mode(hw) || in e1000_power_down_phy_copper_80003es2lan()
1295 hw->phy.ops.check_reset_block(hw))) in e1000_power_down_phy_copper_80003es2lan()
1296 e1000_power_down_phy_copper(hw); in e1000_power_down_phy_copper_80003es2lan()
1305 static void e1000_clear_hw_cntrs_80003es2lan(struct e1000_hw *hw) in e1000_clear_hw_cntrs_80003es2lan() argument
1307 e1000e_clear_hw_cntrs_base(hw); in e1000_clear_hw_cntrs_80003es2lan()