From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 30275A0545 for ; Tue, 7 Jun 2022 04:44:48 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 297D5427EA; Tue, 7 Jun 2022 04:44:48 +0200 (CEST) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by mails.dpdk.org (Postfix) with ESMTP id 8A75240156; Tue, 7 Jun 2022 04:44:44 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1654569884; x=1686105884; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=956qK8kxNYDMv02UZblONcJm4+lszj8EujGtCS4vowA=; b=HM23wkKFovmAJ+vYo9YeEFTcRBHP06ArOgxnLjjGSCSDmV4bFJRij9Ow k7Oxbf/NsddimbqmWDY/zrsIySXgUn6rYP5HeVFG69cl84PIFd9R1KeW+ douDoctQHn15Ywg/MxxfE6ersXj+DS4LGZZgmGwTVwFnqShdK430jwcbN hf19Q5gOPkhset4lBVXbnAJp+ZvgUw4EPBe3cmoVgDSyvVagW1h/Nzw48 qL5eJ4JQRYsmqnysuroBhfOrYsRvm4JhUfFmkrtDUOLfktmIKIYjib0Db AvdPlE9X8E+5HtV5SFMGwbDL+vlrTtLtGU+0LW4VMMc9qGVgsbHa905Eh Q==; X-IronPort-AV: E=McAfee;i="6400,9594,10370"; a="264913511" X-IronPort-AV: E=Sophos;i="5.91,282,1647327600"; d="scan'208";a="264913511" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Jun 2022 19:44:43 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.91,282,1647327600"; d="scan'208";a="758824799" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by orsmga005.jf.intel.com with ESMTP; 06 Jun 2022 19:44:43 -0700 Received: from orsmsx605.amr.corp.intel.com (10.22.229.18) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Mon, 6 Jun 2022 19:44:42 -0700 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx605.amr.corp.intel.com (10.22.229.18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27 via Frontend Transport; Mon, 6 Jun 2022 19:44:42 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.104) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.27; Mon, 6 Jun 2022 19:44:42 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FPUkz/tg195OXQ1GdmRtw8U5Myq9nS0Lm9l4Vka0e/OCbx8NhKhY7o3uTE6QLhaMYpSyZ5NmMF5+Fmi+VQvbeB2MKDnAwUnOe8GwDx1P6+VCideauvNoSo5nC9xu5euU6/woGiWky9LoBVd4jgnjialvLoY/gsXuhFOpoOgWtzoq3G0gIcvIPSE0Wa3BJsnJqqVVoym8kXpiNha0hEWyFWB1jwrwad2IYkw+jx00UpqZNxbLXE6Qt4LkcM9pRFTdjYWsOreLdr0tpJca4pgHl6GLnNHBSFplXC0WalObDEjtK2jQzGzYaa+sSZpSVmg+qmtrMpqPZ0oDb27g7n2yTw== 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=i28oZ/oI7/C6iyQ59BEWxwSHa88yoqrxW4UMOVDrVL0=; b=EcTpN78EEuwi/m8WpADFwMYc+jQinQsNPxPL7w+OiLu8/PjtLA9gDKwH8EHZlZgy7blF5B7CbKs3GPfEmfiSQG5P5lVbKtra8uVjpxAEg2zuDTN6NOm89PzKGEjbjLjM+m3QYmXCuv98fiiywDBPBwmomaguTpjXZSrZAOJ/aNEAicVxS7G90/a5axeok5Zw2/loi8g/JvhiQFOokOpMZOOCklpc9i0RCptSubMJpvZaTARNf0/fUDfMnq+sWXj+9gml8MEmfyt7Vdjt7Xnf8FHBl8+tyXdEF669NdaT1feA5Kk0IJ28yQI/KLfLsOXPlLsml2esyus48Nsq+89JQg== 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 DM6PR11MB3530.namprd11.prod.outlook.com (2603:10b6:5:72::19) by DM4PR11MB5970.namprd11.prod.outlook.com (2603:10b6:8:5d::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5293.19; Tue, 7 Jun 2022 02:44:40 +0000 Received: from DM6PR11MB3530.namprd11.prod.outlook.com ([fe80::3d0e:6e37:569:cd07]) by DM6PR11MB3530.namprd11.prod.outlook.com ([fe80::3d0e:6e37:569:cd07%6]) with mapi id 15.20.5314.019; Tue, 7 Jun 2022 02:44:40 +0000 From: "Huang, Wei" To: "Zhang, Tianfei" , "dev@dpdk.org" , "thomas@monjalon.net" , "nipun.gupta@nxp.com" , "hemant.agrawal@nxp.com" CC: "stable@dpdk.org" , "Xu, Rosen" , "Zhang, Qi Z" Subject: RE: [PATCH v5 5/5] raw/afu_mf: add HE-HSSI AFU driver Thread-Topic: [PATCH v5 5/5] raw/afu_mf: add HE-HSSI AFU driver Thread-Index: AQHYcYrjPw53uQZYNUSec1QUJZKHDa1B/WAAgAFQRpA= Date: Tue, 7 Jun 2022 02:44:40 +0000 Message-ID: References: <1652939560-15786-1-git-send-email-wei.huang@intel.com> <1653629824-4535-1-git-send-email-wei.huang@intel.com> <1653629824-4535-6-git-send-email-wei.huang@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.6.500.17 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: d0420d1f-b3ed-4bde-da7b-08da482fabc7 x-ms-traffictypediagnostic: DM4PR11MB5970:EE_ x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: D4Tw5iUf2f3DWc7TobHMwpl1GXQi2Fl8nZ5m1E0KA67K4BGam3jtMaQ3ScWmr8QL8Grkf05xvBPcmM2C27rQBBG6tY37HfdDTdDxpGW8HqYa5vIfbSNPe1qpUh1Jx9ExwBW3YuYwCOIb0e8X9mUcIycE5IF9Ymvv37wfD2gx0Wwke462AL+QfjMay3DP33f9E56eHC0x+86nebt2ehtnVYXlOVEd9zO6hADojwfhwXpAhFhPtKwhWJ4zQ1EkUys6uyY75kXoAvKd65AR/HRfjvpeCuVrsSLa+IhaDF9JGaiK96b4bX4K/fzQcIBzqwwwZstcdxJ3ojyrf8ZPGVbANblOrxc32mf0JjxswzKDzUYXWuFOiMc3jh+z73OfShKL8Q7nW7sla27ki3jGdE/DR/ZPFWmp0tG0qI8+rZKBvCcnXdDgnfzj2kAvd6SsIH3TzUpGIJNRKEGUUjWuvUSPSqECAMeW0h3vbvdLGBJpV9hqzWl4LlOgt6H50obPJmc3mxjiEo1WozflrPA6OMwKV8kGPC0LNsA/xCFLXPebyHCK9wm7fw8BIrYh3oxlwW1v6TeYhSrfrDtHFWsCe9hm9vEQtdXos3yo9co+AfokG70dkct2dZEdv3F+EFSVN8Tj7Yger+QctFVCr5RbBpk9xP7SNQZasPEDOfJHD6yNL5m+n/hBwTYysWsqgjwuuErZft29xRQzo5Z8J6t9GES5mA== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR11MB3530.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(83380400001)(38070700005)(55016003)(66446008)(66476007)(508600001)(8676002)(64756008)(5660300002)(33656002)(71200400001)(76116006)(66556008)(186003)(66946007)(4326008)(107886003)(52536014)(316002)(9686003)(122000001)(38100700002)(82960400001)(26005)(86362001)(53546011)(30864003)(8936002)(6506007)(7696005)(54906003)(2906002)(110136005); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?jdl2nD9yPZv1TCOpXeszp2gUfjRip4f1wX0F3ajMeXAzjoKpSHXJ/JMGjvQH?= =?us-ascii?Q?PwVwnhq3TeJOlvDWLi+ZC+rT6Y40TuHUokSnQZne8JKmMn2PYMi/G5CIFk+/?= =?us-ascii?Q?EGwaDvTQZWEghFiz/fnSeUkBoIXiKnTinWK23He5i3Cn/qNfJQn+HfeTwsxW?= =?us-ascii?Q?Y7Hx/pvMp8sKopBZ8Qo7qaN+TGVAsF/wsjH4fbVv11o6/s1zxy5oiyaztqjT?= =?us-ascii?Q?fKmHukaUlJfVmWTS4WdJzjyYcQo6u9HtZUWQHYerY9RAxCEPOxlAEqMWEOGU?= =?us-ascii?Q?KXEzLumZty8D1JAZ5y6xbXDh4F8StZWlv0nUZQA2ktgUORg+SkXgi9I6iVzF?= =?us-ascii?Q?NqatK6H4ypLYXGe9Ss1iy/Q4hs2DizvXE2peylTGqVXzWkfHePBVoi/S5qYj?= =?us-ascii?Q?sghVZDNRxtWEGpftA4lQPeQfkoMVpfeyGQlw82quiu5gKOwPlfWtD4qv2Tcw?= =?us-ascii?Q?X6UJplzRQifydy0P27dwWWVdcUp1ZxpzPHLeQB9HLHRhVqnvtedtQNh43XJS?= =?us-ascii?Q?HQoH2S/paayYXn7ohbVI/9Q9MYl4BAiSPoeYtAwCRgUQAmJauy4jAoBgy55U?= =?us-ascii?Q?upx77jBygqci/qHOmURoU7lwO5EENoTz8zwAMS866Rzw6VzFAghmxOO73Rax?= =?us-ascii?Q?/Znayvpzp3lX+5Ixru/Oq96iaNieTwea/qsbx+Nek07+SYEphf+Yn3g94O9i?= =?us-ascii?Q?mWtXTyaI/LrnQUGNJxzrf1E+/VSyzVrS4MP8ONWzL6oNMtAWI3B+s7g/hYAY?= =?us-ascii?Q?toJy5aQx4kcUkAULVQs73nwHmgQ/b4vPPJQDX/aXDwlaYIMof9szr1zQQAaQ?= =?us-ascii?Q?bjskP0DZddEmVJKvW8r+CUgXRqOkUwLdbU0sPL3EqOdGpVf8235E1rNSsg8Y?= =?us-ascii?Q?2yDr/TnFGP3lI/+K8bI0wt7Gc0KbFZHmE//oT1lOV7J0APM++QzMl5f9Je4/?= =?us-ascii?Q?eHzf46YuS4rbu4icfoHcYy47KEscyiewqSN25I+rLbbfGdp3DBb2zlF3ZIhy?= =?us-ascii?Q?b9O7VeHxka/Ott1JaARixqzot1W8haKOOW0KR9Ldc6SAWmiwVWz+7rS8ivxD?= =?us-ascii?Q?10S239mwZDoq0zy607QPx+DhRS3tc1UVdPVw4LwCeQH+Pznhpiwwvk8efIpU?= =?us-ascii?Q?MFEW62j0T/Mb/tgTl/OocL5z19BeuCrqm9hMnIVWiAL++zYlTHKBI7woBIL8?= =?us-ascii?Q?x2NBXW1xaY1fdb2DwdUsChrQkxRW0L6WUtCGx5iV7H/RUBjRDA1KxRm92N0y?= =?us-ascii?Q?8vUCgp3EDj46CJaAIQDis7H9r7pJua93Avto2wysUewmafR5blLKdmIDp0Gx?= =?us-ascii?Q?hciTKcNx4EesQh4qshXIVVv1PI8iaB9yoYmV8kr0HGVIwceTj4tKFGwFrq9y?= =?us-ascii?Q?tzfLr11i62ZX3bFdwy1sacBq6ymzdevI22ASZVzd+Wl6hN4FFqsST4ljF69E?= =?us-ascii?Q?+yYcsM6DdPGhC5zrkPDy+/VCkkSQ8dqzHDocuLgaCUwLrEBkGfmiYZ91GmoP?= =?us-ascii?Q?Ih16GI9St5Q/dk3DUcIFSHcYHuvRy6H21j0soGmjKddt2LKQhWTdIHtsNiOH?= =?us-ascii?Q?IWE37HKwYz3jlkofloAYAsSb/nfkF8BN8z/NGmo3kZHlN4aAlcFn+gwv38/o?= =?us-ascii?Q?ClMF+i4mDl9qxhGh2E7AkRkVWb1ScmWVGrOgSLrFk7EOoG0P2sClh5D+QezZ?= =?us-ascii?Q?DBUYr+DnYXvu04G4h6bQmWR1b2SjXTyxHRqNFaSQQQ8RQKv/qL03a1giJyQN?= =?us-ascii?Q?melNMg6tGg=3D=3D?= 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: DM6PR11MB3530.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d0420d1f-b3ed-4bde-da7b-08da482fabc7 X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Jun 2022 02:44:40.8385 (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: tsl28cg1vX0cPEqNg8HtDeaB1gS1RuZMMOCdyf2DxKWmnL5LmiNHSWtfaQOVZiCCViDw2LU7T0k7g0eOSVuUYw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR11MB5970 X-OriginatorOrg: intel.com X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org > -----Original Message----- > From: Zhang, Tianfei > Sent: Monday, June 6, 2022 14:40 > To: Huang, Wei ; dev@dpdk.org; > thomas@monjalon.net; nipun.gupta@nxp.com; hemant.agrawal@nxp.com > Cc: stable@dpdk.org; Xu, Rosen ; Zhang, Qi Z > > Subject: RE: [PATCH v5 5/5] raw/afu_mf: add HE-HSSI AFU driver >=20 >=20 >=20 > > -----Original Message----- > > From: Huang, Wei > > Sent: Friday, May 27, 2022 1:37 PM > > To: dev@dpdk.org; thomas@monjalon.net; nipun.gupta@nxp.com; > > hemant.agrawal@nxp.com > > Cc: stable@dpdk.org; Xu, Rosen ; Zhang, Tianfei > > ; Zhang, Qi Z ; Huang, > > Wei > > Subject: [PATCH v5 5/5] raw/afu_mf: add HE-HSSI AFU driver > > > > HE-HSSI is one of the host exerciser modules in OFS FPGA, which is > > used to test HSSI (High Speed Serial Interface). > > This driver initialize the module and report test result. > > > > Signed-off-by: Wei Huang > > --- > > drivers/raw/afu_mf/afu_mf_rawdev.c | 3 + > > drivers/raw/afu_mf/he_hssi.c | 369 >=20 > The filename change to "afu_pmd_he_hssi.c" is better? >=20 agree > > +++++++++++++++++++++++++++++++++++++ > > drivers/raw/afu_mf/he_hssi.h | 102 ++++++++++ > > drivers/raw/afu_mf/meson.build | 3 +- > > drivers/raw/afu_mf/rte_pmd_afu.h | 16 ++ > > 5 files changed, 492 insertions(+), 1 deletion(-) create mode 100644 > > drivers/raw/afu_mf/he_hssi.c create mode 100644 > > drivers/raw/afu_mf/he_hssi.h > > > > diff --git a/drivers/raw/afu_mf/afu_mf_rawdev.c > > b/drivers/raw/afu_mf/afu_mf_rawdev.c > > index a56f60e..f24c748 100644 > > --- a/drivers/raw/afu_mf/afu_mf_rawdev.c > > +++ b/drivers/raw/afu_mf/afu_mf_rawdev.c > > @@ -22,6 +22,7 @@ > > #include "n3000_afu.h" > > #include "he_lbk.h" > > #include "he_mem.h" > > +#include "he_hssi.h" > > > > #define AFU_MF_PMD_RAWDEV_NAME rawdev_afu_mf > > > > @@ -30,6 +31,7 @@ > > { HE_LBK_UUID_L, HE_LBK_UUID_H }, > > { HE_MEM_LBK_UUID_L, HE_MEM_LBK_UUID_H }, > > { HE_MEM_TG_UUID_L, HE_MEM_TG_UUID_H }, > > + { HE_HSSI_UUID_L, HE_HSSI_UUID_H }, > > { 0, 0 /* sentinel */ } > > }; > > > > @@ -38,6 +40,7 @@ > > &he_lbk_drv, > > &he_mem_lbk_drv, > > &he_mem_tg_drv, > > + &he_hssi_drv, > > NULL > > }; > > > > diff --git a/drivers/raw/afu_mf/he_hssi.c > > b/drivers/raw/afu_mf/he_hssi.c new file mode 100644 index > > 0000000..bedafbd > > --- /dev/null > > +++ b/drivers/raw/afu_mf/he_hssi.c > > @@ -0,0 +1,369 @@ > > +/* SPDX-License-Identifier: BSD-3-Clause > > + * Copyright(c) 2022 Intel Corporation */ > > + > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > + > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > + > > +#include "afu_mf_rawdev.h" > > +#include "he_hssi.h" > > + > > +static int he_hssi_indirect_write(struct he_hssi_ctx *ctx, uint32_t ad= dr, > > + uint32_t value) > > +{ > > + struct traffic_ctrl_cmd cmd; > > + struct traffic_ctrl_data data; > > + uint32_t i =3D 0; > > + > > + AFU_MF_PMD_DEBUG("Indirect write 0x%x, value 0x%08x", addr, > > value); > > + > > + if (!ctx) > > + return -EINVAL; > > + > > + data.write_data =3D value; > > + rte_write64(data.csr, ctx->addr + TRAFFIC_CTRL_DATA); > > + > > + cmd.csr =3D 0; > > + cmd.write_cmd =3D 1; > > + cmd.afu_cmd_addr =3D addr; > > + rte_write64(cmd.csr, ctx->addr + TRAFFIC_CTRL_CMD); > > + > > + while (i < MAILBOX_TIMEOUT_MS) { > > + rte_delay_ms(MAILBOX_POLL_INTERVAL_MS); > > + cmd.csr =3D rte_read64(ctx->addr + TRAFFIC_CTRL_CMD); > > + if (cmd.ack_trans) > > + break; > > + i +=3D MAILBOX_POLL_INTERVAL_MS; > > + } > > + if (i >=3D MAILBOX_TIMEOUT_MS) > > + return -ETIMEDOUT; > > + > > + i =3D 0; > > + cmd.csr =3D 0; > > + while (i < MAILBOX_TIMEOUT_MS) { > > + cmd.ack_trans =3D 1; > > + rte_write64(cmd.csr, ctx->addr + TRAFFIC_CTRL_CMD); > > + rte_delay_ms(MAILBOX_POLL_INTERVAL_MS); > > + cmd.csr =3D rte_read64(ctx->addr + TRAFFIC_CTRL_CMD); > > + if (!cmd.ack_trans) > > + break; > > + i +=3D MAILBOX_POLL_INTERVAL_MS; > > + } > > + if (i >=3D MAILBOX_TIMEOUT_MS) > > + return -ETIMEDOUT; > > + > > + return 0; > > +} > > + > > +static int he_hssi_indirect_read(struct he_hssi_ctx *ctx, uint32_t add= r, > > + uint32_t *value) > > +{ > > + struct traffic_ctrl_cmd cmd; > > + struct traffic_ctrl_data data; > > + uint32_t i =3D 0; > > + > > + if (!ctx) > > + return -EINVAL; > > + > > + cmd.csr =3D 0; > > + cmd.read_cmd =3D 1; > > + cmd.afu_cmd_addr =3D addr; > > + rte_write64(cmd.csr, ctx->addr + TRAFFIC_CTRL_CMD); > > + > > + while (i < MAILBOX_TIMEOUT_MS) { > > + rte_delay_ms(MAILBOX_POLL_INTERVAL_MS); > > + cmd.csr =3D rte_read64(ctx->addr + TRAFFIC_CTRL_CMD); > > + if (cmd.ack_trans) { > > + data.csr =3D rte_read64(ctx->addr + > > TRAFFIC_CTRL_DATA); > > + *value =3D data.read_data; > > + break; > > + } > > + i +=3D MAILBOX_POLL_INTERVAL_MS; > > + } > > + if (i >=3D MAILBOX_TIMEOUT_MS) > > + return -ETIMEDOUT; > > + > > + i =3D 0; > > + cmd.csr =3D 0; > > + while (i < MAILBOX_TIMEOUT_MS) { > > + cmd.ack_trans =3D 1; > > + rte_write64(cmd.csr, ctx->addr + TRAFFIC_CTRL_CMD); > > + rte_delay_ms(MAILBOX_POLL_INTERVAL_MS); > > + cmd.csr =3D rte_read64(ctx->addr + TRAFFIC_CTRL_CMD); > > + if (!cmd.ack_trans) > > + break; > > + i +=3D MAILBOX_POLL_INTERVAL_MS; > > + } > > + if (i >=3D MAILBOX_TIMEOUT_MS) > > + return -ETIMEDOUT; > > + > > + AFU_MF_PMD_DEBUG("Indirect read 0x%x, value 0x%08x", addr, > > *value); > > + return 0; > > +} > > + > > +static void he_hssi_report(struct he_hssi_ctx *ctx) { > > + uint32_t val =3D 0; > > + uint64_t v64 =3D 0; > > + int ret =3D 0; > > + > > + ret =3D he_hssi_indirect_read(ctx, TM_PKT_GOOD, &val); > > + if (ret) > > + return; > > + printf("Number of good packets received: %u\n", val); > > + > > + ret =3D he_hssi_indirect_read(ctx, TM_PKT_BAD, &val); > > + if (ret) > > + return; > > + printf("Number of bad packets received: %u\n", val); > > + > > + ret =3D he_hssi_indirect_read(ctx, TM_BYTE_CNT1, &val); > > + if (ret) > > + return; > > + v64 =3D val; > > + ret =3D he_hssi_indirect_read(ctx, TM_BYTE_CNT0, &val); > > + if (ret) > > + return; > > + v64 =3D (v64 << 32) | val; > > + printf("Number of bytes received: %"PRIu64"\n", v64); > > + > > + ret =3D he_hssi_indirect_read(ctx, TM_AVST_RX_ERR, &val); > > + if (ret) > > + return; > > + if (val & ERR_VALID) { > > + printf("AVST rx error:"); > > + if (val & OVERFLOW_ERR) > > + printf(" overflow"); > > + if (val & LENGTH_ERR) > > + printf(" length"); > > + if (val & OVERSIZE_ERR) > > + printf(" oversize"); > > + if (val & UNDERSIZE_ERR) > > + printf(" undersize"); > > + if (val & MAC_CRC_ERR) > > + printf(" crc"); > > + if (val & PHY_ERR) > > + printf(" phy"); > > + printf("\n"); > > + } > > + > > + ret =3D he_hssi_indirect_read(ctx, LOOPBACK_FIFO_STATUS, &val); > > + if (ret) > > + return; > > + if (val & (ALMOST_EMPTY | ALMOST_FULL)) { > > + printf("FIFO status:"); > > + if (val & ALMOST_EMPTY) > > + printf(" almost empty"); > > + if (val & ALMOST_FULL) > > + printf(" almost full"); > > + printf("\n"); > > + } > > +} > > + > > +static int he_hssi_test(struct afu_mf_rawdev *dev) { > > + struct he_hssi_priv *priv =3D NULL; > > + struct rte_pmd_afu_he_hssi_cfg *cfg =3D NULL; > > + struct he_hssi_ctx *ctx =3D NULL; > > + struct traffic_ctrl_ch_sel sel; > > + uint32_t val =3D 0; > > + uint32_t i =3D 0; > > + int ret =3D 0; > > + > > + if (!dev) > > + return -EINVAL; > > + > > + priv =3D (struct he_hssi_priv *)dev->priv; > > + if (!priv) > > + return -ENOENT; > > + > > + cfg =3D &priv->he_hssi_cfg; > > + ctx =3D &priv->he_hssi_ctx; > > + > > + ret =3D he_hssi_indirect_write(ctx, TG_STOP_XFR, 0); > > + if (ret) > > + return ret; > > + > > + sel.channel_sel =3D cfg->port; > > + rte_write64(sel.csr, ctx->addr + TRAFFIC_CTRL_CH_SEL); > > + > > + if (cfg->he_loopback >=3D 0) { > > + val =3D cfg->he_loopback ? 1 : 0; > > + AFU_MF_PMD_INFO("%s HE loopback on port %u", > > + val ? "Enable" : "Disable", cfg->port); > > + return he_hssi_indirect_write(ctx, LOOPBACK_EN, val); > > + } > > + > > + ret =3D he_hssi_indirect_write(ctx, TG_NUM_PKT, cfg->num_packets); > > + if (ret) > > + return ret; > > + > > + ret =3D he_hssi_indirect_write(ctx, TG_PKT_LEN, cfg->packet_length); > > + if (ret) > > + return ret; > > + > > + val =3D cfg->src_addr & 0xffffffff; > > + ret =3D he_hssi_indirect_write(ctx, TG_SRC_MAC_L, val); > > + if (ret) > > + return ret; > > + val =3D (cfg->src_addr >> 32) & 0xffff; > > + ret =3D he_hssi_indirect_write(ctx, TG_SRC_MAC_H, val); > > + if (ret) > > + return ret; > > + > > + val =3D cfg->dest_addr & 0xffffffff; > > + ret =3D he_hssi_indirect_write(ctx, TG_DST_MAC_L, val); > > + if (ret) > > + return ret; > > + val =3D (cfg->dest_addr >> 32) & 0xffff; > > + ret =3D he_hssi_indirect_write(ctx, TG_DST_MAC_H, val); > > + if (ret) > > + return ret; > > + > > + val =3D cfg->random_length ? 1 : 0; > > + ret =3D he_hssi_indirect_write(ctx, TG_PKT_LEN_TYPE, val); > > + if (ret) > > + return ret; > > + > > + val =3D cfg->random_payload ? 1 : 0; > > + ret =3D he_hssi_indirect_write(ctx, TG_DATA_PATTERN, val); > > + if (ret) > > + return ret; > > + > > + for (i =3D 0; i < 3; i++) { >=20 > What meaning of "3" ? >=20 There are three random seeds, I will use a micro to define it. > > + ret =3D he_hssi_indirect_write(ctx, TG_RANDOM_SEED(i), > > + cfg->rnd_seed[i]); > > + if (ret) > > + return ret; > > + } > > + > > + ret =3D he_hssi_indirect_write(ctx, TG_START_XFR, 1); > > + if (ret) > > + return ret; > > + > > + while (i++ < cfg->timeout) { > > + ret =3D he_hssi_indirect_read(ctx, TG_PKT_XFRD, &val); > > + if (ret) > > + break; > > + if (val =3D=3D cfg->num_packets) > > + break; > > + sleep(1); > > + } > > + > > + he_hssi_report(ctx); > > + > > + return ret; > > +} > > + > > +static int he_hssi_init(struct afu_mf_rawdev *dev) { > > + struct he_hssi_priv *priv =3D NULL; > > + struct he_hssi_ctx *ctx =3D NULL; > > + > > + if (!dev) > > + return -EINVAL; > > + > > + priv =3D (struct he_hssi_priv *)dev->priv; > > + if (!priv) { > > + priv =3D rte_zmalloc(NULL, sizeof(struct he_hssi_priv), 0); > > + if (!priv) > > + return -ENOMEM; > > + dev->priv =3D priv; > > + } > > + > > + ctx =3D &priv->he_hssi_ctx; > > + ctx->addr =3D (uint8_t *)dev->addr; > > + > > + return 0; > > +} > > + > > +static int he_hssi_config(struct afu_mf_rawdev *dev, void *config, > > + size_t config_size) > > +{ > > + struct he_hssi_priv *priv =3D NULL; > > + struct rte_pmd_afu_he_hssi_cfg *cfg =3D NULL; > > + > > + if (!dev || !config || !config_size) > > + return -EINVAL; > > + > > + priv =3D (struct he_hssi_priv *)dev->priv; > > + if (!priv) > > + return -ENOENT; > > + > > + if (config_size !=3D sizeof(struct rte_pmd_afu_he_hssi_cfg)) > > + return -EINVAL; > > + > > + cfg =3D (struct rte_pmd_afu_he_hssi_cfg *)config; > > + if (cfg->port >=3D NUM_HE_HSSI_PORTS) > > + return -EINVAL; > > + > > + rte_memcpy(&priv->he_hssi_cfg, cfg, sizeof(priv->he_hssi_cfg)); > > + > > + return 0; > > +} > > + > > +static int he_hssi_close(struct afu_mf_rawdev *dev) { > > + if (!dev) > > + return -EINVAL; > > + > > + rte_free(dev->priv); > > + dev->priv =3D NULL; > > + > > + return 0; > > +} > > + > > +static int he_hssi_dump(struct afu_mf_rawdev *dev, FILE *f) { > > + struct he_hssi_priv *priv =3D NULL; > > + struct he_hssi_ctx *ctx =3D NULL; > > + > > + if (!dev) > > + return -EINVAL; > > + > > + priv =3D (struct he_hssi_priv *)dev->priv; > > + if (!priv) > > + return -ENOENT; > > + > > + if (!f) > > + f =3D stdout; > > + > > + ctx =3D &priv->he_hssi_ctx; > > + > > + fprintf(f, "addr:\t\t%p\n", (void *)ctx->addr); > > + > > + return 0; > > +} > > + > > +static struct afu_mf_ops he_hssi_ops =3D { > > + .init =3D he_hssi_init, > > + .config =3D he_hssi_config, > > + .start =3D NULL, > > + .stop =3D NULL, > > + .test =3D he_hssi_test, > > + .close =3D he_hssi_close, > > + .dump =3D he_hssi_dump, > > + .reset =3D NULL > > +}; > > + > > +struct afu_mf_drv he_hssi_drv =3D { > > + .uuid =3D { HE_HSSI_UUID_L, HE_HSSI_UUID_H }, > > + .ops =3D &he_hssi_ops > > +}; > > diff --git a/drivers/raw/afu_mf/he_hssi.h > > b/drivers/raw/afu_mf/he_hssi.h new file mode 100644 index > > 0000000..f8b9623 > > --- /dev/null > > +++ b/drivers/raw/afu_mf/he_hssi.h > > @@ -0,0 +1,102 @@ > > +/* SPDX-License-Identifier: BSD-3-Clause > > + * Copyright(c) 2022 Intel Corporation */ > > + > > +#ifndef _HE_HSSI_H_ > > +#define _HE_HSSI_H_ > > + > > +#include "afu_mf_rawdev.h" > > +#include "rte_pmd_afu.h" > > + > > +#define HE_HSSI_UUID_L 0xbb370242ac130002 > > +#define HE_HSSI_UUID_H 0x823c334c98bf11ea > > +#define NUM_HE_HSSI_PORTS 8 > > + > > +extern struct afu_mf_drv he_hssi_drv; > > + > > +/* HE-HSSI registers definition */ > > +#define TRAFFIC_CTRL_CMD 0x30 > > +#define TRAFFIC_CTRL_DATA 0x38 > > +#define TRAFFIC_CTRL_CH_SEL 0x40 > > +#define AFU_SCRATCHPAD 0x48 > > + > > +#define TG_NUM_PKT 0x3c00 > > +#define TG_PKT_LEN_TYPE 0x3c01 > > +#define TG_DATA_PATTERN 0x3c02 > > +#define TG_START_XFR 0x3c03 > > +#define TG_STOP_XFR 0x3c04 > > +#define TG_SRC_MAC_L 0x3c05 > > +#define TG_SRC_MAC_H 0x3c06 > > +#define TG_DST_MAC_L 0x3c07 > > +#define TG_DST_MAC_H 0x3c08 > > +#define TG_PKT_XFRD 0x3c09 > > +#define TG_RANDOM_SEED(n) (0x3c0a + (n)) > > +#define TG_PKT_LEN 0x3c0d > > + > > +#define TM_NUM_PKT 0x3d00 > > +#define TM_PKT_GOOD 0x3d01 > > +#define TM_PKT_BAD 0x3d02 > > +#define TM_BYTE_CNT0 0x3d03 > > +#define TM_BYTE_CNT1 0x3d04 > > +#define TM_AVST_RX_ERR 0x3d07 > > +#define OVERFLOW_ERR (1 << 9) > > +#define LENGTH_ERR (1 << 8) > > +#define OVERSIZE_ERR (1 << 7) > > +#define UNDERSIZE_ERR (1 << 6) > > +#define MAC_CRC_ERR (1 << 5) > > +#define PHY_ERR (1 << 4) > > +#define ERR_VALID (1 << 3) > > + > > +#define LOOPBACK_EN 0x3e00 > > +#define LOOPBACK_FIFO_STATUS 0x3e01 > > +#define ALMOST_EMPTY (1 << 1) > > +#define ALMOST_FULL (1 << 0) > > + > > +#define MAILBOX_TIMEOUT_MS 100 > > +#define MAILBOX_POLL_INTERVAL_MS 10 > > + > > +struct traffic_ctrl_cmd { > > + union { > > + uint64_t csr; > > + struct { > > + uint32_t read_cmd:1; > > + uint32_t write_cmd:1; > > + uint32_t ack_trans:1; > > + uint32_t rsvd1:29; > > + uint32_t afu_cmd_addr:16; > > + uint32_t rsvd2:16; > > + }; > > + }; > > +}; > > + > > +struct traffic_ctrl_data { > > + union { > > + uint64_t csr; > > + struct { > > + uint32_t read_data; > > + uint32_t write_data; > > + }; > > + }; > > +}; > > + > > +struct traffic_ctrl_ch_sel { > > + union { > > + uint64_t csr; > > + struct { > > + uint32_t channel_sel:3; > > + uint32_t rsvd1:29; > > + uint32_t rsvd2; > > + }; > > + }; > > +}; > > + > > +struct he_hssi_ctx { > > + uint8_t *addr; > > +}; > > + > > +struct he_hssi_priv { > > + struct rte_pmd_afu_he_hssi_cfg he_hssi_cfg; > > + struct he_hssi_ctx he_hssi_ctx; > > +}; > > + > > +#endif /* _HE_HSSI_H_ */ > > diff --git a/drivers/raw/afu_mf/meson.build > > b/drivers/raw/afu_mf/meson.build index b53a31b..f304bc8 100644 > > --- a/drivers/raw/afu_mf/meson.build > > +++ b/drivers/raw/afu_mf/meson.build > > @@ -2,6 +2,7 @@ > > # Copyright 2022 Intel Corporation > > > > deps +=3D ['rawdev', 'bus_pci', 'bus_ifpga'] -sources =3D > > files('afu_mf_rawdev.c', 'n3000_afu.c', 'he_lbk.c', 'he_mem.c') > > +sources =3D files('afu_mf_rawdev.c', 'n3000_afu.c', 'he_lbk.c', 'he_me= m.c', > > + 'he_hssi.c') > > > > headers =3D files('rte_pmd_afu.h') > > diff --git a/drivers/raw/afu_mf/rte_pmd_afu.h > > b/drivers/raw/afu_mf/rte_pmd_afu.h > > index 2f92f7e..89d866a 100644 > > --- a/drivers/raw/afu_mf/rte_pmd_afu.h > > +++ b/drivers/raw/afu_mf/rte_pmd_afu.h > > @@ -111,6 +111,22 @@ struct rte_pmd_afu_he_mem_tg_cfg { > > uint32_t channel_mask; /* mask of traffic generator channel */ > > }; > > > > +/** > > + * HE-HSSI AFU configuration data structure. > > + */ > > +struct rte_pmd_afu_he_hssi_cfg { > > + uint32_t port; > > + uint32_t timeout; > > + uint32_t num_packets; > > + uint32_t random_length; > > + uint32_t packet_length; > > + uint32_t random_payload; > > + uint32_t rnd_seed[3]; > > + uint64_t src_addr; > > + uint64_t dest_addr; > > + int he_loopback; > > +}; > > + > > #ifdef __cplusplus > > } > > #endif > > -- > > 1.8.3.1