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 43990A0543 for ; Mon, 6 Jun 2022 08:36:50 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 38393415D7; Mon, 6 Jun 2022 08:36:50 +0200 (CEST) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mails.dpdk.org (Postfix) with ESMTP id 7D4C440150; Mon, 6 Jun 2022 08:36:46 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1654497406; x=1686033406; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=2fhtjInerfDrudoRooV8f++dLI1Hjkgc/oCUpSMCb1Y=; b=ZPwywhObf4AKpPkoHg0smmQPpithn8nFtq/hnd4kjxTf010bzk/EfwMS kKtHZHVzm8R/lt7Kxj3KMO2Hedkby8YrUoLS6XCAkNg7hm4CfnGE1HmgD Gnkd3zu2272rkp3+1QgrvLTs1x9iwahH0WyZSKYVvKrIRVxl18lBjE9M8 BhHPjYI8IIFBDNEvsZfbAkuz9s9GPcG3ZPV17LMx6L+PppVAEgPS4IsYk s4tRAgUzzRomiMebZ8PAkbT9OqIggDtWbQ1B8RobM9Jv7R4V614njgteV hUznU9znEApeheyN/arWrKvofAEuxjbvQtEBjiAtycJjFjLPk1FIXCS0k Q==; X-IronPort-AV: E=McAfee;i="6400,9594,10369"; a="339810855" X-IronPort-AV: E=Sophos;i="5.91,280,1647327600"; d="scan'208";a="339810855" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Jun 2022 23:36:43 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.91,280,1647327600"; d="scan'208";a="722664030" Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by fmsmga001.fm.intel.com with ESMTP; 05 Jun 2022 23:36:42 -0700 Received: from fmsmsx601.amr.corp.intel.com (10.18.126.81) 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.2308.27; Sun, 5 Jun 2022 23:36:42 -0700 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27 via Frontend Transport; Sun, 5 Jun 2022 23:36:42 -0700 Received: from NAM02-SN1-obe.outbound.protection.outlook.com (104.47.57.43) 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.2308.27; Sun, 5 Jun 2022 23:36:42 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=a8jw+iFtX/uthEtyaxkKcgx/YhzUpUxwNEfrNexkvaBBRWQnWPB+RjiyqFFHVVaROQbcAK131i0dlJRJWe4NSCZt4j6rnB5QdX2iDRq1iJ1+Ruj4hCmf0CN1wgx2dO7oLWRvbWSOVN7v+ujTLORqjqPzmaB9kl+q3gKybltfhXBBgbLdGVIo5X4qtWpX9cQ1LfMG1ymzCuOhBEjTYI13gVeD7m9gZjXEFp5sebvEO/M6tQLxixUur9nxDdJInj4x+qdvcytyjXvloEkXnZ+plXoYOC05PdiKCllt7PPpbHs2PNP7+w9YDR/XfK6mtiOz1eVrzFIR3gYBPixzwLmjww== 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=qgEz1+yqHZiWbJBLNo3qme5bhyc2c5sv96mshqsjCWg=; b=CiNN3WoptJ2LBL8/CGuKL6EJVC6GM3TWv2j1B7gzs/kf0Ic8d3/M64OIKi1rktmfGCbk/0EX4Gvw/RJPEKZAetJDLXnZvuwABDOx1ygxL/H/TZbSV0jb7Cuyb9LFEHxEAv0xF3Bd0TGeqkTU/gRsqL4FhE/QFcBx2F+yREonoMqBNbLiUVHkU7trrqPZ7z5XguECNtjvgyA5+dgGo1yqVnGhGRWIrAxacyU+CHwLg/pOvXYpKBf66M7TSj68HUdAKxpQDCSYtqsUGrU6yunm4KCKDsw5fpZkAqwWcSw8MARlZhcaJG1QgHwFEcu8f+sg6qgOJuVcpZXkUcHj1ql/7g== 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 BN9PR11MB5483.namprd11.prod.outlook.com (2603:10b6:408:104::10) by DM6PR11MB4626.namprd11.prod.outlook.com (2603:10b6:5:2a9::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5314.13; Mon, 6 Jun 2022 06:36:35 +0000 Received: from BN9PR11MB5483.namprd11.prod.outlook.com ([fe80::4d94:5d8b:51d7:d8b4]) by BN9PR11MB5483.namprd11.prod.outlook.com ([fe80::4d94:5d8b:51d7:d8b4%9]) with mapi id 15.20.5314.019; Mon, 6 Jun 2022 06:36:35 +0000 From: "Zhang, Tianfei" 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 4/5] raw/afu_mf: add HE-MEM AFU driver Thread-Topic: [PATCH v5 4/5] raw/afu_mf: add HE-MEM AFU driver Thread-Index: AQHYcYrhOD5lkd1PUUirbm3+/+o79q1B++gA Date: Mon, 6 Jun 2022 06:36:35 +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-5-git-send-email-wei.huang@intel.com> In-Reply-To: <1653629824-4535-5-git-send-email-wei.huang@intel.com> Accept-Language: zh-CN, 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-office365-filtering-correlation-id: 14176dea-bb05-40d8-97ad-08da4786e72a x-ms-traffictypediagnostic: DM6PR11MB4626: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: jH2GOhFWgXZsD4D7kspaoGlRoRkrwxohgKSpnA3Ox1OSz/wtD0+UDatDmEFa6olBCjpk6L8pd9M5zTM9EAr+He4V8FVIXPgENPLbnn40Gw7pqTj7IMOUWV5zW8h1vW4Ctr8sjADFYDHWQZ53jQFqAYBrtPH6d40EH+XsktROKRmN/jHe0M8q6Fd7JzxfzFDwww6ag2ixUoqa4rWscRhDJVS0BEJ4zNk9F+mKG6AXZtsKuFxlS3mTmrjwrWphbeZnXFYZPTuFeOgiB4QbqrJlqjQGq1aQvD+BNtHUES0W6PpyQX6IIQ58Y6eZidn1u2g8k3RCmSQD2Q6+uT+azcSugvPIYs3V++5HXaMCzkggVltRUpy0ZINksoegPqk3XUF7zgu+wmoOu448s7+xNizKY8u+AZKStdqm5Wnb837nk3p+87LD/W8SbvudlfJghCf0b3YmvfyxfA+8DbdH4vFRmcWZGyGAYjO5RdQDmCv861OIia5QjGyOR+WSqwtFgr+AtcBjx2HlOA7ec8G7tSzGbtn6fNHT/DCDxorxDFWxu1hpIXeHiLCPtWmVrZ/k165ydihMeuFabfoIrXUa3MqordAu0W8lt/KKuwdsf7ZdZmAThLGvgPj6U5Us3S1FATS+b3jovJfR2Z32vrS5e0U1kUlyYwhagQpnPBxoi/O/pJa2irQAE0K58zRK9FFxt5vRl/NIxGrc/aaPMva+KWcAqg== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BN9PR11MB5483.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(38100700002)(7696005)(55016003)(53546011)(71200400001)(6506007)(54906003)(83380400001)(64756008)(82960400001)(86362001)(5660300002)(2906002)(52536014)(4326008)(122000001)(316002)(8676002)(66446008)(33656002)(38070700005)(107886003)(186003)(508600001)(8936002)(66476007)(66946007)(66556008)(76116006)(110136005)(26005)(9686003); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?s2CgJWRcnGjguvCgIwfbbpBC3iwUK1HW7R2Vq3Qmxz9J7B4o5LcTTymzhPP0?= =?us-ascii?Q?F+nsKoE3nGvLSFiHE8hlIuG1j3Ff9pKlw/ryubmGmtxmYeIMtoMzkeWMML0J?= =?us-ascii?Q?bF9za38v1o7t9WrnLbf4sA4+39nlCpdn+wHnwLuRA8PrDIueGWc+fZlQsjgQ?= =?us-ascii?Q?o5sakv7FlZFfZm8v/iVakRLOQNeq4JOQ8GjCZ9jYOyNc8Dajh9FRcr0nbMNO?= =?us-ascii?Q?4L+8jT4G2GugHT71owbviHFEqYhDv2diYY3V8lgmM4tKR6bp5Efdziy1tgjq?= =?us-ascii?Q?7FKulY8ZIdOGXkXLRGmMHKIQc9Ko9ZEvPhWldDRmJmnWmaSyP5lpRgQqLCI3?= =?us-ascii?Q?hd7Dggqsn9ws/dKu9oksdwn7F9MV8tPT/K5XGIhKBBbCzkQbfxeWe9r4OiI9?= =?us-ascii?Q?XBSFRJgSLHIml10dA1Kfs/Qx+ininYKU9mEOIB00mzXKUq0hZSW3Y8Z9sYzi?= =?us-ascii?Q?Rp9+ncTcq5jBGlxS6si+6sXcAUD5QXbSeirw/UyLEqpOu0Wm7GuZzxsGrpss?= =?us-ascii?Q?H4F7FXfK7IpuaAmkclP9eeOdN6pi8Ob4iX5ed0eaPIK6En/+eNmJvzdeZdrt?= =?us-ascii?Q?Amtyc6lWI7eHKBqXqegxgoPMmDaPfZl5MbE6MldshYophY62/F7/yiSq9fgU?= =?us-ascii?Q?4BG8fVvycMC7Ho65WLH1Ao0/Qgud825vDrh8vJFevMVoR7RQpiuPE9PbeqfJ?= =?us-ascii?Q?acVu+AL+Vmzg2D+AleGchGNQ6cteuSDjjijrX7ffoeI1J0pnGoQm+FRvK0tM?= =?us-ascii?Q?S8pWpapqfoONlaUJYD3ue3h1R1puNUWSmp6cx3pz8nPH82d+OpkXpWS5hJs9?= =?us-ascii?Q?f2feOaSsD4VYXKPy/VC/o/8zATdhi0wpX5QJ5AaolZqFHxRYVd2b9OgY7TgF?= =?us-ascii?Q?V0hkuS4CdfOXTKgxbhbljs4RrjhXUzUnpQYDRrcc3XvYlAdLAnufIPO1n33w?= =?us-ascii?Q?RhtAj2EiVRFZDcZs1+ZvrG26wBNLmiwXd/jkKeNbK4v2QtBriAYtjFOAvhRh?= =?us-ascii?Q?s5V3JH/ciWXMD5MIoP8Yk2aQ85zWUvsq7WmpY38NYFIYUO9nYRFIEen7LtHC?= =?us-ascii?Q?PCxtwBCqiYjqT4jEizB+ZoWHTWvZp9UEf7xnFL01PeY0J3vbDnv9dM+Qvfkd?= =?us-ascii?Q?3ivIHqejjqF9NqFPiPtok5McRFcjPNa8PS3A6nRRKwkALVXCFOCe0dZKGXku?= =?us-ascii?Q?ek0HjX4mnFQfv5deMdqbsfj7oAJ6uTZKbnHzG9YATyaRGrmCqdPRHzrodqIL?= =?us-ascii?Q?jOLwfA+XHMptJAqw28DsLPKPcLg+CM6MJczGEZX5k6Mm2E5j2IkRobYyknh2?= =?us-ascii?Q?CZ005s1Q0NGcZ/LYCNh/YqDp71VLK3qil2IKtXpU4nzvAEShH6RIYIYUL0hg?= =?us-ascii?Q?v03s+Unba2OWG+rpQJn8NQXNLqz/jVOnuTezokR0ugD588zxPtFrTPQRTyua?= =?us-ascii?Q?quNcLdiUNhewsAseiY+HU6HSeoDBkiPdLYnPE6Dw8nzxINhjVDtRCkLuZW1x?= =?us-ascii?Q?+2Ivu6GXal/mFcDzyZLNVIhBY2l/jpCzcB6EBH/KC8E7Ju/B61PfHyCM8R/n?= =?us-ascii?Q?DlUoEU3sjhZ2HVXNaaJKduVt1PnPqgLFvjleQW10VfEQEO0Y/6XnPLTF4qw+?= =?us-ascii?Q?aouK7CrTXcuW8EvDjiFuykzAXxzT9uHVpRtlPvV2FBcwlNKi0ZzeQSxAhziC?= =?us-ascii?Q?EGaPoSkQnrWUnarVL70fh4yEskxr7codC1rKdBGyTusr42+Y/MhW1pB+6Hje?= =?us-ascii?Q?GO8UPht+mQ=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: BN9PR11MB5483.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 14176dea-bb05-40d8-97ad-08da4786e72a X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Jun 2022 06:36:35.5551 (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: b5+9wOk3gvbUrqVp5owCBF9nV9FIHH2GSt0l8HQGQkJRKCvyvij/EAN5+EknOWxIwvlCKCdxS6enrda5jvneIw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB4626 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: 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 4/5] raw/afu_mf: add HE-MEM AFU driver >=20 > HE-MEM is one of the host exerciser modules in OFS FPGA, which is used to= test > local memory with built-in traffic generator. > This driver initialize the module and report test result. >=20 > Signed-off-by: Wei Huang > --- > drivers/raw/afu_mf/afu_mf_rawdev.c | 3 + > drivers/raw/afu_mf/he_mem.c | 181 > +++++++++++++++++++++++++++++++++++++ > drivers/raw/afu_mf/he_mem.h | 40 ++++++++ > drivers/raw/afu_mf/meson.build | 2 +- > drivers/raw/afu_mf/rte_pmd_afu.h | 7 ++ > 5 files changed, 232 insertions(+), 1 deletion(-) create mode 100644 > drivers/raw/afu_mf/he_mem.c create mode 100644 > drivers/raw/afu_mf/he_mem.h >=20 > diff --git a/drivers/raw/afu_mf/afu_mf_rawdev.c > b/drivers/raw/afu_mf/afu_mf_rawdev.c > index e91eb21..a56f60e 100644 > --- a/drivers/raw/afu_mf/afu_mf_rawdev.c > +++ b/drivers/raw/afu_mf/afu_mf_rawdev.c > @@ -21,6 +21,7 @@ > #include "afu_mf_rawdev.h" > #include "n3000_afu.h" > #include "he_lbk.h" > +#include "he_mem.h" >=20 > #define AFU_MF_PMD_RAWDEV_NAME rawdev_afu_mf >=20 > @@ -28,6 +29,7 @@ > { N3000_AFU_UUID_L, N3000_AFU_UUID_H }, > { 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 }, > { 0, 0 /* sentinel */ } > }; >=20 > @@ -35,6 +37,7 @@ > &n3000_afu_drv, > &he_lbk_drv, > &he_mem_lbk_drv, > + &he_mem_tg_drv, > NULL > }; >=20 > diff --git a/drivers/raw/afu_mf/he_mem.c b/drivers/raw/afu_mf/he_mem.c > new file mode 100644 index 0000000..ccbb3a8 > --- /dev/null > +++ b/drivers/raw/afu_mf/he_mem.c > @@ -0,0 +1,181 @@ > +/* 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 "afu_mf_rawdev.h" > +#include "he_mem.h" > + > +static int he_mem_tg_test(struct afu_mf_rawdev *dev) { > + struct he_mem_tg_priv *priv =3D NULL; > + struct rte_pmd_afu_he_mem_tg_cfg *cfg =3D NULL; > + struct he_mem_tg_ctx *ctx =3D NULL; > + uint64_t value =3D 0x12345678; > + uint64_t cap =3D 0; > + uint64_t channel_mask =3D 0; > + int i, t =3D 0; > + > + if (!dev) > + return -EINVAL; > + > + priv =3D (struct he_mem_tg_priv *)dev->priv; > + if (!priv) > + return -ENOENT; > + > + cfg =3D &priv->he_mem_tg_cfg; > + ctx =3D &priv->he_mem_tg_ctx; > + > + AFU_MF_PMD_DEBUG("Channel mask: 0x%x", cfg->channel_mask); > + > + rte_write64(value, ctx->addr + MEM_TG_SCRATCHPAD); > + cap =3D rte_read64(ctx->addr + MEM_TG_SCRATCHPAD); > + AFU_MF_PMD_DEBUG("Scratchpad value: 0x%"PRIx64, cap); > + if (cap !=3D value) { > + AFU_MF_PMD_ERR("Test scratchpad register failed"); > + return -EIO; > + } > + > + cap =3D rte_read64(ctx->addr + MEM_TG_CTRL); > + AFU_MF_PMD_DEBUG("Capability: 0x%"PRIx64, cap); > + > + channel_mask =3D cfg->channel_mask & cap; > + /* start traffic generators */ > + rte_write64(channel_mask, ctx->addr + MEM_TG_CTRL); > + > + /* check test status */ > + while (t < MEM_TG_TIMEOUT_MS) { > + value =3D rte_read64(ctx->addr + MEM_TG_STAT); > + for (i =3D 0; i < NUM_MEM_TG_CHANNELS; i++) { > + if (channel_mask & (1 << i)) { > + if (TGACTIVE(value, i)) > + continue; > + printf("TG channel %d test %s\n", i, > + TGPASS(value, i) ? "pass" : > + TGTIMEOUT(value, i) ? "timeout" : > + TGFAIL(value, i) ? "fail" : "error"); > + channel_mask &=3D ~(1 << i); > + } > + } > + if (!channel_mask) > + break; > + rte_delay_ms(MEM_TG_POLL_INTERVAL_MS); > + t +=3D MEM_TG_POLL_INTERVAL_MS; > + } > + > + if (channel_mask) { > + AFU_MF_PMD_ERR("Timeout 0x%04lx", (unsigned long)value); > + return channel_mask; > + } > + > + return 0; > +} > + > +static int he_mem_tg_init(struct afu_mf_rawdev *dev) { > + struct he_mem_tg_priv *priv =3D NULL; > + struct he_mem_tg_ctx *ctx =3D NULL; > + > + if (!dev) > + return -EINVAL; > + > + priv =3D (struct he_mem_tg_priv *)dev->priv; > + if (!priv) { > + priv =3D rte_zmalloc(NULL, sizeof(struct he_mem_tg_priv), 0); > + if (!priv) > + return -ENOMEM; > + dev->priv =3D priv; > + } > + > + ctx =3D &priv->he_mem_tg_ctx; > + ctx->addr =3D (uint8_t *)dev->addr; > + > + return 0; > +} > + > +static int he_mem_tg_config(struct afu_mf_rawdev *dev, void *config, > + size_t config_size) > +{ > + struct he_mem_tg_priv *priv =3D NULL; > + > + if (!dev || !config || !config_size) > + return -EINVAL; > + > + priv =3D (struct he_mem_tg_priv *)dev->priv; > + if (!priv) > + return -ENOENT; > + > + if (config_size !=3D sizeof(struct rte_pmd_afu_he_mem_tg_cfg)) > + return -EINVAL; > + > + rte_memcpy(&priv->he_mem_tg_cfg, config, sizeof(priv- > >he_mem_tg_cfg)); > + > + return 0; > +} > + > +static int he_mem_tg_close(struct afu_mf_rawdev *dev) { > + if (!dev) > + return -EINVAL; > + > + rte_free(dev->priv); > + dev->priv =3D NULL; > + > + return 0; > +} > + > +static int he_mem_tg_dump(struct afu_mf_rawdev *dev, FILE *f) { > + struct he_mem_tg_priv *priv =3D NULL; > + struct he_mem_tg_ctx *ctx =3D NULL; > + > + if (!dev) > + return -EINVAL; > + > + priv =3D (struct he_mem_tg_priv *)dev->priv; > + if (!priv) > + return -ENOENT; > + > + if (!f) > + f =3D stdout; > + > + ctx =3D &priv->he_mem_tg_ctx; > + > + fprintf(f, "addr:\t\t%p\n", (void *)ctx->addr); > + > + return 0; > +} > + > +static struct afu_mf_ops he_mem_tg_ops =3D { > + .init =3D he_mem_tg_init, > + .config =3D he_mem_tg_config, > + .start =3D NULL, > + .stop =3D NULL, > + .test =3D he_mem_tg_test, > + .close =3D he_mem_tg_close, > + .dump =3D he_mem_tg_dump, > + .reset =3D NULL > +}; > + > +struct afu_mf_drv he_mem_tg_drv =3D { > + .uuid =3D { HE_MEM_TG_UUID_L, HE_MEM_TG_UUID_H }, > + .ops =3D &he_mem_tg_ops > +}; > diff --git a/drivers/raw/afu_mf/he_mem.h b/drivers/raw/afu_mf/he_mem.h > new file mode 100644 index 0000000..82404b6 > --- /dev/null > +++ b/drivers/raw/afu_mf/he_mem.h > @@ -0,0 +1,40 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright(c) 2022 Intel Corporation > + */ > + > +#ifndef _HE_MEM_H_ > +#define _HE_MEM_H_ > + > +#include "afu_mf_rawdev.h" > +#include "rte_pmd_afu.h" > + > +#define HE_MEM_TG_UUID_L 0xa3dc5b831f5cecbb #define > HE_MEM_TG_UUID_H > +0x4dadea342c7848cb > + > +#define NUM_MEM_TG_CHANNELS 4 > +#define MEM_TG_TIMEOUT_MS 5000 > +#define MEM_TG_POLL_INTERVAL_MS 10 > + > +extern struct afu_mf_drv he_mem_tg_drv; > + > +/* MEM-TG registers definition */ > +#define MEM_TG_SCRATCHPAD 0x28 > +#define MEM_TG_CTRL 0x30 > +#define TGCONTROL(n) (1 << (n)) > +#define MEM_TG_STAT 0x38 > +#define TGSTATUS(v, n) (((v) >> (n << 2)) & 0xf) > +#define TGPASS(v, n) (((v) >> ((n << 2) + 3)) & 0x1) > +#define TGFAIL(v, n) (((v) >> ((n << 2) + 2)) & 0x1) > +#define TGTIMEOUT(v, n) (((v) >> ((n << 2) + 1)) & 0x1) > +#define TGACTIVE(v, n) (((v) >> (n << 2)) & 0x1) > + > +struct he_mem_tg_ctx { > + uint8_t *addr; > +}; > + > +struct he_mem_tg_priv { > + struct rte_pmd_afu_he_mem_tg_cfg he_mem_tg_cfg; > + struct he_mem_tg_ctx he_mem_tg_ctx; > +}; > + > +#endif /* _HE_MEM_H_ */ > diff --git a/drivers/raw/afu_mf/meson.build b/drivers/raw/afu_mf/meson.bu= ild > index a983f53..b53a31b 100644 > --- a/drivers/raw/afu_mf/meson.build > +++ b/drivers/raw/afu_mf/meson.build > @@ -2,6 +2,6 @@ > # Copyright 2022 Intel Corporation >=20 > deps +=3D ['rawdev', 'bus_pci', 'bus_ifpga'] -sources =3D files('afu_mf_= rawdev.c', > 'n3000_afu.c', 'he_lbk.c') > +sources =3D files('afu_mf_rawdev.c', 'n3000_afu.c', 'he_lbk.c', > +'he_mem.c') >=20 > 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 658df55..2f92f7e 100644 > --- a/drivers/raw/afu_mf/rte_pmd_afu.h > +++ b/drivers/raw/afu_mf/rte_pmd_afu.h > @@ -104,6 +104,13 @@ struct rte_pmd_afu_he_lbk_cfg { > uint32_t freq_mhz; > }; >=20 > +/** > + * HE-MEM-TG AFU configuration data structure. > + */ > +struct rte_pmd_afu_he_mem_tg_cfg { > + uint32_t channel_mask; /* mask of traffic generator channel */ > +}; > + > #ifdef __cplusplus > } > #endif The file name change to "afu_pmd_he_mem.c" is better? Other part is good for me, you can add: Acked-by: Tianfei Zhang > -- > 1.8.3.1