Commit 11697cfc authored by David S. Miller's avatar David S. Miller
Browse files


Jeff Kirsher says:

====================
Intel Wired LAN Driver Updates 2019-06-28

This series contains a smorgasbord of updates to many of the Intel
drivers.

Gustavo A. R. Silva updates the ice and iavf drivers to use the
strcut_size() helper where possible.

Miguel increases the pause and refresh time for flow control in the
e1000e driver during reset for certain devices.

Dann Frazier fixes a potential NULL pointer dereference in ixgbe driver
when using non-IPSec enabled devices.

Colin Ian King fixes a potential overflow during a shift in the ixgbe
driver.  Also fixes a potential NULL pointer dereference in the iavf
driver by adding a check.

Venkatesh Srinivas converts the e1000 driver to use dma_wmb() instead of
wmb() for doorbell writes to avoid SFENCEs in the transmit and receive
paths.

Arjan updates the e1000e driver to improve boot time by over 100 msec by
reducing the usleep ranges suring system startup.

Artem updates the igb driver register dump in ethtool, first prepares
the register dump for future additions of registers in the dump, then
secondly, adds the RR2DCDELAY register to the dump.  When dealing with
time-sensitive networks, this register is helpful in determining your
latency from the device to the ring.

Alex fixes the ixgbevf driver to use the current cached link state,
rather than trying to re-check the value from the PF.

Harshitha adds support for MACVLAN offloads in i40e by using channels as
MACVLAN interfaces.

Detlev Casanova updates the e1000e driver to use delayed work instead of
timers to run the watchdog.

Vitaly fixes an issue in e1000e, where when disconnecting and
reconnecting the physical cable connection, the NIC enters a DMoff
state.  This state causes a mismatch in link and duplexing, so check the
PCIm function state and perform a PHY reset when in this state to
resolve the issue.
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents f072218c def4ec6d
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -3019,7 +3019,7 @@ static void e1000_tx_queue(struct e1000_adapter *adapter,
	 * applicable for weak-ordered memory model archs,
	 * such as IA-64).
	 */
	wmb();
	dma_wmb();

	tx_ring->next_to_use = i;
}
@@ -4540,7 +4540,7 @@ e1000_alloc_jumbo_rx_buffers(struct e1000_adapter *adapter,
		 * applicable for weak-ordered memory model archs,
		 * such as IA-64).
		 */
		wmb();
		dma_wmb();
		writel(i, adapter->hw.hw_addr + rx_ring->rdt);
	}
}
@@ -4655,7 +4655,7 @@ static void e1000_alloc_rx_buffers(struct e1000_adapter *adapter,
		 * applicable for weak-ordered memory model archs,
		 * such as IA-64).
		 */
		wmb();
		dma_wmb();
		writel(i, hw->hw_addr + rx_ring->rdt);
	}
}
+1 −1
Original line number Diff line number Diff line
@@ -680,7 +680,7 @@ static s32 e1000_reset_hw_80003es2lan(struct e1000_hw *hw)
	ew32(TCTL, E1000_TCTL_PSP);
	e1e_flush();

	usleep_range(10000, 20000);
	usleep_range(10000, 11000);

	ctrl = er32(CTRL);

+1 −1
Original line number Diff line number Diff line
@@ -959,7 +959,7 @@ static s32 e1000_reset_hw_82571(struct e1000_hw *hw)
	ew32(TCTL, tctl);
	e1e_flush();

	usleep_range(10000, 20000);
	usleep_range(10000, 11000);

	/* Must acquire the MDIO ownership before MAC reset.
	 * Ownership defaults to firmware after a reset.
+3 −0
Original line number Diff line number Diff line
@@ -222,6 +222,9 @@
#define E1000_STATUS_PHYRA      0x00000400      /* PHY Reset Asserted */
#define E1000_STATUS_GIO_MASTER_ENABLE	0x00080000	/* Master Req status */

/* PCIm function state */
#define E1000_STATUS_PCIM_STATE	0x40000000

#define HALF_DUPLEX 1
#define FULL_DUPLEX 2

+3 −2
Original line number Diff line number Diff line
@@ -186,12 +186,13 @@ struct e1000_phy_regs {

/* board specific private data structure */
struct e1000_adapter {
	struct timer_list watchdog_timer;
	struct timer_list phy_info_timer;
	struct timer_list blink_timer;

	struct work_struct reset_task;
	struct work_struct watchdog_task;
	struct delayed_work watchdog_task;

	struct workqueue_struct *e1000_workqueue;

	const struct e1000_info *ei;

Loading