From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124])
	by inbox.dpdk.org (Postfix) with ESMTP id 26FDFA0544;
	Mon, 10 Oct 2022 09:56:49 +0200 (CEST)
Received: from [217.70.189.124] (localhost [127.0.0.1])
	by mails.dpdk.org (Postfix) with ESMTP id 0B8A640146;
	Mon, 10 Oct 2022 09:56:49 +0200 (CEST)
Received: from mga14.intel.com (mga14.intel.com [192.55.52.115])
 by mails.dpdk.org (Postfix) with ESMTP id 66DF340041
 for <dev@dpdk.org>; Mon, 10 Oct 2022 09:56:47 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;
 d=intel.com; i=@intel.com; q=dns/txt; s=Intel;
 t=1665388607; x=1696924607;
 h=from:to:cc:subject:date:message-id:references:
 in-reply-to:content-transfer-encoding:mime-version;
 bh=cABkIfdre7wPKU4/NyyKAUMJ76WttHtPIkfbK4h1HOI=;
 b=OpSXHFmgtJGvrhhJCjl6T/4V5fwkId5tR7OpZQhZ7jl+Thtljf6NEhBP
 ZlLd+8Bjz83gkZ+b/aHUrEOnqDxzOfHwUp6sgEC8s6elLnAwa+OY4P9gi
 OCasGc6Yfcuecg2+lsvJgb3wKjQY4tYc+Y4IJI1geELmcCm9Vd0WBb00D
 pvbVpfHWb1rf81I5OwW/ka3TGObWkMfruzu7N2lT/A5jCt5s+S0sGyWhN
 iBqREJh7QCyqfv6QTip5PIc3x+mT4p0spfJP2bqIasxOB+6ul3mqSXCWm
 ekvQqvNzlKAyNVSDhgqZFlk5bKbNTZ1xFf0X4XUje7lyeeZMStLFDoV7c g==;
X-IronPort-AV: E=McAfee;i="6500,9779,10495"; a="304155066"
X-IronPort-AV: E=Sophos;i="5.95,173,1661842800"; d="scan'208";a="304155066"
Received: from orsmga008.jf.intel.com ([10.7.209.65])
 by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 10 Oct 2022 00:56:46 -0700
X-ExtLoop1: 1
X-IronPort-AV: E=McAfee;i="6500,9779,10495"; a="656842773"
X-IronPort-AV: E=Sophos;i="5.95,173,1661842800"; d="scan'208";a="656842773"
Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83])
 by orsmga008.jf.intel.com with ESMTP; 10 Oct 2022 00:56:28 -0700
