From patchwork Fri Jan 11 11:58:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shreyansh Jain X-Patchwork-Id: 49698 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 [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id DDB3A1BBF4; Fri, 11 Jan 2019 12:59:06 +0100 (CET) Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-eopbgr140084.outbound.protection.outlook.com [40.107.14.84]) by dpdk.org (Postfix) with ESMTP id 04C3F1BBD7 for ; Fri, 11 Jan 2019 12:58:59 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FHdfjzxSAtfjD5YMsRyFyVgkhKEUb08Vg3FZj8ieHH8=; b=t24zruTYYvirJG/u4cUqUw/tokYME7ln1i56xhzx+qRiYNOkVxL9Ez35HcjtFBqmXJFc21k/8dGlBPxd3z0RXxYmB4Ih3pgIY2aBmRBUMF9nlszxgGgTidmrUM6A/d0PoxN6976CM1V3BESYHhRzNobhm3h3R4lpKxuUaXPocSs= Received: from VI1PR04MB4688.eurprd04.prod.outlook.com (20.177.56.80) by VI1PR04MB2109.eurprd04.prod.outlook.com (10.166.43.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1516.14; Fri, 11 Jan 2019 11:58:57 +0000 Received: from VI1PR04MB4688.eurprd04.prod.outlook.com ([fe80::b1eb:7e7e:7b90:7b4]) by VI1PR04MB4688.eurprd04.prod.outlook.com ([fe80::b1eb:7e7e:7b90:7b4%4]) with mapi id 15.20.1516.016; Fri, 11 Jan 2019 11:58:57 +0000 From: Shreyansh Jain To: "dev@dpdk.org" CC: "ferruh.yigit@intel.com" , Pankaj Chauhan , "M.h. Lian" Thread-Topic: [PATCH v2 20/20] bus/fslmc: add function to map any addr via VFIO Thread-Index: AQHUqaUINX6UxvyzzU+1lUzxeL0Y+g== Date: Fri, 11 Jan 2019 11:58:57 +0000 Message-ID: <20190111115712.6482-21-shreyansh.jain@nxp.com> References: <20181227062233.30781-1-hemant.agrawal@nxp.com> <20190111115712.6482-1-shreyansh.jain@nxp.com> In-Reply-To: <20190111115712.6482-1-shreyansh.jain@nxp.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [14.143.254.130] x-mailer: git-send-email 2.17.1 x-clientproxiedby: TY2PR01CA0030.jpnprd01.prod.outlook.com (2603:1096:404:ce::18) To VI1PR04MB4688.eurprd04.prod.outlook.com (2603:10a6:803:71::16) authentication-results: spf=none (sender IP is ) smtp.mailfrom=shreyansh.jain@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; VI1PR04MB2109; 6:GllsOpwA08/4uIAjXjgKYITfV4H3sTvxH7702mk6EAjbNVmJgkHJULBUPgah19jmt5byuvxBSJChKFGdmZq0xfZRzNuOgJcz4DxQU3LQNSt36yWbk2WGNKMUVqtD/3fqFgaB5okn3IV6S5BxxqaFqb5A9Ic95dYDY2t68pmIfWOsdQ2y/dL0b614FePZ9lHAd18sbGzSMvSCbdepyXMOJCe7Rtg5X9ScxKEZdRpkb+oRuGzFi+/nauxMQ7TEt1NxnCanpra8IyPVKvurRZhOuxMUcf0sVB1q7xo2EHrAOfcNF+Jw39WFznKXhggndQH1OpDSQ+6isZA7kO1Jy+TAUJ1ed+m0mWyVcKM1hW9WdKqqifm7vZm118og4juURc9DmWtnJ0uwWAYhSs1CpuVa0yIFTPs2mRm+FtBOejXLFAFtEwelvigG8eL3i8YWi1iJQZ6X4HmAG3Y8c6xpFDn0pA==; 5:xqqwmlcbIlxeJbPcv54SXF7mlSSEvDJcHv9KS9iuw6Dbki7rsZCmBXg36Nk/59qapUg6Dyo20Y6Xvg7khblnN3eNErVuuHIQcLyAUyOW5hFSDCv5moRyPbrQlI878aIxmHwUaPxpETOYDePiNxwzEmsIseD5k92wQj6GDK/OfjBuoQA+u+yoVk767HLz5oeR4fRVS0XJpwIi2RzxTPEj9g==; 7:jwknQcHDYv8izxwoDZQrmEcu0JHb23QbfgO2GIGNI2OHDuge45/buzmbTGxuYgaZkG/DAi3pvlzwZD293TMTn2PorBbmeTahsP3DavmJCYGbb5WCbGxM33XNRSzgDzU3XKxM/voWHsM1Yih3REWNFA== x-ms-office365-filtering-correlation-id: fac4eada-421a-491f-9d49-08d677bc2a8b x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(5600109)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB2109; x-ms-traffictypediagnostic: VI1PR04MB2109: x-microsoft-antispam-prvs: x-forefront-prvs: 09144DB0F7 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(366004)(346002)(136003)(396003)(376002)(39860400002)(189003)(199004)(99286004)(2501003)(78486014)(6512007)(26005)(316002)(68736007)(186003)(25786009)(36756003)(478600001)(305945005)(14454004)(71200400001)(6916009)(6486002)(71190400001)(2351001)(6436002)(81156014)(81166006)(1730700003)(52116002)(53936002)(76176011)(1076003)(256004)(105586002)(8936002)(476003)(54906003)(5640700003)(7736002)(2616005)(106356001)(50226002)(3846002)(6116002)(55236004)(386003)(2906002)(6506007)(11346002)(102836004)(86362001)(446003)(486006)(97736004)(44832011)(5660300001)(8676002)(4326008)(66066001); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB2109; H:VI1PR04MB4688.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: ICcMiFhjTcjt8xVuKE6nfhxMsezpJZF7dEPOdNKzbScj7NZRFzhT/uWmLyQHfUTa7BKIqTcW0FvpX01vxfriDiAaV7E+AR8F4gkUeRLU5/Bvp7esPF2Q6Q/S2r7GhICp1l1LrjThjqTXatzuImv9HCP5xZJTJBxmhYvPWXQvACC/U8mxnlIbXVNhG7xqaZCMETQSoYPggqGpl6gq0UNeLlOmHbbV8+M0hAhaTolapgl7xwj2v2Rwq+CeJw5IndqNYiBN7rTyO/xie+zUmHrfu5HwY6t2shLBqu+7tf9osyH2NAHrjFuNwWIIiRGucsJ/HBPBjnNllWWKPw7g4GaAGDv+IKA3qmdvBgug4YLwA2UtbeyVwaVcJ8+MdseqdbhnrC7QTNx5yiQZ0gu9vsGfskBvHXcSy7aw9vEUCuX5HtY= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: fac4eada-421a-491f-9d49-08d677bc2a8b X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Jan 2019 11:58:54.3994 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB2109 Subject: [dpdk-dev] [PATCH v2 20/20] bus/fslmc: add function to map any addr via VFIO 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" From: Pankaj Chauhan This is required to map any accelerator memory and PCI address to VFIO using QDMA. Signed-off-by: Minghuan Lian Signed-off-by: Pankaj Chauhan --- drivers/bus/fslmc/fslmc_vfio.c | 43 +++++++++++++++++++++ drivers/bus/fslmc/fslmc_vfio.h | 1 + drivers/bus/fslmc/rte_bus_fslmc_version.map | 7 ++++ 3 files changed, 51 insertions(+) diff --git a/drivers/bus/fslmc/fslmc_vfio.c b/drivers/bus/fslmc/fslmc_vfio.c index 1aae56fa9..786089334 100644 --- a/drivers/bus/fslmc/fslmc_vfio.c +++ b/drivers/bus/fslmc/fslmc_vfio.c @@ -50,6 +50,7 @@ static struct fslmc_vfio_group vfio_group; static struct fslmc_vfio_container vfio_container; static int container_device_fd; static char *g_container; +static int fslmc_iommu_type; static uint32_t *msi_intr_vaddr; void *(*rte_mcp_ptr_list); @@ -90,6 +91,9 @@ fslmc_get_container_group(int *groupid) } } + fslmc_iommu_type = (rte_vfio_noiommu_is_enabled() == 1) ? + RTE_VFIO_NOIOMMU : VFIO_TYPE1_IOMMU; + /* get group number */ ret = rte_vfio_get_group_num(SYSFS_FSL_MC_DEVICES, g_container, groupid); @@ -344,6 +348,45 @@ fslmc_dmamap_seg(const struct rte_memseg_list *msl __rte_unused, return ret; } +int rte_fslmc_vfio_mem_dmamap(uint64_t vaddr, uint64_t iova, uint64_t size) +{ + int ret; + struct fslmc_vfio_group *group; + struct vfio_iommu_type1_dma_map dma_map = { + .argsz = sizeof(struct vfio_iommu_type1_dma_map), + .flags = VFIO_DMA_MAP_FLAG_READ | VFIO_DMA_MAP_FLAG_WRITE, + }; + + if (fslmc_iommu_type == RTE_VFIO_NOIOMMU) { + DPAA2_BUS_DEBUG("Running in NOIOMMU mode"); + return 0; + } + + /* SET DMA MAP for IOMMU */ + group = &vfio_group; + if (!group->container) { + DPAA2_BUS_ERR("Container is not connected"); + return -1; + } + + dma_map.size = size; + dma_map.vaddr = vaddr; + dma_map.iova = iova; + + DPAA2_BUS_DEBUG("FSLMC VFIO dmamap 0x%"PRIx64":0x%"PRIx64"," + " size 0x%"PRIx64"", (uint64_t)dma_map.vaddr, + (uint64_t)dma_map.iova, (uint64_t)dma_map.size); + ret = ioctl(group->container->fd, VFIO_IOMMU_MAP_DMA, + &dma_map); + if (ret) { + DPAA2_BUS_ERR("Unable to map DMA address (errno = %d)", + errno); + return ret; + } + + return 0; +} + int rte_fslmc_vfio_dmamap(void) { int i = 0, ret; diff --git a/drivers/bus/fslmc/fslmc_vfio.h b/drivers/bus/fslmc/fslmc_vfio.h index 9e2c4feef..4e750d623 100644 --- a/drivers/bus/fslmc/fslmc_vfio.h +++ b/drivers/bus/fslmc/fslmc_vfio.h @@ -50,5 +50,6 @@ int fslmc_vfio_process_group(void); char *fslmc_get_container(void); int fslmc_get_container_group(int *gropuid); int rte_fslmc_vfio_dmamap(void); +int rte_fslmc_vfio_mem_dmamap(uint64_t vaddr, uint64_t iova, uint64_t size); #endif /* _FSLMC_VFIO_H_ */ diff --git a/drivers/bus/fslmc/rte_bus_fslmc_version.map b/drivers/bus/fslmc/rte_bus_fslmc_version.map index dcc4e082e..c4192d978 100644 --- a/drivers/bus/fslmc/rte_bus_fslmc_version.map +++ b/drivers/bus/fslmc/rte_bus_fslmc_version.map @@ -129,3 +129,10 @@ DPDK_18.11 { dpci_set_opr; } DPDK_18.05; + +DPDK_19.02 { + global: + + rte_fslmc_vfio_mem_dmamap; + +} DPDK_18.11;