All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net 0/4][pull request] Intel Wired LAN Driver Updates 2021-08-20
@ 2021-08-20 15:59 Tony Nguyen
  2021-08-20 15:59 ` [PATCH net 1/4] igc: fix page fault when thunderbolt is unplugged Tony Nguyen
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Tony Nguyen @ 2021-08-20 15:59 UTC (permalink / raw)
  To: davem, kuba; +Cc: Tony Nguyen, netdev, sasha.neftin, vitaly.lifshits

This series contains updates to igc and e1000e drivers.

Aaron Ma resolves a page fault which occurs when thunderbolt is
unplugged for igc.

Toshiki Nishioka fixes Tx queue looping to use actual number of queues
instead of max value for igc.

Sasha fixes an incorrect latency comparison by decoding the values before
comparing and prevents attempted writes to read-only NVMs for e1000e.

The following are changes since commit ffc9c3ebb4af870a121da99826e9ccb63dc8b3d7:
  net: usb: pegasus: fixes of set_register(s) return value evaluation;
and are available in the git repository at:
  git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue 1GbE

Aaron Ma (1):
  igc: fix page fault when thunderbolt is unplugged

Sasha Neftin (2):
  e1000e: Fix the max snoop/no-snoop latency for 10M
  e1000e: Do not take care about recovery NVM checksum

Toshiki Nishioka (1):
  igc: Use num_tx_queues when iterating over tx_ring queue

 drivers/net/ethernet/intel/e1000e/ich8lan.c | 32 +++++++++++++-----
 drivers/net/ethernet/intel/e1000e/ich8lan.h |  3 ++
 drivers/net/ethernet/intel/igc/igc_main.c   | 36 ++++++++++++---------
 drivers/net/ethernet/intel/igc/igc_ptp.c    |  3 +-
 4 files changed, 50 insertions(+), 24 deletions(-)

-- 
2.26.2


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH net 1/4] igc: fix page fault when thunderbolt is unplugged
  2021-08-20 15:59 [PATCH net 0/4][pull request] Intel Wired LAN Driver Updates 2021-08-20 Tony Nguyen
@ 2021-08-20 15:59 ` Tony Nguyen
  2021-08-20 21:56   ` Jakub Kicinski
  2021-08-20 15:59 ` [PATCH net 2/4] igc: Use num_tx_queues when iterating over tx_ring queue Tony Nguyen
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 6+ messages in thread
From: Tony Nguyen @ 2021-08-20 15:59 UTC (permalink / raw)
  To: davem, kuba
  Cc: Aaron Ma, netdev, anthony.l.nguyen, sasha.neftin,
	vitaly.lifshits, Dvora Fuxbrumer

From: Aaron Ma <aaron.ma@canonical.com>

After unplug thunderbolt dock with i225, pciehp interrupt is triggered,
remove call will read/write mmio address which is already disconnected,
then cause page fault and make system hang.

Check PCI state to remove device safely.

