From patchwork Sun Oct 8 12:40:04 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Santosh Shukla X-Patchwork-Id: 29886 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 600211B18C; Sun, 8 Oct 2017 14:41:07 +0200 (CEST) Received: from NAM03-CO1-obe.outbound.protection.outlook.com (mail-co1nam03on0062.outbound.protection.outlook.com [104.47.40.62]) by dpdk.org (Postfix) with ESMTP id 8AC121B1A0 for ; Sun, 8 Oct 2017 14:41:05 +0200 (CEST) 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=Gmbx6nlUwYbzrE8GqmilV6Eg8ZipBLN5G1gRR5ECe0c=; b=VWUayeus2PwI9XBGDNkBFcWifOEf/ClOFkz1t4Y3B18m+ShLfw9oPUJd/HLDyNx67R9VMPdvnw903/Czzy65062pdi4T1G3z93AuzU6dqq9LDbcVvOJcwn5MS+BBES3CFd2eR/miQVOTVemMWmMoED0s86eBop+GiIp+Y47C7tU= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Santosh.Shukla@cavium.com; Received: from localhost.localdomain (14.140.2.178) by MWHPR07MB3103.namprd07.prod.outlook.com (10.172.95.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.77.7; Sun, 8 Oct 2017 12:41:00 +0000 From: Santosh Shukla To: olivier.matz@6wind.com, dev@dpdk.org Cc: thomas@monjalon.net, jerin.jacob@caviumnetworks.com, hemant.agrawal@nxp.com, Santosh Shukla Date: Sun, 8 Oct 2017 18:10:04 +0530 Message-Id: <20171008124011.1577-4-santosh.shukla@caviumnetworks.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20171008124011.1577-1-santosh.shukla@caviumnetworks.com> References: <20170831063719.19273-1-santosh.shukla@caviumnetworks.com> <20171008124011.1577-1-santosh.shukla@caviumnetworks.com> MIME-Version: 1.0 X-Originating-IP: [14.140.2.178] X-ClientProxiedBy: BMXPR01CA0045.INDPRD01.PROD.OUTLOOK.COM (10.174.214.31) To MWHPR07MB3103.namprd07.prod.outlook.com (10.172.95.9) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9a90b97c-4a43-4718-9af2-08d50e49d632 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(2017030254152)(2017052603199)(201703131423075)(201703031133081)(201702281549075); SRVR:MWHPR07MB3103; X-Microsoft-Exchange-Diagnostics: 1; MWHPR07MB3103; 3:9/GVA69RWwDJlYAWYi0FXD2AYTSw5WgaAmK6QCsdlW+I720QfQL5kT1MteDjSrpf5cq/uau1L89cePvInWcF6cyI+sPUfnePc8Sr6X0xbs7UuyKyo7mZUcMYYlm6LmcGX3wdl3gOKfDJFw2oVqH+W3NnuNQ5aD6U3zb8RTg9vhryeUnpPHZl7PB0Jyl2wzMlOLQQSFwRsEOu4TgRpVf6g3JJmrCV30fRneU1FuOPL4krRhv3gVlVBbJ+C2vheFld; 25:SoUOGagIPhwipKbShU/aOsiOv12TTZc3dxQ/Pv0q0tn6siz83oWfKFf+iCvn9tiosMZbkzcX3Gmcdou9yrpoEp6xN41D7JfTlpGDKo77JyGXTCHoSG0sKQZAviZ2g/K/D8fVB1Kfr5u+6cWsTGGazL0BDsA/+JnepfvVlVBylOIltaS0Mm/B7obwassJhOOfWe6/31xVmv8/R+pwW2MUH3aT2NEbWl5Wnv68tco+y5Q4s5FJ9pULiQ+IIBVrpZVEjgnYpw4Pv2/EMNrF2bfouxekK2lMhwCBmQuQLOyjtsIzdnvwQrhV534LshGbzLglCiMU497li73O7g7+sZtMJA==; 31:+RwTopl4+CF0Y2StZbSUu+GVCYsdU7sYnpBe0FNRoctI6CyCnvIuRLT7/UFlXsweKGTDIUcjy0RaxHalAVzUsOOoZ0dtHZiyeHVixZ5Dt0w2Cb68oTzV3BsopdTe/jp45w8sOolmUuJkL5tyLZL9IHlnJlCs2ObVuDeLxwRL0/p2mhbQ7KIvk/eVCBs/rc6vInCCjdQHRSPwqGfNzJuEqjGHjrr/eHLKZSghLa1vm6s= X-MS-TrafficTypeDiagnostic: MWHPR07MB3103: X-Microsoft-Exchange-Diagnostics: 1; MWHPR07MB3103; 20:C1ZARIMLNhzH7MzI00SBpPyH6IJv2MfsQ0gqkbiOdFJplawcQ3y5+pTiN8Emj77K2UL7hSW1K5jUE57aHaLjeT1Y0ni1W8BULxH6OCfzcYryJMAh//FHYO/DC2wKxf1usJaKxxy+OFL0xZjFvyw2xrx+VZQCEucbYIlh3s+OwM3wavXCYQGZzmjewDNCjymZ1WmYvxYtMUpuOZTj/GcnbZK41bnsfGKoOAezRTXiIVIvpNO6tT9POygUQI0x8hT7t/Ez7MMyJEPbnThL0sCnwm5Ifp0Cwvx9Z/xImicU4uoV770HDNP6dBuKnlNT8hbxZjCh6Kh42zJ/o45i4lF4tpcCYlHCRRyA32un252xBIwH4VzPfQuJZ+uCY1xGndwtgqvCYPz7wU6d6E8KQemIrIOImL5/Ipg83lXHyWG+HneAkx/IYUQDhEKKzuhItV7rjTrw4O9Fs5ZiEb8Czz2jUHFfI7yvg2Qnyul0kvjhsoKuGX/kbpzJK5XWKkAnikELskhIM+DDQvbgFNBRK3tNiSqZsziAUPPy6HsM7OP7tCiqjEkP7Fn//HxTOC2dTdElIk+ozcVclMaCYmn6YEXrISYo84gnqZxGWv0hTJ1dMI4=; 4:4850aS/z7BpIfB4DhDkuGDGIgkM+B6XYrkdp7Vl95QEcc1cAUAp1+ryQXDkHysQ53KsWHVEDcw6+NSlHosNxJtdnRTldcU7twJDlImcig3WdJqLVMOSDDjWAyn88Tchqxr2odnJg9iLKdD57+bgAEDxuSaULIV7A6lGv5uU1MhdH1MpHWWZDCvVslX4jw7Cb9aIszFy+e1YGRK5V644NPCsxFb6QZ5JdKk5uMzmtncEkx1mwUnoDEjcXrwqYLiya X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(5005006)(8121501046)(3002001)(100000703101)(100105400095)(93006095)(10201501046)(6041248)(20161123562025)(20161123560025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123564025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:MWHPR07MB3103; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:MWHPR07MB3103; X-Forefront-PRVS: 0454444834 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(6069001)(376002)(346002)(189002)(199003)(3846002)(16526018)(1076002)(6512007)(2950100002)(33646002)(478600001)(97736004)(107886003)(50466002)(25786009)(106356001)(8936002)(48376002)(36756003)(4326008)(5660300001)(50226002)(105586002)(305945005)(5009440100003)(16586007)(189998001)(72206003)(66066001)(76176999)(81156014)(6486002)(5003940100001)(8656003)(68736007)(47776003)(316002)(53936002)(7736002)(81166006)(50986999)(2906002)(42882006)(6116002)(8676002)(101416001)(6506006)(110426004); DIR:OUT; SFP:1101; SCL:1; SRVR:MWHPR07MB3103; H:localhost.localdomain; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; MWHPR07MB3103; 23:Si8xTWmN8bcHiqFmw/VU4ACdn0pdrzeagc/1pnjKP?= zwcKCcjSccwn0ikiw7dcfoEP9C297LZVdF8mGYXzFMjeINMYQvtjfa0rnDWMrnrk1uC9eBeK0IPFRe0hozf/kdY/m+xZ46ArsU+nVmrqltYxA7d+cFSf7iggYViYO+yRIPvPFH0ps/YWAV6hsgSLm086QlVZyfoxNfKzjINhV953Go3aFLX2b7y5bEtzOkgKDcAIlyy7JQTF15zW76vn2H7a7jKyqXzhfYaYH4siW44lyaNbh2GZ1Ehj81GxcEZXN6+asF7r8GvpxfG9gtvmv3/oXGREvUj+W5jKP3IbQd+jvBbGOmK2X4+hMvqYbkdn/u0CIBNExNzYV92CJMWRBQRMc2MLW2O3zfH+q0+vR1sxO9Hn/Ou4C0bwSSzxzwKRwPYX3zG+0pPYgEp0F7b56KzDNIE/tFi73/p7U+L7ZlS8xlpcn6CFe2ju4YBhbbcQro/8Y2gkOFlF/c8GpxLMsWMFwliwkI2MayEtl6w7PseDnY2gZ817SGRbD2HML2zJdEidJ1Az+PmqUhoTR96JI9gMloYowtX5eBgBSROJpPzJ3a23rEbwH30DxoYn44670AfJluZ3PEwFC2MFKgr/WQ02PnTA8TaSdtDnGPIbCw89kNkKzxiTNCYWElIGppA2O13INlSzwhZT5nbEI/FCYkGIGyh4RW9KfwlnWjm7JD2mtlKz/UiOzTAdxqdeJHUQ9xew7ugIubjYvBjuER0jrUMw6eYAO7XstXsNZaamzAU7B8Io2Gl6JmKkM2jpW5iPjAB/eMEiiyNE8HKKJa0Kn2bO3z/Hka0KCnVDcblxtEFo5O92KfgRvCaladWuMCom3XQF0uF3/EOjRTOtaEuXChNffL2ZU0nGi3U/xDbIwIGyb9frGa8zTv3E8MUv+Z7h9CrVtm1JYq7Ecn0iudks/fUd5ngs0GMYvIpZgBhUiTos/ogJZ0keoFAR6oL4d3V+F8uahv36NGJpkK+7S3cLNy2OPb0rszg+Uu3Oos4K08xL9H3lOazdrn9pPDwVMqhzniFPYXwuBpLeoGs3TA3XNgBJq1SWGlFvY4w/craCyAW44Y83CbtoVnNYRIO+D84QWc+YUUQU7vHFte9VZkJq9rRGzkRG8t/ix6tcnFfu9FMD/ZAj1P4aE2Qh366gbGwH9w= X-Microsoft-Exchange-Diagnostics: 1; MWHPR07MB3103; 6:35cxWF/emnFA9TRD6nwXPnkxj1iv57ePwPdA9Y5yY7jeCoaruhI+7xV7RmOXU0G1EWDuYo8ZYGMbbgFvVha+mmLSy63W0PCv74s+mta3ndT9Xi5Mq3EDpovS06xnGdXKmz41ZTdw9GBflhWmJMqrHijRfJGb4H0slTg6X2Y8LW/s+z/2QsinNBlkqHx5IhdkfE4N8eiWphVtYmiUXNfmPudIlkbyO9JKRSMBmRhuLSs29axNlYDKDtERYwDqDs0YWOIogssDdYC4ufqvsoI1rMXag2uv3D1mSiGwRaL0pAsz/JxFRL8LZGwsxf5XkEyP7cZFoCwnmnNifRy8BbEJzA==; 5:BO6oGTANeLjtJSyL7+Nwa/L5/6Syjiao/bFT1TKeUvnI9ujvqHE7c7jMtuesy6trSOs81g0jnlMVrUSoH6A1shjKSl3v5J8YvgtPRRGi63lRqwvdVV/v3kS/m4tVsGsrTxgYWiIuAmG0oGNEVCidGQ==; 24:lGlqfLYJ8vxQ3n20beK1/E4YIU8JUHPvn/b1wqviNapFgRYpXxEYyA0G2tB+yalQK07WteAEAFkyJAaMuD8P7O/WZ+5Rxr8JqYsHE9aicSY=; 7:iMMRijJD2tDWW6x9ICVicNpj2mzRAguVLZKr9bBKeGU6mvBYxaFz4Ms8b2SP8Cvy0Gaw+8vZ4/Hvfothi+6vgMos9k8mX7MEZbNhwcx4Zl5IrgY77562J5TwQMwvEzcxoA1jD6Z73y5cTMb6trkvWzoTfn7aqG9G9zFDslZgIdMRpvkCUyuZ3LjOdh7TDGo6eT2JbkTr9NAZ1pmQf4MKE2LMDshxRffcAc+IYcHjoxU= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Oct 2017 12:41:00.7460 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR07MB3103 Subject: [dpdk-dev] [PATCH v3 03/10] mempool/octeontx: probe fpavf 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" A mempool device is set of PCIe vfs. On Octeontx HW, each mempool devices are enumerated as separate SRIOV VF PCIe device. In order to expose as a mempool device: On PCIe probe, the driver stores the information associated with the PCIe device and later upon application pool request (e.g. rte_mempool_create_empty), Infrastructure creates a pool device with earlier probed PCIe VF devices. Signed-off-by: Santosh Shukla Signed-off-by: Jerin Jacob --- drivers/mempool/octeontx/octeontx_fpavf.c | 151 ++++++++++++++++++++++++++++++ drivers/mempool/octeontx/octeontx_fpavf.h | 39 ++++++++ 2 files changed, 190 insertions(+) diff --git a/drivers/mempool/octeontx/octeontx_fpavf.c b/drivers/mempool/octeontx/octeontx_fpavf.c index 9bb7759c0..0b4a9357f 100644 --- a/drivers/mempool/octeontx/octeontx_fpavf.c +++ b/drivers/mempool/octeontx/octeontx_fpavf.c @@ -29,3 +29,154 @@ * (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 "octeontx_fpavf.h" + +struct fpavf_res { + void *pool_stack_base; + void *bar0; + uint64_t stack_ln_ptr; + uint16_t domain_id; + uint16_t vf_id; /* gpool_id */ + uint16_t sz128; /* Block size in cache lines */ + bool is_inuse; +}; + +struct octeontx_fpadev { + rte_spinlock_t lock; + uint8_t total_gpool_cnt; + struct fpavf_res pool[FPA_VF_MAX]; +}; + +static struct octeontx_fpadev fpadev; + +static void +octeontx_fpavf_setup(void) +{ + uint8_t i; + static bool init_once; + + if (!init_once) { + rte_spinlock_init(&fpadev.lock); + fpadev.total_gpool_cnt = 0; + + for (i = 0; i < FPA_VF_MAX; i++) { + + fpadev.pool[i].domain_id = ~0; + fpadev.pool[i].stack_ln_ptr = 0; + fpadev.pool[i].sz128 = 0; + fpadev.pool[i].bar0 = NULL; + fpadev.pool[i].pool_stack_base = NULL; + fpadev.pool[i].is_inuse = false; + } + init_once = 1; + } +} + +static int +octeontx_fpavf_identify(void *bar0) +{ + uint64_t val; + uint16_t domain_id; + uint16_t vf_id; + uint64_t stack_ln_ptr; + + val = fpavf_read64((void *)((uintptr_t)bar0 + + FPA_VF_VHAURA_CNT_THRESHOLD(0))); + + domain_id = (val >> 8) & 0xffff; + vf_id = (val >> 24) & 0xffff; + + stack_ln_ptr = fpavf_read64((void *)((uintptr_t)bar0 + + FPA_VF_VHPOOL_THRESHOLD(0))); + if (vf_id >= FPA_VF_MAX) { + fpavf_log_err("vf_id(%d) greater than max vf (32)\n", vf_id); + return -1; + } + + if (fpadev.pool[vf_id].is_inuse) { + fpavf_log_err("vf_id %d is_inuse\n", vf_id); + return -1; + } + + fpadev.pool[vf_id].domain_id = domain_id; + fpadev.pool[vf_id].vf_id = vf_id; + fpadev.pool[vf_id].bar0 = bar0; + fpadev.pool[vf_id].stack_ln_ptr = stack_ln_ptr; + + /* SUCCESS */ + return vf_id; +} + +/* FPAVF pcie device aka mempool probe */ +static int +fpavf_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) +{ + uint8_t *idreg; + int res; + struct fpavf_res *fpa; + + RTE_SET_USED(pci_drv); + RTE_SET_USED(fpa); + + /* 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) { + fpavf_log_err("Empty bars %p ", pci_dev->mem_resource[0].addr); + return -ENODEV; + } + idreg = pci_dev->mem_resource[0].addr; + + octeontx_fpavf_setup(); + + res = octeontx_fpavf_identify(idreg); + if (res < 0) + return -1; + + fpa = &fpadev.pool[res]; + fpadev.total_gpool_cnt++; + rte_wmb(); + + fpavf_log_dbg("total_fpavfs %d bar0 %p domain %d vf %d stk_ln_ptr 0x%x", + fpadev.total_gpool_cnt, fpa->bar0, fpa->domain_id, + fpa->vf_id, (unsigned int)fpa->stack_ln_ptr); + + return 0; +} + +static const struct rte_pci_id pci_fpavf_map[] = { + { + RTE_PCI_DEVICE(PCI_VENDOR_ID_CAVIUM, + PCI_DEVICE_ID_OCTEONTX_FPA_VF) + }, + { + .vendor_id = 0, + }, +}; + +static struct rte_pci_driver pci_fpavf = { + .id_table = pci_fpavf_map, + .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_IOVA_AS_VA, + .probe = fpavf_probe, +}; + +RTE_PMD_REGISTER_PCI(octeontx_fpavf, pci_fpavf); diff --git a/drivers/mempool/octeontx/octeontx_fpavf.h b/drivers/mempool/octeontx/octeontx_fpavf.h index 1c703725c..c43b1a7d2 100644 --- a/drivers/mempool/octeontx/octeontx_fpavf.h +++ b/drivers/mempool/octeontx/octeontx_fpavf.h @@ -34,6 +34,7 @@ #define __OCTEONTX_FPAVF_H__ #include +#include #ifdef RTE_LIBRTE_OCTEONTX_MEMPOOL_DEBUG #define fpavf_log_info(fmt, args...) \ @@ -87,4 +88,42 @@ #define FPA_VF0_APERTURE_SHIFT 22 #define FPA_AURA_SET_SIZE 16 + +/* + * In Cavium OcteonTX SoC, all accesses to the device registers are + * implictly strongly ordered. So, The relaxed version of IO operation is + * safe to use with out any IO memory barriers. + */ +#define fpavf_read64 rte_read64_relaxed +#define fpavf_write64 rte_write64_relaxed + +/* ARM64 specific functions */ +#if defined(RTE_ARCH_ARM64) +#define fpavf_load_pair(val0, val1, addr) ({ \ + asm volatile( \ + "ldp %x[x0], %x[x1], [%x[p1]]" \ + :[x0]"=r"(val0), [x1]"=r"(val1) \ + :[p1]"r"(addr) \ + ); }) + +#define fpavf_store_pair(val0, val1, addr) ({ \ + asm volatile( \ + "stp %x[x0], %x[x1], [%x[p1]]" \ + ::[x0]"r"(val0), [x1]"r"(val1), [p1]"r"(addr) \ + ); }) +#else /* Un optimized functions for building on non arm64 arch */ + +#define fpavf_load_pair(val0, val1, addr) \ +do { \ + val0 = rte_read64(addr); \ + val1 = rte_read64(((uint8_t *)addr) + 8); \ +} while (0) + +#define fpavf_store_pair(val0, val1, addr) \ +do { \ + rte_write64(val0, addr); \ + rte_write64(val1, (((uint8_t *)addr) + 8)); \ +} while (0) +#endif + #endif /* __OCTEONTX_FPAVF_H__ */