Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4ccc12ae authored by Jesse Brandeburg's avatar Jesse Brandeburg Committed by Auke Kok
Browse files

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: default avatarAuke Kok <auke-jan.h.kok@intel.com>
parent 5826cade
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -461,6 +461,7 @@ 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->mac_type < e1000_82571 &&
	    hw->media_type == e1000_media_type_copper) {
		regs_buff[26] = E1000_READ_REG(hw, MANC);
	}
+14 −7
Original line number Diff line number Diff line
@@ -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,7 +1079,8 @@ e1000_remove(struct pci_dev *pdev)

	flush_scheduled_work();

	if (adapter->hw.mac_type < e1000_82571 &&
	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) {
@@ -4773,7 +4777,8 @@ e1000_suspend(struct pci_dev *pdev, pm_message_t state)
		pci_enable_wake(pdev, PCI_D3cold, 0);
	}

	if (adapter->hw.mac_type < e1000_82571 &&
	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) {
@@ -4825,7 +4830,8 @@ e1000_resume(struct pci_dev *pdev)

	netif_device_attach(netdev);

	if (adapter->hw.mac_type < e1000_82571 &&
	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);
@@ -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);