Trace:
BUG: unable to handle page fault for address: 000000000000b604
Oops: 0000 [#1] SMP NOPTI
RIP: 0010:igc_rd32+0x1c/0x90 [igc]
Call Trace:
igc_ptp_suspend+0x6c/0xa0 [igc]
igc_ptp_stop+0x12/0x50 [igc]
igc_remove+0x7f/0x1c0 [igc]
pci_device_remove+0x3e/0xb0
__device_release_driver+0x181/0x240

Fixes: 13b5b7fd6a4a ("igc: Add support for Tx/Rx rings")
Fixes: b03c49cde61f ("igc: Save PTP time before a reset")
Signed-off-by: Aaron Ma <aaron.ma@canonical.com>
Tested-by: Dvora Fuxbrumer <dvorax.fuxbrumer@linux.intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
 drivers/net/ethernet/intel/igc/igc_main.c | 32 ++++++++++++++---------
 drivers/net/ethernet/intel/igc/igc_ptp.c  |  3 ++-
 2 files changed, 21 insertions(+), 14 deletions(-)

diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c
index e29aadbc6744..5e9c86ea3a5a 100644
--- a/drivers/net/ethernet/intel/igc/igc_main.c
+++ b/drivers/net/ethernet/intel/igc/igc_main.c
@@ -149,6 +149,9 @@ static void igc_release_hw_control(struct igc_adapter *adapter)
 	struct igc_hw *hw = &adapter->hw;
 	u32 ctrl_ext;
 
+	if (!pci_device_is_present(adapter->pdev))
+		return;
+
 	/* Let firmware take over control of h/w */
 	ctrl_ext = rd32(IGC_CTRL_EXT);
 	wr32(IGC_CTRL_EXT,
@@ -4449,26 +4452,29 @@ void igc_down(struct igc_adapter *adapter)
 
 	igc_ptp_suspend(adapter);
 
-	/* disable receives in the hardware */
-	rctl = rd32(IGC_RCTL);
-	wr32(IGC_RCTL, rctl & ~IGC_RCTL_EN);
-	/* flush and sleep below */
-
+	if (pci_device_is_present(adapter->pdev)) {
+		/* disable receives in the hardware */
+		rctl = rd32(IGC_RCTL);
+		wr32(IGC_RCTL, rctl & ~IGC_RCTL_EN);
+		/* flush and sleep below */
+	}
 	/* set trans_start so we don't get spurious watchdogs during reset */
 	netif_trans_update(netdev);
 
 	netif_carrier_off(netdev);
 	netif_tx_stop_all_queues(netdev);
 
-	/* disable transmits in the hardware */
-	tctl = rd32(IGC_TCTL);
-	tctl &= ~IGC_TCTL_EN;
-	wr32(IGC_TCTL, tctl);
-	/* flush both disables and wait for them to finish */
-	wrfl();
-	usleep_range(10000, 20000);
+	if (pci_device_is_present(adapter->pdev)) {
+		/* disable transmits in the hardware */
+		tctl = rd32(IGC_TCTL);
+		tctl &= ~IGC_TCTL_EN;
+		wr32(IGC_TCTL, tctl);
+		/* flush both disables and wait for them to finish */
+		wrfl();
+		usleep_range(10000, 20000);
 
-	igc_irq_disable(adapter);
+		igc_irq_disable(adapter);
+	}
 
 	adapter->flags &= ~IGC_FLAG_NEED_LINK_UPDATE;
 
diff --git a/drivers/net/ethernet/intel/igc/igc_ptp.c b/drivers/net/ethernet/intel/igc/igc_ptp.c
index 69617d2c1be2..4ae19c6a3247 100644
--- a/drivers/net/ethernet/intel/igc/igc_ptp.c
+++ b/drivers/net/ethernet/intel/igc/igc_ptp.c
@@ -849,7 +849,8 @@ void igc_ptp_suspend(struct igc_adapter *adapter)
 	adapter->ptp_tx_skb = NULL;
 	clear_bit_unlock(__IGC_PTP_TX_IN_PROGRESS, &adapter->state);
 
-	igc_ptp_time_save(adapter);
+	if (pci_device_is_present(adapter->pdev))
+		igc_ptp_time_save(adapter);
 }
 
 /**
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH net 2/4] igc: Use num_tx_queues when iterating over tx_ring queue
  2021-08-20 15:59 [PATCH net 0/4][pull request] Intel Wired LAN Driver Updates 2021-08-20 Tony Nguyen
  2021-08-20 15:59 ` [PATCH net 1/4] igc: fix page fault when thunderbolt is unplugged Tony Nguyen
@ 2021-08-20 15:59 ` Tony Nguyen
  2021-08-20 15:59 ` [PATCH net 3/4] e1000e: Fix the max snoop/no-snoop latency for 10M Tony Nguyen
  2021-08-20 15:59 ` [PATCH net 4/4] e1000e: Do not take care about recovery NVM checksum Tony Nguyen
  3 siblings, 0 replies; 6+ messages in thread
From: Tony Nguyen @ 2021-08-20 15:59 UTC (permalink / raw)
  To: davem, kuba
  Cc: Toshiki Nishioka, netdev, anthony.l.nguyen, sasha.neftin,
	vitaly.lifshits, Muhammad Husaini Zulkifli

From: Toshiki Nishioka <toshiki.nishioka@intel.com>

Use num_tx_queues rather than the IGC_MAX_TX_QUEUES fixed number 4 when
iterating over tx_ring queue since instantiated queue count could be
less than 4 where on-line cpu count is less than 4.

Fixes: ec50a9d437f0 ("igc: Add support for taprio offloading")
Signed-off-by: Toshiki Nishioka <toshiki.nishioka@intel.com>
Signed-off-by: Muhammad Husaini Zulkifli <muhammad.husaini.zulkifli@intel.com>
Tested-by: Muhammad Husaini Zulkifli <muhammad.husaini.zulkifli@intel.com>
Acked-by: Sasha Neftin <sasha.neftin@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
 drivers/net/ethernet/intel/igc/igc_main.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c
index 5e9c86ea3a5a..ed2d66bc2d6c 100644
--- a/drivers/net/ethernet/intel/igc/igc_main.c
+++ b/drivers/net/ethernet/intel/igc/igc_main.c
@@ -5495,7 +5495,7 @@ static bool validate_schedule(struct igc_adapter *adapter,
 		if (e->command != TC_TAPRIO_CMD_SET_GATES)
 			return false;
 
-		for (i = 0; i < IGC_MAX_TX_QUEUES; i++) {
+		for (i = 0; i < adapter->num_tx_queues; i++) {
 			if (e->gate_mask & BIT(i))
 				queue_uses[i]++;
 
@@ -5552,7 +5552,7 @@ static int igc_save_qbv_schedule(struct igc_adapter *adapter,
 
 		end_time += e->interval;
 
-		for (i = 0; i < IGC_MAX_TX_QUEUES; i++) {
+		for (i = 0; i < adapter->num_tx_queues; i++) {
 			struct igc_ring *ring = adapter->tx_ring[i];
 
 			if (!(e->gate_mask & BIT(i)))
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH net 3/4] e1000e: Fix the max snoop/no-snoop latency for 10M
  2021-08-20 15:59 [PATCH net 0/4][pull request] Intel Wired LAN Driver Updates 2021-08-20 Tony Nguyen
  2021-08-20 15:59 ` [PATCH net 1/4] igc: fix page fault when thunderbolt is unplugged Tony Nguyen
  2021-08-20 15:59 ` [PATCH net 2/4] igc: Use num_tx_queues when iterating over tx_ring queue Tony Nguyen
@ 2021-08-20 15:59 ` Tony Nguyen
  2021-08-20 15:59 ` [PATCH net 4/4] e1000e: Do not take care about recovery NVM checksum Tony Nguyen
  3 siblings, 0 replies; 6+ messages in thread
From: Tony Nguyen @ 2021-08-20 15:59 UTC (permalink / raw)
  To: davem, kuba
  Cc: Sasha Neftin, netdev, anthony.l.nguyen, vitaly.lifshits, Yee Li,
	Dvora Fuxbrumer

From: Sasha Neftin <sasha.neftin@intel.com>

We should decode the latency and the max_latency before directly compare.
The latency should be presented as lat_enc = scale x value:
lat_enc_d = (lat_enc & 0x0x3ff) x (1U << (5*((max_ltr_enc & 0x1c00)
>> 10)))

Fixes: cf8fb73c23aa ("e1000e: add support for LTR on I217/I218")
Suggested-by: Yee Li <seven.yi.lee@gmail.com>
Signed-off-by: Sasha Neftin <sasha.neftin@intel.com>
Tested-by: Dvora Fuxbrumer <dvorax.fuxbrumer@linux.intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
 drivers/net/ethernet/intel/e1000e/ich8lan.c | 14 +++++++++++++-
 drivers/net/ethernet/intel/e1000e/ich8lan.h |  3 +++
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c
index cf7b3887da1d..2c412bf9232a 100644
--- a/drivers/net/ethernet/intel/e1000e/ich8lan.c
+++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c
@@ -1006,6 +1006,8 @@ static s32 e1000_platform_pm_pch_lpt(struct e1000_hw *hw, bool link)
 {
 	u32 reg = link << (E1000_LTRV_REQ_SHIFT + E1000_LTRV_NOSNOOP_SHIFT) |
 	    link << E1000_LTRV_REQ_SHIFT | E1000_LTRV_SEND;
+	u16 max_ltr_enc_d = 0;	/* maximum LTR decoded by platform */
+	u16 lat_enc_d = 0;	/* latency decoded */
 	u16 lat_enc = 0;	/* latency encoded */
 
 	if (link) {
@@ -1059,7 +1061,17 @@ static s32 e1000_platform_pm_pch_lpt(struct e1000_hw *hw, bool link)
 				     E1000_PCI_LTR_CAP_LPT + 2, &max_nosnoop);
 		max_ltr_enc = max_t(u16, max_snoop, max_nosnoop);
 
-		if (lat_enc > max_ltr_enc)
+		lat_enc_d = (lat_enc & E1000_LTRV_VALUE_MASK) *
+			     (1U << (E1000_LTRV_SCALE_FACTOR *
+			     ((lat_enc & E1000_LTRV_SCALE_MASK)
+			     >> E1000_LTRV_SCALE_SHIFT)));
+
+		max_ltr_enc_d = (max_ltr_enc & E1000_LTRV_VALUE_MASK) *
+				 (1U << (E1000_LTRV_SCALE_FACTOR *
+				 ((max_ltr_enc & E1000_LTRV_SCALE_MASK)
+				 >> E1000_LTRV_SCALE_SHIFT)));
+
+		if (lat_enc_d > max_ltr_enc_d)
 			lat_enc = max_ltr_enc;
 	}
 
diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.h b/drivers/net/ethernet/intel/e1000e/ich8lan.h
index 1502895eb45d..e757896287eb 100644
--- a/drivers/net/ethernet/intel/e1000e/ich8lan.h
+++ b/drivers/net/ethernet/intel/e1000e/ich8lan.h
@@ -274,8 +274,11 @@
 
 /* Latency Tolerance Reporting */
 #define E1000_LTRV			0x000F8
+#define E1000_LTRV_VALUE_MASK		0x000003FF
 #define E1000_LTRV_SCALE_MAX		5
 #define E1000_LTRV_SCALE_FACTOR		5
+#define E1000_LTRV_SCALE_SHIFT		10
+#define E1000_LTRV_SCALE_MASK		0x00001C00
 #define E1000_LTRV_REQ_SHIFT		15
 #define E1000_LTRV_NOSNOOP_SHIFT	16
 #define E1000_LTRV_SEND			(1 << 30)
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH net 4/4] e1000e: Do not take care about recovery NVM checksum
  2021-08-20 15:59 [PATCH net 0/4][pull request] Intel Wired LAN Driver Updates 2021-08-20 Tony Nguyen
                   ` (2 preceding siblings ...)
  2021-08-20 15:59 ` [PATCH net 3/4] e1000e: Fix the max snoop/no-snoop latency for 10M Tony Nguyen
