From patchwork Mon Mar 25 07:13:49 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrzej Hajda X-Patchwork-Id: 10868059 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 E768614DE for ; Mon, 25 Mar 2019 07:14:06 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CCC622924B for ; Mon, 25 Mar 2019 07:14:06 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C08A42924F; Mon, 25 Mar 2019 07:14:06 +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 47A672924B for ; Mon, 25 Mar 2019 07:14:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729786AbfCYHOG (ORCPT ); Mon, 25 Mar 2019 03:14:06 -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 S1729792AbfCYHOF (ORCPT ); Mon, 25 Mar 2019 03:14:05 -0400 Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20190325071404euoutp029bca7ec9f8db5ab6986a126410833477~PIj2ZZ25x0782807828euoutp02e; Mon, 25 Mar 2019 07:14:04 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20190325071404euoutp029bca7ec9f8db5ab6986a126410833477~PIj2ZZ25x0782807828euoutp02e DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1553498044; bh=TyKT6bah+kd2Dl9KQ7/ARjwuR+1go7zEaegsvg3AlHE=; h=From:To:Cc:Subject:Date:In-reply-to:References:From; b=WaCqknofQcx8TTk8xOR5ffwKJHAgEtdK4QUTaydR8xHsdyF/jpldL2ox6A3C+ana+ mKZBqC+xO4MVK04AnDZgJ3NlBetnC/XzA2Vh7py5yrRCYVR+fvvCCtxRq6D+hqGdqc 84jWimC4fBWCLTWP4u4uEmI9cCOzujTgYAysFgRY= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20190325071403eucas1p141cae8d9eb947504957093da7d4061d5~PIj17sMDr2403024030eucas1p1U; Mon, 25 Mar 2019 07:14:03 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id 14.5E.04377.BBF789C5; Mon, 25 Mar 2019 07:14:03 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20190325071403eucas1p15267241039dc4b1911f2357b7a43baac~PIj1SWWAf2091320913eucas1p1S; Mon, 25 Mar 2019 07:14:03 +0000 (GMT) X-AuditID: cbfec7f4-12dff70000001119-e3-5c987fbbc18f Received: from eusync3.samsung.com ( [203.254.199.213]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 19.69.04146.BBF789C5; Mon, 25 Mar 2019 07:14:03 +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:14:03 +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 24/24] drm/exynos/gscaler: fix handling YVU420 pixel format Date: Mon, 25 Mar 2019 08:13:49 +0100 Message-id: <20190325071349.22600-25-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+NgFprBIsWRmVeSWpSXmKPExsWy7djP87q762fEGJzermFxa905VouNM9az Wlz5+p7NYtL9CSwW589vYLeYcX4fk8XaI3fZHdg9Nq3qZPO4332cyaNvyypGj8+b5AJYorhs UlJzMstSi/TtErgymr7sYitoVqyY8mcySwNjq0wXIyeHhICJxL4T15hAbCGBFYwSczZpdTFy AdmfGSV27PjMDlM0Z/0XJojEMkaJv+8vsEE4/xkl5rfvBqtiE9CU+Lv5JhuILSKgLLFqXzs7 SBGzwG9GienLt4EVCQuES7TcXga2j0VAVeL+hWmMIDavgKXEjDmrmCDWyUus3nCAGcTmBIr/ P32JGWSQhMBfVok1by8AFXEAOS4S63+mQdTLSHR2HITqrZe4v6IFqr6DUWLrhp3MEAlricPH L7KC2MwCfBKTtk1nhpjDK9HRJgRR4iHx42Er1Gc9jBITXm1imcAosYCRYRWjeGppcW56arFR Xmq5XnFibnFpXrpecn7uJkZgfJ3+d/zLDsZdf5IOMQpwMCrx8DrsmR4jxJpYVlyZe4hRgoNZ SYT3ieiMGCHelMTKqtSi/Pii0pzU4kOM0hwsSuK81QwPooUE0hNLUrNTUwtSi2CyTBycUg2M 1o9jHWcEh3CxC/q8tpC6vcyIw7vrQt+qdq9Pyw1PJWya8JP5/hGD3sN6a0S/TNkz6fWui9Yn 1l9Rj5NljX4VKq2xY1q179aaLyVbTBc2yTev2HQzeZ387W2ipc+0Aj8cXNjD+GVXnTTn6Zj+ dR4XDf69PuX7dXLKzoqwSEV39w+Zcm5v2M+8V2Ipzkg01GIuKk4EANLqDwmrAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpmluLIzCtJLcpLzFFi42I5/e/4Vd3d9TNiDF5sYbO4te4cq8XGGetZ La58fc9mMen+BBaL8+c3sFvMOL+PyWLtkbvsDuwem1Z1snnc7z7O5NG3ZRWjx+dNcgEsUVw2 Kak5mWWpRfp2CVwZTV92sRU0K1ZM+TOZpYGxVaaLkZNDQsBEYs76L0xdjFwcQgJLGCXutb6C chqZJJ48/sIOUsUmoCnxd/NNNhBbREBZYtW+dnaQImaB34wSn2d8ZQZJCAuES3T9P8cEYrMI qErcvzCNEcTmFbCUmDFnFRPEOnmJ1RsOgNVzAsX/n74EZgsJWEjsXdbIPoGRZwEjwypGkdTS 4tz03GJDveLE3OLSvHS95PzcTYzAoNl27OfmHYyXNgYfYhTgYFTi4XXYMz1GiDWxrLgy9xCj BAezkgjvE9EZMUK8KYmVValF+fFFpTmpxYcYpTlYlMR5zxtURgkJpCeWpGanphakFsFkmTg4 pRoYw4/kHfVOfHxqs4P4z5dHFx3ktz1Xs1j90ur8kFWfb9+dt+brN/eDW+++PJ2weB6Lj++D xr4YoWApG/nz25ROpjxwMunebCx61ufKhIce139dvrNpM2fofE722wW9O4IFE404nyvr9CVr HThtleFc59YfuWzD+uz1vwM1o7k0hPy5Fzq8u1mxW4mlOCPRUIu5qDgRACwr6cMWAgAA X-CMS-MailID: 20190325071403eucas1p15267241039dc4b1911f2357b7a43baac CMS-TYPE: 201P X-CMS-RootMailID: 20190325071403eucas1p15267241039dc4b1911f2357b7a43baac 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 YVU420 requires swapping addresses of U and V planes. Signed-off-by: Andrzej Hajda --- drivers/gpu/drm/exynos/exynos_drm_gsc.c | 52 ++++++++++++++++++------- 1 file changed, 37 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/drm/exynos/exynos_drm_gsc.c b/drivers/gpu/drm/exynos/exynos_drm_gsc.c index c7a97d053ab1..f75739e8bc55 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_gsc.c +++ b/drivers/gpu/drm/exynos/exynos_drm_gsc.c @@ -535,10 +535,8 @@ static void gsc_src_set_fmt(struct gsc_context *ctx, u32 fmt, bool tiled) cfg |= GSC_IN_YUV422_3P; break; case DRM_FORMAT_YUV420: - cfg |= (GSC_IN_CHROMA_ORDER_CBCR | GSC_IN_YUV420_3P); - break; case DRM_FORMAT_YVU420: - cfg |= (GSC_IN_CHROMA_ORDER_CRCB | GSC_IN_YUV420_3P); + cfg |= (GSC_IN_CHROMA_ORDER_CBCR | GSC_IN_YUV420_3P); break; case DRM_FORMAT_NV12: cfg |= (GSC_IN_CHROMA_ORDER_CBCR | GSC_IN_YUV420_2P); @@ -658,13 +656,32 @@ static void gsc_src_set_buf_seq(struct gsc_context *ctx, u32 buf_id, gsc_write(cfg, GSC_IN_BASE_ADDR_CR_MASK); } +/* returns HW plane index based on pixel format */ +static int gsc_hw_plane_index(int index, u32 format) +{ + switch (format) { + case DRM_FORMAT_YVU420: + switch (index) { + case 0: return 0; + case 1: return 2; + case 2: return 1; + } + default: + return index; + } +} + static void gsc_src_set_addr(struct gsc_context *ctx, u32 buf_id, struct exynos_drm_ipp_buffer *buf) { + int idx; + /* address register set */ gsc_write(buf->dma_addr[0], GSC_IN_BASE_ADDR_Y(buf_id)); - gsc_write(buf->dma_addr[1], GSC_IN_BASE_ADDR_CB(buf_id)); - gsc_write(buf->dma_addr[2], GSC_IN_BASE_ADDR_CR(buf_id)); + idx = gsc_hw_plane_index(1, buf->format->format); + gsc_write(buf->dma_addr[idx], GSC_IN_BASE_ADDR_CB(buf_id)); + idx = gsc_hw_plane_index(2, buf->format->format); + gsc_write(buf->dma_addr[idx], GSC_IN_BASE_ADDR_CR(buf_id)); gsc_src_set_buf_seq(ctx, buf_id, true); } @@ -722,10 +739,8 @@ static void gsc_dst_set_fmt(struct gsc_context *ctx, u32 fmt, bool tiled) cfg |= GSC_OUT_YUV422_3P; break; case DRM_FORMAT_YUV420: - cfg |= (GSC_OUT_CHROMA_ORDER_CBCR | GSC_OUT_YUV420_3P); - break; case DRM_FORMAT_YVU420: - cfg |= (GSC_OUT_CHROMA_ORDER_CRCB | GSC_OUT_YUV420_3P); + cfg |= (GSC_OUT_CHROMA_ORDER_CBCR | GSC_OUT_YUV420_3P); break; case DRM_FORMAT_NV12: cfg |= (GSC_OUT_CHROMA_ORDER_CBCR | GSC_OUT_YUV420_2P); @@ -985,10 +1000,13 @@ static void gsc_dst_set_buf_seq(struct gsc_context *ctx, u32 buf_id, static void gsc_dst_set_addr(struct gsc_context *ctx, u32 buf_id, struct exynos_drm_ipp_buffer *buf) { - /* address register set */ + int i; + gsc_write(buf->dma_addr[0], GSC_OUT_BASE_ADDR_Y(buf_id)); - gsc_write(buf->dma_addr[1], GSC_OUT_BASE_ADDR_CB(buf_id)); - gsc_write(buf->dma_addr[2], GSC_OUT_BASE_ADDR_CR(buf_id)); + i = gsc_hw_plane_index(1, buf->format->format); + gsc_write(buf->dma_addr[i], GSC_OUT_BASE_ADDR_CB(buf_id)); + i = gsc_hw_plane_index(2, buf->format->format); + gsc_write(buf->dma_addr[i], GSC_OUT_BASE_ADDR_CR(buf_id)); gsc_dst_set_buf_seq(ctx, buf_id, true); } @@ -1238,10 +1256,14 @@ static void gsc_update_plane(struct exynos_drm_plane *plane) gsc_write(BIT(16) * cropped_w / scaled_w, GSC_MAIN_H_RATIO); gsc_write(BIT(16) * cropped_h / scaled_h, GSC_MAIN_V_RATIO); gsc_write(exynos_drm_fb_dma_addr(fb, 0), GSC_IN_BASE_ADDR_Y(0)); - if (fb->format->num_planes > 1) - gsc_write(exynos_drm_fb_dma_addr(fb, 1), GSC_IN_BASE_ADDR_CB(0)); - if (fb->format->num_planes > 2) - gsc_write(exynos_drm_fb_dma_addr(fb, 2), GSC_IN_BASE_ADDR_CR(0)); + if (fb->format->num_planes > 1) { + i = gsc_hw_plane_index(1, fb->format->format); + gsc_write(exynos_drm_fb_dma_addr(fb, i), GSC_IN_BASE_ADDR_CB(0)); + } + if (fb->format->num_planes > 2) { + i = gsc_hw_plane_index(2, fb->format->format); + gsc_write(exynos_drm_fb_dma_addr(fb, i), GSC_IN_BASE_ADDR_CR(0)); + } gsc_src_set_fmt(ctx, fb->format->format, fb->modifier); gsc_write(scaled_w * scaled_h, GSC_SMART_IF_PIXEL_NUM); gsc_write(GSC_ENABLE_SFR_UPDATE | GSC_ENABLE_ON, GSC_ENABLE);