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

Thadeu Lima de Souza Cascardo cascardo at canonical.com
Mon Sep 18 13:08:52 UTC 2023


On Wed, Sep 13, 2023 at 12:47:36PM -0400, Philip Cox wrote:
> 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
> 

Given the original Bug was the enablement of Time Sensitive Networking and this
was part of a large patchset, and that we clarified that the bug this was
supposed to fix has not been reproduced:

Acked-by: Thadeu Lima de Souza Cascardo <cascardo at canonical.com>

Also, it's good to point out that this was not an upstream commit, so we are
not diverging when we revert it. Actually the opposite.

Thanks.
Cascardo.

>     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
> 
> 
> -- 
> kernel-team mailing list
> kernel-team at lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team



More information about the kernel-team mailing list