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 818E6A0544 for ; Tue, 7 Jun 2022 04:43:33 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 76F2940156; Tue, 7 Jun 2022 04:43:33 +0200 (CEST) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by mails.dpdk.org (Postfix) with ESMTP id 8657C40156; Tue, 7 Jun 2022 04:43:31 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1654569811; x=1686105811; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=E/3Ev+yA2k4r1Mi6wPVldS6vLO/b9VVdhP/yE+2lgZ0=; b=cg/gXY+ORXVb4Wd0/tjRGyvZ5oM8VEffcaPqzeVcG2HtF7AEe1xk3aRf WOcJCkniRzdDj6ESiVak4xNABriLRT/U8G/LlwWn5dM8HpDCa25paqwsk rzPmYNrhZ7XBVSFI57qgAq+RI8Zh/oZGeM3TT4zVy4g7iKDjRUtNr0TKo 0fBNZD1WwaRuHc/T4tJDbsRubdA1Cg5gr65ew8IpgUbrJBG1dsN8gww6c Rqfgk7HFzJrlsKf2plidBN/pYRTHziv+/q6FoHE+0SlY4XSbp+TcE3Tcz OgjD8CrkUbT0Q5jIAzOtvvRLX2ETsoXqxUYqjGKlbQCOoZTMYMv+OLItJ g==; X-IronPort-AV: E=McAfee;i="6400,9594,10370"; a="275479393" X-IronPort-AV: E=Sophos;i="5.91,282,1647327600"; d="scan'208";a="275479393" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Jun 2022 19:43:30 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.91,282,1647327600"; d="scan'208";a="583970241" Received: from orsmsx605.amr.corp.intel.com ([10.22.229.18]) by fmsmga007.fm.intel.com with ESMTP; 06 Jun 2022 19:43:30 -0700 Received: from orsmsx608.amr.corp.intel.com (10.22.229.21) 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; Mon, 6 Jun 2022 19:43:29 -0700 Received: from orsmsx607.amr.corp.intel.com (10.22.229.20) by ORSMSX608.amr.corp.intel.com (10.22.229.21) 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:43:29 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx607.amr.corp.intel.com (10.22.229.20) 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:43:29 -0700 Received: from NAM02-BN1-obe.outbound.protection.outlook.com (104.47.51.42) by edgegateway.intel.com (134.134.137.102) 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:43:29 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TasbbnmiIhhST2W4UnD0MDVkuLl0TyXAuZnuzjOoLhgt+ZFpdhYZD3Mjpp+0Lj+GlwI6MvbEeK+Q+2coCx/HTXN2rTAjIfNQMSBlHlS1tvlt5mg36E7GEZRlzndeLjnwlBBDiSO3QxdG5X4QvGhb2KQhG7R1Qa6t53F2uvwpIjjOH6z8H0xPtwTipsVlaj3ZftaIJmHD3K2RQ40FeD0OKwdGn5pzZQNs/qjxVE+FlVntivZVCwhIuautBWV0mue7S8ikPrFqRQmbccMOZ8Q6ncBWCjj+CM9eirxWgaZ4A5MzpaG6w/wafJ1yEO0A6q1GKtjyhLzK/ytAOKnggeoPAQ== 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=HvVnJba+f+b33KwL9dZB+1yxWAljRkMWhLD/4vC+iqM=; b=Wl/LsSJ/FkAKUdIJFYG0N4bn1bK/eNRNWPhV1w+wUPbRBwhXkJnqVMFlvMyU/33eZqZ+sQB0m/PcAfrGUa2D37zwLLQfjbDhvVsbAWtLQCbcmqy5Ngn1WZEeTqBHuLHIWvbFLRiDYW5wXJWOR0tNbW4VLsMQkAbyb5evTQRenHX8VbTEA4m9u8W5Xuayr/ofYVa23ttA7+GJGfkSh1PGQLCnfK0rP01Lw205aByCTonGyMs9kYYIzsUWMNpbBD+eogPIspcG8zYw4KtKubAu2ua/N/84dqDPZ1N+Z6PYEkqaeYIT+AyTBiHPGN9qhrvd4ZLGddR/GymvAQCtkRvsJQ== 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:43:27 +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:43:27 +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 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: AQHYcYrgS5DRC0fcBEawg/KkARnxD61B/HKAgAFRAlA= Date: Tue, 7 Jun 2022 02:43:27 +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: 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: 15e09135-642b-4794-0c0c-08da482f7ffe 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: fziCFFIWHyEhN/df6C1EUA9oLWYQMoGHMuj/woPZILX9f449C1awNZNGjzQgS+n+GE2jPlyeomEyPNeUHiKuCOtLhhfSzilPeMB/2KVk7UPSHqhi5+WSvb6U7f3H4l64gKAWU1g1XrMPuBP7SYQyvUfjERmFQR2lbS/eqo6pnnfHMcFKCSXPsgsGE+kYzQMqJaAIz3Mga2+egOjoZ58KK4aehH6MLX1Y+bpRRJiejVfG7Wd54x+us7umgj/fmeEej8tJlepIQlAA19nT3oKgBM2zAHqdQIRQgLuiYhudOxQns6ACuLEhJa56l7De9H9c6NX3UIthBJe+FGvjeqoUOwLIKhvQdKEArBHOSlZcN+mD1GJABh0EpDJOFebvaemFbJ/CSu/zBaGZBDMRikKIMfJZ65Fp7jnopbHqEV/bwAAVlJBFy3a76OcgVHkT/vhSuudH2BBwHb023NpS26ETjQRrYDWQNK2I8AdsCAtsYq3dOJ5M/5Kmi/HHeFUunAxGB1DCp8e78UsLoRYPHwSwGZ/HZB8tMwc8J0dWgQOTSKW68Gt0NrCY5Sb08vf5JxZL+DXGWXxzCrQJcoqbpoRCvof/NFdX0FDOz7FcUidozk5+Ul499qp+ZxUFaLiawkdocTr1h+ycZZ+hP0Rv7AjYPrZ21WQvLb+3XB7aqBIpcOSyl8pkEaUNfKQ/nMjpMH1mRJk0PjY++ZDN4rb8OUXOSw== 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)(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?TQ2fRa4iHfxX7OOtgKYw4B/EG3/kNx7FgZJNtNFDaFxhxxnjXgr/RrhA7ocE?= =?us-ascii?Q?JvNf4sT9Wj4bN8QxSCL0TgFwPuv/5Hu9Ko9zj3Zz05ihW5Dph70DgJZ6H2nv?= =?us-ascii?Q?73HEih/xCR9ocSUkussunDRuJkm0bLF93/ZQt96m8Ex6VniPZMOGsgyPj79O?= =?us-ascii?Q?0AHd7dRJ9d3MKU3FLIqbMrCZU4SH5C+779OtT0o3J8vwCjyN+wb/xPTIYip2?= =?us-ascii?Q?itV0Ld8FbjSAOrb2f3UjZbrHB3hGjSCtFBpOkGVBUQMDrJ6jSawVMhAB5mCO?= =?us-ascii?Q?Zngx2lQRs7y9Bux1IZa6GPsaC2X2qHgy0t4/jK6gmydSpYzUj/rdtiyOA6J+?= =?us-ascii?Q?gxlZZDzwEtPXOOUjMX7pSE/oQpoK5WWziIddqMTAQWp/o3XoaRdIEtGTfASr?= =?us-ascii?Q?qYgqwycCTho3UEddDl9ClNgYfyAdJHVlB3IUg667mErQI58yS5AWA1Tynzi1?= =?us-ascii?Q?rExoLinwNOJQaNumUoDfZScCIM3Fm4Z09otJX9c9HlaBqTTnRGIANe6qeygH?= =?us-ascii?Q?CsV3BBmv9MqFU9Si8d15fLXYaX/kZ33xBEChgY0ol9mCiNFZmFujJHYObmn8?= =?us-ascii?Q?ndqh6ayr1IOkC9NymHRR+bdpeQw3KkbekVonqlZbkxwMweZAjNeCZQwQQD2F?= =?us-ascii?Q?JBmRJTGh1BuD5CgXgym6Ty65/+1YlU+wvjFuOf6aFDvFGRKlXutg4OYfdZVh?= =?us-ascii?Q?aNLyKy/NS5KpP6F59ge5tUQWrylk87v6HTP6vhtbsE3rxEvvjp/uvQUHL9xQ?= =?us-ascii?Q?5u8kLk/kBK3DwxqrYkGlcTlODHOxIljFsYURSjBUPP8LLqZS97RHJMHbSNgH?= =?us-ascii?Q?9yvxFyEG2euRU2pPqFU/UQZc1uIan1jvV0NsgKlPtAeZ3Kep/3A04vcl+nJZ?= =?us-ascii?Q?mfcpSySDTlKpCbAriQ8cyfMggRi0bGhRws4VX3NgR+LB1pWV/g79hom3IDf8?= =?us-ascii?Q?FXIUgycKnhn/gHFQ0jpVKbvyO6rQdjwOrR31FYhrxrNh8kW7uc21IdOKEZij?= =?us-ascii?Q?vixbYaEB5PLqEu10B08RTUK9cPgXALvgGsQ+y/mtq8XUdl0ycF9vn0kpmYTK?= =?us-ascii?Q?YA328ae7s5b7hVeoRSa4wuCULO+lTdfEV+NEbnR28rmEal4jGNiRFKuVMji/?= =?us-ascii?Q?H1k/8itjhaXPaFLPWQkE41gk5yGY3MEmA8Q9w0pG6odxQWSAxf1kpJIUiII/?= =?us-ascii?Q?Ee0sXKlcK3cSxArhZd3fydVFVLHAsGZej27Jq3YwbPueoMH8/igPI+TIdRTl?= =?us-ascii?Q?JgVWUyxnsg844WchQ0ogXgz5HVk7cWNXOE3l2sH4RhfPD8G1wi62ngj1ecQN?= =?us-ascii?Q?5nizB4P0q16jUx/ks/89HVek5k7PgPOmYj0IpbeVPtooQwmMFokA9yMjprvQ?= =?us-ascii?Q?Gb6H3qTWxrJNeWxg6ZYi3vI1sUmJjqQt6j7cLUr9aEfhNMnaFxR6rRt/yaEC?= =?us-ascii?Q?sQD3CLBHMPeIuG2K+sokUHGPgPdPlIwfFuU6ZZL9KxwxFxx7lUsDX52xyLK8?= =?us-ascii?Q?74wgQbvcZ9CFF3DVL5jYBrT2CcwfHsQvV4bwSIhbI+uNE1wwPnsyadx6WSjv?= =?us-ascii?Q?lz5CeZ8JUK+3HhllB22oT5pve0bHYKY7SN0DiGrhiWlkWBcI0l+VKVRI4n3D?= =?us-ascii?Q?RKhT5OWmP2Df8E3LvJRzOM4TzTrHfKUF4hwfKoUzhDLXlJveMLyqcSAs1d1/?= =?us-ascii?Q?2jzI+tKQlwwZaVc00eY9Cgj3RN+mAg87HzOxHSg7D09GwhqjXmxF2Dl3dgZc?= =?us-ascii?Q?vE58hlLOmQ=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: 15e09135-642b-4794-0c0c-08da482f7ffe X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Jun 2022 02:43:27.3739 (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: /IFFWRg0zZBcm9rBzgNaZcJXtpi723yx2qSM2SUJS00JxEwAQBfqoiJKtgjdo87DibKqvDdGIy7dCJkjZzXwBw== 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:37 > 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 >=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 4/5] raw/afu_mf: add HE-MEM AFU driver > > > > 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. > > > > 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 > > > > 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" > > > > #define AFU_MF_PMD_RAWDEV_NAME rawdev_afu_mf > > > > @@ -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 */ } > > }; > > > > @@ -35,6 +37,7 @@ > > &n3000_afu_drv, > > &he_lbk_drv, > > &he_mem_lbk_drv, > > + &he_mem_tg_drv, > > NULL > > }; > > > > 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.build 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 > > > > 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') > > > > 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; > > }; > > > > +/** > > + * 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 >=20 > The file name change to "afu_pmd_he_mem.c" is better? agree > Other part is good for me, you can add: > Acked-by: Tianfei Zhang >=20 > > -- > > 1.8.3.1