From patchwork Fri Sep 21 08:58:40 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrzej Hajda X-Patchwork-Id: 10609381 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 5931D112B for ; Fri, 21 Sep 2018 08:59:07 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4938B2B174 for ; Fri, 21 Sep 2018 08:59:07 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3D1F12D874; Fri, 21 Sep 2018 08:59:07 +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=-5.2 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 743052B174 for ; Fri, 21 Sep 2018 08:59:06 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id F218D6E725; Fri, 21 Sep 2018 08:59:02 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com [210.118.77.11]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5A67D6E725 for ; Fri, 21 Sep 2018 08:59:01 +0000 (UTC) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20180921085859euoutp011c42950db99d6b6f49a691c6d612429c~WXppcAACy2465324653euoutp01V for ; Fri, 21 Sep 2018 08:58:59 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20180921085859euoutp011c42950db99d6b6f49a691c6d612429c~WXppcAACy2465324653euoutp01V Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20180921085858eucas1p1a0a8198409c687be44a3ff16b8169e68~WXpolrnwP2442824428eucas1p1s; Fri, 21 Sep 2018 08:58:58 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id DB.45.04441.2D2B4AB5; Fri, 21 Sep 2018 09:58:58 +0100 (BST) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20180921085858eucas1p25807116d04d37d11a5296f44131c23f4~WXpntr8zL1932219322eucas1p2T; Fri, 21 Sep 2018 08:58:58 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20180921085857eusmtrp2443d9c5ec7fb0a748a30fd3703c5b2f8~WXpncvbD92159021590eusmtrp2g; Fri, 21 Sep 2018 08:58:57 +0000 (GMT) X-AuditID: cbfec7f2-5e3ff70000001159-37-5ba4b2d2c57b Received: from eusmtip1.samsung.com ( [203.254.199.221]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 14.DC.04128.1D2B4AB5; Fri, 21 Sep 2018 09:58:57 +0100 (BST) Received: from AMDC2768.DIGITAL.local (unknown [106.120.43.17]) by eusmtip1.samsung.com (KnoxPortal) with ESMTPA id 20180921085857eusmtip1848fab2ad2fb763f306d7ce62d164129~WXpnFfWLi0043700437eusmtip1u; Fri, 21 Sep 2018 08:58:57 +0000 (GMT) From: Andrzej Hajda To: Inki Dae Subject: [PATCH] drm/exynos: simplify DMA mapping Date: Fri, 21 Sep 2018 10:58:40 +0200 X-Mailer: git-send-email 2.18.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrPIsWRmVeSWpSXmKPExsWy7djP87qXNi2JNujaqGxxa905VouNM9az Wlz5+p7NYtL9CSwWM87vY7JYe+QuuwObx/3u40wefVtWMXp83iQXwBzFZZOSmpNZllqkb5fA lbH84wyWgrUqFQ0nNBoYl8p1MXJySAiYSLxbd4u9i5GLQ0hgBaPE/ykfoJwvjBIXz19ihHA+ M0r8/d3DBtPy58VpFojEckaJma8/M4IkwFrufOYGsdkENCX+br4J1iAioCyxal872FhmgUuM Eq9PdoM1CAsYSjxecYYFxGYRUJX4vWkHE8QGeYmHx9vBVksIHGCTOLj2KVgRr0CZxO3OA1BF LhLNcx6zQtjCEq+Ob2GHsGUk/u+cD1VTL9E08wozxKAORokTi5dD/WAtcfj4RaBmDqCTNCXW 79KHCDtKTD6+iwUkLCHAJ3HjrSBImBnInLRtOjNEmFeio00IolpR4v7ZrcwQtrjE0gtfoYZ7 SLz5PJ0VEiaxEjuPLWefwCg3C2HXAkbGVYziqaXFuempxYZ5qeV6xYm5xaV56XrJ+bmbGIHR fvrf8U87GL9eSjrEKMDBqMTDa7B4cbQQa2JZcWXuIUYJDmYlEd59XUuihXhTEiurUovy44tK c1KLDzFKc7AoifPyaaVFCwmkJ5akZqemFqQWwWSZODilGhjn+/bseL+2Xd7ojGxB37QlmvfY JWWVty7Zm3s/6mlGwulJ1kYL2T03vs63+fWxbpm6+IJdc/c5Tzbbmv1n57wjB/MWNOYf+Twr Zqsy46v5WWUVexgSZ0z3bNk+84SH/cL7q9WFD8kK802Wfifx6Gub0Kq0+Tf/fFjIsz6t1kjb QLXRt+Hi/LOxSizFGYmGWsxFxYkA1O7qwfICAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrGLMWRmVeSWpSXmKPExsVy+t/xu7oXNy2JNth3Ts3i1rpzrBYbZ6xn tbjy9T2bxaT7E1gsZpzfx2Sx9shddgc2j/vdx5k8+rasYvT4vEkugDlKz6Yov7QkVSEjv7jE Vina0MJIz9DSQs/IxFLP0Ng81srIVEnfziYlNSezLLVI3y5BL2P5xxksBWtVKhpOaDQwLpXr YuTkkBAwkfjz4jRLFyMXh5DAUkaJnVsXsEEkxCV2z3/LDGELS/y51sUGUfSJUWLe62ZWkASb gKbE3803wRpEBJQlVu1rZwcpYha4xiixf90nFpCEsIChxOMVZ8BsFgFVid+bdjCB2LwC5hI9 824wQmyQl3h4vJ1xAiPPAkaGVYwiqaXFuem5xUZ6xYm5xaV56XrJ+bmbGIFhtu3Yzy07GLve BR9iFOBgVOLhNVi8OFqINbGsuDL3EKMEB7OSCO++riXRQrwpiZVVqUX58UWlOanFhxhNgZZP ZJYSTc4HxkBeSbyhqaG5haWhubG5sZmFkjjveYPKKCGB9MSS1OzU1ILUIpg+Jg5OqQbGjU2i 9rN9YgRKnXfNKy0R/P62ZuXW+7Zauu9TCgrqItdezN5wZs6vlkm+V/Y/UTn0g9Wh4Ub4ERul JflNi+5yvI5v7N+3d4axoSvLw9MHLgtorQi/qMg+QWnGuYNvOjomP14SX9Z1JTIlOrpjiTnn vYqCPzHr/fYemnpcv+Wr1+7ZdjNPNprMUGIpzkg01GIuKk4EAGqexydJAgAA Message-Id: <20180921085858eucas1p25807116d04d37d11a5296f44131c23f4~WXpntr8zL1932219322eucas1p2T@eucas1p2.samsung.com> X-CMS-MailID: 20180921085858eucas1p25807116d04d37d11a5296f44131c23f4 X-Msg-Generator: CA X-RootMTR: 20180921085858eucas1p25807116d04d37d11a5296f44131c23f4 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20180921085858eucas1p25807116d04d37d11a5296f44131c23f4 References: X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-samsung-soc@vger.kernel.org, Marek Szyprowski , dri-devel@lists.freedesktop.org, Bartlomiej Zolnierkiewicz MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP Moving DMA mapping creation to drm_iommu_attach_device allows to avoid looping through all components and maintaining DMA device flags. Signed-off-by: Andrzej Hajda --- drivers/gpu/drm/exynos/exynos_drm_drv.c | 50 +++-------------------- drivers/gpu/drm/exynos/exynos_drm_iommu.c | 13 +++++- 2 files changed, 17 insertions(+), 46 deletions(-) diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c index b599f74692e5..c83437d8a595 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c @@ -197,8 +197,7 @@ struct exynos_drm_driver_info { #define DRM_COMPONENT_DRIVER BIT(0) /* supports component framework */ #define DRM_VIRTUAL_DEVICE BIT(1) /* create virtual platform device */ -#define DRM_DMA_DEVICE BIT(2) /* can be used for dma allocations */ -#define DRM_FIMC_DEVICE BIT(3) /* devices shared with V4L2 subsystem */ +#define DRM_FIMC_DEVICE BIT(2) /* devices shared with V4L2 subsystem */ #define DRV_PTR(drv, cond) (IS_ENABLED(cond) ? &drv : NULL) @@ -209,16 +208,16 @@ struct exynos_drm_driver_info { static struct exynos_drm_driver_info exynos_drm_drivers[] = { { DRV_PTR(fimd_driver, CONFIG_DRM_EXYNOS_FIMD), - DRM_COMPONENT_DRIVER | DRM_DMA_DEVICE + DRM_COMPONENT_DRIVER }, { DRV_PTR(exynos5433_decon_driver, CONFIG_DRM_EXYNOS5433_DECON), - DRM_COMPONENT_DRIVER | DRM_DMA_DEVICE + DRM_COMPONENT_DRIVER }, { DRV_PTR(decon_driver, CONFIG_DRM_EXYNOS7_DECON), - DRM_COMPONENT_DRIVER | DRM_DMA_DEVICE + DRM_COMPONENT_DRIVER }, { DRV_PTR(mixer_driver, CONFIG_DRM_EXYNOS_MIXER), - DRM_COMPONENT_DRIVER | DRM_DMA_DEVICE + DRM_COMPONENT_DRIVER }, { DRV_PTR(mic_driver, CONFIG_DRM_EXYNOS_MIC), DRM_COMPONENT_DRIVER @@ -289,27 +288,6 @@ static struct component_match *exynos_drm_match_add(struct device *dev) return match ?: ERR_PTR(-ENODEV); } -static struct device *exynos_drm_get_dma_device(void) -{ - int i; - - for (i = 0; i < ARRAY_SIZE(exynos_drm_drivers); ++i) { - struct exynos_drm_driver_info *info = &exynos_drm_drivers[i]; - struct device *dev; - - if (!info->driver || !(info->flags & DRM_DMA_DEVICE)) - continue; - - while ((dev = bus_find_device(&platform_bus_type, NULL, - &info->driver->driver, - (void *)platform_bus_type.match))) { - put_device(dev); - return dev; - } - } - return NULL; -} - static int exynos_drm_bind(struct device *dev) { struct exynos_drm_private *private; @@ -334,23 +312,6 @@ static int exynos_drm_bind(struct device *dev) dev_set_drvdata(dev, drm); drm->dev_private = (void *)private; - /* the first real CRTC device is used for all dma mapping operations */ - private->dma_dev = exynos_drm_get_dma_device(); - if (!private->dma_dev) { - DRM_ERROR("no device found for DMA mapping operations.\n"); - ret = -ENODEV; - goto err_free_private; - } - DRM_INFO("Exynos DRM: using %s device for DMA mapping operations\n", - dev_name(private->dma_dev)); - - /* create common IOMMU mapping for all devices attached to Exynos DRM */ - ret = drm_create_iommu_mapping(drm); - if (ret < 0) { - DRM_ERROR("failed to create iommu mapping.\n"); - goto err_free_private; - } - drm_mode_config_init(drm); exynos_drm_mode_config_init(drm); @@ -408,7 +369,6 @@ static int exynos_drm_bind(struct device *dev) err_mode_config_cleanup: drm_mode_config_cleanup(drm); drm_release_iommu_mapping(drm); -err_free_private: kfree(private); err_free_drm: drm_dev_put(drm); diff --git a/drivers/gpu/drm/exynos/exynos_drm_iommu.c b/drivers/gpu/drm/exynos/exynos_drm_iommu.c index 0f373702414e..bb8b800a9fba 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_iommu.c +++ b/drivers/gpu/drm/exynos/exynos_drm_iommu.c @@ -75,7 +75,18 @@ int drm_iommu_attach_device(struct drm_device *drm_dev, struct exynos_drm_private *priv = drm_dev->dev_private; int ret; - if (get_dma_ops(priv->dma_dev) != get_dma_ops(subdrv_dev)) { + if (!priv->dma_dev) { + priv->dma_dev = subdrv_dev; + DRM_INFO("Exynos DRM: using %s device for DMA mapping operations\n", + dev_name(subdrv_dev)); + /* create common IOMMU mapping for all Exynos DRM devices */ + ret = drm_create_iommu_mapping(drm_dev); + if (ret < 0) { + priv->dma_dev = NULL; + DRM_ERROR("failed to create iommu mapping.\n"); + return -EINVAL; + } + } else if (get_dma_ops(priv->dma_dev) != get_dma_ops(subdrv_dev)) { DRM_ERROR("Device %s lacks support for IOMMU\n", dev_name(subdrv_dev)); return -EINVAL;