On Fri, Jan 22, 2021 at 02:44:51PM -0800, Vinicius Costa Gomes wrote:
> diff --git a/drivers/net/ethernet/intel/igc/igc_defines.h 
> b/drivers/net/ethernet/intel/igc/igc_defines.h
> index 0e78abfd99ee..c2155d109bd6 100644
> --- a/drivers/net/ethernet/intel/igc/igc_defines.h
> +++ b/drivers/net/ethernet/intel/igc/igc_defines.h
> @@ -410,10 +410,14 @@
>  /* Transmit Scheduling */
>  #define IGC_TQAVCTRL_TRANSMIT_MODE_TSN       0x00000001
>  #define IGC_TQAVCTRL_ENHANCED_QAV    0x00000008
> +#define IGC_TQAVCTRL_PREEMPT_ENA     0x00000002
> +#define IGC_TQAVCTRL_MIN_FRAG_MASK   0x0000C000
> +#define IGC_TQAVCTRL_MIN_FRAG_SHIFT  14
> @@ -83,13 +89,22 @@ static int igc_tsn_enable_offload(struct igc_adapter 
> *adapter)
>       wr32(IGC_DTXMXPKTSZ, IGC_DTXMXPKTSZ_TSN);
>       wr32(IGC_TXPBS, IGC_TXPBSIZE_TSN);
>  
> -     tqavctrl = rd32(IGC_TQAVCTRL);
>       rxpbs = rd32(IGC_RXPBS) & ~IGC_RXPBSIZE_SIZE_MASK;
>       rxpbs |= IGC_RXPBSIZE_TSN;
>  
>       wr32(IGC_RXPBS, rxpbs);
>  
> +     tqavctrl = rd32(IGC_TQAVCTRL) &
> +             ~(IGC_TQAVCTRL_MIN_FRAG_MASK | IGC_TQAVCTRL_PREEMPT_ENA);
>       tqavctrl |= IGC_TQAVCTRL_TRANSMIT_MODE_TSN | IGC_TQAVCTRL_ENHANCED_QAV;
> +
> +     if (adapter->frame_preemption_active)
> +             tqavctrl |= IGC_TQAVCTRL_PREEMPT_ENA;

Question: when adapter->frame_preemption_active is false, does the port
have the pMAC enabled, and can it receive preemptable frames? Maybe we
should be very explicit that the ethtool frame preemption only configures
the egress side, and that a driver capable of FP should always turn on
the pMAC on RX. Are you aware of any performance downsides?

> +
> +     frag_size_mult = ethtool_frag_size_to_mult(adapter->add_frag_size);
> +
> +     tqavctrl |= frag_size_mult << IGC_TQAVCTRL_MIN_FRAG_SHIFT;
> +
>       wr32(IGC_TQAVCTRL, tqavctrl);
>  
>       wr32(IGC_QBVCYCLET_S, cycle);

Reply via email to