diff options
Diffstat (limited to 'drivers/net/ethernet/intel/igc')
| -rw-r--r-- | drivers/net/ethernet/intel/igc/igc_i225.c | 2 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/igc/igc_main.c | 6 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/igc/igc_ptp.c | 15 | 
3 files changed, 21 insertions, 2 deletions
diff --git a/drivers/net/ethernet/intel/igc/igc_i225.c b/drivers/net/ethernet/intel/igc/igc_i225.c index b2ef9fde97b3..b6807e16eea9 100644 --- a/drivers/net/ethernet/intel/igc/igc_i225.c +++ b/drivers/net/ethernet/intel/igc/igc_i225.c @@ -636,7 +636,7 @@ s32 igc_set_ltr_i225(struct igc_hw *hw, bool link)  		ltrv = rd32(IGC_LTRMAXV);  		if (ltr_max != (ltrv & IGC_LTRMAXV_LTRV_MASK)) {  			ltrv = IGC_LTRMAXV_LSNP_REQ | ltr_max | -			       (scale_min << IGC_LTRMAXV_SCALE_SHIFT); +			       (scale_max << IGC_LTRMAXV_SCALE_SHIFT);  			wr32(IGC_LTRMAXV, ltrv);  		}  	} diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c index 8e448288ee26..d28a80a00953 100644 --- a/drivers/net/ethernet/intel/igc/igc_main.c +++ b/drivers/net/ethernet/intel/igc/igc_main.c @@ -5467,6 +5467,9 @@ static irqreturn_t igc_intr_msi(int irq, void *data)  			mod_timer(&adapter->watchdog_timer, jiffies + 1);  	} +	if (icr & IGC_ICR_TS) +		igc_tsync_interrupt(adapter); +  	napi_schedule(&q_vector->napi);  	return IRQ_HANDLED; @@ -5510,6 +5513,9 @@ static irqreturn_t igc_intr(int irq, void *data)  			mod_timer(&adapter->watchdog_timer, jiffies + 1);  	} +	if (icr & IGC_ICR_TS) +		igc_tsync_interrupt(adapter); +  	napi_schedule(&q_vector->napi);  	return IRQ_HANDLED; diff --git a/drivers/net/ethernet/intel/igc/igc_ptp.c b/drivers/net/ethernet/intel/igc/igc_ptp.c index 30568e3544cd..4f9245aa79a1 100644 --- a/drivers/net/ethernet/intel/igc/igc_ptp.c +++ b/drivers/net/ethernet/intel/igc/igc_ptp.c @@ -768,7 +768,20 @@ int igc_ptp_get_ts_config(struct net_device *netdev, struct ifreq *ifr)   */  static bool igc_is_crosststamp_supported(struct igc_adapter *adapter)  { -	return IS_ENABLED(CONFIG_X86_TSC) ? pcie_ptm_enabled(adapter->pdev) : false; +	if (!IS_ENABLED(CONFIG_X86_TSC)) +		return false; + +	/* FIXME: it was noticed that enabling support for PCIe PTM in +	 * some i225-V models could cause lockups when bringing the +	 * interface up/down. There should be no downsides to +	 * disabling crosstimestamping support for i225-V, as it +	 * doesn't have any PTP support. That way we gain some time +	 * while root causing the issue. +	 */ +	if (adapter->pdev->device == IGC_DEV_ID_I225_V) +		return false; + +	return pcie_ptm_enabled(adapter->pdev);  }  static struct system_counterval_t igc_device_tstamp_to_system(u64 tstamp)  |