diff options
-rw-r--r-- | drivers/net/e1000/e1000_ethtool.c | 2 | ||||
-rw-r--r-- | drivers/net/e1000/e1000_hw.c | 12 | ||||
-rw-r--r-- | drivers/net/e1000/e1000_hw.h | 19 | ||||
-rw-r--r-- | drivers/net/e1000/e1000_main.c | 5 |
4 files changed, 36 insertions, 2 deletions
diff --git a/drivers/net/e1000/e1000_ethtool.c b/drivers/net/e1000/e1000_ethtool.c index 8363d8d86318..0f9c86057a58 100644 --- a/drivers/net/e1000/e1000_ethtool.c +++ b/drivers/net/e1000/e1000_ethtool.c | |||
@@ -1628,6 +1628,7 @@ e1000_get_wol(struct net_device *netdev, struct ethtool_wolinfo *wol) | |||
1628 | 1628 | ||
1629 | case E1000_DEV_ID_82546EB_FIBER: | 1629 | case E1000_DEV_ID_82546EB_FIBER: |
1630 | case E1000_DEV_ID_82546GB_FIBER: | 1630 | case E1000_DEV_ID_82546GB_FIBER: |
1631 | case E1000_DEV_ID_82571EB_FIBER: | ||
1631 | /* Wake events only supported on port A for dual fiber */ | 1632 | /* Wake events only supported on port A for dual fiber */ |
1632 | if(E1000_READ_REG(hw, STATUS) & E1000_STATUS_FUNC_1) { | 1633 | if(E1000_READ_REG(hw, STATUS) & E1000_STATUS_FUNC_1) { |
1633 | wol->supported = 0; | 1634 | wol->supported = 0; |
@@ -1671,6 +1672,7 @@ e1000_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol) | |||
1671 | 1672 | ||
1672 | case E1000_DEV_ID_82546EB_FIBER: | 1673 | case E1000_DEV_ID_82546EB_FIBER: |
1673 | case E1000_DEV_ID_82546GB_FIBER: | 1674 | case E1000_DEV_ID_82546GB_FIBER: |
1675 | case E1000_DEV_ID_82571EB_FIBER: | ||
1674 | /* Wake events only supported on port A for dual fiber */ | 1676 | /* Wake events only supported on port A for dual fiber */ |
1675 | if(E1000_READ_REG(hw, STATUS) & E1000_STATUS_FUNC_1) | 1677 | if(E1000_READ_REG(hw, STATUS) & E1000_STATUS_FUNC_1) |
1676 | return wol->wolopts ? -EOPNOTSUPP : 0; | 1678 | return wol->wolopts ? -EOPNOTSUPP : 0; |
diff --git a/drivers/net/e1000/e1000_hw.c b/drivers/net/e1000/e1000_hw.c index ac227c7847ff..2437d362ff63 100644 --- a/drivers/net/e1000/e1000_hw.c +++ b/drivers/net/e1000/e1000_hw.c | |||
@@ -318,6 +318,8 @@ e1000_set_mac_type(struct e1000_hw *hw) | |||
318 | case E1000_DEV_ID_82546GB_FIBER: | 318 | case E1000_DEV_ID_82546GB_FIBER: |
319 | case E1000_DEV_ID_82546GB_SERDES: | 319 | case E1000_DEV_ID_82546GB_SERDES: |
320 | case E1000_DEV_ID_82546GB_PCIE: | 320 | case E1000_DEV_ID_82546GB_PCIE: |
321 | case E1000_DEV_ID_82546GB_QUAD_COPPER: | ||
322 | case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3: | ||
321 | hw->mac_type = e1000_82546_rev_3; | 323 | hw->mac_type = e1000_82546_rev_3; |
322 | break; | 324 | break; |
323 | case E1000_DEV_ID_82541EI: | 325 | case E1000_DEV_ID_82541EI: |
@@ -639,6 +641,7 @@ e1000_init_hw(struct e1000_hw *hw) | |||
639 | uint16_t cmd_mmrbc; | 641 | uint16_t cmd_mmrbc; |
640 | uint16_t stat_mmrbc; | 642 | uint16_t stat_mmrbc; |
641 | uint32_t mta_size; | 643 | uint32_t mta_size; |
644 | uint32_t ctrl_ext; | ||
642 | 645 | ||
643 | DEBUGFUNC("e1000_init_hw"); | 646 | DEBUGFUNC("e1000_init_hw"); |
644 | 647 | ||
@@ -774,6 +777,15 @@ e1000_init_hw(struct e1000_hw *hw) | |||
774 | */ | 777 | */ |
775 | e1000_clear_hw_cntrs(hw); | 778 | e1000_clear_hw_cntrs(hw); |
776 | 779 | ||
780 | if (hw->device_id == E1000_DEV_ID_82546GB_QUAD_COPPER || | ||
781 | hw->device_id == E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3) { | ||
782 | ctrl_ext = E1000_READ_REG(hw, CTRL_EXT); | ||
783 | /* Relaxed ordering must be disabled to avoid a parity | ||
784 | * error crash in a PCI slot. */ | ||
785 | ctrl_ext |= E1000_CTRL_EXT_RO_DIS; | ||
786 | E1000_WRITE_REG(hw, CTRL_EXT, ctrl_ext); | ||
787 | } | ||
788 | |||
777 | return ret_val; | 789 | return ret_val; |
778 | } | 790 | } |
779 | 791 | ||
diff --git a/drivers/net/e1000/e1000_hw.h b/drivers/net/e1000/e1000_hw.h index 600570ff254b..0b8f6f2b774b 100644 --- a/drivers/net/e1000/e1000_hw.h +++ b/drivers/net/e1000/e1000_hw.h | |||
@@ -439,6 +439,7 @@ int32_t e1000_check_phy_reset_block(struct e1000_hw *hw); | |||
439 | #define E1000_DEV_ID_82546GB_FIBER 0x107A | 439 | #define E1000_DEV_ID_82546GB_FIBER 0x107A |
440 | #define E1000_DEV_ID_82546GB_SERDES 0x107B | 440 | #define E1000_DEV_ID_82546GB_SERDES 0x107B |
441 | #define E1000_DEV_ID_82546GB_PCIE 0x108A | 441 | #define E1000_DEV_ID_82546GB_PCIE 0x108A |
442 | #define E1000_DEV_ID_82546GB_QUAD_COPPER 0x1099 | ||
442 | #define E1000_DEV_ID_82547EI 0x1019 | 443 | #define E1000_DEV_ID_82547EI 0x1019 |
443 | #define E1000_DEV_ID_82571EB_COPPER 0x105E | 444 | #define E1000_DEV_ID_82571EB_COPPER 0x105E |
444 | #define E1000_DEV_ID_82571EB_FIBER 0x105F | 445 | #define E1000_DEV_ID_82571EB_FIBER 0x105F |
@@ -449,6 +450,7 @@ int32_t e1000_check_phy_reset_block(struct e1000_hw *hw); | |||
449 | #define E1000_DEV_ID_82573E 0x108B | 450 | #define E1000_DEV_ID_82573E 0x108B |
450 | #define E1000_DEV_ID_82573E_IAMT 0x108C | 451 | #define E1000_DEV_ID_82573E_IAMT 0x108C |
451 | #define E1000_DEV_ID_82573L 0x109A | 452 | #define E1000_DEV_ID_82573L 0x109A |
453 | #define E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3 0x10B5 | ||
452 | 454 | ||
453 | 455 | ||
454 | #define NODE_ADDRESS_SIZE 6 | 456 | #define NODE_ADDRESS_SIZE 6 |
@@ -1955,6 +1957,23 @@ struct e1000_host_command_info { | |||
1955 | 1957 | ||
1956 | #define E1000_MDALIGN 4096 | 1958 | #define E1000_MDALIGN 4096 |
1957 | 1959 | ||
1960 | /* PCI-Ex registers */ | ||
1961 | |||
1962 | /* PCI-Ex Control Register */ | ||
1963 | #define E1000_GCR_RXD_NO_SNOOP 0x00000001 | ||
1964 | #define E1000_GCR_RXDSCW_NO_SNOOP 0x00000002 | ||
1965 | #define E1000_GCR_RXDSCR_NO_SNOOP 0x00000004 | ||
1966 | #define E1000_GCR_TXD_NO_SNOOP 0x00000008 | ||
1967 | #define E1000_GCR_TXDSCW_NO_SNOOP 0x00000010 | ||
1968 | #define E1000_GCR_TXDSCR_NO_SNOOP 0x00000020 | ||
1969 | |||
1970 | #define PCI_EX_NO_SNOOP_ALL (E1000_GCR_RXD_NO_SNOOP | \ | ||
1971 | E1000_GCR_RXDSCW_NO_SNOOP | \ | ||
1972 | E1000_GCR_RXDSCR_NO_SNOOP | \ | ||
1973 | E1000_GCR TXD_NO_SNOOP | \ | ||
1974 | E1000_GCR_TXDSCW_NO_SNOOP | \ | ||
1975 | E1000_GCR_TXDSCR_NO_SNOOP) | ||
1976 | |||
1958 | #define E1000_GCR_L1_ACT_WITHOUT_L0S_RX 0x08000000 | 1977 | #define E1000_GCR_L1_ACT_WITHOUT_L0S_RX 0x08000000 |
1959 | /* Function Active and Power State to MNG */ | 1978 | /* Function Active and Power State to MNG */ |
1960 | #define E1000_FACTPS_FUNC0_POWER_STATE_MASK 0x00000003 | 1979 | #define E1000_FACTPS_FUNC0_POWER_STATE_MASK 0x00000003 |
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c index 72a80099f4ae..ca4e5e9255d2 100644 --- a/drivers/net/e1000/e1000_main.c +++ b/drivers/net/e1000/e1000_main.c | |||
@@ -97,7 +97,9 @@ static struct pci_device_id e1000_pci_tbl[] = { | |||
97 | INTEL_E1000_ETHERNET_DEVICE(0x108A), | 97 | INTEL_E1000_ETHERNET_DEVICE(0x108A), |
98 | INTEL_E1000_ETHERNET_DEVICE(0x108B), | 98 | INTEL_E1000_ETHERNET_DEVICE(0x108B), |
99 | INTEL_E1000_ETHERNET_DEVICE(0x108C), | 99 | INTEL_E1000_ETHERNET_DEVICE(0x108C), |
100 | INTEL_E1000_ETHERNET_DEVICE(0x1099), | ||
100 | INTEL_E1000_ETHERNET_DEVICE(0x109A), | 101 | INTEL_E1000_ETHERNET_DEVICE(0x109A), |
102 | INTEL_E1000_ETHERNET_DEVICE(0x10B5), | ||
101 | /* required last entry */ | 103 | /* required last entry */ |
102 | {0,} | 104 | {0,} |
103 | }; | 105 | }; |
@@ -791,8 +793,7 @@ e1000_probe(struct pci_dev *pdev, | |||
791 | case e1000_82546: | 793 | case e1000_82546: |
792 | case e1000_82546_rev_3: | 794 | case e1000_82546_rev_3: |
793 | case e1000_82571: | 795 | case e1000_82571: |
794 | if((E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_FUNC_1) | 796 | if(E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_FUNC_1){ |
795 | && (adapter->hw.media_type == e1000_media_type_copper)) { | ||
796 | e1000_read_eeprom(&adapter->hw, | 797 | e1000_read_eeprom(&adapter->hw, |
797 | EEPROM_INIT_CONTROL3_PORT_B, 1, &eeprom_data); | 798 | EEPROM_INIT_CONTROL3_PORT_B, 1, &eeprom_data); |
798 | break; | 799 | break; |