From patchwork Mon Dec 19 20:53:54 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hemant Agrawal X-Patchwork-Id: 18175 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id A5816FABB; Mon, 19 Dec 2016 16:21:50 +0100 (CET) Received: from NAM02-CY1-obe.outbound.protection.outlook.com (mail-cys01nam02on0050.outbound.protection.outlook.com [104.47.37.50]) by dpdk.org (Postfix) with ESMTP id 40D89FA4F for ; Mon, 19 Dec 2016 16:21:26 +0100 (CET) Received: from BN3PR0301CA0032.namprd03.prod.outlook.com (10.160.180.170) by BN1PR0301MB0738.namprd03.prod.outlook.com (10.160.78.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.789.14; Mon, 19 Dec 2016 15:21:24 +0000 Received: from BL2FFO11FD039.protection.gbl (2a01:111:f400:7c09::137) by BN3PR0301CA0032.outlook.office365.com (2a01:111:e400:4000::42) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.789.14 via Frontend Transport; Mon, 19 Dec 2016 15:21:24 +0000 Authentication-Results: spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none; nxp.com; dmarc=fail action=none header.from=nxp.com; nxp.com; dkim=none (message not signed) header.d=none; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.158.2 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.158.2; helo=az84smr01.freescale.net; Received: from az84smr01.freescale.net (192.88.158.2) by BL2FFO11FD039.mail.protection.outlook.com (10.173.161.135) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.789.10 via Frontend Transport; Mon, 19 Dec 2016 15:21:24 +0000 Received: from bf-netperf1.idc ([10.232.134.28]) by az84smr01.freescale.net (8.14.3/8.14.0) with ESMTP id uBJFKMhe029110; Mon, 19 Dec 2016 08:21:20 -0700 From: Hemant Agrawal To: CC: , , , , , , Hemant Agrawal Date: Tue, 20 Dec 2016 02:23:54 +0530 Message-ID: <1482180853-18823-16-git-send-email-hemant.agrawal@nxp.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1482180853-18823-1-git-send-email-hemant.agrawal@nxp.com> References: <1480875447-23680-1-git-send-email-hemant.agrawal@nxp.com> <1482180853-18823-1-git-send-email-hemant.agrawal@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131266344843395417; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.158.2; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(336005)(7916002)(39450400003)(39380400002)(39840400002)(39850400002)(39400400002)(39410400002)(39860400002)(2980300002)(1109001)(1110001)(339900001)(199003)(189002)(626004)(77096006)(305945005)(8676002)(92566002)(38730400001)(8936002)(68736007)(36756003)(48376002)(50466002)(86362001)(81156014)(81166006)(47776003)(189998001)(104016004)(50226002)(97736004)(5660300001)(106466001)(110136003)(2351001)(50986999)(4326007)(85426001)(76176999)(2906002)(105606002)(5003940100001)(8666005)(356003)(6916009)(551934003)(33646002)(2950100002)(69596002)(6666003)(7059030); DIR:OUT; SFP:1101; SCL:1; SRVR:BN1PR0301MB0738; H:az84smr01.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD039; 1:wLFJFSvFMH9KWmt+h16ziEx5UPoCNhnfKnuWhy6eWjDJMujV0cLS+NT68V27H9bDWL/68TZaf06L5vYYkLej+R1ggn7I4ziVAsEKPdPWtEudI/nW1rMZ3i3T+oknWrTIrP7OdZyfm9KLcbQG08Q0YG7Nv8cjZA7YbFIq/Uoq27HDWz9QdU1AE01rwNIjK6rHPwRGZrUqVy240A2FLBCMrlyYUBCvYGyZ/44MoFZr2ewSrh2uRkykKmZVAPQprE8AZ+mJ22+0CbKnVi+A2EVcebENWTHPTBzhW3Z9lN7zw3ccWoaU1tNi2ncckqWCy/cTQAEpAtd2jbfByojhiOm6ZJXpEZmCrXw3rnacLYZinIsyu5BoIbFTqe5KccTTDtA3zekjTi1x5zIrs5Y3TODB6IqW9L2via4g2IVY+LXCdaLhTYuLBzmpmig3avKydMRFgLyMaHK75RJSSkQTRemCwr+xWJrIjPlbAASnk02jTJebgYclXJKMsv+bJf5t+5uc9DcLxLCBo4s95ZyFUKyGMU4Xmcjiai6NhxBHeu2OqX4+EE4ib8zaYsVCMCkjvU43zeDe+WbHO9F82MieOtyfTW6RVc/mRH5nYF3VRqnyStMtMb06QyMwd2dZAxAg35o+F9dfrAYp6MSgWRQs4QVS0s8z8gUjreesoglyqroKPhXU2Wq5IrXBK6hJkWs0AAKs3kDC6J9/V5GeqnMw4zUKMu+P4VSwVPBm3DyQK4z90SN4wbQxVbv1uLaKCh4vQi04gXIGSVX3t3QytT8yFJovNQ== MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: f7cc8c0b-e239-4d17-c159-08d42822b1d1 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:BN1PR0301MB0738; X-Microsoft-Exchange-Diagnostics: 1; BN1PR0301MB0738; 3:ddQcLkRnpm/wdfhVRJSFm9kHBP8NQg+K4Cs+zHduAznLmDFgI2AQjceUayJDRIu0+X2QDjsJqlValIySuat0sNpf+sN4TdgQFMVMbsjeSCqha4PCyEbzbgH2cNHv2H2RXvj1p3KCHGyrxMIWSEcpPumUnU/+P74olV2TWjCRAgFvmlhUQa+El6jfVrx8+PNNxgFD6onGWJqLQDwfOaB1iBHaonmcq71CtVCs/QJPwLKv1B9r80RLkT+fIdD3EHshR5e5hzqkIr1yyqjOt6mXYy8r1f6Bq9spPuqZv39FlslLvcK8W9WBooQ8YnXgejqaPEVV+uHqFNaRU9QUEy0JNCZY6j/GcCI+ruCxZQd5/Hn3SXrIeIMG8+DtJ0OPbflp X-Microsoft-Exchange-Diagnostics: 1; BN1PR0301MB0738; 25:FAjhmnr0WG9mTtAPRzKaH3VO5RF7UNS2DaJn0IkXG0QVS3VSgCClG76kRHO7swgJ+k7mcVxLOx9fRgBmnB/wTaHhiKliQVQ4qbSZRVcULJS+NrU4V4zdzWpik3z//myR4N8n4Az3aRAvnzFJSekE447Sb8HY7pmSZSG1wvBmX6Rd83aDuV3BzjnHvQwqkAKbEo2c/+CgVGT0De3W0eO7Rwl5H17pBS+giLvMbBiALGlZgS8/uOpVFMS5UxBHcfBqLZKNuBoDIMmiAK4vOLYUEh9jKEUCg9iu/T4MYAZt/t9PiSKaxV5KdGiO7AJ+zUiKkG53TiFu5yGlK357CDwhMXgpkBf8L2CcU0FLxYIJLqHbikkVlfqSpSZMKYwq+vVmgdl8a1brYj8HwhA+375AQOUL/EYLACJvwM+z6EvgRCLAgR18V1G6InH8jPgZRYk50EueaHraSgjGK4UbLAKA05E8PNA9DrzrJ8fDTmsMmYL/xgsXz/pnQH0bzhSSRgJPaboLRg91IuHajhlX7YdvVReZQ18lj3AQpGzqtKYrvHU2CQFCQmcbg9aBWcorjgv0W4u9echsZ0kO8qJWasS9YHV6Mi69lbFy9K4lZofduI3bATbjdhIq9xnGeXAokJePx1No2i3zOa9qFPq18ZnapYq8x0oBJVbFht0DFTv90eMxEit1FxWnBefagU7pjMz/+xZcUF9ykc+fWyoylfHM61DdkTrSdlq09cSGu8o9xndAC/mJzWPUTpACd2bxQLUzZENXXR8flH4of26MapG1HA== X-Microsoft-Exchange-Diagnostics: 1; BN1PR0301MB0738; 31:CbWhkVokUrGFlVTrjsuarYujr4pO/yfl/hN3hVNxW19M3JXvy8UXnRmIvAt2ZjCpz/e4z1zCQCNbYsJfA8J33nGNnDNB7BLfYkkdS37gAns6PRjV64q40OyGKYUfQSqlTe5z+xJBcJMrlpsHi7f5JA7FqreKKgJ0/LecTCyhx4oMbuwXwWEMusTFd9CmRdYguClJ2+smlFfQBcRdeyn7JW4HFOu70hKKDfVEhNmcbh9U1gS9A39bQxSYamfpYYL2fRChCmZem+q+LFeNDXQb4w== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197)(275809806118684); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095060)(601004)(2401047)(8121501046)(13018025)(13015025)(13024025)(5005006)(13023025)(13017025)(3002001)(10201501046)(6055026)(6096035)(20161123565025)(20161123563025)(20161123559025)(20161123561025)(20161123556025); SRVR:BN1PR0301MB0738; BCL:0; PCL:0; RULEID:(400006); SRVR:BN1PR0301MB0738; X-Microsoft-Exchange-Diagnostics: 1; BN1PR0301MB0738; 4:kUeu2hIYuZPus1RwJsyXb8lf0m2NEmCn8Y5JWzWPylzN61aNt7s38J7cOReqmp/t2EtV3x41ONmNJ+bzAOxNuT0n/dLiuYyVYM0OhaTprqm2C3Qyp3nM4o84z224azdQY8RFQxEQ4Go2FI+034TlNYQnIiKS5PDEE+WiicV0YNgiMG1+kGjRS5rRg121EaFgBkhqUcufLZ8+25khTlsWhyowl/nijrdsjWXvQmMeuZvLQGau/doGNUOhvR0Efy0A2FP3XmmgmKDvCtClVQWZOfPP3qIbL6c7N6DujvMiIlaULF/B66z+Oik7PBg/sjWWsSnSDQY3BLxEDuuf4tbxX4cB8oO2OVoKvbvRE/ehu5KV/AQBv9BVvdIGvQh15484GH9Ru3y849WeCLbrbob+6iuANmXkFCPBTasUPjJZqC1fiH22EWk5LgW/9SHajM2OJ44N8Wj2by3chipI2cmgNGvZwfmklK+EJWjlaZjSBrveUPrz8gPkBZ9ZfkWgs2UuOj3fFHjG+DeOoADjOdDF3WiE2Zpi8dPHrb+i/OJ1V9F88Eg5imTnBw0WCad9zMcekzJTbcHXrdAMlCFuVBVECjZR9kGP3+DoHu6E6wm564yCBTsnzPT7R8gKfANK2ylTrGYuLm62buRPM5J3JdqCpLZuqsi+Bqfsij32on5oqBzjF8MZsOnC7iWUUyp+4pLQFYzBF2Y2xU2BcUrLEXVzuyDSDdsffxom0CLOT0qctqRN6lTJcBevKXiGQE+MsGTCDem04SacWYrlMD8K85Zdzw== X-Forefront-PRVS: 01613DFDC8 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN1PR0301MB0738; 23:fBMd3Zh44JU6Bug0xilL1CXmCwOAZjlu/4CjwN7?= Pq6mj9p0L04V4cgjua8zm5QIdcZ/r6JRfJ5dvQtXZTM+MTLMgarblpQxtpl8DGCJc+9BQ5GPlqJDeJuZUasN/A4EYBf+e71FMpj+HK8tZRAP9ZO6jd1XTASUNB2xXcEY3EtXBWrhmvkmyPggXfVHSg15BotphiebZOGxRufNBA85Oqm6IbkDGFAAg/6NmXGja4n5xAwMUJJQ6Cul9i0R2Nlyg/sJlDL509O4TTMvcx10bDDInq3HUU/+uOS/t+4WbcUtq5MrWL/UVhniFVxhlaLlpdlrbqKinLrPhzXPO4ClGBG5w25969j5TFQonrJvSyjffS8LQd1l5+2oxULWy0BjagW/thdb8pLQYCX0u8G4JnEOaI+bZKBeNly6BZ+H1w42gAPWX6Uxf9cXYuFOmFBEXy4MhhBEri2ch/DEr23VUoFseS3Dmn2pD0TLBZghSNezJSqXQqh60wUTUHdR4yzCoKcYsE/2aKxJCO8+hYku9FLjir2FXcTaKdzbiOf/4zI3EdCbHiJM3KlN94JiJwX7Nxz0znd5EvAnkW3EgwinbrQuiCTCvg1czrAuNvITvYBlnIHrl6wgGDG/pHtOzK7dejLqm7c896pN+m4mdSZGkn7SaiwCnlEmkir3kSOQBdiVbkkXl4sERpG6O/ePHexDSskYChuhZ5xNTGC+EhwK82+UL+3fnlyuSFswNUyIsNU5oMKXYJCb+3AowmaQJL3Zol6lmc0+/XquLeCw7/VnUW4Z6wk8HrKLETRZAR1SHMFccc2BUTRjsNggKc7WotGBZsuQlrb3IVERQJzQaib3dh9N/xX1gqTigR7lGrHKMm79E2S8oOAc0q168/AW7kJXhOngM1hOUDkgAPeOfGOdlmsK/YqrprBj7XZHSqFdpmM8YzmL/s+OmIbPDnlfRxIjG2lP0LjK1Z4Dd9CBgGPP19K0clG05MH3sdwrpBx6LCXH3dpLr9YaaBwV9zTCfjkN9hEt3O7ewTduE65fUC+Zw8I8MB8hGv9mH5TCwNJ/ujdzqjBVfVWOssXj6RjTe+KbS43vblF5NQnI1TikvXsu9Yre/1CWi1UcHnSHA7WBgaZW68O8X3o+Gk8nl5dgNlh+Qg81uGPe6mdQ9T9DnHv5JjvDApQ+g+/vo3QKGrcwxquQdDh9Kq6IHnMj4vcyDxLbxNhUh6XN0HIkfFQu6uiblTBv2ww3ymm6VeEIPPOX4NY8U0007Lizq/1RkkKsVkXxkOiObN6dQ1gfK/8TYOXNMBJ8vB0YusWeK9HAinaKixJ+FkfmQMhBuXAPRK9WPyt5c X-Microsoft-Exchange-Diagnostics: 1; BN1PR0301MB0738; 6:RxLsIZ9GkwsT9ty7t93nidSBkX0Ne5FrBAEqJYE52MZKaDKiFaBNbhN+II8uKcKNqk4DystBMSGzH8jpK8NwDOfob9I6WFk8PTP61pjm0D86XBFy+yZZjA8sKcLHgiAnn2+3F/UVKZ+T6zhP5iFCi6R3+wQIaY50E9fJ5/vdlN1rGk6cPQ4VMEjw09NiXif4HJNJ4USKo0kMopy9UTdaWg4pJN8AEeH1r/I0O0ZPRueV0K2BONoPLV7gRE4shEjzdp699OaYRgFUm7J22IfQQR4AV74BMGd6rpvBYAksma6nqZUrMckLsisTdx9v/XENyNlckBCMrOrDjCLjIpY/R19J8Db3vFWhrlakiYJy0Z9xT0q1B49tS1nBuG/qaMEg/HcieI6VpNtByU1TIfFc0iZmJOvK5Ko4WOFpq6gyxw7ylLdwMIcCkxMg0poMisrK; 5:NN3G7FtTZmkT6yhpfNTi56XqgJ3pbuYtav3v2HdzNArJXymnjkwyclVl92qU03fsstlxe3ONN6d8Vf3b1wjBhwAEKMGuMfwzNgmUZ8aSuH+beB+fpz93QKcwRl/YJRiDJmWSoyNNBdC0AJ+IjxrdFtX8vU2ZJp0htBkjPC23ZUACMGn0Q57TRzRg8BoDDIQZ; 24:lqho08jQRmViKmwLkWDVv9fLWFLgZYG1LPG2yD1c5ZHcBatsKHahkfslGrlcaw5hICAS+X3/jJlQURUqHnXJ/fvJW8AuPxLFDzQPgYvhqMw= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN1PR0301MB0738; 7:wPIpo6xfv1B9XH0655nrNrBRyDZh43GGiRZaOVInCl7wlZoaAUpFOwQPX+ZycJIXOyIsfqTUebG/Mr5eE1Q8MFyDBKbOuF/SUePAh+BnXvJoLZquewtinSHqYwAA6AjiwMUtiyN1c6NDGvoLR18m2oT0wq7LhSrSOzB2WxYTGxCTyrZOE65yz4aDp/fqQFdNsLL1sDEm132FQJchY9uk4duZQCaRgdsu8V4WTCCVaIEtykVEF1dpD98GVSJA9sOPlGzKKSBfZlmTLsGmy88nIKRm6HCOyr8NVaUvHRWtcGxdLE8MnqZXpksjEbnTiU/POmXhMnWdPDTkctpIR/zMbHNxoOjFCZ/Rf7jQUpHC2gFdHdyvpCoHV9Mdj3Q8fks8NPrjXEEfxUY7+g/LeLjj1KrwBxpAzICyio/3ReuB2494PI+mpEvrgnbLIdUiPcD8FKxToVtSz7Yqvog2HnLE1w== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Dec 2016 15:21:24.1211 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.158.2]; Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN1PR0301MB0738 Subject: [dpdk-dev] [PATCHv2 15/34] drivers/common/dpaa2: dpio object driver X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" The DPIO driver is bound to DPIO objects discovered on the fsl-mc bus and provides services that: - allow other drivers, such as the Ethernet driver, to enqueue and dequeue frames for their respective objects A system will typically allocate 1 DPIO object per CPU to allow queuing operations to happen simultaneously across all CPUs. Signed-off-by: Hemant Agrawal --- drivers/bus/fslmc/Makefile | 2 + drivers/bus/fslmc/fslmc_vfio.c | 21 +- drivers/common/Makefile | 4 + drivers/common/dpaa2/Makefile | 1 + drivers/common/dpaa2/dpio/Makefile | 64 ++++ drivers/common/dpaa2/dpio/dpaa2_hw_dpio.c | 364 +++++++++++++++++++++ drivers/common/dpaa2/dpio/dpaa2_hw_dpio.h | 64 ++++ drivers/common/dpaa2/dpio/dpaa2_hw_pvt.h | 68 ++++ .../dpaa2/dpio/rte_pmd_dpaa2_dpio_version.map | 8 + mk/rte.app.mk | 1 + 10 files changed, 594 insertions(+), 3 deletions(-) create mode 100644 drivers/common/dpaa2/dpio/Makefile create mode 100644 drivers/common/dpaa2/dpio/dpaa2_hw_dpio.c create mode 100644 drivers/common/dpaa2/dpio/dpaa2_hw_dpio.h create mode 100644 drivers/common/dpaa2/dpio/dpaa2_hw_pvt.h create mode 100644 drivers/common/dpaa2/dpio/rte_pmd_dpaa2_dpio_version.map diff --git a/drivers/bus/fslmc/Makefile b/drivers/bus/fslmc/Makefile index a8b1666..cc6d7c2 100644 --- a/drivers/bus/fslmc/Makefile +++ b/drivers/bus/fslmc/Makefile @@ -46,6 +46,8 @@ CFLAGS += "-Wno-strict-aliasing" CFLAGS += -I$(RTE_SDK)/drivers/bus/fslmc CFLAGS += -I$(RTE_SDK)/drivers/bus/fslmc/mc +CFLAGS += -I$(RTE_SDK)/drivers/common/dpaa2/qbman/include +CFLAGS += -I$(RTE_SDK)/drivers/common/dpaa2/dpio CFLAGS += -I$(RTE_SDK)/lib/librte_eal/linuxapp/eal # versioning export map diff --git a/drivers/bus/fslmc/fslmc_vfio.c b/drivers/bus/fslmc/fslmc_vfio.c index 7739493..1c80bf9 100644 --- a/drivers/bus/fslmc/fslmc_vfio.c +++ b/drivers/bus/fslmc/fslmc_vfio.c @@ -61,6 +61,9 @@ #include "rte_fslmc.h" #include "fslmc_vfio.h" +#include "dpaa2_hw_pvt.h" +#include "dpaa2_hw_dpio.h" + #define VFIO_MAX_CONTAINERS 1 #define FSLMC_VFIO_LOG(level, fmt, args...) \ @@ -224,7 +227,7 @@ static int64_t vfio_map_mcp_obj(struct fslmc_vfio_group *group, char *mcp_obj) } static void -dpaa2_bus_add_device(struct rte_bus *bus, struct rte_dpaa2_device *dev) +fslmc_bus_add_device(struct rte_bus *bus, struct rte_dpaa2_device *dev) { /* device is valid, add in list (sorted) */ if (TAILQ_EMPTY(&bus->device_list)) { @@ -261,12 +264,13 @@ int fslmc_vfio_process_group(struct rte_bus *bus) struct fslmc_vfio_device *vdev; struct vfio_device_info device_info = { .argsz = sizeof(device_info) }; char *temp_obj, *object_type, *mcp_obj, *dev_name; - int32_t object_id, i, dev_fd; + int32_t object_id, i, dev_fd, ret; DIR *d; struct dirent *dir; char path[PATH_MAX]; int64_t v_addr; int ndev_count; + int dpio_count = 0; struct fslmc_vfio_group *group = &vfio_groups[0]; static int process_once; @@ -407,11 +411,22 @@ int fslmc_vfio_process_group(struct rte_bus *bus) FSLMC_VFIO_LOG(DEBUG, "DPAA2: Added [%s-%d]\n", object_type, object_id); - dpaa2_bus_add_device(bus, dev); + fslmc_bus_add_device(bus, dev); + } + if (!strcmp(object_type, "dpio")) { + ret = dpaa2_create_dpio_device(vdev, + &device_info, + object_id); + if (!ret) + dpio_count++; } } closedir(d); + ret = dpaa2_affine_qbman_swp(); + if (ret) + FSLMC_VFIO_LOG(DEBUG, "Error in affining qbman swp %d", ret); + return 0; FAILURE: diff --git a/drivers/common/Makefile b/drivers/common/Makefile index 76ec2d1..434280f 100644 --- a/drivers/common/Makefile +++ b/drivers/common/Makefile @@ -33,6 +33,10 @@ include $(RTE_SDK)/mk/rte.vars.mk CONFIG_RTE_LIBRTE_DPAA2_COMMON = $(CONFIG_RTE_LIBRTE_DPAA2_PMD) +ifneq ($(CONFIG_RTE_LIBRTE_DPAA2_COMMON),y) +CONFIG_RTE_LIBRTE_DPAA2_COMMON = $(CONFIG_RTE_LIBRTE_FSLMC_BUS) +endif + DIRS-$(CONFIG_RTE_LIBRTE_DPAA2_COMMON) += dpaa2 include $(RTE_SDK)/mk/rte.subdir.mk diff --git a/drivers/common/dpaa2/Makefile b/drivers/common/dpaa2/Makefile index 4960ebe..4ccaf26 100644 --- a/drivers/common/dpaa2/Makefile +++ b/drivers/common/dpaa2/Makefile @@ -32,5 +32,6 @@ include $(RTE_SDK)/mk/rte.vars.mk DIRS-$(CONFIG_RTE_LIBRTE_DPAA2_COMMON) += qbman +DIRS-$(CONFIG_RTE_LIBRTE_DPAA2_COMMON) += dpio include $(RTE_SDK)/mk/rte.subdir.mk diff --git a/drivers/common/dpaa2/dpio/Makefile b/drivers/common/dpaa2/dpio/Makefile new file mode 100644 index 0000000..762597f --- /dev/null +++ b/drivers/common/dpaa2/dpio/Makefile @@ -0,0 +1,64 @@ +# BSD LICENSE +# +# Copyright(c) 2016 NXP. All rights reserved. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of NXP nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +include $(RTE_SDK)/mk/rte.vars.mk + +# +# library name +# +LIB = librte_pmd_dpaa2_dpio.a + +ifeq ($(CONFIG_RTE_LIBRTE_DPAA2_DEBUG_INIT),y) +CFLAGS += -O0 -g +CFLAGS += "-Wno-error" +else +CFLAGS += -O3 +CFLAGS += $(WERROR_FLAGS) +endif + +CFLAGS += -I$(RTE_SDK)/drivers/bus/fslmc +CFLAGS += -I$(RTE_SDK)/drivers/common/dpaa2/qbman/include +CFLAGS += -I$(RTE_SDK)/lib/librte_eal/linuxapp/eal + +# versioning export map +EXPORT_MAP := rte_pmd_dpaa2_dpio_version.map + +# library version +LIBABIVER := 1 + +# all source are stored in SRCS-y +# +SRCS-$(CONFIG_RTE_LIBRTE_DPAA2_COMMON) += dpaa2_hw_dpio.c + +# library dependencies +DEPDIRS-y += lib/librte_eal + +include $(RTE_SDK)/mk/rte.lib.mk diff --git a/drivers/common/dpaa2/dpio/dpaa2_hw_dpio.c b/drivers/common/dpaa2/dpio/dpaa2_hw_dpio.c new file mode 100644 index 0000000..011bd9f --- /dev/null +++ b/drivers/common/dpaa2/dpio/dpaa2_hw_dpio.c @@ -0,0 +1,364 @@ +/*- + * BSD LICENSE + * + * Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved. + * Copyright (c) 2016 NXP. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Freescale Semiconductor, Inc nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include "dpaa2_hw_pvt.h" +#include "dpaa2_hw_dpio.h" + +#define NUM_HOST_CPUS RTE_MAX_LCORE + +struct dpaa2_io_portal_t dpaa2_io_portal[RTE_MAX_LCORE]; +RTE_DEFINE_PER_LCORE(struct dpaa2_io_portal_t, _dpaa2_io); + +TAILQ_HEAD(dpio_device_list, dpaa2_dpio_dev); +static struct dpio_device_list *dpio_dev_list; /*!< DPIO device list */ +static uint32_t io_space_count; + +/*Stashing Macros default for LS208x*/ +static int dpaa2_core_cluster_base = 0x04; +static int dpaa2_cluster_sz = 2; + +/* For LS208X platform There are four clusters with following mapping: + * Cluster 1 (ID = x04) : CPU0, CPU1; + * Cluster 2 (ID = x05) : CPU2, CPU3; + * Cluster 3 (ID = x06) : CPU4, CPU5; + * Cluster 4 (ID = x07) : CPU6, CPU7; + */ +/* For LS108X platform There are two clusters with following mapping: + * Cluster 1 (ID = x02) : CPU0, CPU1, CPU2, CPU3; + * Cluster 2 (ID = x03) : CPU4, CPU5, CPU6, CPU7; + */ + +/* Set the STASH Destination depending on Current CPU ID. + * e.g. Valid values of SDEST are 4,5,6,7. Where, + * CPU 0-1 will have SDEST 4 + * CPU 2-3 will have SDEST 5.....and so on. + */ +static int +dpaa2_core_cluster_sdest(int cpu_id) +{ + int x = cpu_id / dpaa2_cluster_sz; + + if (x > 3) + x = 3; + + return dpaa2_core_cluster_base + x; +} + +static int +configure_dpio_qbman_swp(struct dpaa2_dpio_dev *dpio_dev) +{ + struct qbman_swp_desc p_des; + struct dpio_attr attr; + + dpio_dev->dpio = malloc(sizeof(struct fsl_mc_io)); + if (!dpio_dev->dpio) { + PMD_INIT_LOG(ERR, "Memory allocation failure\n"); + return -1; + } + + PMD_DRV_LOG(DEBUG, "\t Allocated DPIO Portal[%p]", dpio_dev->dpio); + dpio_dev->dpio->regs = dpio_dev->mc_portal; + if (dpio_open(dpio_dev->dpio, CMD_PRI_LOW, dpio_dev->hw_id, + &dpio_dev->token)) { + PMD_INIT_LOG(ERR, "Failed to allocate IO space\n"); + free(dpio_dev->dpio); + return -1; + } + + if (dpio_reset(dpio_dev->dpio, CMD_PRI_LOW, dpio_dev->token)) { + PMD_INIT_LOG(ERR, "Failed to reset dpio\n"); + dpio_close(dpio_dev->dpio, CMD_PRI_LOW, dpio_dev->token); + free(dpio_dev->dpio); + return -1; + } + + if (dpio_enable(dpio_dev->dpio, CMD_PRI_LOW, dpio_dev->token)) { + PMD_INIT_LOG(ERR, "Failed to Enable dpio\n"); + dpio_close(dpio_dev->dpio, CMD_PRI_LOW, dpio_dev->token); + free(dpio_dev->dpio); + return -1; + } + + if (dpio_get_attributes(dpio_dev->dpio, CMD_PRI_LOW, + dpio_dev->token, &attr)) { + PMD_INIT_LOG(ERR, "DPIO Get attribute failed\n"); + dpio_disable(dpio_dev->dpio, CMD_PRI_LOW, dpio_dev->token); + dpio_close(dpio_dev->dpio, CMD_PRI_LOW, dpio_dev->token); + free(dpio_dev->dpio); + return -1; + } + + PMD_INIT_LOG(DEBUG, "Qbman Portal ID %d", attr.qbman_portal_id); + PMD_INIT_LOG(DEBUG, "Portal CE adr 0x%lX", attr.qbman_portal_ce_offset); + PMD_INIT_LOG(DEBUG, "Portal CI adr 0x%lX", attr.qbman_portal_ci_offset); + + /* Configure & setup SW portal */ + p_des.block = NULL; + p_des.idx = attr.qbman_portal_id; + p_des.cena_bar = (void *)(dpio_dev->qbman_portal_ce_paddr); + p_des.cinh_bar = (void *)(dpio_dev->qbman_portal_ci_paddr); + p_des.irq = -1; + p_des.qman_version = attr.qbman_version; + + dpio_dev->sw_portal = qbman_swp_init(&p_des); + if (dpio_dev->sw_portal == NULL) { + PMD_DRV_LOG(ERR, " QBMan SW Portal Init failed\n"); + dpio_close(dpio_dev->dpio, CMD_PRI_LOW, dpio_dev->token); + free(dpio_dev->dpio); + return -1; + } + + PMD_INIT_LOG(DEBUG, "QBMan SW Portal 0x%p\n", dpio_dev->sw_portal); + + return 0; +} + +static int +dpaa2_configure_stashing(struct dpaa2_dpio_dev *dpio_dev) +{ + int sdest; + int cpu_id, ret; + + /* Set the Stashing Destination */ + cpu_id = rte_lcore_id(); + if (cpu_id < 0) { + cpu_id = rte_get_master_lcore(); + if (cpu_id < 0) { + RTE_LOG(ERR, PMD, "\tGetting CPU Index failed\n"); + return -1; + } + } + /* Set the STASH Destination depending on Current CPU ID. + * Valid values of SDEST are 4,5,6,7. Where, + * CPU 0-1 will have SDEST 4 + * CPU 2-3 will have SDEST 5.....and so on. + */ + + sdest = dpaa2_core_cluster_sdest(cpu_id); + PMD_DRV_LOG(DEBUG, "Portal= %d CPU= %u SDEST= %d", + dpio_dev->index, cpu_id, sdest); + + ret = dpio_set_stashing_destination(dpio_dev->dpio, CMD_PRI_LOW, + dpio_dev->token, sdest); + if (ret) { + PMD_DRV_LOG(ERR, "%d ERROR in SDEST\n", ret); + return -1; + } + + return 0; +} + +static inline struct dpaa2_dpio_dev *dpaa2_get_qbman_swp(void) +{ + struct dpaa2_dpio_dev *dpio_dev = NULL; + int ret; + + /* Get DPIO dev handle from list using index */ + TAILQ_FOREACH(dpio_dev, dpio_dev_list, next) { + if (dpio_dev && rte_atomic16_test_and_set(&dpio_dev->ref_count)) + break; + } + if (!dpio_dev) + return NULL; + + PMD_DRV_LOG(DEBUG, "New Portal=0x%x (%d) affined thread - %lu", + dpio_dev, dpio_dev->index, syscall(SYS_gettid)); + + ret = dpaa2_configure_stashing(dpio_dev); + if (ret) + PMD_DRV_LOG(ERR, "dpaa2_configure_stashing failed"); + + return dpio_dev; +} + +int +dpaa2_affine_qbman_swp(void) +{ + unsigned int lcore_id = rte_lcore_id(); + uint64_t tid = syscall(SYS_gettid); + + if (lcore_id == LCORE_ID_ANY) + lcore_id = rte_get_master_lcore(); + /* if the core id is not supported */ + else if (lcore_id >= RTE_MAX_LCORE) + return -1; + + if (dpaa2_io_portal[lcore_id].dpio_dev) { + PMD_DRV_LOG(INFO, "DPAA Portal=0x%x (%d) is being shared" + " between thread %lu and current %lu", + dpaa2_io_portal[lcore_id].dpio_dev, + dpaa2_io_portal[lcore_id].dpio_dev->index, + dpaa2_io_portal[lcore_id].net_tid, + tid); + RTE_PER_LCORE(_dpaa2_io).dpio_dev + = dpaa2_io_portal[lcore_id].dpio_dev; + rte_atomic16_inc(&dpaa2_io_portal + [lcore_id].dpio_dev->ref_count); + dpaa2_io_portal[lcore_id].net_tid = tid; + + PMD_DRV_LOG(DEBUG, "Old Portal=0x%x (%d) affined thread - %lu", + dpaa2_io_portal[lcore_id].dpio_dev, + dpaa2_io_portal[lcore_id].dpio_dev->index, + tid); + return 0; + } + + /* Populate the dpaa2_io_portal structure */ + dpaa2_io_portal[lcore_id].dpio_dev = dpaa2_get_qbman_swp(); + + if (dpaa2_io_portal[lcore_id].dpio_dev) { + RTE_PER_LCORE(_dpaa2_io).dpio_dev + = dpaa2_io_portal[lcore_id].dpio_dev; + dpaa2_io_portal[lcore_id].net_tid = tid; + + return 0; + } else { + return -1; + } +} + +int +dpaa2_create_dpio_device(struct fslmc_vfio_device *vdev, + struct vfio_device_info *obj_info, + int object_id) +{ + struct dpaa2_dpio_dev *dpio_dev; + struct vfio_region_info reg_info = { .argsz = sizeof(reg_info)}; + + if (obj_info->num_regions < NUM_DPIO_REGIONS) { + PMD_INIT_LOG(ERR, "ERROR, Not sufficient number " + "of DPIO regions.\n"); + return -1; + } + + if (!dpio_dev_list) { + dpio_dev_list = malloc(sizeof(struct dpio_device_list)); + if (!dpio_dev_list) { + PMD_INIT_LOG(ERR, "Memory alloc failed in DPIO list\n"); + return -1; + } + + /* Initialize the DPIO List */ + TAILQ_INIT(dpio_dev_list); + } + + dpio_dev = malloc(sizeof(struct dpaa2_dpio_dev)); + if (!dpio_dev) { + PMD_INIT_LOG(ERR, "Memory allocation failed for DPIO Device\n"); + return -1; + } + + PMD_DRV_LOG(INFO, "\t Aloocated DPIO [%p]", dpio_dev); + dpio_dev->dpio = NULL; + dpio_dev->hw_id = object_id; + dpio_dev->vfio_fd = vdev->fd; + rte_atomic16_init(&dpio_dev->ref_count); + /* Using single portal for all devices */ + dpio_dev->mc_portal = mcp_ptr_list[MC_PORTAL_INDEX]; + + reg_info.index = 0; + if (ioctl(dpio_dev->vfio_fd, VFIO_DEVICE_GET_REGION_INFO, ®_info)) { + PMD_INIT_LOG(ERR, "vfio: error getting region info\n"); + return -1; + } + + PMD_DRV_LOG(DEBUG, "\t Region Offset = %llx", reg_info.offset); + PMD_DRV_LOG(DEBUG, "\t Region Size = %llx", reg_info.size); + dpio_dev->ce_size = reg_info.size; + dpio_dev->qbman_portal_ce_paddr = (uint64_t)mmap(NULL, reg_info.size, + PROT_WRITE | PROT_READ, MAP_SHARED, + dpio_dev->vfio_fd, reg_info.offset); + + /* Create Mapping for QBMan Cache Enabled area. This is a fix for + * SMMU fault for DQRR statshing transaction. + */ + if (vfio_dmamap_mem_region(dpio_dev->qbman_portal_ce_paddr, + reg_info.offset, reg_info.size)) { + PMD_INIT_LOG(ERR, "DMAMAP for Portal CE area failed.\n"); + return -1; + } + + reg_info.index = 1; + if (ioctl(dpio_dev->vfio_fd, VFIO_DEVICE_GET_REGION_INFO, ®_info)) { + PMD_INIT_LOG(ERR, "vfio: error getting region info\n"); + return -1; + } + + PMD_DRV_LOG(DEBUG, "\t Region Offset = %llx", reg_info.offset); + PMD_DRV_LOG(DEBUG, "\t Region Size = %llx", reg_info.size); + dpio_dev->ci_size = reg_info.size; + dpio_dev->qbman_portal_ci_paddr = (uint64_t)mmap(NULL, reg_info.size, + PROT_WRITE | PROT_READ, MAP_SHARED, + dpio_dev->vfio_fd, reg_info.offset); + + if (configure_dpio_qbman_swp(dpio_dev)) { + PMD_INIT_LOG(ERR, + "Fail to configure the dpio qbman portal for %d\n", + dpio_dev->hw_id); + return -1; + } + + io_space_count++; + dpio_dev->index = io_space_count; + TAILQ_INSERT_HEAD(dpio_dev_list, dpio_dev, next); + + return 0; +} diff --git a/drivers/common/dpaa2/dpio/dpaa2_hw_dpio.h b/drivers/common/dpaa2/dpio/dpaa2_hw_dpio.h new file mode 100644 index 0000000..889c2c0 --- /dev/null +++ b/drivers/common/dpaa2/dpio/dpaa2_hw_dpio.h @@ -0,0 +1,64 @@ +/*- + * BSD LICENSE + * + * Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved. + * Copyright (c) 2016 NXP. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Freescale Semiconductor, Inc nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _FSLMC_DPIO_H_ +#define _FSLMC_DPIO_H_ + +#include +#include + +struct dpaa2_io_portal_t { + struct dpaa2_dpio_dev *dpio_dev; + struct dpaa2_dpio_dev *sec_dpio_dev; + uint64_t net_tid; + uint64_t sec_tid; +}; + +/*! Global per thread DPIO portal */ +RTE_DECLARE_PER_LCORE(struct dpaa2_io_portal_t, _dpaa2_io); + +#define DPAA2_PER_LCORE_DPIO RTE_PER_LCORE(_dpaa2_io).dpio_dev +#define DPAA2_PER_LCORE_PORTAL DPAA2_PER_LCORE_DPIO->sw_portal + +#define DPAA2_PER_LCORE_SEC_DPIO RTE_PER_LCORE(_dpaa2_io).sec_dpio_dev +#define DPAA2_PER_LCORE_SEC_PORTAL DPAA2_PER_LCORE_SEC_DPIO->sw_portal + +/* Affine a DPIO portal to current processing thread */ +int dpaa2_affine_qbman_swp(void); + +/* create dpio device */ +int dpaa2_create_dpio_device(struct fslmc_vfio_device *vdev, + struct vfio_device_info *obj_info, + int object_id); + +#endif /* _FSLMC_DPIO_H_ */ diff --git a/drivers/common/dpaa2/dpio/dpaa2_hw_pvt.h b/drivers/common/dpaa2/dpio/dpaa2_hw_pvt.h new file mode 100644 index 0000000..ef3eb71 --- /dev/null +++ b/drivers/common/dpaa2/dpio/dpaa2_hw_pvt.h @@ -0,0 +1,68 @@ +/*- + * BSD LICENSE + * + * Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved. + * Copyright (c) 2016 NXP. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Freescale Semiconductor, Inc nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _DPAA2_HW_PVT_H_ +#define _DPAA2_HW_PVT_H_ + +#include +#include + + +#define MC_PORTAL_INDEX 0 +#define NUM_DPIO_REGIONS 2 + +struct dpaa2_dpio_dev { + TAILQ_ENTRY(dpaa2_dpio_dev) next; + /**< Pointer to Next device instance */ + uint16_t index; /**< Index of a instance in the list */ + rte_atomic16_t ref_count; + /**< How many thread contexts are sharing this.*/ + struct fsl_mc_io *dpio; /** handle to DPIO portal object */ + uint16_t token; + struct qbman_swp *sw_portal; /** SW portal object */ + const struct qbman_result *dqrr[4]; + /**< DQRR Entry for this SW portal */ + void *mc_portal; /**< MC Portal for configuring this device */ + uintptr_t qbman_portal_ce_paddr; + /**< Physical address of Cache Enabled Area */ + uintptr_t ce_size; /**< Size of the CE region */ + uintptr_t qbman_portal_ci_paddr; + /**< Physical address of Cache Inhibit Area */ + uintptr_t ci_size; /**< Size of the CI region */ + int32_t vfio_fd; /**< File descriptor received via VFIO */ + int32_t hw_id; /**< An unique ID of this DPIO device instance */ +}; + +/*! Global MCP list */ +extern void *(*mcp_ptr_list); +#endif diff --git a/drivers/common/dpaa2/dpio/rte_pmd_dpaa2_dpio_version.map b/drivers/common/dpaa2/dpio/rte_pmd_dpaa2_dpio_version.map new file mode 100644 index 0000000..597cdbd --- /dev/null +++ b/drivers/common/dpaa2/dpio/rte_pmd_dpaa2_dpio_version.map @@ -0,0 +1,8 @@ +DPDK_17.02 { + global: + per_lcore__dpaa2_io; + dpaa2_affine_qbman_swp; + dpaa2_create_dpio_device; + + local: *; +}; diff --git a/mk/rte.app.mk b/mk/rte.app.mk index 438fa2c..f380c88 100644 --- a/mk/rte.app.mk +++ b/mk/rte.app.mk @@ -112,6 +112,7 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_CXGBE_PMD) += -lrte_pmd_cxgbe ifeq ($(CONFIG_RTE_LIBRTE_DPAA2_COMMON),y) _LDLIBS-$(CONFIG_RTE_LIBRTE_DPAA2_PMD) += -lrte_pmd_dpaa2 _LDLIBS-$(CONFIG_RTE_LIBRTE_DPAA2_PMD) += -lrte_pmd_dpaa2_qbman +_LDLIBS-$(CONFIG_RTE_LIBRTE_DPAA2_PMD) += -lrte_pmd_dpaa2_dpio _LDLIBS-$(CONFIG_RTE_LIBRTE_DPAA2_PMD) += -lrte_pmd_fslmcbus endif _LDLIBS-$(CONFIG_RTE_LIBRTE_E1000_PMD) += -lrte_pmd_e1000