From patchwork Tue Sep 25 08:23:06 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrzej Hajda X-Patchwork-Id: 10613619 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4308213A4 for ; Tue, 25 Sep 2018 08:23:20 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3366629A1C for ; Tue, 25 Sep 2018 08:23:20 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2855C29A49; Tue, 25 Sep 2018 08:23:20 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1B0D029A23 for ; Tue, 25 Sep 2018 08:23:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726934AbeIYO3m (ORCPT ); Tue, 25 Sep 2018 10:29:42 -0400 Received: from mailout2.w1.samsung.com ([210.118.77.12]:55660 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727341AbeIYO3l (ORCPT ); Tue, 25 Sep 2018 10:29:41 -0400 Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20180925082315euoutp02a43a72a9144a213e6c12c1f64d7b15eb~Xlvl3AQPh0785607856euoutp02X for ; Tue, 25 Sep 2018 08:23:15 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20180925082315euoutp02a43a72a9144a213e6c12c1f64d7b15eb~Xlvl3AQPh0785607856euoutp02X DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1537863795; bh=pjaXyudCRpwKvkYFuXQYSEelUH8phxt/VB9GfkukTEI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ePfsyXL85lNTTPnZ18vLTkgzxWPY4e1b7YYUP0r+S7NMKxwvychqT2qb9fYBsmrGb /aZmxD5EuxtJRJTVJLDlkcgTxp5o/iiiEiB/5m629DZ03kunqEWWgkVGRfbID7E/XH uoAzowSD+Trghes0o0zde2T2EQGlhf2SSZw2Nrzk= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20180925082315eucas1p1eaad81fdcbcca8a2e924526fc7c3349e~XlvlW_Vua0653506535eucas1p1o; Tue, 25 Sep 2018 08:23:15 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id FD.C7.04294.370F9AB5; Tue, 25 Sep 2018 09:23:15 +0100 (BST) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20180925082314eucas1p1add4ccbe8fad7985c1d47098129cdc5c~XlvkdSE-C0768807688eucas1p1m; Tue, 25 Sep 2018 08:23:14 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20180925082314eusmtrp155b28c1a6d657128259e69e80f0df73c~XlvkcAdqb2383123831eusmtrp1y; Tue, 25 Sep 2018 08:23:14 +0000 (GMT) X-AuditID: cbfec7f4-84fff700000010c6-e4-5ba9f073368b Received: from eusmtip1.samsung.com ( [203.254.199.221]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 52.D8.04284.270F9AB5; Tue, 25 Sep 2018 09:23:14 +0100 (BST) Received: from AMDC2768.DIGITAL.local (unknown [106.120.43.17]) by eusmtip1.samsung.com (KnoxPortal) with ESMTPA id 20180925082314eusmtip14ebfe562e9a4d7b1a68f4857e3fbd711~XlvkI9B1k1347613476eusmtip1S; Tue, 25 Sep 2018 08:23:14 +0000 (GMT) From: Andrzej Hajda To: Inki Dae Cc: Andrzej Hajda , Bartlomiej Zolnierkiewicz , Marek Szyprowski , dri-devel@lists.freedesktop.org, linux-samsung-soc@vger.kernel.org Subject: [PATCH 4/6] drm/exynos/iommu: move IOMMU specific stuff into exynos_drm_iommu.c Date: Tue, 25 Sep 2018 10:23:06 +0200 X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180925082308.1388-1-a.hajda@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrNIsWRmVeSWpSXmKPExsWy7djP87rFH1ZGG7x5xGRxa905VouNM9az Wlz5+p7NYtL9CSwWM87vY7JYe+QuuwObx/3u40wefVtWMXp83iQXwBzFZZOSmpNZllqkb5fA lfH61062gtN6FavanrA2MO5W72Lk4JAQMJHY9Ceii5GLQ0hgBaPElVOn2LsYOYGcL4wSqz55 QyQ+M0p0PVrFCJIAaVj66SwTRGI5o0TPyomMEA5QR+PjV2BVbAKaEn8332QDsUUElCVW7Wtn ByliFrjEKPH6ZDdYkbBAlMSX5hNMIDaLgKrE3ZXrWCFWyEs8PN4OVsMpYCFxueEq2AYJgfts Ekev3mUGOZxXoEzi02luiHoXiaZJ7ewQtrDEq+NboGwZidOTe1gg7HqJpplXmCHmdDBKnFi8 nA0iYS1x+PhFVpCZzEBXr9+lDxF2lOj9uY4ZEkZ8EjfeCoKEmYHMSdumQ4V5JTrahCCqFSXu n93KDGGLSyy98BVquIfEv9XToeHTzShx/koH+wRG+VkIyxYwMq5iFE8tLc5NTy02ykst1ytO zC0uzUvXS87P3cQITAKn/x3/soNx15+kQ4wCHIxKPLwGL1dEC7EmlhVX5h5ilOBgVhLhbdJd GS3Em5JYWZValB9fVJqTWnyIUZqDRUmcl08rLVpIID2xJDU7NbUgtQgmy8TBKdXAqGC1t/yK Scv3H0Kf/crPnr2YsObSLuN1KgHS7e7WgdrFefViXw6uYjZQnGr9yd3pmrt8sk53B4NR0HyR efvsalxzn2dlmyzhF9TiFTP0Oca97qoQ88u2OTZvuP6wWyi+eB0k/0FcOpj/oobXGckt7rqm WvKu9k4RrI4Bh49abV7v/mWPO5sSS3FGoqEWc1FxIgBmIOXA/gIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrPLMWRmVeSWpSXmKPExsVy+t/xu7pFH1ZGG5zslrS4te4cq8XGGetZ La58fc9mMen+BBaLGef3MVmsPXKX3YHN4373cSaPvi2rGD0+b5ILYI7SsynKLy1JVcjILy6x VYo2tDDSM7S00DMysdQzNDaPtTIyVdK3s0lJzcksSy3St0vQy3j9aydbwWm9ilVtT1gbGHer dzFyckgImEgs/XSWqYuRi0NIYCmjxJ6eeawQCXGJ3fPfMkPYwhJ/rnWxQRR9YpT483ItE0iC TUBT4u/mm2wgtoiAssSqfe3sIEXMAtcYJfav+8QCkhAWiJC40PMBrIFFQFXi7sp1YBt4Bcwl 5n3vYoTYIC/x8Hg7mM0pYCFxueEqmC0EVHOk9wLzBEa+BYwMqxhFUkuLc9Nziw31ihNzi0vz 0vWS83M3MQIDc9uxn5t3MF7aGHyIUYCDUYmH98azFdFCrIllxZW5hxglOJiVRHibdFdGC/Gm JFZWpRblxxeV5qQWH2I0BTpqIrOUaHI+MGrySuINTQ3NLSwNzY3Njc0slMR5zxtURgkJpCeW pGanphakFsH0MXFwSjUw2hsJLvuisLt/ZYtuSQWP1TdxrUd5rXlGc2+biAV/PvLii8OFHL6j iQ+UTBeYn/B8+uXG+7s9m0rKr8nJhDhc/PxlxRmX/VNu/vqY16a8e5XBifkfDvu7KwbV3590 uct4I+upph0Wutem1/xY1PvlS9hJjVX3Aipudax/sPjprdqVT/5LuFoeLFFiKc5INNRiLipO BABeZfKnYgIAAA== Message-Id: <20180925082314eucas1p1add4ccbe8fad7985c1d47098129cdc5c~XlvkdSE-C0768807688eucas1p1m@eucas1p1.samsung.com> X-CMS-MailID: 20180925082314eucas1p1add4ccbe8fad7985c1d47098129cdc5c X-Msg-Generator: CA X-RootMTR: 20180925082314eucas1p1add4ccbe8fad7985c1d47098129cdc5c X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20180925082314eucas1p1add4ccbe8fad7985c1d47098129cdc5c References: <20180925082308.1388-1-a.hajda@samsung.com> Sender: linux-samsung-soc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Since __exynos_iommu* functions are used only in exynos_drm_iommu.c we can move them there. Signed-off-by: Andrzej Hajda --- drivers/gpu/drm/exynos/exynos_drm_iommu.c | 94 +++++++++++++++++++++++ drivers/gpu/drm/exynos/exynos_drm_iommu.h | 94 ----------------------- 2 files changed, 94 insertions(+), 94 deletions(-) diff --git a/drivers/gpu/drm/exynos/exynos_drm_iommu.c b/drivers/gpu/drm/exynos/exynos_drm_iommu.c index 0f373702414e..96df5819fd52 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_iommu.c +++ b/drivers/gpu/drm/exynos/exynos_drm_iommu.c @@ -18,6 +18,100 @@ #include "exynos_drm_drv.h" #include "exynos_drm_iommu.h" +#define EXYNOS_DEV_ADDR_START 0x20000000 +#define EXYNOS_DEV_ADDR_SIZE 0x40000000 + +#if defined(CONFIG_ARM_DMA_USE_IOMMU) +#include + +static inline int __exynos_iommu_create_mapping(struct exynos_drm_private *priv, + unsigned long start, unsigned long size) +{ + priv->mapping = arm_iommu_create_mapping(&platform_bus_type, start, + size); + return IS_ERR(priv->mapping); +} + +static inline void +__exynos_iommu_release_mapping(struct exynos_drm_private *priv) +{ + arm_iommu_release_mapping(priv->mapping); +} + +static inline int __exynos_iommu_attach(struct exynos_drm_private *priv, + struct device *dev) +{ + if (dev->archdata.mapping) + arm_iommu_detach_device(dev); + + return arm_iommu_attach_device(dev, priv->mapping); +} + +static inline void __exynos_iommu_detach(struct exynos_drm_private *priv, + struct device *dev) +{ + arm_iommu_detach_device(dev); +} + +#elif defined(CONFIG_IOMMU_DMA) +#include + +static inline int __exynos_iommu_create_mapping(struct exynos_drm_private *priv, + unsigned long start, unsigned long size) +{ + struct iommu_domain *domain; + int ret; + + domain = iommu_domain_alloc(priv->dma_dev->bus); + if (!domain) + return -ENOMEM; + + ret = iommu_get_dma_cookie(domain); + if (ret) + goto free_domain; + + ret = iommu_dma_init_domain(domain, start, size, NULL); + if (ret) + goto put_cookie; + + priv->mapping = domain; + return 0; + +put_cookie: + iommu_put_dma_cookie(domain); +free_domain: + iommu_domain_free(domain); + return ret; +} + +static inline void __exynos_iommu_release_mapping(struct exynos_drm_private *priv) +{ + struct iommu_domain *domain = priv->mapping; + + iommu_put_dma_cookie(domain); + iommu_domain_free(domain); + priv->mapping = NULL; +} + +static inline int __exynos_iommu_attach(struct exynos_drm_private *priv, + struct device *dev) +{ + struct iommu_domain *domain = priv->mapping; + + return iommu_attach_device(domain, dev); +} + +static inline void __exynos_iommu_detach(struct exynos_drm_private *priv, + struct device *dev) +{ + struct iommu_domain *domain = priv->mapping; + + iommu_detach_device(domain, dev); +} +#else +#error Unsupported architecture and IOMMU/DMA-mapping glue code +#endif + static inline int configure_dma_max_seg_size(struct device *dev) { if (!dev->dma_parms) diff --git a/drivers/gpu/drm/exynos/exynos_drm_iommu.h b/drivers/gpu/drm/exynos/exynos_drm_iommu.h index 95648b0c8327..5eaec41514b4 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_iommu.h +++ b/drivers/gpu/drm/exynos/exynos_drm_iommu.h @@ -12,102 +12,8 @@ #ifndef _EXYNOS_DRM_IOMMU_H_ #define _EXYNOS_DRM_IOMMU_H_ -#define EXYNOS_DEV_ADDR_START 0x20000000 -#define EXYNOS_DEV_ADDR_SIZE 0x40000000 - #ifdef CONFIG_EXYNOS_IOMMU -#if defined(CONFIG_ARM_DMA_USE_IOMMU) -#include - -static inline int __exynos_iommu_create_mapping(struct exynos_drm_private *priv, - unsigned long start, unsigned long size) -{ - priv->mapping = arm_iommu_create_mapping(&platform_bus_type, start, - size); - return IS_ERR(priv->mapping); -} - -static inline void -__exynos_iommu_release_mapping(struct exynos_drm_private *priv) -{ - arm_iommu_release_mapping(priv->mapping); -} - -static inline int __exynos_iommu_attach(struct exynos_drm_private *priv, - struct device *dev) -{ - if (dev->archdata.mapping) - arm_iommu_detach_device(dev); - - return arm_iommu_attach_device(dev, priv->mapping); -} - -static inline void __exynos_iommu_detach(struct exynos_drm_private *priv, - struct device *dev) -{ - arm_iommu_detach_device(dev); -} - -#elif defined(CONFIG_IOMMU_DMA) -#include - -static inline int __exynos_iommu_create_mapping(struct exynos_drm_private *priv, - unsigned long start, unsigned long size) -{ - struct iommu_domain *domain; - int ret; - - domain = iommu_domain_alloc(priv->dma_dev->bus); - if (!domain) - return -ENOMEM; - - ret = iommu_get_dma_cookie(domain); - if (ret) - goto free_domain; - - ret = iommu_dma_init_domain(domain, start, size, NULL); - if (ret) - goto put_cookie; - - priv->mapping = domain; - return 0; - -put_cookie: - iommu_put_dma_cookie(domain); -free_domain: - iommu_domain_free(domain); - return ret; -} - -static inline void __exynos_iommu_release_mapping(struct exynos_drm_private *priv) -{ - struct iommu_domain *domain = priv->mapping; - - iommu_put_dma_cookie(domain); - iommu_domain_free(domain); - priv->mapping = NULL; -} - -static inline int __exynos_iommu_attach(struct exynos_drm_private *priv, - struct device *dev) -{ - struct iommu_domain *domain = priv->mapping; - - return iommu_attach_device(domain, dev); -} - -static inline void __exynos_iommu_detach(struct exynos_drm_private *priv, - struct device *dev) -{ - struct iommu_domain *domain = priv->mapping; - - iommu_detach_device(domain, dev); -} -#else -#error Unsupported architecture and IOMMU/DMA-mapping glue code -#endif - int drm_create_iommu_mapping(struct drm_device *drm_dev); void drm_release_iommu_mapping(struct drm_device *drm_dev);