From patchwork Mon Mar 25 07:13:39 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrzej Hajda X-Patchwork-Id: 10868043 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 1B3A61390 for ; Mon, 25 Mar 2019 07:14:04 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 016472924C for ; Mon, 25 Mar 2019 07:14:04 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E98DC29250; Mon, 25 Mar 2019 07:14:03 +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 CCA872924C for ; Mon, 25 Mar 2019 07:14:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729809AbfCYHOB (ORCPT ); Mon, 25 Mar 2019 03:14:01 -0400 Received: from mailout2.w1.samsung.com ([210.118.77.12]:59684 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729792AbfCYHOB (ORCPT ); Mon, 25 Mar 2019 03:14:01 -0400 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20190325071400euoutp0252347c367d5345a6705c2a967dced7c8~PIjyb92my0790207902euoutp02Q; Mon, 25 Mar 2019 07:14:00 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20190325071400euoutp0252347c367d5345a6705c2a967dced7c8~PIjyb92my0790207902euoutp02Q DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1553498040; bh=fcZMC/vcbdYdxD/9+ErLCTIrtrtLOxi6ccXJjPagghU=; h=From:To:Cc:Subject:Date:In-reply-to:References:From; b=BhJUVLodgSUFvrewhBTFfum/drX6iWYk5dJ0syTwYSfkYegl5SR9pIpQg7BOrtuMt oL1E30vzXr7Kf4uToiziKoewkFhY+S1vS9NRP15Ogho4Qn1xwWyx7VuwaUsoTu0Eml 7bc2Teia8nWPPjoaV8LX576i84OpehTByA9RHpL8= Received: from eusmges3new.samsung.com (unknown [203.254.199.245]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20190325071359eucas1p223fa4496ea1ec74bddf3171a46156d60~PIjyE6f2j3045430454eucas1p22; Mon, 25 Mar 2019 07:13:59 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges3new.samsung.com (EUCPMTA) with SMTP id FA.4E.04325.7BF789C5; Mon, 25 Mar 2019 07:13:59 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20190325071359eucas1p1b08952b714f0f81d694a0c0db8332521~PIjxbsheU1607216072eucas1p1s; Mon, 25 Mar 2019 07:13:59 +0000 (GMT) X-AuditID: cbfec7f5-b8fff700000010e5-9b-5c987fb78029 Received: from eusync3.samsung.com ( [203.254.199.213]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id BD.19.04140.6BF789C5; Mon, 25 Mar 2019 07:13:59 +0000 (GMT) Received: from AMDC3748.DIGITAL.local ([106.120.51.74]) by eusync3.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0POW003QHUR43P00@eusync3.samsung.com>; Mon, 25 Mar 2019 07:13:58 +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, Krzysztof Kozlowski Subject: [PATCH v3 RESEND 14/24] drm/exynos: unify plane type assignment Date: Mon, 25 Mar 2019 08:13:39 +0100 Message-id: <20190325071349.22600-15-a.hajda@samsung.com> X-Mailer: git-send-email 2.17.1 In-reply-to: <20190325071349.22600-1-a.hajda@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprBIsWRmVeSWpSXmKPExsWy7djP87rb62fEGKx7qWBxa905VouNM9az Wlz5+p7NYtL9CSwW589vYLeYcX4fk8XaI3fZHdg9Nq3qZPO4332cyaNvyypGj8+b5AJYorhs UlJzMstSi/TtErgylh2cxlqww67i77GrrA2Md427GDk4JARMJP69C+pi5OIQEljBKDHvTQsz hPOZUeLC3MlsXYycYEVTH+xng0gsY5RYMe88E4Tzn1Fi9a+VLCBVbAKaEn833wTrEBFQlli1 r50dpIhZ4DejxPTl29hBEsICHhKXpuwEa2ARUJVoPbaGBeQOXgFLiSsNNhDb5CVWbzjADGJz AoX/n74EdpKEwF9WiR3rz7NDFLlIzP7+gRnClpG4PLmbBcKul7i/ogWqoYNRYuuGnVBF1hKH j19kBbGZBfgkJm2bzgwJAF6JjjYhiBIPiceTF0N91sMocfnNcpYJjBILGBlWMYqnlhbnpqcW G+ellusVJ+YWl+al6yXn525iBMbX6X/Hv+5g3Pcn6RCjAAejEg/vi53TY4RYE8uKK3MPMUpw MCuJ8D4RnREjxJuSWFmVWpQfX1Sak1p8iFGag0VJnLea4UG0kEB6YklqdmpqQWoRTJaJg1Oq gXH5q/R9T299DVurveqo5sbYpiOfdlyK+Z6voV7zRe78gyMGM74FfGBa2X8jp0ZMPYInadUU Nd9rW044GB1/XHJ9jm215dQd50U+tBmamj1gsOd6FPvWrZltwY+SD1pGl79s6ZA5dyYu6WTz 6VbTZxEPBRJ7486vftLybB3TlszGVCbvsGlHFfYqsRRnJBpqMRcVJwIAVcrNf6sCAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpkluLIzCtJLcpLzFFi42I5/e/4Vd3t9TNiDA7UWdxad47VYuOM9awW V76+Z7OYdH8Ci8X58xvYLWac38dksfbIXXYHdo9NqzrZPO53H2fy6NuyitHj8ya5AJYoLpuU 1JzMstQifbsEroxlB6exFuywq/h77CprA+Nd4y5GTg4JAROJqQ/2s3UxcnEICSxhlNh26DcT hNPIJLF1/3omkCo2AU2Jv5tvsoHYIgLKEqv2tbODFDEL/GaU+DzjKzNIQljAQ+LSlJ0sIDaL gKpE67E1QDYHB6+ApcSVBhuIbfISqzccACvnBAr/P30JzBYSsJDYu6yRfQIjzwJGhlWMIqml xbnpucVGesWJucWleel6yfm5mxiBAbPt2M8tOxi73gUfYhTgYFTi4XXYMz1GiDWxrLgy9xCj BAezkgjvE9EZMUK8KYmVValF+fFFpTmpxYcYpTlYlMR5zxtURgkJpCeWpGanphakFsFkmTg4 pRoYZV3797+Jv3HezdHiwJL9/NmHIthebv4RX5zddDTddq2240btrs9qNaEip9LDvPwkuOYF qBw1PHThnoelAPssrx3szX4av/Kf3jbZt9FoRv+8WeJWj49Lr70TbXc8/EZDkq9o48GDh4o+ WS2+ujrxkfNKOdbz+yqUfbiWWd6NNl/kZhp3rcJLiaU4I9FQi7moOBEACinq3xQCAAA= X-CMS-MailID: 20190325071359eucas1p1b08952b714f0f81d694a0c0db8332521 CMS-TYPE: 201P X-CMS-RootMailID: 20190325071359eucas1p1b08952b714f0f81d694a0c0db8332521 References: <20190325071349.22600-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 7fcefcbe68db..a61fb2069e32 100644 --- a/drivers/gpu/drm/exynos/exynos_mixer.c +++ b/drivers/gpu/drm/exynos/exynos_mixer.c @@ -1143,8 +1143,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) @@ -1157,7 +1155,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; } @@ -1169,7 +1167,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; }