e1000: FIX: don't poke at manageability registers for incompatible adapters
authorJesse Brandeburg <jesse.brandeburg@intel.com>
Tue, 24 Oct 2006 21:45:53 +0000 (14:45 -0700)
committerAuke Kok <juke-jan.h.kok@intel.com>
Tue, 24 Oct 2006 21:45:53 +0000 (14:45 -0700)
The MANC register should not be read for PCI-E adapters at all, as well as
82543 and older where 82543 would master abort when this register was
accessed.

Signed-off-by: Auke Kok <auke-jan.h.kok@intel.com>
drivers/net/e1000/e1000_ethtool.c
drivers/net/e1000/e1000_main.c

index 773821e4cf57da5cb0fee7bc00187f08f37eacfe..71fb27880f65f8a5a6f3fbcbf76b0142e6bbec41 100644 (file)
@@ -461,7 +461,8 @@ e1000_get_regs(struct net_device *netdev,
        regs_buff[24] = (uint32_t)phy_data;  /* phy local receiver status */
        regs_buff[25] = regs_buff[24];  /* phy remote receiver status */
        if (hw->mac_type >= e1000_82540 &&
-          hw->media_type == e1000_media_type_copper) {
+           hw->mac_type < e1000_82571 &&
+           hw->media_type == e1000_media_type_copper) {
                regs_buff[26] = E1000_READ_REG(hw, MANC);
        }
 }
index fa849831d0998ead7db0fbe09f6b20c5398a0018..fb83082c4f7591d49afbf2ead7a9fe740838e98b 100644 (file)
@@ -699,7 +699,10 @@ e1000_reset(struct e1000_adapter *adapter)
                                    phy_data);
        }
 
-       if ((adapter->en_mng_pt) && (adapter->hw.mac_type < e1000_82571)) {
+       if ((adapter->en_mng_pt) &&
+           (adapter->hw.mac_type >= e1000_82540) &&
+           (adapter->hw.mac_type < e1000_82571) &&
+           (adapter->hw.media_type == e1000_media_type_copper)) {
                manc = E1000_READ_REG(&adapter->hw, MANC);
                manc |= (E1000_MANC_ARP_EN | E1000_MANC_EN_MNG2HOST);
                E1000_WRITE_REG(&adapter->hw, MANC, manc);
@@ -1076,8 +1079,9 @@ e1000_remove(struct pci_dev *pdev)
 
        flush_scheduled_work();
 
-       if (adapter->hw.mac_type < e1000_82571 &&
-          adapter->hw.media_type == e1000_media_type_copper) {
+       if (adapter->hw.mac_type >= e1000_82540 &&
+           adapter->hw.mac_type < e1000_82571 &&
+           adapter->hw.media_type == e1000_media_type_copper) {
                manc = E1000_READ_REG(&adapter->hw, MANC);
                if (manc & E1000_MANC_SMBUS_EN) {
                        manc |= E1000_MANC_ARP_EN;
@@ -4773,8 +4777,9 @@ e1000_suspend(struct pci_dev *pdev, pm_message_t state)
                pci_enable_wake(pdev, PCI_D3cold, 0);
        }
 
-       if (adapter->hw.mac_type < e1000_82571 &&
-          adapter->hw.media_type == e1000_media_type_copper) {
+       if (adapter->hw.mac_type >= e1000_82540 &&
+           adapter->hw.mac_type < e1000_82571 &&
+           adapter->hw.media_type == e1000_media_type_copper) {
                manc = E1000_READ_REG(&adapter->hw, MANC);
                if (manc & E1000_MANC_SMBUS_EN) {
                        manc |= E1000_MANC_ARP_EN;
@@ -4825,8 +4830,9 @@ e1000_resume(struct pci_dev *pdev)
 
        netif_device_attach(netdev);
 
-       if (adapter->hw.mac_type < e1000_82571 &&
-          adapter->hw.media_type == e1000_media_type_copper) {
+       if (adapter->hw.mac_type >= e1000_82540 &&
+           adapter->hw.mac_type < e1000_82571 &&
+           adapter->hw.media_type == e1000_media_type_copper) {
                manc = E1000_READ_REG(&adapter->hw, MANC);
                manc &= ~(E1000_MANC_ARP_EN);
                E1000_WRITE_REG(&adapter->hw, MANC, manc);
@@ -4944,6 +4950,7 @@ static void e1000_io_resume(struct pci_dev *pdev)
        netif_device_attach(netdev);
 
        if (adapter->hw.mac_type >= e1000_82540 &&
+           adapter->hw.mac_type < e1000_82571 &&
            adapter->hw.media_type == e1000_media_type_copper) {
                manc = E1000_READ_REG(&adapter->hw, MANC);
                manc &= ~(E1000_MANC_ARP_EN);