diff options
Diffstat (limited to 'drivers/net/ethernet/intel/igc/igc_tsn.c')
| -rw-r--r-- | drivers/net/ethernet/intel/igc/igc_tsn.c | 43 | 
1 files changed, 33 insertions, 10 deletions
diff --git a/drivers/net/ethernet/intel/igc/igc_tsn.c b/drivers/net/ethernet/intel/igc/igc_tsn.c index 0fce22de2ab8..bb10d7b65232 100644 --- a/drivers/net/ethernet/intel/igc/igc_tsn.c +++ b/drivers/net/ethernet/intel/igc/igc_tsn.c @@ -36,7 +36,7 @@ static unsigned int igc_tsn_new_flags(struct igc_adapter *adapter)  {  	unsigned int new_flags = adapter->flags & ~IGC_FLAG_TSN_ANY_ENABLED; -	if (adapter->base_time) +	if (adapter->qbv_enable)  		new_flags |= IGC_FLAG_TSN_QBV_ENABLED;  	if (is_any_launchtime(adapter)) @@ -48,6 +48,35 @@ static unsigned int igc_tsn_new_flags(struct igc_adapter *adapter)  	return new_flags;  } +void igc_tsn_adjust_txtime_offset(struct igc_adapter *adapter) +{ +	struct igc_hw *hw = &adapter->hw; +	u16 txoffset; + +	if (!is_any_launchtime(adapter)) +		return; + +	switch (adapter->link_speed) { +	case SPEED_10: +		txoffset = IGC_TXOFFSET_SPEED_10; +		break; +	case SPEED_100: +		txoffset = IGC_TXOFFSET_SPEED_100; +		break; +	case SPEED_1000: +		txoffset = IGC_TXOFFSET_SPEED_1000; +		break; +	case SPEED_2500: +		txoffset = IGC_TXOFFSET_SPEED_2500; +		break; +	default: +		txoffset = 0; +		break; +	} + +	wr32(IGC_GTXOFFSET, txoffset); +} +  /* Returns the TSN specific registers to their default values after   * the adapter is reset.   */ @@ -57,6 +86,7 @@ static int igc_tsn_disable_offload(struct igc_adapter *adapter)  	u32 tqavctrl;  	int i; +	wr32(IGC_GTXOFFSET, 0);  	wr32(IGC_TXPBS, I225_TXPBSIZE_DEFAULT);  	wr32(IGC_DTXMXPKTSZ, IGC_DTXMXPKTSZ_DEFAULT); @@ -110,15 +140,8 @@ static int igc_tsn_enable_offload(struct igc_adapter *adapter)  		wr32(IGC_STQT(i), ring->start_time);  		wr32(IGC_ENDQT(i), ring->end_time); -		if (adapter->base_time) { -			/* If we have a base_time we are in "taprio" -			 * mode and we need to be strict about the -			 * cycles: only transmit a packet if it can be -			 * completed during that cycle. -			 */ -			txqctl |= IGC_TXQCTL_STRICT_CYCLE | -				IGC_TXQCTL_STRICT_END; -		} +		txqctl |= IGC_TXQCTL_STRICT_CYCLE | +			IGC_TXQCTL_STRICT_END;  		if (ring->launchtime_enable)  			txqctl |= IGC_TXQCTL_QUEUE_MODE_LAUNCHT;  |