@ 2021-08-20 15:59 ` Tony Nguyen
  3 siblings, 0 replies; 6+ messages in thread
From: Tony Nguyen @ 2021-08-20 15:59 UTC (permalink / raw)
  To: davem, kuba
  Cc: Sasha Neftin, netdev, anthony.l.nguyen, vitaly.lifshits,
	Dima Ruinskiy, Dvora Fuxbrumer

From: Sasha Neftin <sasha.neftin@intel.com>

On new platforms, the NVM is read-only. Attempting to update the NVM
is causing a lockup to occur. Do not attempt to write to the NVM
on platforms where it's not supported.
Emit an error message when the NVM checksum is invalid.

Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=213667
Fixes: fb776f5d57ee ("e1000e: Add support for Tiger Lake")
Suggested-by: Dima Ruinskiy <dima.ruinskiy@intel.com>
Suggested-by: Vitaly Lifshits <vitaly.lifshits@intel.com>
Signed-off-by: Sasha Neftin <sasha.neftin@intel.com>
Tested-by: Dvora Fuxbrumer <dvorax.fuxbrumer@linux.intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
---
 drivers/net/ethernet/intel/e1000e/ich8lan.c | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c
index 2c412bf9232a..a80336c4319b 100644
--- a/drivers/net/ethernet/intel/e1000e/ich8lan.c
+++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c
@@ -4127,13 +4127,17 @@ static s32 e1000_validate_nvm_checksum_ich8lan(struct e1000_hw *hw)
 		return ret_val;
 
 	if (!(data & valid_csum_mask)) {
-		data |= valid_csum_mask;
-		ret_val = e1000_write_nvm(hw, word, 1, &data);
-		if (ret_val)
-			return ret_val;
-		ret_val = e1000e_update_nvm_checksum(hw);
-		if (ret_val)
-			return ret_val;
+		e_dbg("NVM Checksum Invalid\n");
+
+		if (hw->mac.type < e1000_pch_cnp) {
+			data |= valid_csum_mask;
+			ret_val = e1000_write_nvm(hw, word, 1, &data);
+			if (ret_val)
+				return ret_val;
+			ret_val = e1000e_update_nvm_checksum(hw);
+			if (ret_val)
+				return ret_val;
+		}
 	}
 
 	return e1000e_validate_nvm_checksum_generic(hw);
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH net 1/4] igc: fix page fault when thunderbolt is unplugged
  2021-08-20 15:59 ` [PATCH net 1/4] igc: fix page fault when thunderbolt is unplugged Tony Nguyen
@ 2021-08-20 21:56   ` Jakub Kicinski
  0 siblings, 0 replies; 6+ messages in thread
From: Jakub Kicinski @ 2021-08-20 21:56 UTC (permalink / raw)
  To: Tony Nguyen
  Cc: davem, Aaron Ma, netdev, sasha.neftin, vitaly.lifshits, Dvora Fuxbrumer

On Fri, 20 Aug 2021 08:59:12 -0700 Tony Nguyen wrote:
> From: Aaron Ma <aaron.ma@canonical.com>
> 
> After unplug thunderbolt dock with i225, pciehp interrupt is triggered,
> remove call will read/write mmio address which is already disconnected,
> then cause page fault and make system hang.
> 
> Check PCI state to remove device safely.
> 
> Trace:
> BUG: unable to handle page fault for address: 000000000000b604
> Oops: 0000 [#1] SMP NOPTI
> RIP: 0010:igc_rd32+0x1c/0x90 [igc]
> Call Trace:
> igc_ptp_suspend+0x6c/0xa0 [igc]
> igc_ptp_stop+0x12/0x50 [igc]
> igc_remove+0x7f/0x1c0 [igc]
> pci_device_remove+0x3e/0xb0
> __device_release_driver+0x181/0x240
> 
> Fixes: 13b5b7fd6a4a ("igc: Add support for Tx/Rx rings")
> Fixes: b03c49cde61f ("igc: Save PTP time before a reset")

Seems like a whack-a-mole that should be addressed a little bit more
systematically. Why not return ~0 if hw_addr is NULL? That's what would
happen first time timeout is hit, right? Please consider this.

Pulled, thanks!

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2021-08-20 21:56 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-20 15:59 [PATCH net 0/4][pull request] Intel Wired LAN Driver Updates 2021-08-20 Tony Nguyen
2021-08-20 15:59 ` [PATCH net 1/4] igc: fix page fault when thunderbolt is unplugged Tony Nguyen
2021-08-20 21:56   ` Jakub Kicinski
2021-08-20 15:59 ` [PATCH net 2/4] igc: Use num_tx_queues when iterating over tx_ring queue Tony Nguyen
2021-08-20 15:59 ` [PATCH net 3/4] e1000e: Fix the max snoop/no-snoop latency for 10M Tony Nguyen
2021-08-20 15:59 ` [PATCH net 4/4] e1000e: Do not take care about recovery NVM checksum Tony Nguyen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.