From patchwork Thu Aug 24 13:28:55 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Santosh Shukla X-Patchwork-Id: 27857 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 EE8E97D83; Thu, 24 Aug 2017 15:30:01 +0200 (CEST) Received: from NAM01-SN1-obe.outbound.protection.outlook.com (mail-sn1nam01on0041.outbound.protection.outlook.com [104.47.32.41]) by dpdk.org (Postfix) with ESMTP id C473F7CE5 for ; Thu, 24 Aug 2017 15:29:59 +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=qYfnw6t+Hbp4XRMKHIPOPWbXFJb2Z58GOMiUVmtKtHs=; b=JEFAkJMyfTSwhI30I4VDL6FUEroBhfukW2Y4AXFpqnsIt8MNVt1a3PS1pHplpnmtVzKwJvfHPQ1OvUhPBHVyJn8bQTi38XbvD9SCfnZJag5Ghf3+IbNp9xt8Wcy7XILTYs4WzEndPNFPOUTs6FFlJIcS5gsKYUvI56Yy4TkNAg0= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Santosh.Shukla@cavium.com; Received: from localhost.localdomain (14.140.2.178) by CY4PR07MB3093.namprd07.prod.outlook.com (10.172.115.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.1.1362.18; Thu, 24 Aug 2017 13:29:56 +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: Thu, 24 Aug 2017 18:58:55 +0530 Message-Id: <20170824132903.32057-4-santosh.shukla@caviumnetworks.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170824132903.32057-1-santosh.shukla@caviumnetworks.com> References: <20170824132903.32057-1-santosh.shukla@caviumnetworks.com> MIME-Version: 1.0 X-Originating-IP: [14.140.2.178] X-ClientProxiedBy: BM1PR01CA0071.INDPRD01.PROD.OUTLOOK.COM (10.174.208.139) To CY4PR07MB3093.namprd07.prod.outlook.com (10.172.115.7) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d81ea582-957b-4325-1152-08d4eaf43746 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(300000503095)(300135400095)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:CY4PR07MB3093; X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB3093; 3:3IcAlwPIq/moVTyONZ0p44BkMqanhi/NHOipxj37DulxUSvUKOnRyR0LRMM9DuFFb8aft5COspOzYqp3d+vUe+4VflKW+71SX5wKnR6apUhGgWowR7HFrfNIc8QKkbV8khl68LXeK0l7s5HMWAb7PPk0BR+zLJpwDWtQgzNyDSt2OWi4bnKk4op+0m73EyojM1UTyyYIvz+b64Ne+W5MAWpMm7VyBDTksg3meFtYDJ0wJK0NegDhetx9kS8fRAR4; 25:cxz/L7XDXl+jXJBYi/wJ1W/T8rqeQZrDiESwVxMI2x4IKqGqSq70/2QZSyu0ShBlaPRgfzYA3nwLmJbsQ8BZakfibu0CEMSZnZ/dr3jhPCfC8s9Aqsh5rbei6WY+rnzbCc2CXPtVv9OJpg1tGhSjVZeCAcSLQSVOEqzeNlVsLZdT0YBKd2ubsItPCxrAmfgoYNJlZ2bSi2p9fdhk8bZVd2Yo7HrigcxFcVRCsXnp9Ke3zKm1NGa/gGbyfBgHmL2+RQe6HMrmT7W8BIeNBSbh7UEtmN+K2JwDl9gXeNw8oltRk/+8SrSW5SugRs8dL0ocDX/5uzPIGlSLW/lveH+1Yw==; 31:yihDxEKtmx9T6m43WrSFj+ge0QYP/U+ZZJnRFWRVoIo9qVtgNXSwGTDxKCdMVmIajW96R6tnQm3i8udAgW/BP4nfs4VEucby9u4xQG5ar3JWCM3xye2A8NeP0xGRsConrcMQfazyLpEHBHynJHf+iMuu6Xv63xflZGFhpb58yqMqqJ6GceqODBNj+NxHc6IrAThgcaCrSRM90Ue82Wat03ziwcBzjz0sc57ehAbp6gI= X-MS-TrafficTypeDiagnostic: CY4PR07MB3093: X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB3093; 20:WbvRVCn/8ok48rFeuoaQB9xIuRbE5Mq0jaN6zPe4ZYH8/yw4XQBrvJwXJuoAzyMeUCa+X72dnNU7/rkYAoDNkd8ucQt2SfBXs0VXVmN9AcKgANg3ZdNbzGENpvJvHJMVxCcA1xTOSSG0XGM/WiKSFKqx4uoUXtVG5JjvWLpoEZBbH4/XUNmamFVmZgFE/KViVNeRoVrVTHEaj8Lm0qTLttMas04eJCkeZsRR1MTDAiauUNOPjkrbgPw5cd0ck9LmjiOUpXWXGXmEiFakxtUPF1iJMrxG/AREG1hh4CSkdMOGoWyGo+NVEqlrUIjYtZd41GqJuys/EnZRdPldNWv5UaMFRBQsI88XuzhywbFFhWH68ir9txQLCAiiROVRgGTzla7CmgaqpMh5jy/W1JQjJWDh1+X9m0Bjg/CIss4KxCfQFEeivfwjAzxS31GwvYbfm0ZAd0YvuenIDzbKJVmukHbAVn7/XHe/qhQYgt/05TkuBM2tNO3tyc38tfChLuqntf7/6uWPB8rBmxP+mnOjArDkPF+lYcaoSVxwsze0PEfFFj+Ttsqj4ekaIRB+9puQJWMr+mrDAEPrtLdsW44zp/rYrT7giWd45+RldBqGrig=; 4:exjiGdcVsl/mn/6NvKTxL9VqMBevOblDMPpey5eYwv23DsGP0r8WBe2px2jLEm/S5XgHaTm8Ir7FEjyqVhkrU6Ct3mWQaWBetYfwiMs6S+fQgryflaGFtuyNjXlv9tvvpweDPB6WEWBrI9Ktmzk8zItrPWcTKbM5jVoFny3Mhb59b4FHFmsfbKMpVpHc1wutYYyqqzOxOO9vIz5khbnyGg19kfBlwGsAtPS3SxJkgSOtP1eFcRWe4SoiDMteFHKp 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)(601004)(2401047)(8121501046)(5005006)(100000703101)(100105400095)(10201501046)(3002001)(93006095)(6041248)(20161123560025)(20161123558100)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(20161123562025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:CY4PR07MB3093; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:CY4PR07MB3093; X-Forefront-PRVS: 04097B7F7F X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(7370300001)(4630300001)(6069001)(6009001)(189002)(199003)(110136004)(107886003)(53936002)(105586002)(101416001)(7736002)(50226002)(76176999)(42186005)(68736007)(6486002)(33646002)(50986999)(6512007)(106356001)(1076002)(2906002)(6506006)(3846002)(6116002)(478600001)(97736004)(4326008)(5660300001)(7350300001)(47776003)(5009440100003)(72206003)(50466002)(8656003)(48376002)(25786009)(81156014)(81166006)(66066001)(305945005)(5003940100001)(42882006)(36756003)(8676002)(189998001)(2950100002)(110426004); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR07MB3093; 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; CY4PR07MB3093; 23:+JafafIYr2+eb6B6uwjqB+/Vo7TMOzn1iRze2bZsQ?= uvqcPL3QQL02Ga+WWo3KLq6/yWU9gn8ZOzIszwnAyEPnSGWgqRSBfK331cVN4YR1jfEgLBedl58qiqK6mflHc0eqJDszzoJ3ViRTB8Mds3Xnr9Hnn4L3fTyCxQM2UNPtYrwsu4x9/y8eIlP5ir2VrF73CMbas+S9UTBco1OlDyWQEfVAPb7Gm04m2GGdTbf+Dbt9x/dsnl+PPRdm8OHlQlbOdJwnuLRNPgsj9uIzoyKnVufKlSmyJKrxyzwuZQiZ2dokd1j6vFdVy8rTiG7AsQPuxD0QEqk7O+l0b/4ybf8mICuOulwbDI52ToYIh1SoPHoCoCKpzUC608mogbTgtXyba6LpuOp5RcJQ0J0iJ8A26dc3orp5VYPeVgSYTltm3bDIgYhKbgoPtdDX8TpofowBkHvgmPLggUq8oSivMnk77OCZT9kT2TcZ0FQZkzZ8oXD9pJNA/1SA3p7ASpIVW95haU8G30zDg931u9mmeg4sovcMcEsvXnCV7kyVpWSAn0KxGIojKmBNwPicgK+aQynI2wQO/5Q9LT0fKon+ZK7ABKrcXXFMp8PoPVTHFzJWM5sf1/1XmVp+2v62v7ikRhoS0rnIvVqbocUHcQ9wLjfeH2kgTmgrOm4H0RGLO+g6pK6NpWUr5dwABIZ5W78m/9C27l2f3Dou3DHI1ad+6vM6unZ5ZnzXLxhFsx87+71QM2VGPzgqPTyNHSBNBpt5s/VOQWTdFe0lgHSeZ1uvRLGgZjXGT5etghfi9V3TEhoi+OjDapYpt97qefk/a49vfqCSPoMx/GBV7jxA24mIgc4kToUrmkjxcYNUBBT5eQ08NJ4nDtkfaCQs0kUVYnx/U/lonY6hDMYR7eXnZcb/eYoN9gSxl2KdSoqlTmAGT0LkIip5+5tNoJKsDLXQTZ3QuqzDL4c2oMSQKGtU59ZSaIfeUH+HNJjBQMOZBG7RimLG5ivwuhTm/+2dph9N5MD6m63kNZhm7DfLN6iMNNZGNwxBOBRLYHbIEOn+f847Uw4YptOxoa+ZaHhbYl9Je7SEEpvV6BsNnwzeSpZX9K7/fhcgYHSLVqn6VSbU+iHt2RWKsbFI4xxCgb4ffK2hhUnyoAPiHvP8fSDYn/SLeeE3OnXCXoGXqLOrUPUbmRUIyuYPc8LlYnzBC2/eu1AWZkualik X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB3093; 6:PuaRAXN/+3Sha0k75OU8K4JXlCom8jolPOMp+BQyoiRl3+8NUMB9fDXDXePj4WTAE3RWQmXXoYYJo0ad7GnFtZuAkWBFVnHN5xTErsEk55/ujwKt3EJhTnkoJpZNdsNxOq+b9QPzIi/9pz9Ev9qVNg1rtqdpVid+U3sxWZNfJFuRi/F1152h1w03N+F9aQIfCCF/gGsZPN+vKa+XUv7qkcmhUDKDYWLuZR6mQ4+ypmWnZdCK1DKYwZRpV/lkHjqr61/o5DXES3LG8Px6FBGcr65+YON0yal8RdbfHgODUDQU27qfwFWXARJRmjRJCn3/ILynaskHyQBcwiM+ntDNhQ==; 5:ww2SYwOrabGQoff5j9UnYdaDMsoSKWSL9E9xGEKDaKCGp30ahOqs/F/Swxkt4FMIGaIQPhoIo5V+D3GJEn2Kjf9O4OBDEvrIzmth+tuJGejdqdWxJ/zFMsw3QA9WbJkJPV+fvoSRCUbMnsPYMMfWPJG2s2V1aEwL5FJphRDGn6w=; 24:Yw2zOgv7aOaHoCuU4hPceFLvGPw6AvC8RkiDSmpg1hRRATBheIoOCRSmd2SuydadLNCxd8gws/roac1ovMu+Hc/2SL4f9cGFnwCvqZR/d24=; 7:/jqfvUO3wZHnwge7AhYUzZk3HIRKh78ERcE786nzb794+0xuNlfwt4UlkIOrWTcz58hUwwZYKNKmgkv93MuabVSm+c6u6lKo98CiP3lCd5JCr1FY2NEeAjFvuVwxafchTIVbys8LRD9grrjYcgqHLD25Pp+WT/rgvkuU1mcuv28pObkh9j3cy8vn3rnPAUrlyvRCjzk1rdhQRktacpN6POtiaDSE76pSVq1NOQhBvjQ= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Aug 2017 13:29:56.0559 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR07MB3093 Subject: [dpdk-dev] [PATCH v1 03/11] 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__ */