Intel-Wired-Lan Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: "Neftin, Sasha" <sasha.neftin@intel.com>
To: <intel-wired-lan@osuosl.org>
Subject: Re: [Intel-wired-lan] [PATCH v3] igc: Correct the launchtime offset
Date: Wed, 21 Sep 2022 11:05:51 +0300	[thread overview]
Message-ID: <7c487555-20bd-929d-e887-35cca5b7cf97@intel.com> (raw)
In-Reply-To: <20220921024940.2128-1-muhammad.husaini.zulkifli@intel.com>

On 9/21/2022 05:49, Muhammad Husaini Zulkifli wrote:
> The launchtime offset should be corrected according to sections 7.5.2.6
> Transmit Scheduling Latency of the Intel Ethernet I225/I226 Software
> User Manual.
> 
> Software can compensate the latency between the transmission scheduling
> and the time that packet is transmitted to the network by setting this
> GTxOffset register. Without setting this register, there may be a
> significant delay between the packet scheduling and the network point.
> 
> This patch helps to reduce the latency for each of the link speed.
> 
> Before:
> 
> 10Mbps   : 11000 - 13800 nanosecond
> 100Mbps  : 1300 - 1700 nanosecond
> 1000Mbps : 190 - 600 nanosecond
> 2500Mbps : 1400 - 1700 nanosecond
> 
> After:
> 
> 10Mbps   : less than 750 nanosecond
> 100Mbps  : less than 192 nanosecond
> 1000Mbps : less than 128 nanosecond
> 2500Mbps : less than 128 nanosecond
> 
> Test Setup:
> 
> Talker : Use l2_tai.c to generate the launchtime into packet payload.
> Listener: Use timedump.c to compute the delta between packet arrival and
> LaunchTime packet payload.
> 
> Signed-off-by: Vinicius Costa Gomes <vinicius.gomes@intel.com>
> Signed-off-by: Muhammad Husaini Zulkifli <muhammad.husaini.zulkifli@intel.com>
> ---
>   drivers/net/ethernet/intel/igc/igc_defines.h |  9 ++++++
>   drivers/net/ethernet/intel/igc/igc_main.c    |  6 ++++
>   drivers/net/ethernet/intel/igc/igc_regs.h    |  1 +
>   drivers/net/ethernet/intel/igc/igc_tsn.c     | 30 ++++++++++++++++++++
>   drivers/net/ethernet/intel/igc/igc_tsn.h     |  1 +
>   5 files changed, 47 insertions(+)
> 
> diff --git a/drivers/net/ethernet/intel/igc/igc_defines.h b/drivers/net/ethernet/intel/igc/igc_defines.h
> index 4f9d7f013a95..f7311aeb293b 100644
> --- a/drivers/net/ethernet/intel/igc/igc_defines.h
> +++ b/drivers/net/ethernet/intel/igc/igc_defines.h
> @@ -400,6 +400,15 @@
>   #define IGC_DTXMXPKTSZ_TSN	0x19 /* 1600 bytes of max TX DMA packet size */
>   #define IGC_DTXMXPKTSZ_DEFAULT	0x98 /* 9728-byte Jumbo frames */
>   
> +/* Transmit Scheduling Latency */
> +/* Latency between transmission scheduling (LaunchTime) and the time
> + * the packet is transmitted to the network in nanosecond.
> + */
> +#define IGC_TXOFFSET_SPEED_10	0x000034BC
> +#define IGC_TXOFFSET_SPEED_100	0x00000578
> +#define IGC_TXOFFSET_SPEED_1000	0x0000012C
> +#define IGC_TXOFFSET_SPEED_2500	0x00000578
> +
>   /* Time Sync Interrupt Causes */
>   #define IGC_TSICR_SYS_WRAP	BIT(0) /* SYSTIM Wrap around. */
>   #define IGC_TSICR_TXTS		BIT(1) /* Transmit Timestamp. */
> diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c
> index bf6c461e1a2a..97b9edb5153e 100644
> --- a/drivers/net/ethernet/intel/igc/igc_main.c
> +++ b/drivers/net/ethernet/intel/igc/igc_main.c
> @@ -5382,6 +5382,12 @@ static void igc_watchdog_task(struct work_struct *work)
>   				break;
>   			}
>   
> +			/* Once the launch time has been set on the wire, there is a delay
> +			 * before the link speed can be determined based on link-up activity.
> +			 * Write into the register as soon as we know the correct link speed.
> +			 */
> +			igc_tsn_adjust_txtime_offset(adapter);
> +
>   			if (adapter->link_speed != SPEED_1000)
>   				goto no_wait;
>   
> diff --git a/drivers/net/ethernet/intel/igc/igc_regs.h b/drivers/net/ethernet/intel/igc/igc_regs.h
> index c0d8214148d1..01c86d36856d 100644
> --- a/drivers/net/ethernet/intel/igc/igc_regs.h
> +++ b/drivers/net/ethernet/intel/igc/igc_regs.h
> @@ -224,6 +224,7 @@
>   /* Transmit Scheduling Registers */
>   #define IGC_TQAVCTRL		0x3570
>   #define IGC_TXQCTL(_n)		(0x3344 + 0x4 * (_n))
> +#define IGC_GTXOFFSET		0x3310
>   #define IGC_BASET_L		0x3314
>   #define IGC_BASET_H		0x3318
>   #define IGC_QBVCYCLET		0x331C
> diff --git a/drivers/net/ethernet/intel/igc/igc_tsn.c b/drivers/net/ethernet/intel/igc/igc_tsn.c
> index 0fce22de2ab8..f975ed807da1 100644
> --- a/drivers/net/ethernet/intel/igc/igc_tsn.c
> +++ b/drivers/net/ethernet/intel/igc/igc_tsn.c
> @@ -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);
>   
> diff --git a/drivers/net/ethernet/intel/igc/igc_tsn.h b/drivers/net/ethernet/intel/igc/igc_tsn.h
> index 1512307f5a52..b53e6af560b7 100644
> --- a/drivers/net/ethernet/intel/igc/igc_tsn.h
> +++ b/drivers/net/ethernet/intel/igc/igc_tsn.h
> @@ -6,5 +6,6 @@
>   
>   int igc_tsn_offload_apply(struct igc_adapter *adapter);
>   int igc_tsn_reset(struct igc_adapter *adapter);
> +void igc_tsn_adjust_txtime_offset(struct igc_adapter *adapter);
>   
>   #endif /* _IGC_BASE_H */
Acked-by: Sasha Neftin <sasha.neftin@intel.com>
_______________________________________________
Intel-wired-lan mailing list
Intel-wired-lan@osuosl.org
https://lists.osuosl.org/mailman/listinfo/intel-wired-lan

  reply	other threads:[~2022-09-21  8:06 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-21  2:49 [Intel-wired-lan] [PATCH v3] igc: Correct the launchtime offset Muhammad Husaini Zulkifli
2022-09-21  8:05 ` Neftin, Sasha [this message]
2022-09-21  8:33 ` Paul Menzel
2022-09-21 11:57   ` Zulkifli, Muhammad Husaini
2022-10-02  7:20 ` naamax.meir

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7c487555-20bd-929d-e887-35cca5b7cf97@intel.com \
    --to=sasha.neftin@intel.com \
    --cc=intel-wired-lan@osuosl.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox