From patchwork Fri Mar 3 17:27:47 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerin Jacob X-Patchwork-Id: 21363 X-Patchwork-Delegate: jerinj@marvell.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 5762BF966; Fri, 3 Mar 2017 18:29:23 +0100 (CET) Received: from NAM01-SN1-obe.outbound.protection.outlook.com (mail-sn1nam01on0087.outbound.protection.outlook.com [104.47.32.87]) by dpdk.org (Postfix) with ESMTP id 31203F951 for ; Fri, 3 Mar 2017 18:29:16 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=5j+weyl35+fgAE8UYwVgHnLO86yrGYveTRJ1YYrDWH0=; b=kukVoiMAprpKjPm6YK9l3WbBd7PoaCaNJZdRWjOrBRGwP0+94RU/pWpW9qGsfLZ/zBxdcmFYCO7eeVkvjDNECLL5iphoTcl9tbRyenMiNCShEOiY5KGwQBbKAqsVTyWO7pplBUstsPXvPVUK16iZ44U8TXL1ZYAUDoOBG1S2k5M= Authentication-Results: dpdk.org; dkim=none (message not signed) header.d=none;dpdk.org; dmarc=none action=none header.from=caviumnetworks.com; Received: from localhost.localdomain.localdomain (14.140.2.178) by BN3PR0701MB1719.namprd07.prod.outlook.com (10.163.39.18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.933.12; Fri, 3 Mar 2017 17:29:11 +0000 From: Jerin Jacob To: dev@dpdk.org Cc: thomas.monjalon@6wind.com, bruce.richardson@intel.com, harry.van.haaren@intel.com, hemant.agrawal@nxp.com, gage.eads@intel.com, nipun.gupta@nxp.com, santosh.shukla@caviumnetworks.com, Jerin Jacob Date: Fri, 3 Mar 2017 22:57:47 +0530 Message-Id: <1488562101-6658-6-git-send-email-jerin.jacob@caviumnetworks.com> X-Mailer: git-send-email 2.5.5 In-Reply-To: <1488562101-6658-1-git-send-email-jerin.jacob@caviumnetworks.com> References: <1488562101-6658-1-git-send-email-jerin.jacob@caviumnetworks.com> MIME-Version: 1.0 X-Originating-IP: [14.140.2.178] X-ClientProxiedBy: BMXPR01CA0021.INDPRD01.PROD.OUTLOOK.COM (10.174.214.159) To BN3PR0701MB1719.namprd07.prod.outlook.com (10.163.39.18) X-MS-Office365-Filtering-Correlation-Id: c8323194-2c77-42f1-42df-08d4625ad033 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:BN3PR0701MB1719; X-Microsoft-Exchange-Diagnostics: 1; BN3PR0701MB1719; 3:vyDAwnMcbW8IPUerMMGcqvYtRNyrt0uCpkUp/YuBa1lcxGBCjN8KSmgb5PYhS2opLcU4oV2/h5uAGy3/kpVHNr1gnYji7cO/XO4q+QEV8mjAMO2yggdaHGetkapwiJato7Pv/B1sNBBYLG3IUk71VRvj5Fgx7tZnAFD80025M9AZqqRSWySmFqI1d13mT9CsY8KqUgQxQMEJBb3DTyjYY+HI7959ioubBnl8oUfLpmMpQ1uAH/7n7Urg9uFs6bxNIoe4t1Dh5Xu+r7Edgp9QeQ==; 25:aPaS6/NBQU8F1e5u59XXIomJAxFBxGh9F3U58kWPfAA+ugD9ji0uVqZi8piBFZXJ9zHnuaPpROanIu8T3IOqbC1GV/cLSIrqZ3fer2xlDSoQ+4V/M7wW9vJ8nlCofbLPaWWQdgBdJoi45hPejreB9TyRZA9kXHpWg+de8TIRW5c0gooXYS4+AzTosRJUQv0PcMbqW5896kNq+DqO2ce2ZsFzWWxkjxStNLl5rkaqBPxvccHLb4+JBHackmHTS9xibTAelUqpdqUXWcubDOaOswGj1gVLX4X1t+alZAktCvlYCu7gPbplPHdky4iAdVAqaUfBnCU8+qjk3NOKwkp64abp9mpKkdEXqTLNFDDeMteKVV6FlAoyyUMaxl1B6+dHgoAcw9JdZqpSha8jNRsSzLUBG9CcNR6I0ugh5xme60LiGEFKI7Ot1gjkZvCt0BObzizpVaq4YSMR3oIEcTRB1A== X-Microsoft-Exchange-Diagnostics: 1; BN3PR0701MB1719; 31:pbxAw1FMgrJdyiOGgfdbq6cc8+ExMiJYghIp8uCFPXX0uMChZelaF2OeLnxvn4H8BS7GZf+0M30NkEqwJn0PxMOv5JZegTFyEhuqq52BtM/5Pj6JXQvLM7vkChkP+MvU3Zr+zxRSkeFV3N6d2+sfe0uRm4m7YsRfcDI58i/aYB5oG0FrSS//XbayG3Bvx3h43A0dPpYPMwJI1tFxQg66oN7FIQZcHaLjDEJNPSCzxbVnjAnDVw8EohcpzXyh8rbz; 20:1o500+nAU3JlLHhRzcGEr1YBZjfkZz6lkqgI+5VqnWqUNc3Rnd1mg7bMRc3tuX7WaNv9B71vwwBKqrhELp7A5bkzj7IxTlqqrhmO1/u1lVwmSdVO3sJWXxwQP9L29/lWy1EjhYIKGJDNfuxtpUncL900EVqfHRzb+Mp51sQCNNdc8Hl4SMlFY/lNfINIvndsFAM5woVhO+8t/lJCEQt94lIHCDH3JTRsC56HfH1B8Cmdt9y1/SUub/NoENVF3fd5Fv76yw0W5C5RmRYpgU0UGtlLDz0cDTd+vprH7KUSyUyOXx08DOicjdbiSS2KvE/iuoycSzYJc+O88LiWBERnxj4uc0BElyNdyK+9fdSIba/Xc26n9hEHrXm+fyGHkVyehyaSm/jx8OvpZNThYq2AclMjDkRst19n0N2yV38nbg6qoA/HpjVQGh94TmtxAlapVANr+iIYQfJnn3bxkJCs9ZqwiwsY8lHtb/8N5qEyZ1RFxfhTdAchae+ik2PknPjCLm5u7nYU/PJC5kD1KUYtODvnKMJ19K2PEsYeHDJTeoQnkqAHo4oHn/fNlcaso6/7KBPoS82E4/FPsL50UGI953o/c08kr/lEyZg8a45yezQ= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6041248)(20161123555025)(20161123560025)(20161123562025)(20161123558025)(20161123564025)(6072148); SRVR:BN3PR0701MB1719; BCL:0; PCL:0; RULEID:; SRVR:BN3PR0701MB1719; X-Microsoft-Exchange-Diagnostics: 1; BN3PR0701MB1719; 4:W84f1v6eAooveh1hwteLwOpKNJDerRdW5l0uqEqui55TC54IkppdFDJj7kZVpLFnUEgLOk9odiBUpCCPP71SmOlLgzoJfo3AHU+SLVahuJjRu0gpKu09KN3m6LkJ1CpPTzF+4w3b782gid7a6M4DV9VqRRj6ShftdSZJPmJgI9oAEhLS2lfcvLs/IHwnzmh5qD8AZYlLN9okbFFUi86038RuiJXrzoFbrET0v1p37Dr5bPuwtYnri14Ij1Q5ozYI2H1I2j2ZosEtQeYZMuq+LlV0LiGQnEmmV6JWLpvmfQhzn9GwZ5sv1Hc3R5HnMLto3m6ktSY7ADARQDj4wOBhwlGDteUrP21sPL2sngVz3STh44Gy2lMCP3k523OFSGngVPSKiwbTtqPMGJMGoH8BRLyy0LKQRGh7SrE3fN/bkQSlfPuJqz/Ri1lRmX0nKhUxkSxZwHPKV4h9r7e4s7sbDIveQ5DogpSvHN3K2hEMXk1jP9hXeqT+ohWWwxgEeGGsXJJUEdHrGsAgBkx5Bzh8/mVHskUsqPKRYr5AWbyHuKNbGAFQ3MIbROCOUtJO3Io+vUkBBvEhwhMxAlbaXjTJ8ZkwFuD2ArPPVDu4pVH4QLs= X-Forefront-PRVS: 0235CBE7D0 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6069001)(6009001)(7916002)(39450400003)(3846002)(50986999)(6116002)(36756003)(81166006)(6512007)(97736004)(2361001)(2351001)(6506006)(575784001)(5660300001)(42186005)(50226002)(8676002)(6666003)(106356001)(8656002)(2950100002)(2906002)(25786008)(47776003)(6486002)(76176999)(33646002)(7736002)(107886003)(42882006)(66066001)(110136004)(4326008)(38730400002)(6916009)(305945005)(48376002)(92566002)(5009440100003)(5003940100001)(50466002)(189998001)(53936002)(7099028)(110426004); DIR:OUT; SFP:1101; SCL:1; SRVR:BN3PR0701MB1719; H:localhost.localdomain.localdomain; FPR:; SPF:None; MLV:nov; PTR:InfoNoRecords; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN3PR0701MB1719; 23:9flUTjpCmm7EN4AUXBICVPETT6kDjZ4ufa6swhV?= Y5cdxiSLU0HLiJb87Wp7ZZG7A2akYbNaQbnCMH0EJO0akdQnYKmujG3lAHubaz59tm4RA4UMkgFPc9laeR66IVal/f85c0EHf/MR7JJXkbJLRyNITpRpq8a9XSt9XQM+jFFa/CXGaG4rHtE8wLtdyAU/g3f4bihlpcPQe5rTrgQczv6HzOg3s8UePKHeFv3yN2AVBdigvfdJLRA9EahfY3mKlqe3Uf0w8X9PwiAShoDwEJ35y8BPOpjQRMsSnjrl8DXWlbub1Kdqlz6iJ29BO/VeNqNd/F2hGv0D8YXXP9Ca7Nk6QCAb8+nYniD+nnUz9qY4HU9feYAmmCtkQp33e13qZddBJZXbsGLZp9lF70BHue2CMVFvqhAM0EJSECkGy45pGFXUnBYQyKbSLOXZpeUVzNgDz8iXhgJwW3keqQS6c77QnEfIav+nkRmCh6MsmEWQDSHG6jIjDunWRPevk5Rted7JGGO6b9M7yjnQ3HUb6YJoTFrDe89HkyRVXcn76C/GFQ8Undjt8UhsXoU6kg8yWcpxojJCX1XFgbhvXKoC9ir2tnqwzvRiox20/Eukv59pYD2L8mo1NgPt5ElWpoSFtj3cQw6PLj+jYJzGpR1mlqlZkjT6Px+6mGeEQDiROFDiZS+7D/MD/ImirZ5ZqvNy1sm68dGnbL5qIKR4yNDJy6PmuVybczWDTIh3vvVWFMKM1vfWmehaWDIqbqXA3pJJdjfMAVNm5/mQvsnoKSDOASfoVRR7HPUQEwIKCF1Wqt+xFOzaHuh1q0QeK+kD+DJy1xF++4rTAZCVTZVgOW3RzbfPRbPbY1T64SzITdvDQf1rD/sY76q34v3sI1d6XVPuyDvSieZ6bO9DRsATgcWv+nKfCNhUhxxiJTT5fOqI1HtBPCdQTcHKWYRCM6Q6HnUA+3IFQkZK9dYITaI5EAO9yhGOJlqF2Cgu2+xF65D5e5IMgmlMpTYsCt3WiEdZ1406r8NWFyxbZGNWZZGhUT7SzMjMp9zJA+bdmZ9kUaIMWO1fvUutyk9X5i1/JfUCbsIQzjyqCMvgHHTZu+WBdOqwy+7VAFyz/PL9zrSun4blhIrBWQD0ifapR9h51varG6HOMCGfe+j1hkT27v9fxHEz0MOHtItq3CwVSe5Kcc/hs/qM= X-Microsoft-Exchange-Diagnostics: 1; BN3PR0701MB1719; 6:aqkyTwKNy4N10oVHpiUWMOYvW0nJKDPQZlXr6TUxd8aUWax+UMtgolEQJV59SPRLjLi39YRUVad0bT3VGTjIvOh8Ft1WDUXUt2BjRK9hQ6crE1AxAf+RqA2F7u5UrwrHYPJlYoLYHIIMhCIVZIWcikQgrzoNr3GSR3D1JX4cK/dIwPf/yCmHn7D/5iIuOOJ6+oy45QWmfknbcqd16tq3zgd3uFTXLiaNucg5ek64KMTXB5GOLURfUpGb9yh9DId/s4qqzqcxgSEd703g6j0JOwQuDysBLAwXQxcdO/4m6vTfz6Lzp1K2+KXMV8wfdjSxH0gY5smkkVzr8nNd/O+EvpvoXn6ZvF4trM709kcLHoPGs+9QWU4PvPxTZeOVySd3uRBM/rhXdo+n/VMegoq4NQ==; 5:85y6TEcujgFTje6ZyTfp2rABss5IzIPux6Ybm8QRZmY37W6Z6HJ+YWvPgq/RiY0MxwEIyj/Xlm2I8IOW0Dh3s1T1r9rqoF44sIYfS6l2/ezDFlvGxS/bgv0Vv1qoPNgAZytg7E7TuMXUsNFv6uOxPg==; 24:MBbM8KKKJgnlUaj/gMzoHNs4P/igUB4FdtV+18z07nxD5vVEXuv6JMuBQoVbUW4L3tZZPRMj9esYFRcWfR98XB3u8d82AyPLixqN78ZGaGc= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN3PR0701MB1719; 7:BgNkAr1gjJpMhhtxaShqTOGNj0dLWWd6f3FgnnQwegqDC15758WTPx5QpiRSE5eaZcmmCXJ2mp1fA5Xna/jpQ2PbkgX5mA3zM5Eu2tutu5e+DUpsRMyKWgB1pIM/YC3o58bdfm6Mej14+dQ/abODtG4379kn79jjoJG+yJAfOH6ShW+IWN1EvVdIxTj5Yu977RRdM3fQsYDzFgGcUaDIlfTF8EzYmtKrP4p7q3BZjklPqhBwEsaJCui4d6aRrD3oefIar2jXuI7gVBmGQ7qpF5XQRqGcX3YT7IXCyLdwoSL2sq0daP35+l0iW+G/YGm/lfKMhCQTyjo8rEL4GiauQw== X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Mar 2017 17:29:11.0993 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN3PR0701MB1719 Subject: [dpdk-dev] [PATCH 05/39] event/octeontx: probe ssovf pcie devices 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" An event device consists of event queues and event ports. On Octeontx HW, each event queues(sso group/ssovf) and event ports(sso hws/ssowvf) are enumerated as separate SRIOV VF PCIe device.In order to expose as an event device, On PCIe probe, the driver stores the information associated with the PCIe device and later with vdev infrastructure creates event device with earlier probed PCIe VF devices. Signed-off-by: Jerin Jacob Signed-off-by: Santosh Shukla Acked-by: Gage Eads +#include #define EVENTDEV_NAME_OCTEONTX_PMD event_octeontx @@ -54,4 +55,27 @@ RTE_LOG(ERR, EVENTDEV, "[%s] %s() " fmt "\n", \ RTE_STR(EVENTDEV_NAME_OCTEONTX_PMD), __func__, ## args) +#define PCI_VENDOR_ID_CAVIUM 0x177D +#define PCI_DEVICE_ID_OCTEONTX_SSOGRP_VF 0xA04B + +#define SSO_MAX_VHGRP (64) + +/* SSO VF register offsets */ +#define SSO_VHGRP_QCTL (0x010ULL) +#define SSO_VHGRP_INT (0x100ULL) +#define SSO_VHGRP_INT_W1S (0x108ULL) +#define SSO_VHGRP_INT_ENA_W1S (0x110ULL) +#define SSO_VHGRP_INT_ENA_W1C (0x118ULL) +#define SSO_VHGRP_INT_THR (0x140ULL) +#define SSO_VHGRP_INT_CNT (0x180ULL) +#define SSO_VHGRP_XAQ_CNT (0x1B0ULL) +#define SSO_VHGRP_AQ_CNT (0x1C0ULL) +#define SSO_VHGRP_AQ_THR (0x1E0ULL) +#define SSO_VHGRP_PF_MBOX(x) (0x200ULL | ((x) << 3)) + +/* BAR2 */ +#define SSO_VHGRP_OP_ADD_WORK0 (0x00ULL) +#define SSO_VHGRP_OP_ADD_WORK1 (0x08ULL) + + #endif /* __SSOVF_EVDEV_H__ */ diff --git a/drivers/event/octeontx/ssovf_probe.c b/drivers/event/octeontx/ssovf_probe.c index 9412878..713329c 100644 --- a/drivers/event/octeontx/ssovf_probe.c +++ b/drivers/event/octeontx/ssovf_probe.c @@ -30,3 +30,89 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include +#include +#include +#include +#include + +#include "ssovf_evdev.h" + +struct ssovf_res { + uint16_t domain; + uint16_t vfid; + void *bar0; + void *bar2; +}; + +struct ssodev { + uint8_t total_ssovfs; + struct ssovf_res grp[SSO_MAX_VHGRP]; +}; +static struct ssodev sdev; + +/* SSOVF pcie device aka event queue probe */ + +static int +ssovf_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) +{ + uint64_t val; + uint16_t vfid; + uint8_t *idreg; + struct ssovf_res *res; + + RTE_SET_USED(pci_drv); + + /* For secondary processes, the primary has done all the work */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return 0; + + if (pci_dev->mem_resource[0].addr == NULL || + pci_dev->mem_resource[2].addr == NULL) { + ssovf_log_err("Empty bars %p %p", + pci_dev->mem_resource[0].addr, + pci_dev->mem_resource[2].addr); + return -ENODEV; + } + idreg = pci_dev->mem_resource[0].addr; + idreg += SSO_VHGRP_AQ_THR; + val = rte_read64(idreg); + + /* Write back the default value of aq_thr */ + rte_write64((1ULL << 33) - 1, idreg); + vfid = (val >> 16) & 0xffff; + if (vfid >= SSO_MAX_VHGRP) { + ssovf_log_err("Invalid vfid (%d/%d)", vfid, SSO_MAX_VHGRP); + return -EINVAL; + } + + res = &sdev.grp[vfid]; + res->vfid = vfid; + res->bar0 = pci_dev->mem_resource[0].addr; + res->bar2 = pci_dev->mem_resource[2].addr; + res->domain = val & 0xffff; + + sdev.total_ssovfs++; + rte_wmb(); + ssovf_log_dbg("Domain=%d group=%d total_ssovfs=%d", res->domain, + res->vfid, sdev.total_ssovfs); + return 0; +} + +static const struct rte_pci_id pci_ssovf_map[] = { + { + RTE_PCI_DEVICE(PCI_VENDOR_ID_CAVIUM, + PCI_DEVICE_ID_OCTEONTX_SSOGRP_VF) + }, + { + .vendor_id = 0, + }, +}; + +static struct rte_pci_driver pci_ssovf = { + .id_table = pci_ssovf_map, + .drv_flags = RTE_PCI_DRV_NEED_MAPPING, + .probe = ssovf_probe, +}; + +RTE_PMD_REGISTER_PCI(octeontx_ssovf, pci_ssovf);