[PATCH 1/1] Revert "igc: Disable PTM sequences when interface goes down"

Philip Cox philip.cox at canonical.com
Wed Sep 13 16:47:36 UTC 2023


BugLink: https://bugs.launchpad.net/bugs/2035361

This reverts commit c4dc67fc3e38fb2fd877674b21d972392ae0852a.
commit c4dc67fc3e38fb2fd877674b21d972392ae0852a
Author: Aravindhan Gunasekaran <aravindhan.gunasekaran at intel.com>
Date:   Fri Apr 21 13:20:10 2023 -0400

    igc: Disable PTM sequences when interface goes down

    BugLink: https://bugs.launchpad.net/bugs/2019222

    Kernel hangs or reboots reported in some boards with a
    combination of interface up/down or reset. It turns out
    that this occurs due to Foxville bus master disabling
    when PTM sequences remain enabled.

    We do not need to always enable PTM in the reset
    sequence as igc_ptp_reset is also called during
    interface down. This caused PTM sequences be enabled
    but Foxville tries to disable bus mastering before
    going through controller reset.

    This patch disables PCIe PTM when interface goes down.

    Signed-off-by: Aravindhan Gunasekaran <aravindhan.gunasekaran at intel.com>
    (back-ported from https://github.com/intel/linux-intel-quilt/tree/mainline-tracking-v5.19-linux-221019T120731Z/patches/0001-igc-Disable-PTM-sequences-when-interface-goes-down.tsn
    [context changes])
    Signed-off-by: Philip Cox <philip.cox at canonical.com>
    Acked-by: Jian Hui Lee <jianhui.lee at canonical.com>
    Acked-by: Tim Gardner <tim.gardner at canonical.com>

Signed-off-by: Philip Cox <philip.cox at canonical.com>
---
 drivers/net/ethernet/intel/igc/igc_ptp.c | 50 ++++++++++--------------
 1 file changed, 21 insertions(+), 29 deletions(-)

diff --git a/drivers/net/ethernet/intel/igc/igc_ptp.c b/drivers/net/ethernet/intel/igc/igc_ptp.c
index 993d339205ed..b1b93e9a4399 100644
--- a/drivers/net/ethernet/intel/igc/igc_ptp.c
+++ b/drivers/net/ethernet/intel/igc/igc_ptp.c
@@ -1109,30 +1109,6 @@ static void igc_ptp_time_restore(struct igc_adapter *adapter)
 	igc_ptp_write_i225(adapter, &ts);
 }
 
-static void igc_ptm_start(struct igc_adapter *adapter)
-{
-	struct igc_hw *hw = &adapter->hw;
-	u32 cycle_ctrl, ctrl;
-
-	wr32(IGC_PCIE_DIG_DELAY, IGC_PCIE_DIG_DELAY_DEFAULT);
-	wr32(IGC_PCIE_PHY_DELAY, IGC_PCIE_PHY_DELAY_DEFAULT);
-
-	cycle_ctrl = IGC_PTM_CYCLE_CTRL_CYC_TIME(IGC_PTM_CYC_TIME_DEFAULT);
-
-	wr32(IGC_PTM_CYCLE_CTRL, cycle_ctrl);
-
-	ctrl = IGC_PTM_CTRL_EN |
-		IGC_PTM_CTRL_START_NOW |
-		IGC_PTM_CTRL_SHRT_CYC(IGC_PTM_SHORT_CYC_DEFAULT) |
-		IGC_PTM_CTRL_PTM_TO(IGC_PTM_TIMEOUT_DEFAULT) |
-		IGC_PTM_CTRL_TRIG;
-
-	wr32(IGC_PTM_CTRL, ctrl);
-
-	/* Force the first cycle to run. */
-	wr32(IGC_PTM_STAT, IGC_PTM_STAT_VALID);
-}
-
 static void igc_ptm_stop(struct igc_adapter *adapter)
 {
 	struct igc_hw *hw = &adapter->hw;
@@ -1166,8 +1142,10 @@ void igc_ptp_suspend(struct igc_adapter *adapter)
 
 	spin_unlock(&adapter->ptp_tx_lock);
 
-	if (pci_device_is_present(adapter->pdev))
+	if (pci_device_is_present(adapter->pdev)) {
 		igc_ptp_time_save(adapter);
+		igc_ptm_stop(adapter);
+	}
 }
 
 /**
@@ -1196,6 +1174,7 @@ void igc_ptp_stop(struct igc_adapter *adapter)
 void igc_ptp_reset(struct igc_adapter *adapter)
 {
 	struct igc_hw *hw = &adapter->hw;
+	u32 cycle_ctrl, ctrl;
 	unsigned long flags;
 	u32 timadj;
 
@@ -1220,10 +1199,23 @@ void igc_ptp_reset(struct igc_adapter *adapter)
 		if (!igc_is_crosststamp_supported(adapter))
 			break;
 
-		if (!test_bit(__IGC_DOWN, &adapter->state))
-			igc_ptm_start(adapter);
-		else
-			igc_ptm_stop(adapter);
+		wr32(IGC_PCIE_DIG_DELAY, IGC_PCIE_DIG_DELAY_DEFAULT);
+		wr32(IGC_PCIE_PHY_DELAY, IGC_PCIE_PHY_DELAY_DEFAULT);
+
+		cycle_ctrl = IGC_PTM_CYCLE_CTRL_CYC_TIME(IGC_PTM_CYC_TIME_DEFAULT);
+
+		wr32(IGC_PTM_CYCLE_CTRL, cycle_ctrl);
+
+		ctrl = IGC_PTM_CTRL_EN |
+			IGC_PTM_CTRL_START_NOW |
+			IGC_PTM_CTRL_SHRT_CYC(IGC_PTM_SHORT_CYC_DEFAULT) |
+			IGC_PTM_CTRL_PTM_TO(IGC_PTM_TIMEOUT_DEFAULT) |
+			IGC_PTM_CTRL_TRIG;
+
+		wr32(IGC_PTM_CTRL, ctrl);
+
+		/* Force the first cycle to run. */
+		wr32(IGC_PTM_STAT, IGC_PTM_STAT_VALID);
 
 		break;
 	default:
-- 
2.34.1




More information about the kernel-team mailing list