From patchwork Fri Mar 1 12:20:44 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrzej Hajda X-Patchwork-Id: 10835115 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 475B0922 for ; Fri, 1 Mar 2019 12:21:29 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 347F02097A for ; Fri, 1 Mar 2019 12:21:29 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 285B92D900; Fri, 1 Mar 2019 12:21:29 +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 6DB202097A for ; Fri, 1 Mar 2019 12:21:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387683AbfCAMV1 (ORCPT ); Fri, 1 Mar 2019 07:21:27 -0500 Received: from mailout2.w1.samsung.com ([210.118.77.12]:39170 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387692AbfCAMVN (ORCPT ); Fri, 1 Mar 2019 07:21:13 -0500 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20190301122111euoutp02416bbacc32b56cf2c50fcd0b0b76b8bc~H1RJtra7K2132421324euoutp02U; Fri, 1 Mar 2019 12:21:11 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20190301122111euoutp02416bbacc32b56cf2c50fcd0b0b76b8bc~H1RJtra7K2132421324euoutp02U DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1551442871; bh=PgbKR/w9TRKewd4GHl+53PaABxvCvoMv24+YVVR5Zf8=; h=From:To:Cc:Subject:Date:In-reply-to:References:From; b=XjJoaDLDaQK4hMwchnPaXNx8GdwjSSlUxbgLJ74g6Q2ICF2n0awZVJwjzsms7O70n SaMIq0iE9apCanLKdxf9wR3UmMX9WmGpAMpffZ81lei3q1HL5bsVZOiAMvlgvgjMA1 2mRW8YtsIqmUPM8itqkwzTpa+o2uLWEaXj0TXxkM= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20190301122111eucas1p124853b526f76c2f0b904756721fd16b4~H1RJTJUfu2243022430eucas1p1L; Fri, 1 Mar 2019 12:21:11 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id E3.5E.04441.7B3297C5; Fri, 1 Mar 2019 12:21:11 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20190301122110eucas1p2e11aa4aac815820d1bcfc5dae485f060~H1RIgDFnM1653016530eucas1p2r; Fri, 1 Mar 2019 12:21:10 +0000 (GMT) X-AuditID: cbfec7f2-5c9ff70000001159-60-5c7923b7ace9 Received: from eusync3.samsung.com ( [203.254.199.213]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id A7.23.04284.6B3297C5; Fri, 1 Mar 2019 12:21:10 +0000 (GMT) Received: from AMDC3748.DIGITAL.local ([106.120.43.17]) by eusync3.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0PNO007ENSZ56Z20@eusync3.samsung.com>; Fri, 01 Mar 2019 12:21:10 +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 12/23] drm/exynos: unify plane type assignment Date: Fri, 01 Mar 2019 13:20:44 +0100 Message-id: <20190301122055.7135-13-a.hajda@samsung.com> X-Mailer: git-send-email 2.17.1 In-reply-to: <20190301122055.7135-1-a.hajda@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFupjkeLIzCtJLcpLzFFi42LZduzned3typUxBn/WsFjcWneO1WLjjPWs Fle+vmezmHR/AovFjPP7mCzWHrnL7sDmcb/7OJNH35ZVjB6fN8kFMEdx2aSk5mSWpRbp2yVw ZbzYnlyww67i/6wDLA2Md427GDk5JARMJFZfPcDUxcjFISSwglHi65ITLBDOZ0aJ6Wt6WGGq dn+ayQyRWMYo8fDVaWaQhJDAf0aJ7/vsQWw2AU2Jv5tvsoHYIgLKEqv2tbODNDALXGKUeH2y mxEkISxgJ9F+ay8TiM0ioCpx/9laMJtXwEJi3cLDbBDb5CVWbzgAtoATKH5wJcQgCYG3rBIr 3sxkhyhykfi35BrUeTISnR0HmSDseommmVeYIRo6GCVOLF4ONdVa4vDxi2ANzAJ8EpO2TQcq 4gCK80p0tAlBlHhIXLrzlhXizW5GiT+bX7JPYJRYwMiwilE8tbQ4Nz212DAvtVyvODG3uDQv XS85P3cTIzCWTv87/mkH49dLSYcYBTgYlXh4E16WxwixJpYVV+YeYpTgYFYS4eVjqIwR4k1J rKxKLcqPLyrNSS0+xCjNwaIkzlvN8CBaSCA9sSQ1OzW1ILUIJsvEwSnVwLhDaKfZrTYJpq6L L1ZuqdBTXMv/5vwX8Y3fA36V1rOdSbzvpNHUO0fi3uc5R16fXxH9TOn55GMzD7z671ScHX/X 5Zy5Vv6r7ZnFtzZLHj/B7PUzTbpii4vm9ZeWLUu8fG5aG02ZFPe+OUP/oKvhmspHM7iTLcw2 9jMbT7W4F7DEeU185gy9nVxKLMUZiYZazEXFiQAgDMyvoQIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrOJMWRmVeSWpSXmKPExsVy+t/xq7rblCtjDBZflbK4te4cq8XGGetZ La58fc9mMen+BBaLGef3MVmsPXKX3YHN4373cSaPvi2rGD0+b5ILYI7isklJzcksSy3St0vg ynixPblgh13F/1kHWBoY7xp3MXJySAiYSOz+NJO5i5GLQ0hgCaNE5+ZD7BBOI5PEu/cvWECq 2AQ0Jf5uvskGYosIKEus2tcOVsQscIVRov1bFztIQljATqL91l4mEJtFQFXi/rO1YDavgIXE uoWH2SDWyUus3nCAGcTmBIofXAkyiANom7nEptNRExh5FjAyrGIUSS0tzk3PLTbUK07MLS7N S9dLzs/dxAgMjm3Hfm7ewXhpY/AhRgEORiUe3oSX5TFCrIllxZW5hxglOJiVRHj5GCpjhHhT EiurUovy44tKc1KLDzFKc7AoifOeN6iMEhJITyxJzU5NLUgtgskycXBKNTBaRJvGN339dLr0 nelMmW1J556o655/toGzrp3f5yuz5RLN2cdLUxeU6IiWPLu+l3vhvENMr9MmZ04v2XDhG0eR pf319j//OHNk/J9qv1afJSdV1imp+JUrZkrrRjuFsqRzYaaXtU4ZPH7p9O++13Yzoe057hGP C+dJyAWf7f/aX7/ixuvgN55KLMUZiYZazEXFiQD/vJt/CgIAAA== X-CMS-MailID: 20190301122110eucas1p2e11aa4aac815820d1bcfc5dae485f060 CMS-TYPE: 201P X-CMS-RootMailID: 20190301122110eucas1p2e11aa4aac815820d1bcfc5dae485f060 References: <20190301122055.7135-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 all Exynos CRTCs uses the first plane as primary plane and the last one as cursor plane we can drop custom assignments per CRTC and replace it with common code. Signed-off-by: Andrzej Hajda --- drivers/gpu/drm/exynos/exynos5433_drm_decon.c | 7 +------ drivers/gpu/drm/exynos/exynos7_drm_decon.c | 7 +------ drivers/gpu/drm/exynos/exynos_drm_drv.h | 2 +- drivers/gpu/drm/exynos/exynos_drm_fimd.c | 10 +--------- drivers/gpu/drm/exynos/exynos_drm_plane.c | 19 +++++++++++++------ drivers/gpu/drm/exynos/exynos_drm_vidi.c | 8 +------- drivers/gpu/drm/exynos/exynos_mixer.c | 6 ++---- 7 files changed, 20 insertions(+), 39 deletions(-) diff --git a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c index 0d409f453923..663446ca2d09 100644 --- a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c +++ b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c @@ -78,11 +78,6 @@ static const uint32_t decon_formats[] = { DRM_FORMAT_ARGB8888, }; -static const enum drm_plane_type decon_win_types[WINDOWS_NR] = { - [PRIMARY_WIN] = DRM_PLANE_TYPE_PRIMARY, - [CURSON_WIN] = DRM_PLANE_TYPE_CURSOR, -}; - static inline void decon_set_bits(struct decon_context *ctx, u32 reg, u32 mask, u32 val) { @@ -619,7 +614,7 @@ static int decon_bind(struct device *dev, struct device *master, void *data) | EXYNOS_DRM_PLANE_CAP_PIX_BLEND; ret = exynos_plane_init(drm_dev, &ctx->planes[i], decon_formats, ARRAY_SIZE(decon_formats), - decon_win_types[i]); + WINDOWS_NR - ctx->first_win); if (ret) return ret; } diff --git a/drivers/gpu/drm/exynos/exynos7_drm_decon.c b/drivers/gpu/drm/exynos/exynos7_drm_decon.c index 22659f2da755..b6ad2faed159 100644 --- a/drivers/gpu/drm/exynos/exynos7_drm_decon.c +++ b/drivers/gpu/drm/exynos/exynos7_drm_decon.c @@ -78,11 +78,6 @@ static const uint32_t decon_formats[] = { DRM_FORMAT_BGRA8888, }; -static const enum drm_plane_type decon_win_types[WINDOWS_NR] = { - DRM_PLANE_TYPE_PRIMARY, - DRM_PLANE_TYPE_CURSOR, -}; - static void decon_wait_for_vblank(struct exynos_drm_crtc *crtc) { struct decon_context *ctx = to_decon(crtc); @@ -628,7 +623,7 @@ static int decon_bind(struct device *dev, struct device *master, void *data) for (i = 0; i < WINDOWS_NR; i++) { ctx->planes[i].index = i; ret = exynos_plane_init(drm_dev, &ctx->planes[i], decon_formats, - ARRAY_SIZE(decon_formats), decon_win_types[i]); + ARRAY_SIZE(decon_formats), WINDOWS_NR); if (ret) return ret; } diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.h b/drivers/gpu/drm/exynos/exynos_drm_drv.h index 82af112be03d..23b27b82de6e 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_drv.h +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.h @@ -97,7 +97,7 @@ struct exynos_drm_plane { int exynos_plane_init(struct drm_device *dev, struct exynos_drm_plane *plane, const uint32_t *pixel_formats, int num_pixel_formats, - enum drm_plane_type type); + int win_count); /* * Exynos drm crtc ops diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c index 8ea1cfd51736..b3c11bca5aed 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c @@ -212,14 +212,6 @@ static const struct of_device_id fimd_driver_dt_match[] = { }; MODULE_DEVICE_TABLE(of, fimd_driver_dt_match); -static const enum drm_plane_type fimd_win_types[WINDOWS_NR] = { - DRM_PLANE_TYPE_PRIMARY, - DRM_PLANE_TYPE_OVERLAY, - DRM_PLANE_TYPE_OVERLAY, - DRM_PLANE_TYPE_OVERLAY, - DRM_PLANE_TYPE_CURSOR, -}; - static const uint32_t fimd_formats[] = { DRM_FORMAT_C8, DRM_FORMAT_XRGB1555, @@ -1049,7 +1041,7 @@ static int fimd_bind(struct device *dev, struct device *master, void *data) | EXYNOS_DRM_PLANE_CAP_WIN_BLEND | EXYNOS_DRM_PLANE_CAP_PIX_BLEND; ret = exynos_plane_init(drm_dev, &ctx->planes[i], fimd_formats, - ARRAY_SIZE(fimd_formats), fimd_win_types[i]); + ARRAY_SIZE(fimd_formats), WINDOWS_NR); if (ret) return ret; } diff --git a/drivers/gpu/drm/exynos/exynos_drm_plane.c b/drivers/gpu/drm/exynos/exynos_drm_plane.c index e1aa504539fa..5f8f56b69369 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_plane.c +++ b/drivers/gpu/drm/exynos/exynos_drm_plane.c @@ -291,9 +291,18 @@ static void exynos_plane_attach_zpos_property(struct drm_plane *plane, drm_plane_create_zpos_property(plane, zpos, 0, MAX_PLANE - 1); } +static inline enum drm_plane_type exynos_plane_type(int index, int count) +{ + if (count && !index) + return DRM_PLANE_TYPE_PRIMARY; + if (index == count - 1) + return DRM_PLANE_TYPE_CURSOR; + return DRM_PLANE_TYPE_OVERLAY; +} + int exynos_plane_init(struct drm_device *dev, struct exynos_drm_plane *plane, const uint32_t *pixel_formats, int num_pixel_formats, - enum drm_plane_type type) + int win_count) { int err; unsigned int supported_modes = BIT(DRM_MODE_BLEND_PIXEL_NONE) | @@ -302,11 +311,9 @@ int exynos_plane_init(struct drm_device *dev, struct exynos_drm_plane *plane, struct drm_plane *bplane = &plane->base; err = drm_universal_plane_init(dev, bplane, - 1 << dev->mode_config.num_crtc, - &exynos_plane_funcs, - pixel_formats, - num_pixel_formats, - NULL, type, NULL); + 1 << dev->mode_config.num_crtc, + &exynos_plane_funcs, pixel_formats, num_pixel_formats,NULL, + exynos_plane_type(plane->index, win_count), NULL); if (err) { DRM_ERROR("failed to initialize plane\n"); return err; diff --git a/drivers/gpu/drm/exynos/exynos_drm_vidi.c b/drivers/gpu/drm/exynos/exynos_drm_vidi.c index 2579462aec70..eb1fd3a2cdf3 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_vidi.c +++ b/drivers/gpu/drm/exynos/exynos_drm_vidi.c @@ -85,12 +85,6 @@ static const uint32_t formats[] = { DRM_FORMAT_NV12, }; -static const enum drm_plane_type vidi_win_types[WINDOWS_NR] = { - DRM_PLANE_TYPE_PRIMARY, - DRM_PLANE_TYPE_OVERLAY, - DRM_PLANE_TYPE_CURSOR, -}; - static int vidi_enable_vblank(struct exynos_drm_crtc *crtc) { struct vidi_context *ctx = to_vidi(crtc); @@ -381,7 +375,7 @@ static int vidi_bind(struct device *dev, struct device *master, void *data) for (i = 0; i < WINDOWS_NR; i++) { ret = exynos_plane_init(drm_dev, &ctx->planes[i], formats, - ARRAY_SIZE(formats), vidi_win_types[i]); + ARRAY_SIZE(formats), WINDOWS_NR); if (ret) return ret; } diff --git a/drivers/gpu/drm/exynos/exynos_mixer.c b/drivers/gpu/drm/exynos/exynos_mixer.c index 946d62ae83e3..d0dcbbfc67e5 100644 --- a/drivers/gpu/drm/exynos/exynos_mixer.c +++ b/drivers/gpu/drm/exynos/exynos_mixer.c @@ -1121,8 +1121,6 @@ static int mixer_bind(struct device *dev, struct device *manager, void *data) struct drm_device *drm_dev = data; unsigned int i; int ret; - static enum drm_plane_type types[] = { DRM_PLANE_TYPE_PRIMARY, - DRM_PLANE_TYPE_CURSOR, DRM_PLANE_TYPE_OVERLAY }; ret = mixer_initialize(ctx, drm_dev); if (ret) @@ -1135,7 +1133,7 @@ static int mixer_bind(struct device *dev, struct device *manager, void *data) EXYNOS_DRM_PLANE_CAP_PIX_BLEND | EXYNOS_DRM_PLANE_CAP_WIN_BLEND; ret = exynos_plane_init(drm_dev, &ctx->planes[i], mixer_formats, - ARRAY_SIZE(mixer_formats), types[i]); + ARRAY_SIZE(mixer_formats), VP_DEFAULT_WIN); if (ret) return ret; } @@ -1147,7 +1145,7 @@ static int mixer_bind(struct device *dev, struct device *manager, void *data) EXYNOS_DRM_PLANE_CAP_TILE | EXYNOS_DRM_PLANE_CAP_WIN_BLEND; ret = exynos_plane_init(drm_dev, &ctx->planes[i], vp_formats, - ARRAY_SIZE(vp_formats), types[i]); + ARRAY_SIZE(vp_formats), VP_DEFAULT_WIN); if (ret) return ret; }