aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/e1000/e1000_ethtool.c2
-rw-r--r--drivers/net/e1000/e1000_hw.c12
-rw-r--r--drivers/net/e1000/e1000_hw.h19
-rw-r--r--drivers/net/e1000/e1000_main.c5
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;