From patchwork Sat May 27 10:25:14 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shreyansh Jain X-Patchwork-Id: 24767 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 8B7587CE1; Sat, 27 May 2017 12:18:48 +0200 (CEST) Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on0048.outbound.protection.outlook.com [104.47.36.48]) by dpdk.org (Postfix) with ESMTP id 591D67CE3 for ; Sat, 27 May 2017 12:18:32 +0200 (CEST) Received: from CY1PR03CA0040.namprd03.prod.outlook.com (10.174.128.50) by BY2PR03MB175.namprd03.prod.outlook.com (10.242.36.148) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1101.14; Sat, 27 May 2017 10:18:30 +0000 Received: from BY2FFO11FD020.protection.gbl (2a01:111:f400:7c0c::165) by CY1PR03CA0040.outlook.office365.com (2603:10b6:600::50) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1124.9 via Frontend Transport; Sat, 27 May 2017 10:18:30 +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; 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 BY2FFO11FD020.mail.protection.outlook.com (10.1.14.137) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1075.5 via Frontend Transport; Sat, 27 May 2017 10:18:29 +0000 Received: from Tophie.ap.freescale.net ([10.232.14.39]) by az84smr01.freescale.net (8.14.3/8.14.0) with ESMTP id v4RAHYu4029968; Sat, 27 May 2017 03:18:27 -0700 From: Shreyansh Jain To: CC: , Date: Sat, 27 May 2017 15:55:14 +0530 Message-ID: <1495880735-1651-19-git-send-email-shreyansh.jain@nxp.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1495880735-1651-1-git-send-email-shreyansh.jain@nxp.com> References: <1495880735-1651-1-git-send-email-shreyansh.jain@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131403539097875877; (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)(39840400002)(39410400002)(39860400002)(39400400002)(39850400002)(39380400002)(39450400003)(2980300002)(1110001)(1109001)(339900001)(199003)(189002)(9170700003)(85426001)(189998001)(6666003)(4326008)(6916009)(2950100002)(2906002)(47776003)(5003940100001)(8936002)(50226002)(77096006)(575784001)(106466001)(110136004)(86362001)(81166006)(8656002)(356003)(38730400002)(498600001)(53936002)(33646002)(68736007)(36756003)(76176999)(54906002)(50986999)(8676002)(5660300001)(305945005)(105606002)(104016004)(2351001)(50466002)(48376002)(21314002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR03MB175; H:az84smr01.freescale.net; FPR:; SPF:Fail; MLV:ovrnspm; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BY2FFO11FD020; 1:ahsO1M80tjoDCLHmM4fKf8zDvYsxTDdBaayw/HaYSXfEJiJ3j8zwZau8eNF3oZVFzAsop3yrdXUTcmPABI3IlFhNSfL4gBqDllq6ecmPjbG/SXzYHqHucBTQoeAnwqU96CaH7R1QV/pmTzqddVAsCredUv2Tahnq51ZOVIx3qmg2SfhqI3/Gqc8rlFD/bHRCTkfO00nJcS444PuLUvZS+EImQtWBXGsnPrADY+WUugq5E/kZgbhTarDq9SmuW720JnYtZNg/JvuNq2OLrlbVwVM12kcwR3QjBBVasPnpUcnGzoTWHCNhrHAkJBCLkrYRzpi7vliclA1ZCnqMN5/QscOV2nfwWqvRdsQQcDWtQPFEvb/r3C7j03OLXhf7BZEnwx105+E6DX4+aBqx4/1/y0zG7R8AhQpaI5VK4m6AZQ8JQ+jjN9PiWzWzndOFMhRUzt4cogVFVR2jlnhC60CP+bGrbd3lYA7m6nbH8NwV+g0o/DC3wPgGF0FNTre9Df4+G8tsrpUOr5m/VgWbfhY75HmEGisTzdfu1RBh74uzuJdvSvdD6Mpoch09WPLP9ROiImcn2k82FrMQHl5LGp/dgPBPAlbOayeehkGa/uZ9uI3A9siVpfo/0X7XWE6fU7hlJLk+3L5aTCYW0DIhDXEks1jueMTdxsat/NGdyRWHskjw3GayXD77mQCWUBTS5GiE6Vg+8G4EAzm+O7qasB8l2Q== MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY2PR03MB175: X-MS-Office365-Filtering-Correlation-Id: 2b62ab66-02da-4314-093c-08d4a4e9b88a X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131430075)(201703131517081); SRVR:BY2PR03MB175; X-Microsoft-Exchange-Diagnostics: 1; BY2PR03MB175; 3:4RgSslnEpShrgV+F+ShIiPy3vdBmewzeSkfpfIZH8gEOpyNBJ5A2ZJ4whijtWAqlSUI7MveIdQTynzLWe035ZdVuOxnzwngZ+F+hmHnStF7pN6rpLs8JBNofS3gouP28OVKMkl8jTZ2THl0AkU5K17YKaQ7AqUrBkoR21kl2Q5L7o9uyulMTebMdVvCzdjW9fUoCE+RkGCGYJ04ZE29HQV9qrO2xVKq3yqUMUKaXhY7r6YU4O5wNuOwR9r9ALx5Dzuim+tb75T7eREfecoDQtawU+mw64aVJTWHS61JrsmUOQByB4HFJFbiy7KFJxJ4KF1mjGbuWY5R7J24s/DGsnbhUe40+XfkxBZjaPu3biuhBdA5vjY5MB+mW2naXfArXCT99Tl/YSwROpfjwtSVqFU9qCAky0ZgJGlj8n52CQ475rswSND8YI6XJgDh8SSck; 25:dwzISXspmCjhvvJF+taGKBerNpm5TGLBUZSi/drjG2lStZFri6HVlVE+TecQCmfKb/5T5DjCJUPyYzfFwWT0/D7Gdh5P9yys4gxQGWdYYFN7fqFE7kbvNbiobZqInZAOckrRSQWpbjZazzEtRTnd4HwNvvAnjMu73MFfVNGud79sTKQI3r41lRvP4bAu8tuVevD6wSWU0SyGDtGCD79wlxh/yDkDfhD+BY7ZuzA57Co6z6yJL0FYp6ETUNDGgI7vUOZSPnJuI2T1MJ5FuKCXVOGaMvx6Ik2Hvoss1KhizubIDV56Wj3ENeVVwvJtgozuDGEcFgt/Ood0r5bHCrzRaadwATNi/bJ7/cVHB/Dk3QZ6Gn8F7VNxei5ucZrE5sg8EbSHrxOmaM+mP3ZZIeFffamwkdpShZWAExxIbMN5bNF+lVgIYqErvTSr6Cj1aLs6sxXAkDx3v2TEQvStYsCfDigENFKrgKX0ZI4ee0gPiPk= X-Microsoft-Exchange-Diagnostics: 1; BY2PR03MB175; 31:Vb4iu5RVStPel+ORU9AwFq8YUh1u/7kxkVg9muDB+UAUpQf4X5pTTni5GeEott6+fIbkIQoZF3E8WeBguVuacVrgAF0euceVvh6JNFh4rMuxdx9Q7qUqn+67KzRRGIqQpBrInOoX/A0J15MldYKnCTJpgk/uoveZ+fFg4IYsgPVrl6i3WZ0k4QzbBF8cZuSn80xyOZbMepxbOn4309N60TnD+qF6gnVHMAbI+nhIoaTVlfoo5wnnJb6A4WeELyVM X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197)(227817650892897)(275809806118684); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095135)(601004)(2401047)(13016025)(5005006)(13018025)(8121501046)(10201501046)(3002001)(93006095)(93001095)(6055026)(6096035)(20161123561025)(20161123559100)(201703131430075)(201703131433075)(201703131448075)(201703161259150)(201703151042153)(20161123556025)(20161123565025)(20161123563025); SRVR:BY2PR03MB175; BCL:0; PCL:0; RULEID:(400006); SRVR:BY2PR03MB175; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY2PR03MB175; 4:220aOIgMUMpgPJA+ezOCudZqxe8WYCOvW+w9z5G1m3W?= E17MNW4zlrtJIFn62wb8duN+inXuKSoSxZQoLdiEhu66lE292j3GWM8fgi6k8F8nsrf9DqnQ2YZjMGfryoho1yG9rtFzi4W5qkHswVOJs23UdG72SVL7I2OVkLg8yLO3lRbHBFwsLQ1Kx8glsM2+ISQPUTbvgGPMVw+9EpgfMeodKeitlZzGhExyEcSRBezv1p4JETjwsDKD541C5s1fi4B6pDCHzaPEQm/JZ+g45xX5o12QQHixKEpeDN089NhLAVTWsCYnknAdfBg93FVnkwc+fyAJAAjhrBkOpo/9gtZoAuOOcP1ZWinHdFgLSGshFGvIWmdsa6dNDz8B5A6d+bG4ISe5hBccC+GxVwU97EO6qfgsyJ1FBPZAmY/8mgOVuFmv+rHth2If6LZQuxQQJKBQUPYihgaDHML9NUCVdJc0a5Vl5rt0FA1EtEOMYY2GKGmvsnepYYYbtY6wQPukJ0UdutewXfvhZuNX4pMjq9CI0T+qZuv8x2/DHQ3SbHQlqrAYk0pOBBuX6u+N3Z63TUgGokbJOXRm7Wx7GUkOCHTsmZQZvH9GQnInDhVrB6IVK0SNYjskBl1D6dWqwxclm5og8tvFQaAADp8VBLWoC6pkpRFp2LCBCLKDova4S3VQtHqXAh/aThlEedqvQD2ND0G00sn1zOHCbaAHX/WLhJJNyrLTLrguWkWkNodAKtk5P8MCioTpXdkDRdCinv2lvpgb8M5nbFA/32luN0hKWSvG7IjkJx+GC1urh/bCJ2YQWmoFD4P2FpZhuQab3skGzQbXQEb5zMn2tQInDx78xDBGTfsh6FGyPebYmRmPCUC+xVH6Kkupe+0N72W5mWR7CP/e/KsNiR8xKfaSHoV46F0q5k7fu88vCWhUBx80phby/H3/PLbthbyGPi2LhBB3PD/CyiNeLndCPcRgJOY0gDA== X-Forefront-PRVS: 0320B28BE1 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY2PR03MB175; 23:vVBNz1WzTYcRK9OzqU4cX7UU1PuGDQibAquzFiJIo8?= uYv2dJ+e/t1DB9UIheveW2TNKgZYO4zz65uO79PN0gzUa3wyuK/eRFFIJSgWs6mKsUVzTCZls8eYw4/KOV9ZgKRz99IF5dywIyShXw86swMpQppzp3v0F880n1+L2mdlrKCd+7Z0LrK2A32SYeDC/R7deyMFvkhVO2Il8o7xoDpkFYCPvJPRC3r12cfERZUJYQj/3gYBkJUoe/H4rH97tVa0AWuDwVNqkxvtvbVRUkktJRBRbaVD7Mp63TA7jVc4mAEu+dD8JCx8LdI/7l3YUohAUIA0BJpeLFBDrHbu8whb/2GXARQUlG9zA6+HKQIZcnlpLpabtyfshsoJln4ouO9nZQkalrLJhyFs/QkAB4Nuq/nyZRNbw8weOnj+zMZJZbsqJTBjShr5NJi1r79Ie1d6vV8e1LJdObkiHBUGap+Mtc4rSgGny+Dk2sOF9Qe2kEuLFgBfkIkkIlutj5o8a9sI6JsMCqqbC67grO9zvpkBftqeeo8bPzkS/xX/PoYD1vQICmUsq4DBtGi+nEwHDy/3UKOeONZws57xfc7hYwHGbvK9sNxPxj7upeO/nUJ2/fjTB7kcAMuXZWXJuPlWs6Ge8PMy1I3NVbRGCwQL3/iSGacAjNU3g/lJoffgyUMNEwqHO1agihHUc5ZbeunREvRbBw2WUWrk8vhKX6YVHx9O2gU7WvDhjNfpCxpz7wkmKMt7astolq1t8S40fXUaYnl9DotIRTCaikgU9WgLhBDLEdHRf6waahP5aLhPmCy7NGFIrcR9LOMoWt8VQX+PBAysCSCEMhls8QOcN+BbV5UsZrH4GUM4QfTZRuPGSHYZr0Cya9Euau2aU5rKQUmyBtJfOTde0zdlh7RgGRfTU7Pyjw0RkBM/2z4qk889rceIuLJG8LPNunATGFiTbWC3recbhHJ6oCZem+/FiRHaPCmI3ORIi045OrrgzWb7c9sxbWyvKKl6f+/GIPUKmKI4W8OH9MegNbWx25LIecKPW0tuBJF5+6pFzpVfuTppwA9WrhuAL/JGTzdpbHP0oHTw+cDXJTvqnvmvArKRPSooSHrXFedRCpMgU2DIClIJ+m5DVSTXnRQY/pA1bmx6BE5cEx9LHh/01gbg0QP8BoMNJC96yET3RFC1WbRRiN0MsRrBXtiXQAhHrD8BCaAa4zdCQeBLKMPcZyfxOHaZnOKa7wfAxTd6ANo89meveq7pkr7E/8gLGduhrQijAuy27WaMBerGg52KfqIuPhFMpiUIruSf3bQpEPMCv9aSpquUGkonQ= X-Microsoft-Exchange-Diagnostics: 1; BY2PR03MB175; 6:QY9sjSyif9QtcN/9c5UxmZ+45WHadvmkmLcyAvSSRZ5KRE9e7JvWw0eVZ2WuWP4qrChmd8FzBUqJfIdRzxLl/zH1PgbsYY1MnA5DP4RNxgRYqyzPOamKlfW6/EHqbF0ptCHXcgjbSd0L3IhY8dOazJ2bFVYzfSxfGfe5mon1qItedepnPPW1lITdOeM4nv9BkbXk9INsBIwOObpRN3FO44l9gfA0FdgoNIN/bkPExwN/drTHK7iYobh9VHJlrNc9TtlvwlgjQN7q9njrgrBUKvk4QqtvZZyR3CGq4X89bUFYqjCpr4cVGG8dpeHRwGY+jpeu3AuGr7uxiu2wAzpulcHn0sJ/TB4reOYIi5XeOvo/ZSlM2TuHU9XhTlfGKuwnjshkE/38vIHWKDIZMUYC/AHl3+jmJb0fICXYAKCZDD+d40++OEKWLomnLknLtAYU1eEep4IKXFu4PBVPjQyAytaWVwPfuXeIBRrvtSkqtjQY9LmAmaQOk3syo3DpMPCZPoddaYKwXQvDXxvp4ACcXA==; 5:vHRU3pDlBERLBFqGux4FIYe5jgDwUidPiOxT3ZYnE4VrQwqY2whzhPvoMJt6tYxN2i5QImuehMqj9Jg8oO0PAX7TCsv9iNZMpbpnRbymKddRg7tlP1s6glQE9Tngr+96VOYjyutwglDX+W+Z1p8bXSjDESbGZsI/j9HC1cp+vtpvgwJrRTOFJNOfyE1RU95u; 24:woZR0Cp15E/8PjxmEzHJVmyO5ne333NIM1mTowqwHEpxyhB3L4gZ3uwgfBLEDV6JLjlhsX6D5+t6BuoL2LXX5IczJJWIX228TJns9A4/aD0= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR03MB175; 7:d7IEVnVHyjBROrlAsGoMW+en8vLIaNajpYU8/c1GjciGr0s28q1OCmDMmKIrJP1p7DLAU8hc1qpgW4tk33u6ypplML2cVKi/Y1MB+MLsiwcXzol7zuZVJBYxwuw6xZ+KVfnsju26zxmN2fvXqLAO9uXl/iSHnGWhHeYZ0MMrFN1GphEgB491rq+EDniOv03DbS+XK6ZqKI4tCXzasVI0ANdwaJHtvPfikQ7hxQofjouL6P27LF11rAa7C/Qbia10zJRRY0zsDPXCj1RD0eMODsCZ1Zw+7yNJQ3d5ZEvB8oZUgljcd/lWKsryB0kHwHTdNuSJ7XZI4sS3VtV+UpKBWw== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 May 2017 10:18:29.5379 (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: BY2PR03MB175 Subject: [dpdk-dev] [RFC Patch 18/39] bus/dpaa: integrate DPAA Bus with hardware blocks 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" Now that QBMAN (QMAN, BMAN) and FMAN drivers are available, this patch integrates the DPAA Bus driver for using the drivers for scanning devices and calling the PMD registered probe callbacks. Signed-off-by: Hemant Agrawal Signed-off-by: Shreyansh Jain --- drivers/bus/dpaa/dpaa_bus.c | 259 ++++++++++++++++++++++++++++++ drivers/bus/dpaa/rte_bus_dpaa_version.map | 39 +++++ drivers/bus/dpaa/rte_dpaa_bus.h | 6 + 3 files changed, 304 insertions(+) diff --git a/drivers/bus/dpaa/dpaa_bus.c b/drivers/bus/dpaa/dpaa_bus.c index e9eb093..f1e7d0d 100644 --- a/drivers/bus/dpaa/dpaa_bus.c +++ b/drivers/bus/dpaa/dpaa_bus.c @@ -64,9 +64,19 @@ #include #include +#include +#include +#include +#include +#include struct rte_dpaa_bus rte_dpaa_bus; +struct netcfg_info *dpaa_netcfg; +/* define a variable to hold the portal_key, once created.*/ +pthread_key_t dpaa_portal_key; + +RTE_DEFINE_PER_LCORE(bool, _dpaa_io); static inline void dpaa_add_to_device_list(struct rte_dpaa_device *dev) @@ -79,11 +89,226 @@ dpaa_remove_from_device_list(struct rte_dpaa_device *dev) { TAILQ_INSERT_TAIL(&rte_dpaa_bus.device_list, dev, next); } + +static int +dpaa_create_device_list(void) +{ + int dev_id; + struct rte_dpaa_device *dev; + struct fm_eth_port_cfg *cfg; + struct fman_if *fman_intf; + + for (dev_id = 0; dev_id < dpaa_netcfg->num_ethports; dev_id++) { + dev = rte_zmalloc(NULL, sizeof(struct rte_dpaa_device), + RTE_CACHE_LINE_SIZE); + if (!dev) + return -ENOMEM; + + cfg = &dpaa_netcfg->port_cfg[dev_id]; + fman_intf = cfg->fman_if; + + /* Device identifiers */ + dev->id.vendor_id = FSL_VENDOR_ID; + dev->id.class_id = FSL_DEVICE_ID; + dev->id.fman_id = fman_intf->fman_idx + 1; + dev->id.mac_id = fman_intf->mac_idx; + dev->id.dev_id = dev_id; + + /* Create device name */ + memset(dev->name, 0, RTE_ETH_NAME_MAX_LEN); + sprintf(dev->name, "fm%d-mac%d", (fman_intf->fman_idx + 1), + fman_intf->mac_idx); + + dpaa_add_to_device_list(dev); + } + + rte_dpaa_bus.device_count = dev_id; + + return 0; +} + +static void +dpaa_clean_device_list(void) +{ + struct rte_dpaa_device *dev = NULL; + struct rte_dpaa_device *tdev = NULL; + + TAILQ_FOREACH_SAFE(dev, &rte_dpaa_bus.device_list, next, tdev) { + TAILQ_REMOVE(&rte_dpaa_bus.device_list, dev, next); + rte_free(dev); + dev = NULL; + } +} + +/** XXX move this function into a separate file */ +static int +_dpaa_portal_init(void *arg) +{ + cpu_set_t cpuset; + pthread_t id; + uint32_t cpu = rte_lcore_id(); + int ret; + struct dpaa_portal *dpaa_io_portal; + + PMD_INIT_FUNC_TRACE(); + + if ((uint64_t)arg == 1 || cpu == LCORE_ID_ANY) + cpu = rte_get_master_lcore(); + /* if the core id is not supported */ + else + if (cpu >= RTE_MAX_LCORE) + return -1; + + /* Set CPU affinity for this thread */ + CPU_ZERO(&cpuset); + CPU_SET(cpu, &cpuset); + id = pthread_self(); + ret = pthread_setaffinity_np(id, sizeof(cpu_set_t), &cpuset); + if (ret) { + PMD_DRV_LOG(ERR, "pthread_setaffinity_np failed on " + "core :%d with ret: %d", cpu, ret); + return ret; + } + + /* Initialise bman thread portals */ + ret = bman_thread_init(); + if (ret) { + PMD_DRV_LOG(ERR, "bman_thread_init failed on " + "core %d with ret: %d", cpu, ret); + return ret; + } + + PMD_DRV_LOG(DEBUG, "BMAN thread initialized"); + + /* Initialise qman thread portals */ + ret = qman_thread_init(); + if (ret) { + PMD_DRV_LOG(ERR, "bman_thread_init failed on " + "core %d with ret: %d", cpu, ret); + bman_thread_finish(); + return ret; + } + + PMD_DRV_LOG(DEBUG, "QMAN thread initialized"); + + dpaa_io_portal = rte_malloc(NULL, sizeof(struct dpaa_portal), + RTE_CACHE_LINE_SIZE); + if (!dpaa_io_portal) { + PMD_DRV_LOG(ERR, "Unable to allocate memory"); + bman_thread_finish(); + qman_thread_finish(); + return -ENOMEM; + } + + dpaa_io_portal->qman_idx = qman_get_portal_index(); + dpaa_io_portal->bman_idx = bman_get_portal_index(); + dpaa_io_portal->tid = syscall(SYS_gettid); + + ret = pthread_setspecific(dpaa_portal_key, (void *)dpaa_io_portal); + if (ret) { + PMD_DRV_LOG(ERR, "pthread_setspecific failed on " + "core %d with ret: %d", cpu, ret); + dpaa_portal_finish(NULL); + + return ret; + } + + RTE_PER_LCORE(_dpaa_io) = true; + + PMD_DRV_LOG(DEBUG, "QMAN thread initialized"); + + return 0; +} + +/* + * rte_dpaa_portal_init - Wrapper over _dpaa_portal_init with thread level check + * XXX Complete this + */ +int +rte_dpaa_portal_init(void *arg) +{ + if (unlikely(!RTE_PER_LCORE(_dpaa_io))) + return _dpaa_portal_init(arg); + + return 0; +} + +void +dpaa_portal_finish(void *arg) +{ + struct dpaa_portal *dpaa_io_portal = (struct dpaa_portal *)arg; + + if (!dpaa_io_portal) { + PMD_DRV_LOG(DEBUG, "Portal already cleaned"); + return; + } + + bman_thread_finish(); + qman_thread_finish(); + + pthread_setspecific(dpaa_portal_key, NULL); + + rte_free(dpaa_io_portal); + dpaa_io_portal = NULL; + + RTE_PER_LCORE(_dpaa_io) = false; +} + static int rte_dpaa_bus_scan(void) { + int ret; + PMD_INIT_FUNC_TRACE(); + /* Load the device-tree driver */ + ret = of_init(); + if (ret) { + PMD_BUS_LOG(ERR, "of_init failed with ret: %d", ret); + return -1; + } + + /* Get the interface configurations from device-tree */ + dpaa_netcfg = netcfg_acquire(); + if (!dpaa_netcfg) { + PMD_BUS_LOG(ERR, "netcfg_acquire failed"); + return -EINVAL; + } + + if (!dpaa_netcfg->num_ethports) { + PMD_BUS_LOG(INFO, "no network interfaces available"); + /* This is not an error */ + return 0; + } + + PMD_BUS_LOG(DEBUG, "Bus: Address of netcfg=%p, Ethports=%d", + dpaa_netcfg, dpaa_netcfg->num_ethports); + +#ifdef RTE_LIBRTE_DPAA_DEBUG_DRIVER + dump_netcfg(dpaa_netcfg); +#endif + + PMD_BUS_LOG(DEBUG, "Number of devices = %d\n", + dpaa_netcfg->num_ethports); + ret = dpaa_create_device_list(); + if (ret) { + PMD_BUS_LOG(ERR, "Unable to create device list. (%d)", ret); + return ret; + } + + /* create the key, supplying a function that'll be invoked + * when a portal affined thread will be deleted. + */ + ret = pthread_key_create(&dpaa_portal_key, dpaa_portal_finish); + if (ret) { + PMD_BUS_LOG(DEBUG, "Unable to create pthread key. (%d)", ret); + dpaa_clean_device_list(); + return ret; + } + + PMD_BUS_LOG(DEBUG, "dpaa_portal_key=%u, ret=%d\n", + (unsigned int)dpaa_portal_key, ret); + return 0; } @@ -120,6 +345,7 @@ rte_dpaa_device_match(struct rte_dpaa_driver *drv __rte_unused, struct rte_dpaa_device *dev __rte_unused) { int ret = -1; + char *dev_name = NULL; PMD_INIT_FUNC_TRACE(); @@ -128,6 +354,39 @@ rte_dpaa_device_match(struct rte_dpaa_driver *drv __rte_unused, return ret; } + /* For identifying DPAA devices, + * 1. name starts with fman- + * 2. FSL_VENDOR_ID and FSL_DEVICE_ID are specified + */ + PMD_DRV_LOG(DEBUG, "vendor=%d, class=%d, name=%s\n", + dev->id.vendor_id, dev->id.class_id, dev->name); + if ((dev->id.vendor_id == FSL_VENDOR_ID) && + (dev->id.class_id == FSL_DEVICE_ID)) { + /* Generate name */ + dev_name = rte_zmalloc(NULL, RTE_ETH_NAME_MAX_LEN, 0); + if (!dev_name) { + ret = -ENOMEM; + goto err_out; + } + + sprintf(dev_name, "fm%d-mac%d", + dev->id.fman_id, dev->id.mac_id); + + /* Verify the naming pattern */ + ret = strncmp(dev->name, dev_name, strlen(dev_name)); + if (ret) { + PMD_DRV_LOG(DEBUG, "(%s) not DPAA device", dev->name); + ret = -1; + goto err_out; + } else { + PMD_DRV_LOG(DEBUG, "DPAA Device (%s)", dev->name); + } + } + +err_out: + if (dev_name) + rte_free(dev_name); + return ret; } diff --git a/drivers/bus/dpaa/rte_bus_dpaa_version.map b/drivers/bus/dpaa/rte_bus_dpaa_version.map index 8c1ea65..3d4dc88 100644 --- a/drivers/bus/dpaa/rte_bus_dpaa_version.map +++ b/drivers/bus/dpaa/rte_bus_dpaa_version.map @@ -1,7 +1,46 @@ DPDK_17.08 { global: + bman_acquire; + bman_free_pool; + bman_get_params; + bman_new_pool; + bman_release; + dpaa_netcfg; + fman_ccsr_map_fd; + fman_dealloc_bufs_mask_hi; + fman_dealloc_bufs_mask_lo; + fman_if_disable_rx; + fman_if_enable_rx; + fman_if_discard_rx_errors; + fman_if_get_fc_threshold; + fman_if_get_fc_quanta; + fman_if_promiscuous_disable; + fman_if_promiscuous_enable; + fman_if_reset_mcast_filter_table; + fman_if_set_bp; + fman_if_set_fc_threshold; + fman_if_set_fc_quanta; + fman_if_set_fdoff; + fman_if_set_ic_params; + fman_if_set_maxfrm; + fman_if_set_mcast_filter_table; + fman_if_stats_get; + fman_if_stats_reset; + fm_mac_add_exact_match_mac_addr; + fm_mac_rem_exact_match_mac_addr; + netcfg_acquire; + netcfg_release; + qman_create_fq; + qman_dequeue; + qman_dqrr_consume; + qman_enqueue_multi; + qman_init_fq; + qman_set_vdq; + qman_reserve_fqid_range; rte_dpaa_driver_register; rte_dpaa_driver_unregister; + rte_dpaa_mem_ptov; + rte_dpaa_portal_init; }; diff --git a/drivers/bus/dpaa/rte_dpaa_bus.h b/drivers/bus/dpaa/rte_dpaa_bus.h index 1636dbd..be25894 100644 --- a/drivers/bus/dpaa/rte_dpaa_bus.h +++ b/drivers/bus/dpaa/rte_dpaa_bus.h @@ -36,6 +36,12 @@ #include #include +#include +#include +#include +#include +#include + #define FSL_CLASS_ID 0 #define FSL_VENDOR_ID 0x1957 #define FSL_DEVICE_ID 0x410 /* custom */