mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-11 16:29:05 +00:00
e1000: FIX: don't poke at manageability registers for incompatible adapters
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>
This commit is contained in:
parent
5826cade43
commit
4ccc12aeec
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user