From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 550B8C10F1E for ; Tue, 20 Dec 2022 09:19:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233318AbiLTJTC (ORCPT ); Tue, 20 Dec 2022 04:19:02 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33284 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233153AbiLTJTA (ORCPT ); Tue, 20 Dec 2022 04:19:00 -0500 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AA5649FF1; Tue, 20 Dec 2022 01:18:59 -0800 (PST) Received: from pendragon.ideasonboard.com (213-243-189-158.bb.dnainternet.fi [213.243.189.158]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 9D914706; Tue, 20 Dec 2022 10:18:57 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1671527937; bh=vp/jLlgHTMyhkMCI5iKwinCuCAtB54xr6If3QGfXVPA=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=Ak0rRTAUcA2soV9TB4Hdh+8OGgP9hQClDUHGOhmlQg9KjpALRlt5QhnEwjK1kwA6P CLBmEZf+sC+/H/s4cozZHFXfkLHgd4AUvRbSTXpp6dgkTIy2RVGnFIBOcQZjvX+9m5 tta1NulLeJAO1v7ci2E0qE1AnWAHDWY9J0tbdyFw= Date: Tue, 20 Dec 2022 11:18:51 +0200 From: Laurent Pinchart To: Hans Verkuil Cc: Tomi Valkeinen , linux-renesas-soc@vger.kernel.org, linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org, Kieran Bingham , Nicolas Dufresne , Geert Uytterhoeven , Sakari Ailus Subject: Re: [PATCH v2 7/7] drm: rcar-du: Add new formats (2-10-10-10 ARGB, Y210) Message-ID: References: <20221219140139.294245-1-tomi.valkeinen+renesas@ideasonboard.com> <20221219140139.294245-8-tomi.valkeinen+renesas@ideasonboard.com> <2f252958-1bb1-006a-b450-1315be8a3c9f@xs4all.nl> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <2f252958-1bb1-006a-b450-1315be8a3c9f@xs4all.nl> Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org Hello, On Tue, Dec 20, 2022 at 10:01:04AM +0100, Hans Verkuil wrote: > On 19/12/2022 22:47, Laurent Pinchart wrote: > > Hi Tomi, > > > > (CC'ing Sakari and Hans) > > > > Thank you for the patch. > > > > On Mon, Dec 19, 2022 at 04:01:39PM +0200, Tomi Valkeinen wrote: > >> Add new pixel formats: RGBX1010102, RGBA1010102, ARGB2101010 and Y210. > >> > >> Signed-off-by: Tomi Valkeinen > >> --- > >> drivers/gpu/drm/rcar-du/rcar_du_kms.c | 24 +++++++++++++ > >> drivers/gpu/drm/rcar-du/rcar_du_vsp.c | 49 +++++++++++++++++++++++++-- > >> 2 files changed, 71 insertions(+), 2 deletions(-) > >> > >> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_kms.c b/drivers/gpu/drm/rcar-du/rcar_du_kms.c > >> index 8c2719efda2a..8ccabf5a30c4 100644 > >> --- a/drivers/gpu/drm/rcar-du/rcar_du_kms.c > >> +++ b/drivers/gpu/drm/rcar-du/rcar_du_kms.c > >> @@ -259,6 +259,24 @@ static const struct rcar_du_format_info rcar_du_format_infos[] = { > >> .bpp = 32, > >> .planes = 1, > >> .hsub = 1, > >> + }, { > >> + .fourcc = DRM_FORMAT_RGBX1010102, > > > > Ah, here the format makes sense. > > > >> + .v4l2 = V4L2_PIX_FMT_XBGR2101010, > > > > But this is horrible :-( Could we use the same names as DRM for new > > formats, when there is no conflict with existing V4L2 formats ? > > > > Sakari, Hans, what do you think ? Please see patch 1/7 in the series for > > the format definitions. > > V4L2 describes pixel formats based on how they appear in memory from the > lowest to highest memory address. > > If I am not mistaken, DRM uses the CPU order. So that explains the difference > in naming. I don't think we should hide that difference. And V4L2 has been > quite consistent in following memory ordering in the naming (except possibly > for some of the really old pixelformats). We depart from that rule with at least the following RGB formats: V4L2_PIX_FMT_XBGR32 V4L2_PIX_FMT_BGRX32 V4L2_PIX_FMT_ABGR32 V4L2_PIX_FMT_BGRA32 While the following formats follow the rule: V4L2_PIX_FMT_RGB24 V4L2_PIX_FMT_BGR24 V4L2_PIX_FMT_XRGB32 V4L2_PIX_FMT_RGBX32 V4L2_PIX_FMT_RGBA32 V4L2_PIX_FMT_ARGB32 For 16-bit RGB formats, we name them based on the order in a 16-bit word which is then stored in memory in little endian (except for the formats explicitly defined as big-endian): #define V4L2_PIX_FMT_RGB444 v4l2_fourcc('R', '4', '4', '4') /* 16 xxxxrrrr ggggbbbb */ #define V4L2_PIX_FMT_ARGB444 v4l2_fourcc('A', 'R', '1', '2') /* 16 aaaarrrr ggggbbbb */ #define V4L2_PIX_FMT_XRGB444 v4l2_fourcc('X', 'R', '1', '2') /* 16 xxxxrrrr ggggbbbb */ #define V4L2_PIX_FMT_RGBA444 v4l2_fourcc('R', 'A', '1', '2') /* 16 rrrrgggg bbbbaaaa */ #define V4L2_PIX_FMT_RGBX444 v4l2_fourcc('R', 'X', '1', '2') /* 16 rrrrgggg bbbbxxxx */ #define V4L2_PIX_FMT_ABGR444 v4l2_fourcc('A', 'B', '1', '2') /* 16 aaaabbbb ggggrrrr */ #define V4L2_PIX_FMT_XBGR444 v4l2_fourcc('X', 'B', '1', '2') /* 16 xxxxbbbb ggggrrrr */ #define V4L2_PIX_FMT_BGRA444 v4l2_fourcc('G', 'A', '1', '2') /* 16 bbbbgggg rrrraaaa */ #define V4L2_PIX_FMT_BGRX444 v4l2_fourcc('B', 'X', '1', '2') /* 16 bbbbgggg rrrrxxxx */ #define V4L2_PIX_FMT_RGB555 v4l2_fourcc('R', 'G', 'B', 'O') /* 16 RGB-5-5-5 */ #define V4L2_PIX_FMT_ARGB555 v4l2_fourcc('A', 'R', '1', '5') /* 16 ARGB-1-5-5-5 */ #define V4L2_PIX_FMT_XRGB555 v4l2_fourcc('X', 'R', '1', '5') /* 16 XRGB-1-5-5-5 */ #define V4L2_PIX_FMT_RGBA555 v4l2_fourcc('R', 'A', '1', '5') /* 16 RGBA-5-5-5-1 */ #define V4L2_PIX_FMT_RGBX555 v4l2_fourcc('R', 'X', '1', '5') /* 16 RGBX-5-5-5-1 */ #define V4L2_PIX_FMT_ABGR555 v4l2_fourcc('A', 'B', '1', '5') /* 16 ABGR-1-5-5-5 */ #define V4L2_PIX_FMT_XBGR555 v4l2_fourcc('X', 'B', '1', '5') /* 16 XBGR-1-5-5-5 */ #define V4L2_PIX_FMT_BGRA555 v4l2_fourcc('B', 'A', '1', '5') /* 16 BGRA-5-5-5-1 */ #define V4L2_PIX_FMT_BGRX555 v4l2_fourcc('B', 'X', '1', '5') /* 16 BGRX-5-5-5-1 */ #define V4L2_PIX_FMT_RGB565 v4l2_fourcc('R', 'G', 'B', 'P') /* 16 RGB-5-6-5 */ I would thus argue that, at least for RGB formats, naming them based on the byte order in memory isn't such a clear cut rule. > Departing from that would be more of a hindrance than a help, IMHO. > > >> + .bpp = 32, > >> + .planes = 1, > >> + .hsub = 1, > >> + }, { > >> + .fourcc = DRM_FORMAT_RGBA1010102, > >> + .v4l2 = V4L2_PIX_FMT_ABGR2101010, > >> + .bpp = 32, > >> + .planes = 1, > >> + .hsub = 1, > >> + }, { > >> + .fourcc = DRM_FORMAT_ARGB2101010, > >> + .v4l2 = V4L2_PIX_FMT_BGRA1010102, > >> + .bpp = 32, > >> + .planes = 1, > >> + .hsub = 1, > >> }, { > >> .fourcc = DRM_FORMAT_YVYU, > >> .v4l2 = V4L2_PIX_FMT_YVYU, > >> @@ -307,6 +325,12 @@ static const struct rcar_du_format_info rcar_du_format_infos[] = { > >> .bpp = 24, > >> .planes = 3, > >> .hsub = 1, > >> + }, { > >> + .fourcc = DRM_FORMAT_Y210, > >> + .v4l2 = V4L2_PIX_FMT_Y210, > >> + .bpp = 32, > >> + .planes = 1, > >> + .hsub = 2, > >> }, > > > > Any reason why you'd not adding Y212 support already ? > > > >> }; > >> > >> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_vsp.c b/drivers/gpu/drm/rcar-du/rcar_du_vsp.c > >> index e465aef41585..6f3e109a4f80 100644 > >> --- a/drivers/gpu/drm/rcar-du/rcar_du_vsp.c > >> +++ b/drivers/gpu/drm/rcar-du/rcar_du_vsp.c > >> @@ -139,6 +139,42 @@ static const u32 rcar_du_vsp_formats[] = { > >> DRM_FORMAT_YVU444, > >> }; > >> > >> +/* > >> + * Gen4 supports the same formats as above, and additionally 2-10-10-10 RGB > >> + * formats and Y210 format. > >> + */ > >> +static const u32 rcar_du_vsp_formats_gen4[] = { > >> + DRM_FORMAT_RGB332, > >> + DRM_FORMAT_ARGB4444, > >> + DRM_FORMAT_XRGB4444, > >> + DRM_FORMAT_ARGB1555, > >> + DRM_FORMAT_XRGB1555, > >> + DRM_FORMAT_RGB565, > >> + DRM_FORMAT_BGR888, > >> + DRM_FORMAT_RGB888, > >> + DRM_FORMAT_BGRA8888, > >> + DRM_FORMAT_BGRX8888, > >> + DRM_FORMAT_ARGB8888, > >> + DRM_FORMAT_XRGB8888, > >> + DRM_FORMAT_RGBX1010102, > >> + DRM_FORMAT_RGBA1010102, > >> + DRM_FORMAT_ARGB2101010, > >> + DRM_FORMAT_UYVY, > >> + DRM_FORMAT_YUYV, > >> + DRM_FORMAT_YVYU, > >> + DRM_FORMAT_NV12, > >> + DRM_FORMAT_NV21, > >> + DRM_FORMAT_NV16, > >> + DRM_FORMAT_NV61, > >> + DRM_FORMAT_YUV420, > >> + DRM_FORMAT_YVU420, > >> + DRM_FORMAT_YUV422, > >> + DRM_FORMAT_YVU422, > >> + DRM_FORMAT_YUV444, > >> + DRM_FORMAT_YVU444, > >> + DRM_FORMAT_Y210, > >> +}; > >> + > >> static void rcar_du_vsp_plane_setup(struct rcar_du_vsp_plane *plane) > >> { > >> struct rcar_du_vsp_plane_state *state = > >> @@ -436,14 +472,23 @@ int rcar_du_vsp_init(struct rcar_du_vsp *vsp, struct device_node *np, > >> ? DRM_PLANE_TYPE_PRIMARY > >> : DRM_PLANE_TYPE_OVERLAY; > >> struct rcar_du_vsp_plane *plane = &vsp->planes[i]; > >> + unsigned int num_formats; > >> + const u32 *formats; > >> + > >> + if (rcdu->info->gen < 4) { > >> + num_formats = ARRAY_SIZE(rcar_du_vsp_formats); > >> + formats = rcar_du_vsp_formats; > >> + } else { > >> + num_formats = ARRAY_SIZE(rcar_du_vsp_formats_gen4); > >> + formats = rcar_du_vsp_formats_gen4; > >> + } > >> > >> plane->vsp = vsp; > >> plane->index = i; > >> > >> ret = drm_universal_plane_init(&rcdu->ddev, &plane->plane, > >> crtcs, &rcar_du_vsp_plane_funcs, > >> - rcar_du_vsp_formats, > >> - ARRAY_SIZE(rcar_du_vsp_formats), > >> + formats, num_formats, > >> NULL, type, NULL); > >> if (ret < 0) > >> return ret; > > > -- Regards, Laurent Pinchart From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B558BC4332F for ; Tue, 20 Dec 2022 09:19:10 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id D431810E347; Tue, 20 Dec 2022 09:19:08 +0000 (UTC) Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8BAFE10E347 for ; Tue, 20 Dec 2022 09:19:00 +0000 (UTC) Received: from pendragon.ideasonboard.com (213-243-189-158.bb.dnainternet.fi [213.243.189.158]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 9D914706; Tue, 20 Dec 2022 10:18:57 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1671527937; bh=vp/jLlgHTMyhkMCI5iKwinCuCAtB54xr6If3QGfXVPA=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=Ak0rRTAUcA2soV9TB4Hdh+8OGgP9hQClDUHGOhmlQg9KjpALRlt5QhnEwjK1kwA6P CLBmEZf+sC+/H/s4cozZHFXfkLHgd4AUvRbSTXpp6dgkTIy2RVGnFIBOcQZjvX+9m5 tta1NulLeJAO1v7ci2E0qE1AnWAHDWY9J0tbdyFw= Date: Tue, 20 Dec 2022 11:18:51 +0200 From: Laurent Pinchart To: Hans Verkuil Subject: Re: [PATCH v2 7/7] drm: rcar-du: Add new formats (2-10-10-10 ARGB, Y210) Message-ID: References: <20221219140139.294245-1-tomi.valkeinen+renesas@ideasonboard.com> <20221219140139.294245-8-tomi.valkeinen+renesas@ideasonboard.com> <2f252958-1bb1-006a-b450-1315be8a3c9f@xs4all.nl> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <2f252958-1bb1-006a-b450-1315be8a3c9f@xs4all.nl> X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kieran Bingham , dri-devel@lists.freedesktop.org, Nicolas Dufresne , linux-renesas-soc@vger.kernel.org, Geert Uytterhoeven , Tomi Valkeinen , Sakari Ailus , linux-media@vger.kernel.org Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Hello, On Tue, Dec 20, 2022 at 10:01:04AM +0100, Hans Verkuil wrote: > On 19/12/2022 22:47, Laurent Pinchart wrote: > > Hi Tomi, > > > > (CC'ing Sakari and Hans) > > > > Thank you for the patch. > > > > On Mon, Dec 19, 2022 at 04:01:39PM +0200, Tomi Valkeinen wrote: > >> Add new pixel formats: RGBX1010102, RGBA1010102, ARGB2101010 and Y210. > >> > >> Signed-off-by: Tomi Valkeinen > >> --- > >> drivers/gpu/drm/rcar-du/rcar_du_kms.c | 24 +++++++++++++ > >> drivers/gpu/drm/rcar-du/rcar_du_vsp.c | 49 +++++++++++++++++++++++++-- > >> 2 files changed, 71 insertions(+), 2 deletions(-) > >> > >> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_kms.c b/drivers/gpu/drm/rcar-du/rcar_du_kms.c > >> index 8c2719efda2a..8ccabf5a30c4 100644 > >> --- a/drivers/gpu/drm/rcar-du/rcar_du_kms.c > >> +++ b/drivers/gpu/drm/rcar-du/rcar_du_kms.c > >> @@ -259,6 +259,24 @@ static const struct rcar_du_format_info rcar_du_format_infos[] = { > >> .bpp = 32, > >> .planes = 1, > >> .hsub = 1, > >> + }, { > >> + .fourcc = DRM_FORMAT_RGBX1010102, > > > > Ah, here the format makes sense. > > > >> + .v4l2 = V4L2_PIX_FMT_XBGR2101010, > > > > But this is horrible :-( Could we use the same names as DRM for new > > formats, when there is no conflict with existing V4L2 formats ? > > > > Sakari, Hans, what do you think ? Please see patch 1/7 in the series for > > the format definitions. > > V4L2 describes pixel formats based on how they appear in memory from the > lowest to highest memory address. > > If I am not mistaken, DRM uses the CPU order. So that explains the difference > in naming. I don't think we should hide that difference. And V4L2 has been > quite consistent in following memory ordering in the naming (except possibly > for some of the really old pixelformats). We depart from that rule with at least the following RGB formats: V4L2_PIX_FMT_XBGR32 V4L2_PIX_FMT_BGRX32 V4L2_PIX_FMT_ABGR32 V4L2_PIX_FMT_BGRA32 While the following formats follow the rule: V4L2_PIX_FMT_RGB24 V4L2_PIX_FMT_BGR24 V4L2_PIX_FMT_XRGB32 V4L2_PIX_FMT_RGBX32 V4L2_PIX_FMT_RGBA32 V4L2_PIX_FMT_ARGB32 For 16-bit RGB formats, we name them based on the order in a 16-bit word which is then stored in memory in little endian (except for the formats explicitly defined as big-endian): #define V4L2_PIX_FMT_RGB444 v4l2_fourcc('R', '4', '4', '4') /* 16 xxxxrrrr ggggbbbb */ #define V4L2_PIX_FMT_ARGB444 v4l2_fourcc('A', 'R', '1', '2') /* 16 aaaarrrr ggggbbbb */ #define V4L2_PIX_FMT_XRGB444 v4l2_fourcc('X', 'R', '1', '2') /* 16 xxxxrrrr ggggbbbb */ #define V4L2_PIX_FMT_RGBA444 v4l2_fourcc('R', 'A', '1', '2') /* 16 rrrrgggg bbbbaaaa */ #define V4L2_PIX_FMT_RGBX444 v4l2_fourcc('R', 'X', '1', '2') /* 16 rrrrgggg bbbbxxxx */ #define V4L2_PIX_FMT_ABGR444 v4l2_fourcc('A', 'B', '1', '2') /* 16 aaaabbbb ggggrrrr */ #define V4L2_PIX_FMT_XBGR444 v4l2_fourcc('X', 'B', '1', '2') /* 16 xxxxbbbb ggggrrrr */ #define V4L2_PIX_FMT_BGRA444 v4l2_fourcc('G', 'A', '1', '2') /* 16 bbbbgggg rrrraaaa */ #define V4L2_PIX_FMT_BGRX444 v4l2_fourcc('B', 'X', '1', '2') /* 16 bbbbgggg rrrrxxxx */ #define V4L2_PIX_FMT_RGB555 v4l2_fourcc('R', 'G', 'B', 'O') /* 16 RGB-5-5-5 */ #define V4L2_PIX_FMT_ARGB555 v4l2_fourcc('A', 'R', '1', '5') /* 16 ARGB-1-5-5-5 */ #define V4L2_PIX_FMT_XRGB555 v4l2_fourcc('X', 'R', '1', '5') /* 16 XRGB-1-5-5-5 */ #define V4L2_PIX_FMT_RGBA555 v4l2_fourcc('R', 'A', '1', '5') /* 16 RGBA-5-5-5-1 */ #define V4L2_PIX_FMT_RGBX555 v4l2_fourcc('R', 'X', '1', '5') /* 16 RGBX-5-5-5-1 */ #define V4L2_PIX_FMT_ABGR555 v4l2_fourcc('A', 'B', '1', '5') /* 16 ABGR-1-5-5-5 */ #define V4L2_PIX_FMT_XBGR555 v4l2_fourcc('X', 'B', '1', '5') /* 16 XBGR-1-5-5-5 */ #define V4L2_PIX_FMT_BGRA555 v4l2_fourcc('B', 'A', '1', '5') /* 16 BGRA-5-5-5-1 */ #define V4L2_PIX_FMT_BGRX555 v4l2_fourcc('B', 'X', '1', '5') /* 16 BGRX-5-5-5-1 */ #define V4L2_PIX_FMT_RGB565 v4l2_fourcc('R', 'G', 'B', 'P') /* 16 RGB-5-6-5 */ I would thus argue that, at least for RGB formats, naming them based on the byte order in memory isn't such a clear cut rule. > Departing from that would be more of a hindrance than a help, IMHO. > > >> + .bpp = 32, > >> + .planes = 1, > >> + .hsub = 1, > >> + }, { > >> + .fourcc = DRM_FORMAT_RGBA1010102, > >> + .v4l2 = V4L2_PIX_FMT_ABGR2101010, > >> + .bpp = 32, > >> + .planes = 1, > >> + .hsub = 1, > >> + }, { > >> + .fourcc = DRM_FORMAT_ARGB2101010, > >> + .v4l2 = V4L2_PIX_FMT_BGRA1010102, > >> + .bpp = 32, > >> + .planes = 1, > >> + .hsub = 1, > >> }, { > >> .fourcc = DRM_FORMAT_YVYU, > >> .v4l2 = V4L2_PIX_FMT_YVYU, > >> @@ -307,6 +325,12 @@ static const struct rcar_du_format_info rcar_du_format_infos[] = { > >> .bpp = 24, > >> .planes = 3, > >> .hsub = 1, > >> + }, { > >> + .fourcc = DRM_FORMAT_Y210, > >> + .v4l2 = V4L2_PIX_FMT_Y210, > >> + .bpp = 32, > >> + .planes = 1, > >> + .hsub = 2, > >> }, > > > > Any reason why you'd not adding Y212 support already ? > > > >> }; > >> > >> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_vsp.c b/drivers/gpu/drm/rcar-du/rcar_du_vsp.c > >> index e465aef41585..6f3e109a4f80 100644 > >> --- a/drivers/gpu/drm/rcar-du/rcar_du_vsp.c > >> +++ b/drivers/gpu/drm/rcar-du/rcar_du_vsp.c > >> @@ -139,6 +139,42 @@ static const u32 rcar_du_vsp_formats[] = { > >> DRM_FORMAT_YVU444, > >> }; > >> > >> +/* > >> + * Gen4 supports the same formats as above, and additionally 2-10-10-10 RGB > >> + * formats and Y210 format. > >> + */ > >> +static const u32 rcar_du_vsp_formats_gen4[] = { > >> + DRM_FORMAT_RGB332, > >> + DRM_FORMAT_ARGB4444, > >> + DRM_FORMAT_XRGB4444, > >> + DRM_FORMAT_ARGB1555, > >> + DRM_FORMAT_XRGB1555, > >> + DRM_FORMAT_RGB565, > >> + DRM_FORMAT_BGR888, > >> + DRM_FORMAT_RGB888, > >> + DRM_FORMAT_BGRA8888, > >> + DRM_FORMAT_BGRX8888, > >> + DRM_FORMAT_ARGB8888, > >> + DRM_FORMAT_XRGB8888, > >> + DRM_FORMAT_RGBX1010102, > >> + DRM_FORMAT_RGBA1010102, > >> + DRM_FORMAT_ARGB2101010, > >> + DRM_FORMAT_UYVY, > >> + DRM_FORMAT_YUYV, > >> + DRM_FORMAT_YVYU, > >> + DRM_FORMAT_NV12, > >> + DRM_FORMAT_NV21, > >> + DRM_FORMAT_NV16, > >> + DRM_FORMAT_NV61, > >> + DRM_FORMAT_YUV420, > >> + DRM_FORMAT_YVU420, > >> + DRM_FORMAT_YUV422, > >> + DRM_FORMAT_YVU422, > >> + DRM_FORMAT_YUV444, > >> + DRM_FORMAT_YVU444, > >> + DRM_FORMAT_Y210, > >> +}; > >> + > >> static void rcar_du_vsp_plane_setup(struct rcar_du_vsp_plane *plane) > >> { > >> struct rcar_du_vsp_plane_state *state = > >> @@ -436,14 +472,23 @@ int rcar_du_vsp_init(struct rcar_du_vsp *vsp, struct device_node *np, > >> ? DRM_PLANE_TYPE_PRIMARY > >> : DRM_PLANE_TYPE_OVERLAY; > >> struct rcar_du_vsp_plane *plane = &vsp->planes[i]; > >> + unsigned int num_formats; > >> + const u32 *formats; > >> + > >> + if (rcdu->info->gen < 4) { > >> + num_formats = ARRAY_SIZE(rcar_du_vsp_formats); > >> + formats = rcar_du_vsp_formats; > >> + } else { > >> + num_formats = ARRAY_SIZE(rcar_du_vsp_formats_gen4); > >> + formats = rcar_du_vsp_formats_gen4; > >> + } > >> > >> plane->vsp = vsp; > >> plane->index = i; > >> > >> ret = drm_universal_plane_init(&rcdu->ddev, &plane->plane, > >> crtcs, &rcar_du_vsp_plane_funcs, > >> - rcar_du_vsp_formats, > >> - ARRAY_SIZE(rcar_du_vsp_formats), > >> + formats, num_formats, > >> NULL, type, NULL); > >> if (ret < 0) > >> return ret; > > > -- Regards, Laurent Pinchart