diff options
Diffstat (limited to 'drivers/net/e1000e')
-rw-r--r-- | drivers/net/e1000e/82571.c | 77 | ||||
-rw-r--r-- | drivers/net/e1000e/e1000.h | 3 | ||||
-rw-r--r-- | drivers/net/e1000e/es2lan.c | 4 | ||||
-rw-r--r-- | drivers/net/e1000e/ethtool.c | 54 | ||||
-rw-r--r-- | drivers/net/e1000e/hw.h | 1 | ||||
-rw-r--r-- | drivers/net/e1000e/ich8lan.c | 77 | ||||
-rw-r--r-- | drivers/net/e1000e/lib.c | 3 | ||||
-rw-r--r-- | drivers/net/e1000e/netdev.c | 53 | ||||
-rw-r--r-- | drivers/net/e1000e/phy.c | 40 |
9 files changed, 188 insertions, 124 deletions
diff --git a/drivers/net/e1000e/82571.c b/drivers/net/e1000e/82571.c index e57e4097ef1b..cb6c7b1c1fb8 100644 --- a/drivers/net/e1000e/82571.c +++ b/drivers/net/e1000e/82571.c | |||
@@ -78,6 +78,8 @@ static void e1000_power_down_phy_copper_82571(struct e1000_hw *hw); | |||
78 | static void e1000_put_hw_semaphore_82573(struct e1000_hw *hw); | 78 | static void e1000_put_hw_semaphore_82573(struct e1000_hw *hw); |
79 | static s32 e1000_get_hw_semaphore_82574(struct e1000_hw *hw); | 79 | static s32 e1000_get_hw_semaphore_82574(struct e1000_hw *hw); |
80 | static void e1000_put_hw_semaphore_82574(struct e1000_hw *hw); | 80 | static void e1000_put_hw_semaphore_82574(struct e1000_hw *hw); |
81 | static s32 e1000_set_d0_lplu_state_82574(struct e1000_hw *hw, bool active); | ||
82 | static s32 e1000_set_d3_lplu_state_82574(struct e1000_hw *hw, bool active); | ||
81 | 83 | ||
82 | /** | 84 | /** |
83 | * e1000_init_phy_params_82571 - Init PHY func ptrs. | 85 | * e1000_init_phy_params_82571 - Init PHY func ptrs. |
@@ -113,6 +115,8 @@ static s32 e1000_init_phy_params_82571(struct e1000_hw *hw) | |||
113 | phy->type = e1000_phy_bm; | 115 | phy->type = e1000_phy_bm; |
114 | phy->ops.acquire = e1000_get_hw_semaphore_82574; | 116 | phy->ops.acquire = e1000_get_hw_semaphore_82574; |
115 | phy->ops.release = e1000_put_hw_semaphore_82574; | 117 | phy->ops.release = e1000_put_hw_semaphore_82574; |
118 | phy->ops.set_d0_lplu_state = e1000_set_d0_lplu_state_82574; | ||
119 | phy->ops.set_d3_lplu_state = e1000_set_d3_lplu_state_82574; | ||
116 | break; | 120 | break; |
117 | default: | 121 | default: |
118 | return -E1000_ERR_PHY; | 122 | return -E1000_ERR_PHY; |
@@ -121,29 +125,36 @@ static s32 e1000_init_phy_params_82571(struct e1000_hw *hw) | |||
121 | 125 | ||
122 | /* This can only be done after all function pointers are setup. */ | 126 | /* This can only be done after all function pointers are setup. */ |
123 | ret_val = e1000_get_phy_id_82571(hw); | 127 | ret_val = e1000_get_phy_id_82571(hw); |
128 | if (ret_val) { | ||
129 | e_dbg("Error getting PHY ID\n"); | ||
130 | return ret_val; | ||
131 | } | ||
124 | 132 | ||
125 | /* Verify phy id */ | 133 | /* Verify phy id */ |
126 | switch (hw->mac.type) { | 134 | switch (hw->mac.type) { |
127 | case e1000_82571: | 135 | case e1000_82571: |
128 | case e1000_82572: | 136 | case e1000_82572: |
129 | if (phy->id != IGP01E1000_I_PHY_ID) | 137 | if (phy->id != IGP01E1000_I_PHY_ID) |
130 | return -E1000_ERR_PHY; | 138 | ret_val = -E1000_ERR_PHY; |
131 | break; | 139 | break; |
132 | case e1000_82573: | 140 | case e1000_82573: |
133 | if (phy->id != M88E1111_I_PHY_ID) | 141 | if (phy->id != M88E1111_I_PHY_ID) |
134 | return -E1000_ERR_PHY; | 142 | ret_val = -E1000_ERR_PHY; |
135 | break; | 143 | break; |
136 | case e1000_82574: | 144 | case e1000_82574: |
137 | case e1000_82583: | 145 | case e1000_82583: |
138 | if (phy->id != BME1000_E_PHY_ID_R2) | 146 | if (phy->id != BME1000_E_PHY_ID_R2) |
139 | return -E1000_ERR_PHY; | 147 | ret_val = -E1000_ERR_PHY; |
140 | break; | 148 | break; |
141 | default: | 149 | default: |
142 | return -E1000_ERR_PHY; | 150 | ret_val = -E1000_ERR_PHY; |
143 | break; | 151 | break; |
144 | } | 152 | } |
145 | 153 | ||
146 | return 0; | 154 | if (ret_val) |
155 | e_dbg("PHY ID unknown: type = 0x%08x\n", phy->id); | ||
156 | |||
157 | return ret_val; | ||
147 | } | 158 | } |
148 | 159 | ||
149 | /** | 160 | /** |
@@ -649,6 +660,58 @@ static void e1000_put_hw_semaphore_82574(struct e1000_hw *hw) | |||
649 | } | 660 | } |
650 | 661 | ||
651 | /** | 662 | /** |
663 | * e1000_set_d0_lplu_state_82574 - Set Low Power Linkup D0 state | ||
664 | * @hw: pointer to the HW structure | ||
665 | * @active: true to enable LPLU, false to disable | ||
666 | * | ||
667 | * Sets the LPLU D0 state according to the active flag. | ||
668 | * LPLU will not be activated unless the | ||
669 | * device autonegotiation advertisement meets standards of | ||
670 | * either 10 or 10/100 or 10/100/1000 at all duplexes. | ||
671 | * This is a function pointer entry point only called by | ||
672 | * PHY setup routines. | ||
673 | **/ | ||
674 | static s32 e1000_set_d0_lplu_state_82574(struct e1000_hw *hw, bool active) | ||
675 | { | ||
676 | u16 data = er32(POEMB); | ||
677 | |||
678 | if (active) | ||
679 | data |= E1000_PHY_CTRL_D0A_LPLU; | ||
680 | else | ||
681 | data &= ~E1000_PHY_CTRL_D0A_LPLU; | ||
682 | |||
683 | ew32(POEMB, data); | ||
684 | return 0; | ||
685 | } | ||
686 | |||
687 | /** | ||
688 | * e1000_set_d3_lplu_state_82574 - Sets low power link up state for D3 | ||
689 | * @hw: pointer to the HW structure | ||
690 | * @active: boolean used to enable/disable lplu | ||
691 | * | ||
692 | * The low power link up (lplu) state is set to the power management level D3 | ||
693 | * when active is true, else clear lplu for D3. LPLU | ||
694 | * is used during Dx states where the power conservation is most important. | ||
695 | * During driver activity, SmartSpeed should be enabled so performance is | ||
696 | * maintained. | ||
697 | **/ | ||
698 | static s32 e1000_set_d3_lplu_state_82574(struct e1000_hw *hw, bool active) | ||
699 | { | ||
700 | u16 data = er32(POEMB); | ||
701 | |||
702 | if (!active) { | ||
703 | data &= ~E1000_PHY_CTRL_NOND0A_LPLU; | ||
704 | } else if ((hw->phy.autoneg_advertised == E1000_ALL_SPEED_DUPLEX) || | ||
705 | (hw->phy.autoneg_advertised == E1000_ALL_NOT_GIG) || | ||
706 | (hw->phy.autoneg_advertised == E1000_ALL_10_SPEED)) { | ||
707 | data |= E1000_PHY_CTRL_NOND0A_LPLU; | ||
708 | } | ||
709 | |||
710 | ew32(POEMB, data); | ||
711 | return 0; | ||
712 | } | ||
713 | |||
714 | /** | ||
652 | * e1000_acquire_nvm_82571 - Request for access to the EEPROM | 715 | * e1000_acquire_nvm_82571 - Request for access to the EEPROM |
653 | * @hw: pointer to the HW structure | 716 | * @hw: pointer to the HW structure |
654 | * | 717 | * |
@@ -956,7 +1019,7 @@ static s32 e1000_set_d0_lplu_state_82571(struct e1000_hw *hw, bool active) | |||
956 | **/ | 1019 | **/ |
957 | static s32 e1000_reset_hw_82571(struct e1000_hw *hw) | 1020 | static s32 e1000_reset_hw_82571(struct e1000_hw *hw) |
958 | { | 1021 | { |
959 | u32 ctrl, ctrl_ext, icr; | 1022 | u32 ctrl, ctrl_ext; |
960 | s32 ret_val; | 1023 | s32 ret_val; |
961 | 1024 | ||
962 | /* | 1025 | /* |
@@ -1040,7 +1103,7 @@ static s32 e1000_reset_hw_82571(struct e1000_hw *hw) | |||
1040 | 1103 | ||
1041 | /* Clear any pending interrupt events. */ | 1104 | /* Clear any pending interrupt events. */ |
1042 | ew32(IMC, 0xffffffff); | 1105 | ew32(IMC, 0xffffffff); |
1043 | icr = er32(ICR); | 1106 | er32(ICR); |
1044 | 1107 | ||
1045 | if (hw->mac.type == e1000_82571) { | 1108 | if (hw->mac.type == e1000_82571) { |
1046 | /* Install any alternate MAC address into RAR0 */ | 1109 | /* Install any alternate MAC address into RAR0 */ |
diff --git a/drivers/net/e1000e/e1000.h b/drivers/net/e1000e/e1000.h index 2c913b8e9116..5255be753746 100644 --- a/drivers/net/e1000e/e1000.h +++ b/drivers/net/e1000e/e1000.h | |||
@@ -38,6 +38,7 @@ | |||
38 | #include <linux/netdevice.h> | 38 | #include <linux/netdevice.h> |
39 | #include <linux/pci.h> | 39 | #include <linux/pci.h> |
40 | #include <linux/pci-aspm.h> | 40 | #include <linux/pci-aspm.h> |
41 | #include <linux/crc32.h> | ||
41 | 42 | ||
42 | #include "hw.h" | 43 | #include "hw.h" |
43 | 44 | ||
@@ -496,6 +497,8 @@ extern void e1000e_free_tx_resources(struct e1000_adapter *adapter); | |||
496 | extern void e1000e_update_stats(struct e1000_adapter *adapter); | 497 | extern void e1000e_update_stats(struct e1000_adapter *adapter); |
497 | extern void e1000e_set_interrupt_capability(struct e1000_adapter *adapter); | 498 | extern void e1000e_set_interrupt_capability(struct e1000_adapter *adapter); |
498 | extern void e1000e_reset_interrupt_capability(struct e1000_adapter *adapter); | 499 | extern void e1000e_reset_interrupt_capability(struct e1000_adapter *adapter); |
500 | extern void e1000e_get_hw_control(struct e1000_adapter *adapter); | ||
501 | extern void e1000e_release_hw_control(struct e1000_adapter *adapter); | ||
499 | extern void e1000e_disable_aspm(struct pci_dev *pdev, u16 state); | 502 | extern void e1000e_disable_aspm(struct pci_dev *pdev, u16 state); |
500 | 503 | ||
501 | extern unsigned int copybreak; | 504 | extern unsigned int copybreak; |
diff --git a/drivers/net/e1000e/es2lan.c b/drivers/net/e1000e/es2lan.c index b18c644e13d1..e45a61c8930a 100644 --- a/drivers/net/e1000e/es2lan.c +++ b/drivers/net/e1000e/es2lan.c | |||
@@ -784,7 +784,7 @@ static s32 e1000_get_link_up_info_80003es2lan(struct e1000_hw *hw, u16 *speed, | |||
784 | **/ | 784 | **/ |
785 | static s32 e1000_reset_hw_80003es2lan(struct e1000_hw *hw) | 785 | static s32 e1000_reset_hw_80003es2lan(struct e1000_hw *hw) |
786 | { | 786 | { |
787 | u32 ctrl, icr; | 787 | u32 ctrl; |
788 | s32 ret_val; | 788 | s32 ret_val; |
789 | 789 | ||
790 | /* | 790 | /* |
@@ -818,7 +818,7 @@ static s32 e1000_reset_hw_80003es2lan(struct e1000_hw *hw) | |||
818 | 818 | ||
819 | /* Clear any pending interrupt events. */ | 819 | /* Clear any pending interrupt events. */ |
820 | ew32(IMC, 0xffffffff); | 820 | ew32(IMC, 0xffffffff); |
821 | icr = er32(ICR); | 821 | er32(ICR); |
822 | 822 | ||
823 | ret_val = e1000_check_alt_mac_addr_generic(hw); | 823 | ret_val = e1000_check_alt_mac_addr_generic(hw); |
824 | 824 | ||
diff --git a/drivers/net/e1000e/ethtool.c b/drivers/net/e1000e/ethtool.c index affcacf6f5a9..f8ed03dab9b1 100644 --- a/drivers/net/e1000e/ethtool.c +++ b/drivers/net/e1000e/ethtool.c | |||
@@ -624,20 +624,24 @@ static void e1000_get_drvinfo(struct net_device *netdev, | |||
624 | struct e1000_adapter *adapter = netdev_priv(netdev); | 624 | struct e1000_adapter *adapter = netdev_priv(netdev); |
625 | char firmware_version[32]; | 625 | char firmware_version[32]; |
626 | 626 | ||
627 | strncpy(drvinfo->driver, e1000e_driver_name, 32); | 627 | strncpy(drvinfo->driver, e1000e_driver_name, |
628 | strncpy(drvinfo->version, e1000e_driver_version, 32); | 628 | sizeof(drvinfo->driver) - 1); |
629 | strncpy(drvinfo->version, e1000e_driver_version, | ||
630 | sizeof(drvinfo->version) - 1); | ||
629 | 631 | ||
630 | /* | 632 | /* |
631 | * EEPROM image version # is reported as firmware version # for | 633 | * EEPROM image version # is reported as firmware version # for |
632 | * PCI-E controllers | 634 | * PCI-E controllers |
633 | */ | 635 | */ |
634 | sprintf(firmware_version, "%d.%d-%d", | 636 | snprintf(firmware_version, sizeof(firmware_version), "%d.%d-%d", |
635 | (adapter->eeprom_vers & 0xF000) >> 12, | 637 | (adapter->eeprom_vers & 0xF000) >> 12, |
636 | (adapter->eeprom_vers & 0x0FF0) >> 4, | 638 | (adapter->eeprom_vers & 0x0FF0) >> 4, |
637 | (adapter->eeprom_vers & 0x000F)); | 639 | (adapter->eeprom_vers & 0x000F)); |
638 | 640 | ||
639 | strncpy(drvinfo->fw_version, firmware_version, 32); | 641 | strncpy(drvinfo->fw_version, firmware_version, |
640 | strncpy(drvinfo->bus_info, pci_name(adapter->pdev), 32); | 642 | sizeof(drvinfo->fw_version) - 1); |
643 | strncpy(drvinfo->bus_info, pci_name(adapter->pdev), | ||
644 | sizeof(drvinfo->bus_info) - 1); | ||
641 | drvinfo->regdump_len = e1000_get_regs_len(netdev); | 645 | drvinfo->regdump_len = e1000_get_regs_len(netdev); |
642 | drvinfo->eedump_len = e1000_get_eeprom_len(netdev); | 646 | drvinfo->eedump_len = e1000_get_eeprom_len(netdev); |
643 | } | 647 | } |
@@ -1704,6 +1708,19 @@ static void e1000_diag_test(struct net_device *netdev, | |||
1704 | bool if_running = netif_running(netdev); | 1708 | bool if_running = netif_running(netdev); |
1705 | 1709 | ||
1706 | set_bit(__E1000_TESTING, &adapter->state); | 1710 | set_bit(__E1000_TESTING, &adapter->state); |
1711 | |||
1712 | if (!if_running) { | ||
1713 | /* Get control of and reset hardware */ | ||
1714 | if (adapter->flags & FLAG_HAS_AMT) | ||
1715 | e1000e_get_hw_control(adapter); | ||
1716 | |||
1717 | e1000e_power_up_phy(adapter); | ||
1718 | |||
1719 | adapter->hw.phy.autoneg_wait_to_complete = 1; | ||
1720 | e1000e_reset(adapter); | ||
1721 | adapter->hw.phy.autoneg_wait_to_complete = 0; | ||
1722 | } | ||
1723 | |||
1707 | if (eth_test->flags == ETH_TEST_FL_OFFLINE) { | 1724 | if (eth_test->flags == ETH_TEST_FL_OFFLINE) { |
1708 | /* Offline tests */ | 1725 | /* Offline tests */ |
1709 | 1726 | ||
@@ -1717,8 +1734,6 @@ static void e1000_diag_test(struct net_device *netdev, | |||
1717 | if (if_running) | 1734 | if (if_running) |
1718 | /* indicate we're in test mode */ | 1735 | /* indicate we're in test mode */ |
1719 | dev_close(netdev); | 1736 | dev_close(netdev); |
1720 | else | ||
1721 | e1000e_reset(adapter); | ||
1722 | 1737 | ||
1723 | if (e1000_reg_test(adapter, &data[0])) | 1738 | if (e1000_reg_test(adapter, &data[0])) |
1724 | eth_test->flags |= ETH_TEST_FL_FAILED; | 1739 | eth_test->flags |= ETH_TEST_FL_FAILED; |
@@ -1732,8 +1747,6 @@ static void e1000_diag_test(struct net_device *netdev, | |||
1732 | eth_test->flags |= ETH_TEST_FL_FAILED; | 1747 | eth_test->flags |= ETH_TEST_FL_FAILED; |
1733 | 1748 | ||
1734 | e1000e_reset(adapter); | 1749 | e1000e_reset(adapter); |
1735 | /* make sure the phy is powered up */ | ||
1736 | e1000e_power_up_phy(adapter); | ||
1737 | if (e1000_loopback_test(adapter, &data[3])) | 1750 | if (e1000_loopback_test(adapter, &data[3])) |
1738 | eth_test->flags |= ETH_TEST_FL_FAILED; | 1751 | eth_test->flags |= ETH_TEST_FL_FAILED; |
1739 | 1752 | ||
@@ -1755,28 +1768,29 @@ static void e1000_diag_test(struct net_device *netdev, | |||
1755 | if (if_running) | 1768 | if (if_running) |
1756 | dev_open(netdev); | 1769 | dev_open(netdev); |
1757 | } else { | 1770 | } else { |
1758 | if (!if_running && (adapter->flags & FLAG_HAS_AMT)) { | 1771 | /* Online tests */ |
1759 | clear_bit(__E1000_TESTING, &adapter->state); | ||
1760 | dev_open(netdev); | ||
1761 | set_bit(__E1000_TESTING, &adapter->state); | ||
1762 | } | ||
1763 | 1772 | ||
1764 | e_info("online testing starting\n"); | 1773 | e_info("online testing starting\n"); |
1765 | /* Online tests */ | ||
1766 | if (e1000_link_test(adapter, &data[4])) | ||
1767 | eth_test->flags |= ETH_TEST_FL_FAILED; | ||
1768 | 1774 | ||
1769 | /* Online tests aren't run; pass by default */ | 1775 | /* register, eeprom, intr and loopback tests not run online */ |
1770 | data[0] = 0; | 1776 | data[0] = 0; |
1771 | data[1] = 0; | 1777 | data[1] = 0; |
1772 | data[2] = 0; | 1778 | data[2] = 0; |
1773 | data[3] = 0; | 1779 | data[3] = 0; |
1774 | 1780 | ||
1775 | if (!if_running && (adapter->flags & FLAG_HAS_AMT)) | 1781 | if (e1000_link_test(adapter, &data[4])) |
1776 | dev_close(netdev); | 1782 | eth_test->flags |= ETH_TEST_FL_FAILED; |
1777 | 1783 | ||
1778 | clear_bit(__E1000_TESTING, &adapter->state); | 1784 | clear_bit(__E1000_TESTING, &adapter->state); |
1779 | } | 1785 | } |
1786 | |||
1787 | if (!if_running) { | ||
1788 | e1000e_reset(adapter); | ||
1789 | |||
1790 | if (adapter->flags & FLAG_HAS_AMT) | ||
1791 | e1000e_release_hw_control(adapter); | ||
1792 | } | ||
1793 | |||
1780 | msleep_interruptible(4 * 1000); | 1794 | msleep_interruptible(4 * 1000); |
1781 | } | 1795 | } |
1782 | 1796 | ||
diff --git a/drivers/net/e1000e/hw.h b/drivers/net/e1000e/hw.h index ba302a5c2c30..e774380c7cec 100644 --- a/drivers/net/e1000e/hw.h +++ b/drivers/net/e1000e/hw.h | |||
@@ -83,6 +83,7 @@ enum e1e_registers { | |||
83 | E1000_EXTCNF_CTRL = 0x00F00, /* Extended Configuration Control */ | 83 | E1000_EXTCNF_CTRL = 0x00F00, /* Extended Configuration Control */ |
84 | E1000_EXTCNF_SIZE = 0x00F08, /* Extended Configuration Size */ | 84 | E1000_EXTCNF_SIZE = 0x00F08, /* Extended Configuration Size */ |
85 | E1000_PHY_CTRL = 0x00F10, /* PHY Control Register in CSR */ | 85 | E1000_PHY_CTRL = 0x00F10, /* PHY Control Register in CSR */ |
86 | #define E1000_POEMB E1000_PHY_CTRL /* PHY OEM Bits */ | ||
86 | E1000_PBA = 0x01000, /* Packet Buffer Allocation - RW */ | 87 | E1000_PBA = 0x01000, /* Packet Buffer Allocation - RW */ |
87 | E1000_PBS = 0x01008, /* Packet Buffer Size */ | 88 | E1000_PBS = 0x01008, /* Packet Buffer Size */ |
88 | E1000_EEMNGCTL = 0x01010, /* MNG EEprom Control */ | 89 | E1000_EEMNGCTL = 0x01010, /* MNG EEprom Control */ |
diff --git a/drivers/net/e1000e/ich8lan.c b/drivers/net/e1000e/ich8lan.c index d86cc0832720..5328a2927731 100644 --- a/drivers/net/e1000e/ich8lan.c +++ b/drivers/net/e1000e/ich8lan.c | |||
@@ -1395,22 +1395,6 @@ void e1000_copy_rx_addrs_to_phy_ich8lan(struct e1000_hw *hw) | |||
1395 | } | 1395 | } |
1396 | } | 1396 | } |
1397 | 1397 | ||
1398 | static u32 e1000_calc_rx_da_crc(u8 mac[]) | ||
1399 | { | ||
1400 | u32 poly = 0xEDB88320; /* Polynomial for 802.3 CRC calculation */ | ||
1401 | u32 i, j, mask, crc; | ||
1402 | |||
1403 | crc = 0xffffffff; | ||
1404 | for (i = 0; i < 6; i++) { | ||
1405 | crc = crc ^ mac[i]; | ||
1406 | for (j = 8; j > 0; j--) { | ||
1407 | mask = (crc & 1) * (-1); | ||
1408 | crc = (crc >> 1) ^ (poly & mask); | ||
1409 | } | ||
1410 | } | ||
1411 | return ~crc; | ||
1412 | } | ||
1413 | |||
1414 | /** | 1398 | /** |
1415 | * e1000_lv_jumbo_workaround_ich8lan - required for jumbo frame operation | 1399 | * e1000_lv_jumbo_workaround_ich8lan - required for jumbo frame operation |
1416 | * with 82579 PHY | 1400 | * with 82579 PHY |
@@ -1453,8 +1437,7 @@ s32 e1000_lv_jumbo_workaround_ich8lan(struct e1000_hw *hw, bool enable) | |||
1453 | mac_addr[4] = (addr_high & 0xFF); | 1437 | mac_addr[4] = (addr_high & 0xFF); |
1454 | mac_addr[5] = ((addr_high >> 8) & 0xFF); | 1438 | mac_addr[5] = ((addr_high >> 8) & 0xFF); |
1455 | 1439 | ||
1456 | ew32(PCH_RAICC(i), | 1440 | ew32(PCH_RAICC(i), ~ether_crc_le(ETH_ALEN, mac_addr)); |
1457 | e1000_calc_rx_da_crc(mac_addr)); | ||
1458 | } | 1441 | } |
1459 | 1442 | ||
1460 | /* Write Rx addresses to the PHY */ | 1443 | /* Write Rx addresses to the PHY */ |
@@ -2977,7 +2960,7 @@ static s32 e1000_reset_hw_ich8lan(struct e1000_hw *hw) | |||
2977 | { | 2960 | { |
2978 | struct e1000_dev_spec_ich8lan *dev_spec = &hw->dev_spec.ich8lan; | 2961 | struct e1000_dev_spec_ich8lan *dev_spec = &hw->dev_spec.ich8lan; |
2979 | u16 reg; | 2962 | u16 reg; |
2980 | u32 ctrl, icr, kab; | 2963 | u32 ctrl, kab; |
2981 | s32 ret_val; | 2964 | s32 ret_val; |
2982 | 2965 | ||
2983 | /* | 2966 | /* |
@@ -3067,7 +3050,7 @@ static s32 e1000_reset_hw_ich8lan(struct e1000_hw *hw) | |||
3067 | ew32(CRC_OFFSET, 0x65656565); | 3050 | ew32(CRC_OFFSET, 0x65656565); |
3068 | 3051 | ||
3069 | ew32(IMC, 0xffffffff); | 3052 | ew32(IMC, 0xffffffff); |
3070 | icr = er32(ICR); | 3053 | er32(ICR); |
3071 | 3054 | ||
3072 | kab = er32(KABGTXD); | 3055 | kab = er32(KABGTXD); |
3073 | kab |= E1000_KABGTXD_BGSQLBIAS; | 3056 | kab |= E1000_KABGTXD_BGSQLBIAS; |
@@ -3118,7 +3101,7 @@ static s32 e1000_init_hw_ich8lan(struct e1000_hw *hw) | |||
3118 | * Reset the phy after disabling host wakeup to reset the Rx buffer. | 3101 | * Reset the phy after disabling host wakeup to reset the Rx buffer. |
3119 | */ | 3102 | */ |
3120 | if (hw->phy.type == e1000_phy_82578) { | 3103 | if (hw->phy.type == e1000_phy_82578) { |
3121 | hw->phy.ops.read_reg(hw, BM_WUC, &i); | 3104 | e1e_rphy(hw, BM_WUC, &i); |
3122 | ret_val = e1000_phy_hw_reset_ich8lan(hw); | 3105 | ret_val = e1000_phy_hw_reset_ich8lan(hw); |
3123 | if (ret_val) | 3106 | if (ret_val) |
3124 | return ret_val; | 3107 | return ret_val; |
@@ -3276,9 +3259,8 @@ static s32 e1000_setup_link_ich8lan(struct e1000_hw *hw) | |||
3276 | (hw->phy.type == e1000_phy_82577)) { | 3259 | (hw->phy.type == e1000_phy_82577)) { |
3277 | ew32(FCRTV_PCH, hw->fc.refresh_time); | 3260 | ew32(FCRTV_PCH, hw->fc.refresh_time); |
3278 | 3261 | ||
3279 | ret_val = hw->phy.ops.write_reg(hw, | 3262 | ret_val = e1e_wphy(hw, PHY_REG(BM_PORT_CTRL_PAGE, 27), |
3280 | PHY_REG(BM_PORT_CTRL_PAGE, 27), | 3263 | hw->fc.pause_time); |
3281 | hw->fc.pause_time); | ||
3282 | if (ret_val) | 3264 | if (ret_val) |
3283 | return ret_val; | 3265 | return ret_val; |
3284 | } | 3266 | } |
@@ -3342,8 +3324,7 @@ static s32 e1000_setup_copper_link_ich8lan(struct e1000_hw *hw) | |||
3342 | return ret_val; | 3324 | return ret_val; |
3343 | break; | 3325 | break; |
3344 | case e1000_phy_ife: | 3326 | case e1000_phy_ife: |
3345 | ret_val = hw->phy.ops.read_reg(hw, IFE_PHY_MDIX_CONTROL, | 3327 | ret_val = e1e_rphy(hw, IFE_PHY_MDIX_CONTROL, ®_data); |
3346 | ®_data); | ||
3347 | if (ret_val) | 3328 | if (ret_val) |
3348 | return ret_val; | 3329 | return ret_val; |
3349 | 3330 | ||
@@ -3361,8 +3342,7 @@ static s32 e1000_setup_copper_link_ich8lan(struct e1000_hw *hw) | |||
3361 | reg_data |= IFE_PMC_AUTO_MDIX; | 3342 | reg_data |= IFE_PMC_AUTO_MDIX; |
3362 | break; | 3343 | break; |
3363 | } | 3344 | } |
3364 | ret_val = hw->phy.ops.write_reg(hw, IFE_PHY_MDIX_CONTROL, | 3345 | ret_val = e1e_wphy(hw, IFE_PHY_MDIX_CONTROL, reg_data); |
3365 | reg_data); | ||
3366 | if (ret_val) | 3346 | if (ret_val) |
3367 | return ret_val; | 3347 | return ret_val; |
3368 | break; | 3348 | break; |
@@ -3646,7 +3626,8 @@ static s32 e1000_led_off_ich8lan(struct e1000_hw *hw) | |||
3646 | { | 3626 | { |
3647 | if (hw->phy.type == e1000_phy_ife) | 3627 | if (hw->phy.type == e1000_phy_ife) |
3648 | return e1e_wphy(hw, IFE_PHY_SPECIAL_CONTROL_LED, | 3628 | return e1e_wphy(hw, IFE_PHY_SPECIAL_CONTROL_LED, |
3649 | (IFE_PSCL_PROBE_MODE | IFE_PSCL_PROBE_LEDS_OFF)); | 3629 | (IFE_PSCL_PROBE_MODE | |
3630 | IFE_PSCL_PROBE_LEDS_OFF)); | ||
3650 | 3631 | ||
3651 | ew32(LEDCTL, hw->mac.ledctl_mode1); | 3632 | ew32(LEDCTL, hw->mac.ledctl_mode1); |
3652 | return 0; | 3633 | return 0; |
@@ -3660,8 +3641,7 @@ static s32 e1000_led_off_ich8lan(struct e1000_hw *hw) | |||
3660 | **/ | 3641 | **/ |
3661 | static s32 e1000_setup_led_pchlan(struct e1000_hw *hw) | 3642 | static s32 e1000_setup_led_pchlan(struct e1000_hw *hw) |
3662 | { | 3643 | { |
3663 | return hw->phy.ops.write_reg(hw, HV_LED_CONFIG, | 3644 | return e1e_wphy(hw, HV_LED_CONFIG, (u16)hw->mac.ledctl_mode1); |
3664 | (u16)hw->mac.ledctl_mode1); | ||
3665 | } | 3645 | } |
3666 | 3646 | ||
3667 | /** | 3647 | /** |
@@ -3672,8 +3652,7 @@ static s32 e1000_setup_led_pchlan(struct e1000_hw *hw) | |||
3672 | **/ | 3652 | **/ |
3673 | static s32 e1000_cleanup_led_pchlan(struct e1000_hw *hw) | 3653 | static s32 e1000_cleanup_led_pchlan(struct e1000_hw *hw) |
3674 | { | 3654 | { |
3675 | return hw->phy.ops.write_reg(hw, HV_LED_CONFIG, | 3655 | return e1e_wphy(hw, HV_LED_CONFIG, (u16)hw->mac.ledctl_default); |
3676 | (u16)hw->mac.ledctl_default); | ||
3677 | } | 3656 | } |
3678 | 3657 | ||
3679 | /** | 3658 | /** |
@@ -3704,7 +3683,7 @@ static s32 e1000_led_on_pchlan(struct e1000_hw *hw) | |||
3704 | } | 3683 | } |
3705 | } | 3684 | } |
3706 | 3685 | ||
3707 | return hw->phy.ops.write_reg(hw, HV_LED_CONFIG, data); | 3686 | return e1e_wphy(hw, HV_LED_CONFIG, data); |
3708 | } | 3687 | } |
3709 | 3688 | ||
3710 | /** | 3689 | /** |
@@ -3735,7 +3714,7 @@ static s32 e1000_led_off_pchlan(struct e1000_hw *hw) | |||
3735 | } | 3714 | } |
3736 | } | 3715 | } |
3737 | 3716 | ||
3738 | return hw->phy.ops.write_reg(hw, HV_LED_CONFIG, data); | 3717 | return e1e_wphy(hw, HV_LED_CONFIG, data); |
3739 | } | 3718 | } |
3740 | 3719 | ||
3741 | /** | 3720 | /** |
@@ -3844,20 +3823,20 @@ static void e1000_clear_hw_cntrs_ich8lan(struct e1000_hw *hw) | |||
3844 | if ((hw->phy.type == e1000_phy_82578) || | 3823 | if ((hw->phy.type == e1000_phy_82578) || |
3845 | (hw->phy.type == e1000_phy_82579) || | 3824 | (hw->phy.type == e1000_phy_82579) || |
3846 | (hw->phy.type == e1000_phy_82577)) { | 3825 | (hw->phy.type == e1000_phy_82577)) { |
3847 | hw->phy.ops.read_reg(hw, HV_SCC_UPPER, &phy_data); | 3826 | e1e_rphy(hw, HV_SCC_UPPER, &phy_data); |
3848 | hw->phy.ops.read_reg(hw, HV_SCC_LOWER, &phy_data); | 3827 | e1e_rphy(hw, HV_SCC_LOWER, &phy_data); |
3849 | hw->phy.ops.read_reg(hw, HV_ECOL_UPPER, &phy_data); | 3828 | e1e_rphy(hw, HV_ECOL_UPPER, &phy_data); |
3850 | hw->phy.ops.read_reg(hw, HV_ECOL_LOWER, &phy_data); | 3829 | e1e_rphy(hw, HV_ECOL_LOWER, &phy_data); |
3851 | hw->phy.ops.read_reg(hw, HV_MCC_UPPER, &phy_data); | 3830 | e1e_rphy(hw, HV_MCC_UPPER, &phy_data); |
3852 | hw->phy.ops.read_reg(hw, HV_MCC_LOWER, &phy_data); | 3831 | e1e_rphy(hw, HV_MCC_LOWER, &phy_data); |
3853 | hw->phy.ops.read_reg(hw, HV_LATECOL_UPPER, &phy_data); | 3832 | e1e_rphy(hw, HV_LATECOL_UPPER, &phy_data); |
3854 | hw->phy.ops.read_reg(hw, HV_LATECOL_LOWER, &phy_data); | 3833 | e1e_rphy(hw, HV_LATECOL_LOWER, &phy_data); |
3855 | hw->phy.ops.read_reg(hw, HV_COLC_UPPER, &phy_data); | 3834 | e1e_rphy(hw, HV_COLC_UPPER, &phy_data); |
3856 | hw->phy.ops.read_reg(hw, HV_COLC_LOWER, &phy_data); | 3835 | e1e_rphy(hw, HV_COLC_LOWER, &phy_data); |
3857 | hw->phy.ops.read_reg(hw, HV_DC_UPPER, &phy_data); | 3836 | e1e_rphy(hw, HV_DC_UPPER, &phy_data); |
3858 | hw->phy.ops.read_reg(hw, HV_DC_LOWER, &phy_data); | 3837 | e1e_rphy(hw, HV_DC_LOWER, &phy_data); |
3859 | hw->phy.ops.read_reg(hw, HV_TNCRS_UPPER, &phy_data); | 3838 | e1e_rphy(hw, HV_TNCRS_UPPER, &phy_data); |
3860 | hw->phy.ops.read_reg(hw, HV_TNCRS_LOWER, &phy_data); | 3839 | e1e_rphy(hw, HV_TNCRS_LOWER, &phy_data); |
3861 | } | 3840 | } |
3862 | } | 3841 | } |
3863 | 3842 | ||
diff --git a/drivers/net/e1000e/lib.c b/drivers/net/e1000e/lib.c index 7e55170a601e..ff2872153b21 100644 --- a/drivers/net/e1000e/lib.c +++ b/drivers/net/e1000e/lib.c | |||
@@ -1135,7 +1135,8 @@ s32 e1000e_config_fc_after_link_up(struct e1000_hw *hw) | |||
1135 | ret_val = e1e_rphy(hw, PHY_AUTONEG_ADV, &mii_nway_adv_reg); | 1135 | ret_val = e1e_rphy(hw, PHY_AUTONEG_ADV, &mii_nway_adv_reg); |
1136 | if (ret_val) | 1136 | if (ret_val) |
1137 | return ret_val; | 1137 | return ret_val; |
1138 | ret_val = e1e_rphy(hw, PHY_LP_ABILITY, &mii_nway_lp_ability_reg); | 1138 | ret_val = |
1139 | e1e_rphy(hw, PHY_LP_ABILITY, &mii_nway_lp_ability_reg); | ||
1139 | if (ret_val) | 1140 | if (ret_val) |
1140 | return ret_val; | 1141 | return ret_val; |
1141 | 1142 | ||
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c index fe50242aa9e6..fa5b60452547 100644 --- a/drivers/net/e1000e/netdev.c +++ b/drivers/net/e1000e/netdev.c | |||
@@ -1980,15 +1980,15 @@ static void e1000_irq_enable(struct e1000_adapter *adapter) | |||
1980 | } | 1980 | } |
1981 | 1981 | ||
1982 | /** | 1982 | /** |
1983 | * e1000_get_hw_control - get control of the h/w from f/w | 1983 | * e1000e_get_hw_control - get control of the h/w from f/w |
1984 | * @adapter: address of board private structure | 1984 | * @adapter: address of board private structure |
1985 | * | 1985 | * |
1986 | * e1000_get_hw_control sets {CTRL_EXT|SWSM}:DRV_LOAD bit. | 1986 | * e1000e_get_hw_control sets {CTRL_EXT|SWSM}:DRV_LOAD bit. |
1987 | * For ASF and Pass Through versions of f/w this means that | 1987 | * For ASF and Pass Through versions of f/w this means that |
1988 | * the driver is loaded. For AMT version (only with 82573) | 1988 | * the driver is loaded. For AMT version (only with 82573) |
1989 | * of the f/w this means that the network i/f is open. | 1989 | * of the f/w this means that the network i/f is open. |
1990 | **/ | 1990 | **/ |
1991 | static void e1000_get_hw_control(struct e1000_adapter *adapter) | 1991 | void e1000e_get_hw_control(struct e1000_adapter *adapter) |
1992 | { | 1992 | { |
1993 | struct e1000_hw *hw = &adapter->hw; | 1993 | struct e1000_hw *hw = &adapter->hw; |
1994 | u32 ctrl_ext; | 1994 | u32 ctrl_ext; |
@@ -2005,16 +2005,16 @@ static void e1000_get_hw_control(struct e1000_adapter *adapter) | |||
2005 | } | 2005 | } |
2006 | 2006 | ||
2007 | /** | 2007 | /** |
2008 | * e1000_release_hw_control - release control of the h/w to f/w | 2008 | * e1000e_release_hw_control - release control of the h/w to f/w |
2009 | * @adapter: address of board private structure | 2009 | * @adapter: address of board private structure |
2010 | * | 2010 | * |
2011 | * e1000_release_hw_control resets {CTRL_EXT|SWSM}:DRV_LOAD bit. | 2011 | * e1000e_release_hw_control resets {CTRL_EXT|SWSM}:DRV_LOAD bit. |
2012 | * For ASF and Pass Through versions of f/w this means that the | 2012 | * For ASF and Pass Through versions of f/w this means that the |
2013 | * driver is no longer loaded. For AMT version (only with 82573) i | 2013 | * driver is no longer loaded. For AMT version (only with 82573) i |
2014 | * of the f/w this means that the network i/f is closed. | 2014 | * of the f/w this means that the network i/f is closed. |
2015 | * | 2015 | * |
2016 | **/ | 2016 | **/ |
2017 | static void e1000_release_hw_control(struct e1000_adapter *adapter) | 2017 | void e1000e_release_hw_control(struct e1000_adapter *adapter) |
2018 | { | 2018 | { |
2019 | struct e1000_hw *hw = &adapter->hw; | 2019 | struct e1000_hw *hw = &adapter->hw; |
2020 | u32 ctrl_ext; | 2020 | u32 ctrl_ext; |
@@ -2445,7 +2445,7 @@ static void e1000_vlan_rx_kill_vid(struct net_device *netdev, u16 vid) | |||
2445 | E1000_MNG_DHCP_COOKIE_STATUS_VLAN) && | 2445 | E1000_MNG_DHCP_COOKIE_STATUS_VLAN) && |
2446 | (vid == adapter->mng_vlan_id)) { | 2446 | (vid == adapter->mng_vlan_id)) { |
2447 | /* release control to f/w */ | 2447 | /* release control to f/w */ |
2448 | e1000_release_hw_control(adapter); | 2448 | e1000e_release_hw_control(adapter); |
2449 | return; | 2449 | return; |
2450 | } | 2450 | } |
2451 | 2451 | ||
@@ -2734,6 +2734,9 @@ static void e1000_setup_rctl(struct e1000_adapter *adapter) | |||
2734 | ret_val = e1000_lv_jumbo_workaround_ich8lan(hw, true); | 2734 | ret_val = e1000_lv_jumbo_workaround_ich8lan(hw, true); |
2735 | else | 2735 | else |
2736 | ret_val = e1000_lv_jumbo_workaround_ich8lan(hw, false); | 2736 | ret_val = e1000_lv_jumbo_workaround_ich8lan(hw, false); |
2737 | |||
2738 | if (ret_val) | ||
2739 | e_dbg("failed to enable jumbo frame workaround mode\n"); | ||
2737 | } | 2740 | } |
2738 | 2741 | ||
2739 | /* Program MC offset vector base */ | 2742 | /* Program MC offset vector base */ |
@@ -3184,7 +3187,6 @@ void e1000e_reset(struct e1000_adapter *adapter) | |||
3184 | ew32(PBA, pba); | 3187 | ew32(PBA, pba); |
3185 | } | 3188 | } |
3186 | 3189 | ||
3187 | |||
3188 | /* | 3190 | /* |
3189 | * flow control settings | 3191 | * flow control settings |
3190 | * | 3192 | * |
@@ -3272,7 +3274,7 @@ void e1000e_reset(struct e1000_adapter *adapter) | |||
3272 | * that the network interface is in control | 3274 | * that the network interface is in control |
3273 | */ | 3275 | */ |
3274 | if (adapter->flags & FLAG_HAS_AMT) | 3276 | if (adapter->flags & FLAG_HAS_AMT) |
3275 | e1000_get_hw_control(adapter); | 3277 | e1000e_get_hw_control(adapter); |
3276 | 3278 | ||
3277 | ew32(WUC, 0); | 3279 | ew32(WUC, 0); |
3278 | 3280 | ||
@@ -3285,6 +3287,13 @@ void e1000e_reset(struct e1000_adapter *adapter) | |||
3285 | ew32(VET, ETH_P_8021Q); | 3287 | ew32(VET, ETH_P_8021Q); |
3286 | 3288 | ||
3287 | e1000e_reset_adaptive(hw); | 3289 | e1000e_reset_adaptive(hw); |
3290 | |||
3291 | if (!netif_running(adapter->netdev) && | ||
3292 | !test_bit(__E1000_TESTING, &adapter->state)) { | ||
3293 | e1000_power_down_phy(adapter); | ||
3294 | return; | ||
3295 | } | ||
3296 | |||
3288 | e1000_get_phy_info(hw); | 3297 | e1000_get_phy_info(hw); |
3289 | 3298 | ||
3290 | if ((adapter->flags & FLAG_HAS_SMART_POWER_DOWN) && | 3299 | if ((adapter->flags & FLAG_HAS_SMART_POWER_DOWN) && |
@@ -3570,7 +3579,7 @@ static int e1000_open(struct net_device *netdev) | |||
3570 | * interface is now open and reset the part to a known state. | 3579 | * interface is now open and reset the part to a known state. |
3571 | */ | 3580 | */ |
3572 | if (adapter->flags & FLAG_HAS_AMT) { | 3581 | if (adapter->flags & FLAG_HAS_AMT) { |
3573 | e1000_get_hw_control(adapter); | 3582 | e1000e_get_hw_control(adapter); |
3574 | e1000e_reset(adapter); | 3583 | e1000e_reset(adapter); |
3575 | } | 3584 | } |
3576 | 3585 | ||
@@ -3634,7 +3643,7 @@ static int e1000_open(struct net_device *netdev) | |||
3634 | return 0; | 3643 | return 0; |
3635 | 3644 | ||
3636 | err_req_irq: | 3645 | err_req_irq: |
3637 | e1000_release_hw_control(adapter); | 3646 | e1000e_release_hw_control(adapter); |
3638 | e1000_power_down_phy(adapter); | 3647 | e1000_power_down_phy(adapter); |
3639 | e1000e_free_rx_resources(adapter); | 3648 | e1000e_free_rx_resources(adapter); |
3640 | err_setup_rx: | 3649 | err_setup_rx: |
@@ -3689,8 +3698,9 @@ static int e1000_close(struct net_device *netdev) | |||
3689 | * If AMT is enabled, let the firmware know that the network | 3698 | * If AMT is enabled, let the firmware know that the network |
3690 | * interface is now closed | 3699 | * interface is now closed |
3691 | */ | 3700 | */ |
3692 | if (adapter->flags & FLAG_HAS_AMT) | 3701 | if ((adapter->flags & FLAG_HAS_AMT) && |
3693 | e1000_release_hw_control(adapter); | 3702 | !test_bit(__E1000_TESTING, &adapter->state)) |
3703 | e1000e_release_hw_control(adapter); | ||
3694 | 3704 | ||
3695 | if ((adapter->flags & FLAG_HAS_ERT) || | 3705 | if ((adapter->flags & FLAG_HAS_ERT) || |
3696 | (adapter->hw.mac.type == e1000_pch2lan)) | 3706 | (adapter->hw.mac.type == e1000_pch2lan)) |
@@ -5209,7 +5219,7 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool *enable_wake, | |||
5209 | * Release control of h/w to f/w. If f/w is AMT enabled, this | 5219 | * Release control of h/w to f/w. If f/w is AMT enabled, this |
5210 | * would have already happened in close and is redundant. | 5220 | * would have already happened in close and is redundant. |
5211 | */ | 5221 | */ |
5212 | e1000_release_hw_control(adapter); | 5222 | e1000e_release_hw_control(adapter); |
5213 | 5223 | ||
5214 | pci_disable_device(pdev); | 5224 | pci_disable_device(pdev); |
5215 | 5225 | ||
@@ -5366,7 +5376,7 @@ static int __e1000_resume(struct pci_dev *pdev) | |||
5366 | * under the control of the driver. | 5376 | * under the control of the driver. |
5367 | */ | 5377 | */ |
5368 | if (!(adapter->flags & FLAG_HAS_AMT)) | 5378 | if (!(adapter->flags & FLAG_HAS_AMT)) |
5369 | e1000_get_hw_control(adapter); | 5379 | e1000e_get_hw_control(adapter); |
5370 | 5380 | ||
5371 | return 0; | 5381 | return 0; |
5372 | } | 5382 | } |
@@ -5613,7 +5623,7 @@ static void e1000_io_resume(struct pci_dev *pdev) | |||
5613 | * under the control of the driver. | 5623 | * under the control of the driver. |
5614 | */ | 5624 | */ |
5615 | if (!(adapter->flags & FLAG_HAS_AMT)) | 5625 | if (!(adapter->flags & FLAG_HAS_AMT)) |
5616 | e1000_get_hw_control(adapter); | 5626 | e1000e_get_hw_control(adapter); |
5617 | 5627 | ||
5618 | } | 5628 | } |
5619 | 5629 | ||
@@ -5636,7 +5646,7 @@ static void e1000_print_device_info(struct e1000_adapter *adapter) | |||
5636 | ret_val = e1000_read_pba_string_generic(hw, pba_str, | 5646 | ret_val = e1000_read_pba_string_generic(hw, pba_str, |
5637 | E1000_PBANUM_LENGTH); | 5647 | E1000_PBANUM_LENGTH); |
5638 | if (ret_val) | 5648 | if (ret_val) |
5639 | strcpy(pba_str, "Unknown"); | 5649 | strncpy((char *)pba_str, "Unknown", sizeof(pba_str) - 1); |
5640 | e_info("MAC: %d, PHY: %d, PBA No: %s\n", | 5650 | e_info("MAC: %d, PHY: %d, PBA No: %s\n", |
5641 | hw->mac.type, hw->phy.type, pba_str); | 5651 | hw->mac.type, hw->phy.type, pba_str); |
5642 | } | 5652 | } |
@@ -5963,9 +5973,9 @@ static int __devinit e1000_probe(struct pci_dev *pdev, | |||
5963 | * under the control of the driver. | 5973 | * under the control of the driver. |
5964 | */ | 5974 | */ |
5965 | if (!(adapter->flags & FLAG_HAS_AMT)) | 5975 | if (!(adapter->flags & FLAG_HAS_AMT)) |
5966 | e1000_get_hw_control(adapter); | 5976 | e1000e_get_hw_control(adapter); |
5967 | 5977 | ||
5968 | strcpy(netdev->name, "eth%d"); | 5978 | strncpy(netdev->name, "eth%d", sizeof(netdev->name) - 1); |
5969 | err = register_netdev(netdev); | 5979 | err = register_netdev(netdev); |
5970 | if (err) | 5980 | if (err) |
5971 | goto err_register; | 5981 | goto err_register; |
@@ -5982,12 +5992,11 @@ static int __devinit e1000_probe(struct pci_dev *pdev, | |||
5982 | 5992 | ||
5983 | err_register: | 5993 | err_register: |
5984 | if (!(adapter->flags & FLAG_HAS_AMT)) | 5994 | if (!(adapter->flags & FLAG_HAS_AMT)) |
5985 | e1000_release_hw_control(adapter); | 5995 | e1000e_release_hw_control(adapter); |
5986 | err_eeprom: | 5996 | err_eeprom: |
5987 | if (!e1000_check_reset_block(&adapter->hw)) | 5997 | if (!e1000_check_reset_block(&adapter->hw)) |
5988 | e1000_phy_hw_reset(&adapter->hw); | 5998 | e1000_phy_hw_reset(&adapter->hw); |
5989 | err_hw_init: | 5999 | err_hw_init: |
5990 | |||
5991 | kfree(adapter->tx_ring); | 6000 | kfree(adapter->tx_ring); |
5992 | kfree(adapter->rx_ring); | 6001 | kfree(adapter->rx_ring); |
5993 | err_sw_init: | 6002 | err_sw_init: |
@@ -6053,7 +6062,7 @@ static void __devexit e1000_remove(struct pci_dev *pdev) | |||
6053 | * Release control of h/w to f/w. If f/w is AMT enabled, this | 6062 | * Release control of h/w to f/w. If f/w is AMT enabled, this |
6054 | * would have already happened in close and is redundant. | 6063 | * would have already happened in close and is redundant. |
6055 | */ | 6064 | */ |
6056 | e1000_release_hw_control(adapter); | 6065 | e1000e_release_hw_control(adapter); |
6057 | 6066 | ||
6058 | e1000e_reset_interrupt_capability(adapter); | 6067 | e1000e_reset_interrupt_capability(adapter); |
6059 | kfree(adapter->tx_ring); | 6068 | kfree(adapter->tx_ring); |
diff --git a/drivers/net/e1000e/phy.c b/drivers/net/e1000e/phy.c index 1781efeb55e3..a640f1c369ae 100644 --- a/drivers/net/e1000e/phy.c +++ b/drivers/net/e1000e/phy.c | |||
@@ -637,12 +637,11 @@ s32 e1000e_write_kmrn_reg_locked(struct e1000_hw *hw, u32 offset, u16 data) | |||
637 | **/ | 637 | **/ |
638 | s32 e1000_copper_link_setup_82577(struct e1000_hw *hw) | 638 | s32 e1000_copper_link_setup_82577(struct e1000_hw *hw) |
639 | { | 639 | { |
640 | struct e1000_phy_info *phy = &hw->phy; | ||
641 | s32 ret_val; | 640 | s32 ret_val; |
642 | u16 phy_data; | 641 | u16 phy_data; |
643 | 642 | ||
644 | /* Enable CRS on TX. This must be set for half-duplex operation. */ | 643 | /* Enable CRS on TX. This must be set for half-duplex operation. */ |
645 | ret_val = phy->ops.read_reg(hw, I82577_CFG_REG, &phy_data); | 644 | ret_val = e1e_rphy(hw, I82577_CFG_REG, &phy_data); |
646 | if (ret_val) | 645 | if (ret_val) |
647 | goto out; | 646 | goto out; |
648 | 647 | ||
@@ -651,7 +650,7 @@ s32 e1000_copper_link_setup_82577(struct e1000_hw *hw) | |||
651 | /* Enable downshift */ | 650 | /* Enable downshift */ |
652 | phy_data |= I82577_CFG_ENABLE_DOWNSHIFT; | 651 | phy_data |= I82577_CFG_ENABLE_DOWNSHIFT; |
653 | 652 | ||
654 | ret_val = phy->ops.write_reg(hw, I82577_CFG_REG, phy_data); | 653 | ret_val = e1e_wphy(hw, I82577_CFG_REG, phy_data); |
655 | 654 | ||
656 | out: | 655 | out: |
657 | return ret_val; | 656 | return ret_val; |
@@ -774,16 +773,14 @@ s32 e1000e_copper_link_setup_m88(struct e1000_hw *hw) | |||
774 | } | 773 | } |
775 | 774 | ||
776 | if (phy->type == e1000_phy_82578) { | 775 | if (phy->type == e1000_phy_82578) { |
777 | ret_val = phy->ops.read_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, | 776 | ret_val = e1e_rphy(hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_data); |
778 | &phy_data); | ||
779 | if (ret_val) | 777 | if (ret_val) |
780 | return ret_val; | 778 | return ret_val; |
781 | 779 | ||
782 | /* 82578 PHY - set the downshift count to 1x. */ | 780 | /* 82578 PHY - set the downshift count to 1x. */ |
783 | phy_data |= I82578_EPSCR_DOWNSHIFT_ENABLE; | 781 | phy_data |= I82578_EPSCR_DOWNSHIFT_ENABLE; |
784 | phy_data &= ~I82578_EPSCR_DOWNSHIFT_COUNTER_MASK; | 782 | phy_data &= ~I82578_EPSCR_DOWNSHIFT_COUNTER_MASK; |
785 | ret_val = phy->ops.write_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, | 783 | ret_val = e1e_wphy(hw, M88E1000_EXT_PHY_SPEC_CTRL, phy_data); |
786 | phy_data); | ||
787 | if (ret_val) | 784 | if (ret_val) |
788 | return ret_val; | 785 | return ret_val; |
789 | } | 786 | } |
@@ -1319,9 +1316,8 @@ s32 e1000e_phy_force_speed_duplex_m88(struct e1000_hw *hw) | |||
1319 | * We didn't get link. | 1316 | * We didn't get link. |
1320 | * Reset the DSP and cross our fingers. | 1317 | * Reset the DSP and cross our fingers. |
1321 | */ | 1318 | */ |
1322 | ret_val = e1e_wphy(hw, | 1319 | ret_val = e1e_wphy(hw, M88E1000_PHY_PAGE_SELECT, |
1323 | M88E1000_PHY_PAGE_SELECT, | 1320 | 0x001d); |
1324 | 0x001d); | ||
1325 | if (ret_val) | 1321 | if (ret_val) |
1326 | return ret_val; | 1322 | return ret_val; |
1327 | ret_val = e1000e_phy_reset_dsp(hw); | 1323 | ret_val = e1000e_phy_reset_dsp(hw); |
@@ -3071,12 +3067,12 @@ s32 e1000_link_stall_workaround_hv(struct e1000_hw *hw) | |||
3071 | goto out; | 3067 | goto out; |
3072 | 3068 | ||
3073 | /* Do not apply workaround if in PHY loopback bit 14 set */ | 3069 | /* Do not apply workaround if in PHY loopback bit 14 set */ |
3074 | hw->phy.ops.read_reg(hw, PHY_CONTROL, &data); | 3070 | e1e_rphy(hw, PHY_CONTROL, &data); |
3075 | if (data & PHY_CONTROL_LB) | 3071 | if (data & PHY_CONTROL_LB) |
3076 | goto out; | 3072 | goto out; |
3077 | 3073 | ||
3078 | /* check if link is up and at 1Gbps */ | 3074 | /* check if link is up and at 1Gbps */ |
3079 | ret_val = hw->phy.ops.read_reg(hw, BM_CS_STATUS, &data); | 3075 | ret_val = e1e_rphy(hw, BM_CS_STATUS, &data); |
3080 | if (ret_val) | 3076 | if (ret_val) |
3081 | goto out; | 3077 | goto out; |
3082 | 3078 | ||
@@ -3092,14 +3088,12 @@ s32 e1000_link_stall_workaround_hv(struct e1000_hw *hw) | |||
3092 | mdelay(200); | 3088 | mdelay(200); |
3093 | 3089 | ||
3094 | /* flush the packets in the fifo buffer */ | 3090 | /* flush the packets in the fifo buffer */ |
3095 | ret_val = hw->phy.ops.write_reg(hw, HV_MUX_DATA_CTRL, | 3091 | ret_val = e1e_wphy(hw, HV_MUX_DATA_CTRL, HV_MUX_DATA_CTRL_GEN_TO_MAC | |
3096 | HV_MUX_DATA_CTRL_GEN_TO_MAC | | 3092 | HV_MUX_DATA_CTRL_FORCE_SPEED); |
3097 | HV_MUX_DATA_CTRL_FORCE_SPEED); | ||
3098 | if (ret_val) | 3093 | if (ret_val) |
3099 | goto out; | 3094 | goto out; |
3100 | 3095 | ||
3101 | ret_val = hw->phy.ops.write_reg(hw, HV_MUX_DATA_CTRL, | 3096 | ret_val = e1e_wphy(hw, HV_MUX_DATA_CTRL, HV_MUX_DATA_CTRL_GEN_TO_MAC); |
3102 | HV_MUX_DATA_CTRL_GEN_TO_MAC); | ||
3103 | 3097 | ||
3104 | out: | 3098 | out: |
3105 | return ret_val; | 3099 | return ret_val; |
@@ -3119,7 +3113,7 @@ s32 e1000_check_polarity_82577(struct e1000_hw *hw) | |||
3119 | s32 ret_val; | 3113 | s32 ret_val; |
3120 | u16 data; | 3114 | u16 data; |
3121 | 3115 | ||
3122 | ret_val = phy->ops.read_reg(hw, I82577_PHY_STATUS_2, &data); | 3116 | ret_val = e1e_rphy(hw, I82577_PHY_STATUS_2, &data); |
3123 | 3117 | ||
3124 | if (!ret_val) | 3118 | if (!ret_val) |
3125 | phy->cable_polarity = (data & I82577_PHY_STATUS2_REV_POLARITY) | 3119 | phy->cable_polarity = (data & I82577_PHY_STATUS2_REV_POLARITY) |
@@ -3142,13 +3136,13 @@ s32 e1000_phy_force_speed_duplex_82577(struct e1000_hw *hw) | |||
3142 | u16 phy_data; | 3136 | u16 phy_data; |
3143 | bool link; | 3137 | bool link; |
3144 | 3138 | ||
3145 | ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_data); | 3139 | ret_val = e1e_rphy(hw, PHY_CONTROL, &phy_data); |
3146 | if (ret_val) | 3140 | if (ret_val) |
3147 | goto out; | 3141 | goto out; |
3148 | 3142 | ||
3149 | e1000e_phy_force_speed_duplex_setup(hw, &phy_data); | 3143 | e1000e_phy_force_speed_duplex_setup(hw, &phy_data); |
3150 | 3144 | ||
3151 | ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_data); | 3145 | ret_val = e1e_wphy(hw, PHY_CONTROL, phy_data); |
3152 | if (ret_val) | 3146 | if (ret_val) |
3153 | goto out; | 3147 | goto out; |
3154 | 3148 | ||
@@ -3212,7 +3206,7 @@ s32 e1000_get_phy_info_82577(struct e1000_hw *hw) | |||
3212 | if (ret_val) | 3206 | if (ret_val) |
3213 | goto out; | 3207 | goto out; |
3214 | 3208 | ||
3215 | ret_val = phy->ops.read_reg(hw, I82577_PHY_STATUS_2, &data); | 3209 | ret_val = e1e_rphy(hw, I82577_PHY_STATUS_2, &data); |
3216 | if (ret_val) | 3210 | if (ret_val) |
3217 | goto out; | 3211 | goto out; |
3218 | 3212 | ||
@@ -3224,7 +3218,7 @@ s32 e1000_get_phy_info_82577(struct e1000_hw *hw) | |||
3224 | if (ret_val) | 3218 | if (ret_val) |
3225 | goto out; | 3219 | goto out; |
3226 | 3220 | ||
3227 | ret_val = phy->ops.read_reg(hw, PHY_1000T_STATUS, &data); | 3221 | ret_val = e1e_rphy(hw, PHY_1000T_STATUS, &data); |
3228 | if (ret_val) | 3222 | if (ret_val) |
3229 | goto out; | 3223 | goto out; |
3230 | 3224 | ||
@@ -3258,7 +3252,7 @@ s32 e1000_get_cable_length_82577(struct e1000_hw *hw) | |||
3258 | s32 ret_val; | 3252 | s32 ret_val; |
3259 | u16 phy_data, length; | 3253 | u16 phy_data, length; |
3260 | 3254 | ||
3261 | ret_val = phy->ops.read_reg(hw, I82577_PHY_DIAG_STATUS, &phy_data); | 3255 | ret_val = e1e_rphy(hw, I82577_PHY_DIAG_STATUS, &phy_data); |
3262 | if (ret_val) | 3256 | if (ret_val) |
3263 | goto out; | 3257 | goto out; |
3264 | 3258 | ||