Received: from fmsmsx611.amr.corp.intel.com (10.18.126.91) by
 fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server
 (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.1.2375.31; Mon, 10 Oct 2022 00:56:27 -0700
Received: from fmsmsx608.amr.corp.intel.com (10.18.126.88) by
 fmsmsx611.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server
 (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.1.2375.31; Mon, 10 Oct 2022 00:56:27 -0700
Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by
 fmsmsx608.amr.corp.intel.com (10.18.126.88) with Microsoft SMTP Server
 (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.1.2375.31 via Frontend Transport; Mon, 10 Oct 2022 00:56:27 -0700
Received: from NAM12-MW2-obe.outbound.protection.outlook.com (104.47.66.46) by
 edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server
 (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.1.2375.31; Mon, 10 Oct 2022 00:56:17 -0700
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=R49H3RRDczEybukZhzty21FidEEk7h7wo+9XWjItpBZAJ6Qsm6DLNE2w065BhsIH3s/fGb0Kd0UKbapUKec+ao6VcQIMKjSYVF2oFnoIytV8YvVZH7Rt2nG+OCMfctkcP728d/DdvPrJ3AeAXUX4tHn6Sc/VBI/iIuz75nx+/RfNlO7Vi3hSf2Cda8Hmt+kEwv+NRLCsWrsG+NS01edvXMJJ0RHQxkhDjQljMHGrlTO5VLCA1/cgKJEUtELVvL/rdzjY1MugMZjjqgckJmBnFFOmRw3eEyCNM7FMcmtTcL3op6Rgj3qmctoASS7Z1LbLryYtblpoJRRLBgwJCr6D1w==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; 
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=Xfxqu1jFJE2uj6nbev2n3sjDPC96/nr1gRuG6gEB+x4=;
 b=MyLiYCjKVMjwF4xxIG4Kcaf5smQofkACOO8J4pXw1YJsoMI7VAMtPNiDt4Ahgx0C9ifnVSbeATl20Ns0wo6NN06SO+HSrVQBqmS/eVK6V/aWpAHNwJ/3amW0NtcO7dAALhVZBQ1x9g3pDT+Ex+yAA46yCimttmSDBlKpy/qR1CnfhKJ4uqoUGH1sE2G42wudG9STmXX8l7MU5yilh3DMTfmcEf9aAxAivKbTsgfelPg3uUq0H4g2YAt0VzpRuDlCZD6i4Yraa2U6qEYXBDfEgVnMjNlHzCHnsyRyRXeMx3jioGa1rw4gJ/G35BmJzQz+5W961WgItO5a+ExLYAvAjg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com;
 dkim=pass header.d=intel.com; arc=none
Received: from SA0PR11MB4575.namprd11.prod.outlook.com (2603:10b6:806:9b::18)
 by PH8PR11MB6612.namprd11.prod.outlook.com (2603:10b6:510:1cf::14)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.24; Mon, 10 Oct
 2022 07:56:13 +0000
Received: from SA0PR11MB4575.namprd11.prod.outlook.com
 ([fe80::95dc:6564:8d3b:bcf]) by SA0PR11MB4575.namprd11.prod.outlook.com
 ([fe80::95dc:6564:8d3b:bcf%3]) with mapi id 15.20.5709.015; Mon, 10 Oct 2022
 07:56:13 +0000
From: "Wu, Wenjun1" <wenjun1.wu@intel.com>
To: "Guo, Junfeng" <junfeng.guo@intel.com>, "Zhang, Qi Z"
 <qi.z.zhang@intel.com>, "Wu, Jingjing" <jingjing.wu@intel.com>, "Xing,
 Beilei" <beilei.xing@intel.com>
CC: "dev@dpdk.org" <dev@dpdk.org>, "Wang, Xiao W" <xiao.w.wang@intel.com>,
 "Guo, Junfeng" <junfeng.guo@intel.com>, "Qiao, Wenjing"
 <wenjing.qiao@intel.com>
Subject: RE: [PATCH v2 14/14] net/idpf: add support for timestamp offload
Thread-Topic: [PATCH v2 14/14] net/idpf: add support for timestamp offload
Thread-Index: AQHYwRbIYotJUFmxEkWklwvuP3wKxK4Hd/Ow
Date: Mon, 10 Oct 2022 07:56:13 +0000
Message-ID: <SA0PR11MB4575C988ED258D9C72CB0948DF209@SA0PR11MB4575.namprd11.prod.outlook.com>
References: <20220803113104.1184059-1-junfeng.guo@intel.com>
 <20220905105828.3190335-1-junfeng.guo@intel.com>
 <20220905105828.3190335-15-junfeng.guo@intel.com>
In-Reply-To: <20220905105828.3190335-15-junfeng.guo@intel.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
dlp-product: dlpe-windows
dlp-version: 11.6.500.17
dlp-reaction: no-action
authentication-results: dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=intel.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: SA0PR11MB4575:EE_|PH8PR11MB6612:EE_
x-ms-office365-filtering-correlation-id: 889e3052-492b-4ce1-c387-08daaa94e6dd
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: nYE0TYCfFYNxxUXXi/s79rb2oSt0b7nUvfb9JNwA17LxrP/bewg6UGxAiVrYgfwpPYTjsBzYL8rsKHQWNGW14ZeYPkU3JN9zeudKhojnWtqx+z6FCgiewp27kOhJQsR97h+edtZ6AlQKICW7kYhFusPvS+aTG/2IP1KfsnB/1mKnRmZjt82twbBLZ8eIlQ5XCEevxG+uOOY3+kTwvKpuhXaJI9XhH1l78A39BWy8AnkZ+3gll1fgPeSWgtMAYzW/xWu0820YjLofhXvB3SaofZkPBQ4TlTPlDqK5FgbcNW2lDsnHCKsy2X6NSEXkU//SMMFBwTqwEITwWB9NB/TAUodeMzc56HHl6xUAfjemqSUd0mseslyuTIPvWXhkWh/HUO4Udhzh/XYeGfUFc1Ays8QTyqrkb94x+l0u2ZuyyQxdTh08gd4ts6n4hvYU+sm6kj/1PFlpOh2imbvE+GaNrQc5yNyRpUjyo6Z2Xk0S4fIxxxt9ZVgEA/CPjbhJWI6kgfb1aW2x7F+UTWHT/j1c0b8aq7VawwIZArEUSnioaF3t19xDfus1ZEF96E+pIncLOBvB62+XoKmct70ksUxCPE1dZ5TAh3oDt3mTFSwgxRadn7QENZd1x2/N5by44G7leKZrsMopAC3sB/nDsDEKSwkljfAzvpbK1EUhCPL7ufDhrX7QYu0Om+prYotEHZpwFbdtp0BND2H40kwOEEwBtVFuAjdeayvVqk3yDaEKTkGJmkGN5zkQyWhj3Ilng6fFKYXusP3EHPdGXqFUJYp3lA==
x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;
 IPV:NLI; SFV:NSPM; H:SA0PR11MB4575.namprd11.prod.outlook.com; PTR:; CAT:NONE;
 SFS:(13230022)(396003)(366004)(136003)(376002)(39860400002)(346002)(451199015)(66556008)(66476007)(8676002)(53546011)(6506007)(316002)(30864003)(4326008)(7696005)(52536014)(6636002)(66446008)(76116006)(478600001)(186003)(26005)(66946007)(110136005)(5660300002)(64756008)(54906003)(2906002)(33656002)(38070700005)(83380400001)(9686003)(122000001)(71200400001)(55016003)(8936002)(38100700002)(107886003)(41300700001)(86362001)(82960400001);
 DIR:OUT; SFP:1102; 
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?bIzTleQZffE2bkVpyAgzc5R4F+R/yyetkbasMiGBdajOOcGN1RsqoXh9VmnN?=
 =?us-ascii?Q?j5qjSUjOSLSbaF7g3WY/v6GIEGvwYWOAw9YgwM3Yw94hnxy99l7cJ3MxycYG?=
 =?us-ascii?Q?9NzIu6ltSLhgG/4W+8Sn0h7+Alu/kWmGNsfPeZyrhv1zCuo5MylnsI59BWM0?=
 =?us-ascii?Q?JM4bmNUfKm6J31aXoXc2Z1oWOwqddTytMt9xDd6slNk2V0TsKzOnFxYgRbhj?=
 =?us-ascii?Q?5XIsJgek4KbMb5BAfGkEF2ZYLpKixah2ppzWUZl5iQ/RjsF1plyLjQgV4qkB?=
 =?us-ascii?Q?MKoW3MlT4kQWQKDYmDEVEsyU77FCS8ezx21S3SE4J6LA26ervFs3bkJSd/Lc?=
 =?us-ascii?Q?GQZ3g/DqwvKlL70s+ZcwThqLqqsNz2rz/9SDiYjy3tyPnPYGdpfNyPnZRw9N?=
 =?us-ascii?Q?0y6birSt8bVLcLIXehEZWsFKntMUDBhK82dTL+vzNgek05mjMEKGFCJtlSTD?=
 =?us-ascii?Q?9En8JWmMwuJivN5cQZaqCYQmXIk2N2TFPz8wYYlkvh4yme+nHqmD+MwFcJ7P?=
 =?us-ascii?Q?2ve6M1W8YKDLAkXy3BEbq1VjJqH56ee8f3+rqtvMeWlBxXg15rwIz5YBTXgq?=
 =?us-ascii?Q?HhlVY3z9WxsP5qwL78RouCaJo3oO1F+zQDCFs2JNRi/GTaiXCutlq42+Y2e3?=
 =?us-ascii?Q?gYvxfBwy5FIy6sVFGLwpi754RtG66y4cXRGyBVt7OIqkZjpxvyoeJ/NnL0jK?=
 =?us-ascii?Q?liDMbunUMOp6S7aFYytjJ5SUGNYMPpP0sX1vSPHaTshYGsnwdDv5XKc6W92R?=
 =?us-ascii?Q?LcU6DAOcgP9+r7MKLYo8pduMzyFkbwUp+OCqe8v103plcF1rO4XuX49kLJuX?=
 =?us-ascii?Q?vqQYOaQMj2PLM7Rlcu+yoevYP8AMqwRoFiEj8b5G6dRJ2rnhNaP2IYuZH5BY?=
 =?us-ascii?Q?inGBykgBdHIoxdGnetyHdHAL52wlbPXQHKdRVa0ixgUE6GLkkO21AS3pR93w?=
 =?us-ascii?Q?Y0vv/p8v9UkUB5/7azQ+LjyhZa+G+XUd5mmb1ftVAJAtetegTSaB1ymrPQss?=
 =?us-ascii?Q?0JjAFOybxxh/skou73DdhwhjmE26cVZ13RQ0O7yfH6FLrwHUs1IW6jNU456w?=
 =?us-ascii?Q?Ge7GXgyIxnMKetoSs7Qe0rIfDHW/KABoX37eMIxa3ejdvlHJ44X+QeAykVoj?=
 =?us-ascii?Q?xWLZjHNOSr3JJEXwoqfgF+KyoNkKc3ujDevsnZ1Fl7f5kjHbqrnMOARVJNUJ?=
 =?us-ascii?Q?bsXyEdiGkdqxnUMwufSrfJEFmy3kJf/LCnEpqocfB6tXgemwu4elTs9ysnZt?=
 =?us-ascii?Q?Fee0+viyVca3u188dggcS/+SQTAT4wSr7iXxjPBNdUEjwAhlerCMxSCkGwaf?=
 =?us-ascii?Q?H71Su8mxDpt5iG2qksO5NdEP07ZZt265skhxkxv29Eoy9F5BjWx9g7+S5piH?=
 =?us-ascii?Q?r60MHpvAM9JbAkNTpH3zTm39n//XUZp/5Ly76F+29xlg7g25owvECrfIRDOD?=
 =?us-ascii?Q?6iUwyetLcPCJgD5mc2eWTrDfmk6olDdMnaFH5M+7FaIgjTWW0ztE3hQdfeXl?=
 =?us-ascii?Q?Ahj/aT8xDlAwLgTExU1LCX1MgOKhH/S0IZV02HXtriRr7cqH/FUebyxRLvxw?=
 =?us-ascii?Q?tcTuh+X7WazzOTJtvexAAQOsdwbkhuttOI3Ik+As?=
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: SA0PR11MB4575.namprd11.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 889e3052-492b-4ce1-c387-08daaa94e6dd
X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Oct 2022 07:56:13.1365 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: pF6bk+xmYKQXqbV31uCw0mlPNMbmhzVnuZsIy0U6mi6MLcjlTha9vg7FKzC/7/hyhQPjSdGahQmJiphx31T4PA==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR11MB6612
X-OriginatorOrg: intel.com
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org



> -----Original Message-----
> From: Junfeng Guo <junfeng.guo@intel.com>
> Sent: Monday, September 5, 2022 6:58 PM
> To: Zhang, Qi Z <qi.z.zhang@intel.com>; Wu, Jingjing
> <jingjing.wu@intel.com>; Xing, Beilei <beilei.xing@intel.com>
> Cc: dev@dpdk.org; Wang, Xiao W <xiao.w.wang@intel.com>; Guo, Junfeng
> <junfeng.guo@intel.com>; Qiao, Wenjing <wenjing.qiao@intel.com>
> Subject: [PATCH v2 14/14] net/idpf: add support for timestamp offload
>=20
> Add support for timestamp offload.
>=20
> Signed-off-by: Wenjing Qiao <wenjing.qiao@intel.com>
> Signed-off-by: Junfeng Guo <junfeng.guo@intel.com>
> ---
>  drivers/net/idpf/idpf_ethdev.h |  3 ++
>  drivers/net/idpf/idpf_rxtx.c   | 79 ++++++++++++++++++++++++++++++
>  drivers/net/idpf/idpf_rxtx.h   | 89 +++++++++++++++++++++++++++++++++-
>  3 files changed, 170 insertions(+), 1 deletion(-)
>=20
> diff --git a/drivers/net/idpf/idpf_ethdev.h b/drivers/net/idpf/idpf_ethde=
v.h
> index a32d5758ac..968e0e3cbf 100644
> --- a/drivers/net/idpf/idpf_ethdev.h
> +++ b/drivers/net/idpf/idpf_ethdev.h
> @@ -184,6 +184,9 @@ struct idpf_adapter {
>  	bool tx_vec_allowed;
>  	bool rx_use_avx512;
>  	bool tx_use_avx512;
> +
> +	/* For PTP */
> +	uint64_t time_hw;
>  };
>=20
>  TAILQ_HEAD(idpf_adapter_list, idpf_adapter); diff --git
> a/drivers/net/idpf/idpf_rxtx.c b/drivers/net/idpf/idpf_rxtx.c index
> e31d202646..b0037eca08 100644
> --- a/drivers/net/idpf/idpf_rxtx.c
> +++ b/drivers/net/idpf/idpf_rxtx.c
> @@ -10,6 +10,8 @@
>  #include "idpf_rxtx.h"
>  #include "idpf_rxtx_vec_common.h"
>=20
> +static int idpf_timestamp_dynfield_offset =3D -1;
> +
>  const uint32_t *
>  idpf_dev_supported_ptypes_get(struct rte_eth_dev *dev __rte_unused)
> { @@ -965,6 +967,24 @@ idpf_tx_queue_setup(struct rte_eth_dev *dev,
> uint16_t queue_idx,
>  						 socket_id, tx_conf);
>  }
>=20
> +static int
> +idpf_register_ts_mbuf(struct idpf_rx_queue *rxq) {
> +	int err;
> +	if (rxq->offloads & RTE_ETH_RX_OFFLOAD_TIMESTAMP) {
> +		/* Register mbuf field and flag for Rx timestamp */
> +		err =3D rte_mbuf_dyn_rx_timestamp_register(
> +				&idpf_timestamp_dynfield_offset,
> +				&idpf_timestamp_dynflag);
> +		if (err) {
> +			PMD_DRV_LOG(ERR,
> +				"Cannot register mbuf field/flag for
> timestamp");
> +			return -EINVAL;
> +		}
> +	}
> +	return 0;
> +}
> +
>  static int
>  idpf_alloc_single_rxq_mbufs(struct idpf_rx_queue *rxq)  { @@ -992,6
> +1012,10 @@ idpf_alloc_single_rxq_mbufs(struct idpf_rx_queue *rxq)
>  		rxd =3D &((volatile struct virtchnl2_singleq_rx_buf_desc *)(rxq-
> >rx_ring))[i];
>  		rxd->pkt_addr =3D dma_addr;
>  		rxd->hdr_addr =3D 0;
> +#ifndef RTE_LIBRTE_IDPF_16BYTE_RX_DESC
> +		rxd->rsvd1 =3D 0;
> +		rxd->rsvd2 =3D 0;
> +#endif

It seems that IDPF does not add any configuration related to descriptor len=
gth.
The descriptor length is always the default 32B, so the conditional compila=
tion
is not necessary.

>=20
>  		rxq->sw_ring[i] =3D mbuf;
>  	}
> @@ -1057,6 +1081,13 @@ idpf_rx_queue_init(struct rte_eth_dev *dev,
> uint16_t rx_queue_id)
>  		return -EINVAL;
>  	}
>=20
> +	err =3D idpf_register_ts_mbuf(rxq);
> +	if (err) {
> +		PMD_DRV_LOG(ERR, "fail to regidter timestamp mbuf %u",
> +					rx_queue_id);
> +		return -EIO;
> +	}
> +
>  	if (!rxq->bufq1) {
>  		/* Single queue */
>  		err =3D idpf_alloc_single_rxq_mbufs(rxq); @@ -1441,6
> +1472,12 @@ idpf_splitq_recv_pkts(void *rx_queue, struct rte_mbuf
> **rx_pkts,
>  	nb_rx =3D 0;
>  	rxq =3D (struct idpf_rx_queue *)rx_queue;
>=20
> +#ifndef RTE_LIBRTE_IDPF_16BYTE_RX_DESC
> +	uint64_t ts_ns;
> +	struct iecm_hw *hw =3D &rxq->adapter->hw;
> +	struct idpf_adapter *ad =3D rxq->adapter; #endif
> +
>  	if (unlikely(!rxq) || unlikely(!rxq->q_started))
>  		return nb_rx;
>=20

Ditto.

> @@ -1451,6 +1488,11 @@ idpf_splitq_recv_pkts(void *rx_queue, struct
> rte_mbuf **rx_pkts,
>  	       (volatile struct virtchnl2_rx_flex_desc_adv_nic_3 *)rxq->rx_ring=
;
>  	ptype_tbl =3D rxq->adapter->ptype_tbl;
>=20
> +#ifndef RTE_LIBRTE_IDPF_16BYTE_RX_DESC
> +	if (rxq->offloads & RTE_ETH_RX_OFFLOAD_TIMESTAMP)
> +		rxq->hw_register_set =3D 1;
> +#endif
> +

Ditto.

>  	while (nb_rx < nb_pkts) {
>  		rx_desc =3D &rx_desc_ring[rx_id];
>=20
> @@ -1507,6 +1549,19 @@ idpf_splitq_recv_pkts(void *rx_queue, struct
> rte_mbuf **rx_pkts,
>  		status_err0_qw1 =3D rx_desc->status_err0_qw1;
>  		pkt_flags =3D idpf_splitq_rx_csum_offload(status_err0_qw1);
>  		pkt_flags |=3D idpf_splitq_rx_rss_offload(rxm, rx_desc);
> +#ifndef RTE_LIBRTE_IDPF_16BYTE_RX_DESC
> +		if (idpf_timestamp_dynflag > 0) {
> +			/* timestamp */
> +			ts_ns =3D idpf_tstamp_convert_32b_64b(hw, ad,
> +							    rxq-
> >hw_register_set,
> +
> rte_le_to_cpu_32(rx_desc->ts_high));
> +			rxq->hw_register_set =3D 0;
> +			*RTE_MBUF_DYNFIELD(rxm,
> +					   idpf_timestamp_dynfield_offset,
> +					   rte_mbuf_timestamp_t *) =3D ts_ns;
> +			rxm->ol_flags |=3D idpf_timestamp_dynflag;
> +		}
> +#endif

Ditto.

>  		rxm->ol_flags |=3D pkt_flags;
>=20
>  		rx_pkts[nb_rx++] =3D rxm;
> @@ -1778,6 +1833,10 @@ idpf_singleq_recv_pkts(void *rx_queue, struct
> rte_mbuf **rx_pkts,
>  	nb_hold =3D 0;
>  	rxq =3D rx_queue;
>=20
> +#ifndef RTE_LIBRTE_IDPF_16BYTE_RX_DESC
> +	uint64_t ts_ns;
> +#endif

Ditto.

> +
>  	if (unlikely(!rxq) || unlikely(!rxq->q_started))
>  		return nb_rx;
>=20
> @@ -1785,6 +1844,13 @@ idpf_singleq_recv_pkts(void *rx_queue, struct
> rte_mbuf **rx_pkts,
>  	rx_ring =3D rxq->rx_ring;
>  	ptype_tbl =3D rxq->adapter->ptype_tbl;
>=20
> +#ifndef RTE_LIBRTE_IDPF_16BYTE_RX_DESC
> +	struct iecm_hw *hw =3D &rxq->adapter->hw;
> +	struct idpf_adapter *ad =3D rxq->adapter;
> +	if (rxq->offloads & RTE_ETH_RX_OFFLOAD_TIMESTAMP)
> +		rxq->hw_register_set =3D 1;
> +#endif

Ditto.

> +
>  	while (nb_rx < nb_pkts) {
>  		rxdp =3D &rx_ring[rx_id];
>  		rx_status0 =3D rte_le_to_cpu_16(rxdp-
> >flex_nic_wb.status_error0);
> @@ -1841,6 +1907,19 @@ idpf_singleq_recv_pkts(void *rx_queue, struct
> rte_mbuf **rx_pkts,
>  		rxm->packet_type =3D
>=20
> 	ptype_tbl[(uint8_t)(rte_cpu_to_le_16(rxd.flex_nic_wb.ptype_flex_fla
> gs0) &
>  				VIRTCHNL2_RX_FLEX_DESC_PTYPE_M)];
> +#ifndef RTE_LIBRTE_IDPF_16BYTE_RX_DESC
> +		if (idpf_timestamp_dynflag > 0) {
> +			/* timestamp */
> +			ts_ns =3D idpf_tstamp_convert_32b_64b(hw, ad,
> +							    rxq-
> >hw_register_set,
> +
> rte_le_to_cpu_32(rxdp->flex_nic_wb.flex_ts.ts_high));
> +			rxq->hw_register_set =3D 0;
> +			*RTE_MBUF_DYNFIELD(rxm,
> +					   idpf_timestamp_dynfield_offset,
> +					   rte_mbuf_timestamp_t *) =3D ts_ns;
> +			rxm->ol_flags |=3D idpf_timestamp_dynflag;
> +		}
> +#endif

Ditto.

>  		rx_pkts[nb_rx++] =3D rxm;
>  	}
>  	rxq->rx_tail =3D rx_id;
> diff --git a/drivers/net/idpf/idpf_rxtx.h b/drivers/net/idpf/idpf_rxtx.h =
index
> decd0a98c2..6fcb441143 100644
> --- a/drivers/net/idpf/idpf_rxtx.h
> +++ b/drivers/net/idpf/idpf_rxtx.h
> @@ -15,6 +15,41 @@
>  #include "base/virtchnl2_lan_desc.h"
>  #include "idpf_ethdev.h"
>=20
> +/* MTS */
> +#define GLTSYN_CMD_SYNC_0_0	(PF_TIMESYNC_BASE + 0x0)
> +#define PF_GLTSYN_SHTIME_0_0	(PF_TIMESYNC_BASE + 0x4)
> +#define PF_GLTSYN_SHTIME_L_0	(PF_TIMESYNC_BASE + 0x8)
> +#define PF_GLTSYN_SHTIME_H_0	(PF_TIMESYNC_BASE + 0xC)
> +#define GLTSYN_ART_L_0		(PF_TIMESYNC_BASE + 0x10)
> +#define GLTSYN_ART_H_0		(PF_TIMESYNC_BASE + 0x14)
> +#define PF_GLTSYN_SHTIME_0_1	(PF_TIMESYNC_BASE + 0x24)
> +#define PF_GLTSYN_SHTIME_L_1	(PF_TIMESYNC_BASE + 0x28)
> +#define PF_GLTSYN_SHTIME_H_1	(PF_TIMESYNC_BASE + 0x2C)
> +#define PF_GLTSYN_SHTIME_0_2	(PF_TIMESYNC_BASE + 0x44)
> +#define PF_GLTSYN_SHTIME_L_2	(PF_TIMESYNC_BASE + 0x48)
> +#define PF_GLTSYN_SHTIME_H_2	(PF_TIMESYNC_BASE + 0x4C)
> +#define PF_GLTSYN_SHTIME_0_3	(PF_TIMESYNC_BASE + 0x64)
> +#define PF_GLTSYN_SHTIME_L_3	(PF_TIMESYNC_BASE + 0x68)
> +#define PF_GLTSYN_SHTIME_H_3	(PF_TIMESYNC_BASE + 0x6C)
> +
> +#define PF_TIMESYNC_BAR4_BASE	0x0E400000
> +#define GLTSYN_ENA		(PF_TIMESYNC_BAR4_BASE + 0x90)
> +#define GLTSYN_CMD		(PF_TIMESYNC_BAR4_BASE + 0x94)
> +#define GLTSYC_TIME_L		(PF_TIMESYNC_BAR4_BASE + 0x104)
> +#define GLTSYC_TIME_H		(PF_TIMESYNC_BAR4_BASE + 0x108)
> +
> +#define GLTSYN_CMD_SYNC_0_4	(PF_TIMESYNC_BAR4_BASE + 0x110)
> +#define PF_GLTSYN_SHTIME_L_4	(PF_TIMESYNC_BAR4_BASE + 0x118)
> +#define PF_GLTSYN_SHTIME_H_4	(PF_TIMESYNC_BAR4_BASE + 0x11C)
> +#define GLTSYN_INCVAL_L		(PF_TIMESYNC_BAR4_BASE + 0x150)
> +#define GLTSYN_INCVAL_H		(PF_TIMESYNC_BAR4_BASE + 0x154)
> +#define GLTSYN_SHADJ_L		(PF_TIMESYNC_BAR4_BASE + 0x158)
> +#define GLTSYN_SHADJ_H		(PF_TIMESYNC_BAR4_BASE + 0x15C)
> +
> +#define GLTSYN_CMD_SYNC_0_5	(PF_TIMESYNC_BAR4_BASE + 0x130)
> +#define PF_GLTSYN_SHTIME_L_5	(PF_TIMESYNC_BAR4_BASE + 0x138)
> +#define PF_GLTSYN_SHTIME_H_5	(PF_TIMESYNC_BAR4_BASE + 0x13C)
> +
>  /* In QLEN must be whole number of 32 descriptors. */
>  #define IDPF_ALIGN_RING_DESC	32
>  #define IDPF_MIN_RING_DESC	32
> @@ -66,6 +101,8 @@
>  	(sizeof(struct virtchnl2_ptype) + \
>  	(((p)->proto_id_count ? ((p)->proto_id_count - 1) : 0) * sizeof((p)-
> >proto_id[0])))
>=20
> +extern uint64_t idpf_timestamp_dynflag;
> +
>  struct idpf_rx_queue {
>  	struct idpf_adapter *adapter;	/* the adapter this queue belongs to
> */
>  	struct rte_mempool *mp;		/* mbuf pool to populate Rx
> ring */
> @@ -231,5 +268,55 @@ void idpf_set_tx_function(struct rte_eth_dev *dev);
>=20
>  const uint32_t *idpf_dev_supported_ptypes_get(struct rte_eth_dev *dev);
>=20
> -#endif /* _IDPF_RXTX_H_ */
> +#define IDPF_TIMESYNC_REG_WRAP_GUARD_BAND  10000
> +/* Helper function to convert a 32b nanoseconds timestamp to 64b. */
> +static inline uint64_t idpf_tstamp_convert_32b_64b(struct iecm_hw *hw,
> +struct idpf_adapter *ad,
> +			    uint32_t flag, uint32_t in_timestamp) {
> +/* TODO: timestamp for ACC */
> +#ifdef RTE_ARCH_ARM64
> +	return 0;
> +#endif /* RTE_ARCH_ARM64 */
> +
> +#ifdef RTE_ARCH_X86_64
> +	const uint64_t mask =3D 0xFFFFFFFF;
> +	uint32_t hi, lo, lo2, delta;
> +	uint64_t ns;
> +
> +	if (flag) {
> +		IECM_WRITE_REG(hw, GLTSYN_CMD_SYNC_0_0,
> PF_GLTSYN_CMD_SYNC_SHTIME_EN_M);
> +		IECM_WRITE_REG(hw, GLTSYN_CMD_SYNC_0_0,
> PF_GLTSYN_CMD_SYNC_EXEC_CMD_M |
> +			       PF_GLTSYN_CMD_SYNC_SHTIME_EN_M);
> +		lo =3D IECM_READ_REG(hw, PF_GLTSYN_SHTIME_L_0);
> +		hi =3D IECM_READ_REG(hw, PF_GLTSYN_SHTIME_H_0);
> +		/*
> +		 * On typical system, the delta between lo and lo2 is ~1000ns,
> +		 * so 10000 seems a large-enough but not overly-big guard
> band.
> +		 */
> +		if (lo > (UINT32_MAX -
> IDPF_TIMESYNC_REG_WRAP_GUARD_BAND))
> +			lo2 =3D IECM_READ_REG(hw, PF_GLTSYN_SHTIME_L_0);
> +		else
> +			lo2 =3D lo;
> +
> +		if (lo2 < lo) {
> +			lo =3D IECM_READ_REG(hw, PF_GLTSYN_SHTIME_L_0);
> +			hi =3D IECM_READ_REG(hw, PF_GLTSYN_SHTIME_H_0);
> +		}
> +
> +		ad->time_hw =3D ((uint64_t)hi << 32) | lo;
> +	}
> +
> +	delta =3D (in_timestamp - (uint32_t)(ad->time_hw & mask));
> +	if (delta > (mask / 2)) {
> +		delta =3D ((uint32_t)(ad->time_hw & mask) - in_timestamp);
> +		ns =3D ad->time_hw - delta;
> +	} else {
> +		ns =3D ad->time_hw + delta;
> +	}
> +
> +	return ns;
> +#endif /* RTE_ARCH_X86_64 */
> +}
>=20
> +#endif /* _IDPF_RXTX_H_ */
> --
> 2.25.1