From nobody Mon Dec 1 22:05:08 2025 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4335421C160 for ; Fri, 28 Nov 2025 21:07:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364022; cv=pass; b=Ev5lvK9rrZbY27bQuLSV90gwWajS4TYBmVzJT1syAZOzdoI8M3npYBXuRZkFRI3j9hqOyCtNx3CcXZDlAEvzHMLJOTvU1leSxxcY75y/L1tPBfkM8KzLQgBA/VND0qIUm+BHjTe608jrohjdK/IMdp3CeVEKMi12qwbTdbZbCx0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364022; c=relaxed/simple; bh=l5/UrJTtUsfZOICeBM/TJFiF4zPpXimUGux4GPieTog=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lPIMxYNZCS/Q4Jl/AqKBoy1Bw/Mb3++YQgNLCOhCz9n7TMVnB+5dEY22qSksLsqQzbN9o4w5oxLDARnV1N3MuP8uebD2MaYetgiJdZ7JwpxNr0dwsLA/hJrSBaVPyJF6O2DSiE6xYLZ/T9/HcU5xF/Y4bFIBfBIZXeH4/RUwVSw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=cbQh+aWa; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="cbQh+aWa" ARC-Seal: i=1; a=rsa-sha256; t=1764363967; cv=none; d=zohomail.com; s=zohoarc; b=RpS9rnGExoFB+0vB67u9j9ggnFuNCQx2UVVTWAT64kP6NnU2wyytctV77Gegjr7AysOLGaWAMntnDPINpM2ZrS5WdpmLqkKVsyqCSBluIyFY8rFVWelIeDErL/IwJpXfu7gmxUsiHUtiJcWniSDXhmg/vI/i6JgoTS9WSlmYPn8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1764363967; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=BtaaxO1e7m0aR9ynlBXtH+b1A1iSo4+WilL52QbHmd4=; b=EpmlfIhTjW1ngPb9iNycGB2pksoIp2SUpKlgcDEbYokAT/IT2R4RafyZeBRToCk/BKCtLjTFucUiLIlR5SZcVsH5L9wke2wYC0izwNwYg73/rTzEzcscf4nJ2PFsWKCUnK3sHwnDcOniepMG0bxBh5HFUcWgPsGYYYrt6f7CwsU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1764363967; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=BtaaxO1e7m0aR9ynlBXtH+b1A1iSo4+WilL52QbHmd4=; b=cbQh+aWaE2CGXpsQpgljbzMGbHY2fCfT45wbyajQeheP0VZCk23o/PL3Pn+AW4ye mzRPRpdNPfcmo5hlv+NqSw5ZFH2If1M7tCggLduD62OoFC6calPXkXo1qFME3Za8dxA rh1lIJeezRu1EZc2w5qraI4pRfp8YEKgZVcP+EuM= Received: by mx.zohomail.com with SMTPS id 1764363964727749.3717042138871; Fri, 28 Nov 2025 13:06:04 -0800 (PST) From: Nicolas Frattaroli Date: Fri, 28 Nov 2025 22:05:37 +0100 Subject: [PATCH v5 01/17] drm/amd/display: Remove unnecessary SIGNAL_TYPE_HDMI_TYPE_A check Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251128-color-format-v5-1-63e82f1db1e1@collabora.com> References: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> In-Reply-To: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> To: Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , =?utf-8?q?Christian_K=C3=B6nig?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Dmitry Baryshkov , Sascha Hauer , Rob Herring Cc: kernel@collabora.com, amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, Nicolas Frattaroli , Werner Sembach , Andri Yngvason X-Mailer: b4 0.14.3 From: Werner Sembach Remove unnecessary SIGNAL_TYPE_HDMI_TYPE_A check that was performed in the drm_mode_is_420_only() case, but not in the drm_mode_is_420_also() && force_yuv420_output case. Without further knowledge if YCbCr 4:2:0 is supported outside of HDMI, there is no reason to use RGB when the display reports drm_mode_is_420_only() even on a non HDMI connection. This patch also moves both checks in the same if-case. This eliminates an extra else-if-case. Signed-off-by: Werner Sembach Signed-off-by: Andri Yngvason Tested-by: Andri Yngvason Signed-off-by: Nicolas Frattaroli --- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gp= u/drm/amd/display/amdgpu_dm/amdgpu_dm.c index f02bcd108685..0b44bfe9e7e5 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -6668,12 +6668,8 @@ static void fill_stream_properties_from_drm_display_= mode( timing_out->v_border_top =3D 0; timing_out->v_border_bottom =3D 0; /* TODO: un-hardcode */ - if (drm_mode_is_420_only(info, mode_in) - && stream->signal =3D=3D SIGNAL_TYPE_HDMI_TYPE_A) - timing_out->pixel_encoding =3D PIXEL_ENCODING_YCBCR420; - else if (drm_mode_is_420_also(info, mode_in) - && aconnector - && aconnector->force_yuv420_output) + if (drm_mode_is_420_only(info, mode_in) || (drm_mode_is_420_also(info, mo= de_in) && + aconnector && aconnector->force_yuv420_output)) timing_out->pixel_encoding =3D PIXEL_ENCODING_YCBCR420; else if ((connector->display_info.color_formats & DRM_COLOR_FORMAT_YCBCR4= 22) && aconnector --=20 2.52.0 From nobody Mon Dec 1 22:05:08 2025 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 45291262FF8 for ; Fri, 28 Nov 2025 21:07:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364023; cv=pass; b=bDdPjtnph5UR6Vq6P3ROlvINMVxgTlPZOWAZ8e/YprS8xgFX4IS1lojqCqvd1GpyckwjraSBxy/ACc3dhNGqEUtTh+4VDBGQahZexQUzKV8QJmpIhgCcrSATSP1djJ7GjKlcMW8/EzZCKMt8uJtktq2++gUY7vYVG4DmIEKEAZo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364023; c=relaxed/simple; bh=lCVl1+QocT62dpvwqcrchEXKgbxFq8fXyolwNyvRUBU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=X6m9Wr3MIxb8tACUnUTneZGtz7Kv2UTYxMl83h965YOAAR8jCz+/i7eghBG58WNFrpAgW5Ric3csBFPIbwie4CjR2TjZ8Mmr4bkkMf0CflCw0Zyt4zfSSotDi35Ft9ddollw6qfeJrK+BFkMBklHiTZz0TgtwSVTHVBLjuWiIsc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=K9Bnk5L8; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="K9Bnk5L8" ARC-Seal: i=1; a=rsa-sha256; t=1764363975; cv=none; d=zohomail.com; s=zohoarc; b=S2K58xTcFXmWoEhgqy0qKPWrDl498HwgQtoDbpTPH8JlTgCM3nF0Na/cIToZt77CAUwbU8PdBBnsHzo0klVWV6owvs0PkO74d00T5+FqdgBGGs6HNMEQgUZf2CD7K2WjQqGQ4OOkkyrLINbAJW3vGiD9jFELia/Ev4jtaKPrMHY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1764363975; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=Vfcj6LoYRnSC3IIOqTJz3X8JC9SiWsOx17fDIMOWY6Y=; b=idHME+LugpSZoZY86e0wfzyaKxONWqngolsHsuZgCuw52z0/GnJ+5nfANHOvpLQwRe3/t/+bMTVBgR6OXzFbT+q80K5X34X0SmRMnuSqWKxWygyAvWJ9dAZdwDXnlvu10c6zNx5WRXfW4I28V9awoH2DnN/d8cpizLZpEl6VdjI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1764363975; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=Vfcj6LoYRnSC3IIOqTJz3X8JC9SiWsOx17fDIMOWY6Y=; b=K9Bnk5L8TbmN7j9HTSO/ePp0gcxAKPEzGI4Ipi9uaNRvnZOXDkwdy/m/foDVObOK Z0+TFCP7Ivd6Y3bpubtqWEUyZcKC2N6aB/rWcYNDYvZ74tbRyK1cVPi/tAVnzzcgNDA qtjOGKsl5iAACC4/uVTfLY4w5wuQUlx0FQVZhtm0= Received: by mx.zohomail.com with SMTPS id 176436397252764.085506405773; Fri, 28 Nov 2025 13:06:12 -0800 (PST) From: Nicolas Frattaroli Date: Fri, 28 Nov 2025 22:05:38 +0100 Subject: [PATCH v5 02/17] drm: Add new general DRM property "color format" Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251128-color-format-v5-2-63e82f1db1e1@collabora.com> References: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> In-Reply-To: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> To: Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , =?utf-8?q?Christian_K=C3=B6nig?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Dmitry Baryshkov , Sascha Hauer , Rob Herring Cc: kernel@collabora.com, amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, Nicolas Frattaroli , Andri Yngvason , Werner Sembach , Marius Vlad X-Mailer: b4 0.14.3 From: Andri Yngvason Add a new general DRM property named "color format" which can be used by userspace to request the display driver to output a particular color format. Possible options are: - auto (setup by default, driver internally picks the color format) - rgb - ycbcr444 - ycbcr422 - ycbcr420 Drivers should advertise from this list which formats they support. Together with this list and EDID data from the sink we should be able to relay a list of usable color formats to users to pick from. Signed-off-by: Werner Sembach Signed-off-by: Andri Yngvason Signed-off-by: Marius Vlad Signed-off-by: Nicolas Frattaroli --- drivers/gpu/drm/drm_atomic_helper.c | 5 ++ drivers/gpu/drm/drm_atomic_uapi.c | 11 +++ drivers/gpu/drm/drm_connector.c | 143 ++++++++++++++++++++++++++++++++= ++++ include/drm/drm_connector.h | 35 +++++++-- 4 files changed, 189 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atom= ic_helper.c index 10adac9397cf..ca2daa4c84de 100644 --- a/drivers/gpu/drm/drm_atomic_helper.c +++ b/drivers/gpu/drm/drm_atomic_helper.c @@ -736,6 +736,11 @@ drm_atomic_helper_check_modeset(struct drm_device *dev, if (old_connector_state->max_requested_bpc !=3D new_connector_state->max_requested_bpc) new_crtc_state->connectors_changed =3D true; + + if (old_connector_state->color_format !=3D + new_connector_state->color_format) + new_crtc_state->connectors_changed =3D true; + } =20 if (funcs->atomic_check) diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic= _uapi.c index 7320db4b8489..ecf30e23a736 100644 --- a/drivers/gpu/drm/drm_atomic_uapi.c +++ b/drivers/gpu/drm/drm_atomic_uapi.c @@ -915,6 +915,15 @@ static int drm_atomic_connector_set_property(struct dr= m_connector *connector, state->privacy_screen_sw_state =3D val; } else if (property =3D=3D connector->broadcast_rgb_property) { state->hdmi.broadcast_rgb =3D val; + } else if (property =3D=3D connector->color_format_property) { + if (val >=3D DRM_COLOR_FORMAT_COUNT) { + drm_dbg_atomic(connector->dev, + "[CONNECTOR:%d:%s] unknown color format %llu\n", + connector->base.id, connector->name, val); + return -EINVAL; + } + + state->color_format =3D val ? BIT(val - 1) : DRM_COLOR_FORMAT_AUTO; } else if (connector->funcs->atomic_set_property) { return connector->funcs->atomic_set_property(connector, state, property, val); @@ -1000,6 +1009,8 @@ drm_atomic_connector_get_property(struct drm_connecto= r *connector, *val =3D state->privacy_screen_sw_state; } else if (property =3D=3D connector->broadcast_rgb_property) { *val =3D state->hdmi.broadcast_rgb; + } else if (property =3D=3D connector->color_format_property) { + *val =3D ffs(state->color_format); } else if (connector->funcs->atomic_get_property) { return connector->funcs->atomic_get_property(connector, state, property, val); diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connecto= r.c index 4d6dc9ebfdb5..13151d9bfb82 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c @@ -1348,6 +1348,32 @@ static const char * const colorspace_names[] =3D { [DRM_MODE_COLORIMETRY_BT601_YCC] =3D "BT601_YCC", }; =20 +/** + * drm_get_color_format_name - return a string for color format + * @color_fmt: color format to return the name of + * + * Returns a string constant matching the format's name, or NULL if no mat= ch + * is found. + */ +const char *drm_get_color_format_name(enum drm_color_format color_fmt) +{ + switch (color_fmt) { + case DRM_COLOR_FORMAT_AUTO: + return "AUTO"; + case DRM_COLOR_FORMAT_RGB444: + return "RGB"; + case DRM_COLOR_FORMAT_YCBCR444: + return "YUV 4:4:4"; + case DRM_COLOR_FORMAT_YCBCR422: + return "YUV 4:2:2"; + case DRM_COLOR_FORMAT_YCBCR420: + return "YUV 4:2:0"; + default: + return NULL; + } +} +EXPORT_SYMBOL(drm_get_color_format_name); + /** * drm_get_colorspace_name - return a string for color encoding * @colorspace: color space to compute name of @@ -1377,6 +1403,20 @@ static const u32 hdmi_colorspaces =3D BIT(DRM_MODE_COLORIMETRY_DCI_P3_RGB_D65) | BIT(DRM_MODE_COLORIMETRY_DCI_P3_RGB_THEATER); =20 +/* already bit-shifted */ +static const u32 hdmi_colorformats =3D + DRM_COLOR_FORMAT_RGB444 | + DRM_COLOR_FORMAT_YCBCR444 | + DRM_COLOR_FORMAT_YCBCR422 | + DRM_COLOR_FORMAT_YCBCR420; + +/* already bit-shifted */ +static const u32 dp_colorformats =3D + DRM_COLOR_FORMAT_RGB444 | + DRM_COLOR_FORMAT_YCBCR444 | + DRM_COLOR_FORMAT_YCBCR422 | + DRM_COLOR_FORMAT_YCBCR420; + /* * As per DP 1.4a spec, 2.2.5.7.5 VSC SDP Payload for Pixel Encoding/Color= imetry * Format Table 2-120 @@ -2628,6 +2668,89 @@ int drm_mode_create_hdmi_colorspace_property(struct = drm_connector *connector, } EXPORT_SYMBOL(drm_mode_create_hdmi_colorspace_property); =20 +/** + * drm_mode_create_color_format_property - create color format property + * @connector: connector to create the color format property on + * @supported_color_formats: bitmask of &enum drm_color_format values the + * connector supports + * + * Called by a driver to create a color format property. Must be attached = to + * the desired connector afterwards. + * + * @supported_color_formats should only include color formats the connector + * type can actually support. + * + * Returns: + * 0 on success, negative errno on error + */ +int drm_mode_create_color_format_property(struct drm_connector *connector, + u32 supported_color_formats) +{ + struct drm_device *dev =3D connector->dev; + struct drm_prop_enum_list enum_list[DRM_COLOR_FORMAT_COUNT]; + unsigned int len =3D 1; + unsigned int i =3D 1; + u32 fmt; + + if (connector->color_format_property) + return 0; + + if (!supported_color_formats) { + drm_err(dev, "No supported color formats provided on [CONNECTOR:%d:%s]\n= ", + connector->base.id, connector->name); + return -EINVAL; + } + + if (supported_color_formats & ~GENMASK_U32(DRM_COLOR_FORMAT_COUNT - 1, 0)= ) { + drm_err(dev, "Unknown color formats provided on [CONNECTOR:%d:%s]\n", + connector->base.id, connector->name); + return -EINVAL; + } + + switch (connector->connector_type) { + case DRM_MODE_CONNECTOR_HDMIA: + case DRM_MODE_CONNECTOR_HDMIB: + if (supported_color_formats & ~hdmi_colorformats) { + drm_err(dev, "Color formats not allowed for HDMI on [CONNECTOR:%d:%s]\n= ", + connector->base.id, connector->name); + return -EINVAL; + } + break; + case DRM_MODE_CONNECTOR_DisplayPort: + case DRM_MODE_CONNECTOR_eDP: + if (supported_color_formats & ~dp_colorformats) { + drm_err(dev, "Color formats not allowed for DP on [CONNECTOR:%d:%s]\n", + connector->base.id, connector->name); + return -EINVAL; + } + break; + } + + enum_list[0].name =3D drm_get_color_format_name(DRM_COLOR_FORMAT_AUTO); + enum_list[0].type =3D 0; + + while (supported_color_formats) { + fmt =3D BIT(i - 1); + if (supported_color_formats & fmt) { + supported_color_formats ^=3D fmt; + enum_list[len].name =3D drm_get_color_format_name(fmt); + enum_list[len].type =3D i; + len++; + } + i++; + } + + connector->color_format_property =3D + drm_property_create_enum(dev, DRM_MODE_PROP_ENUM, "color format", + enum_list, len); + + if (!connector->color_format_property) + return -ENOMEM; + + return 0; +} +EXPORT_SYMBOL(drm_mode_create_color_format_property); + /** * drm_mode_create_dp_colorspace_property - create dp colorspace property * @connector: connector to create the Colorspace property on. @@ -2845,6 +2968,26 @@ int drm_connector_attach_max_bpc_property(struct drm= _connector *connector, } EXPORT_SYMBOL(drm_connector_attach_max_bpc_property); =20 +/** + * drm_connector_attach_color_format_property - attach "force color format= " property + * @connector: connector to attach force color format property on. + * + * This is used to add support for selecting a color format on a connector. + * + * Returns: + * Zero on success, negative errno on failure. + */ +int drm_connector_attach_color_format_property(struct drm_connector *conne= ctor) +{ + struct drm_property *prop =3D connector->color_format_property; + + drm_object_attach_property(&connector->base, prop, DRM_COLOR_FORMAT_AUTO); + + return 0; +} +EXPORT_SYMBOL(drm_connector_attach_color_format_property); + + /** * drm_connector_attach_hdr_output_metadata_property - attach "HDR_OUTPUT_= METADA" property * @connector: connector to attach the property on. diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index 8f34f4b8183d..38968a557b82 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -556,6 +556,16 @@ enum drm_colorspace { DRM_MODE_COLORIMETRY_COUNT }; =20 +enum drm_color_format { + DRM_COLOR_FORMAT_AUTO =3D 0, + DRM_COLOR_FORMAT_RGB444 =3D BIT(0), + DRM_COLOR_FORMAT_YCBCR444 =3D BIT(1), + DRM_COLOR_FORMAT_YCBCR422 =3D BIT(2), + DRM_COLOR_FORMAT_YCBCR420 =3D BIT(3), +}; + +#define DRM_COLOR_FORMAT_COUNT 5 + /** * enum drm_bus_flags - bus_flags info for &drm_display_info * @@ -699,11 +709,6 @@ struct drm_display_info { */ enum subpixel_order subpixel_order; =20 -#define DRM_COLOR_FORMAT_RGB444 (1<<0) -#define DRM_COLOR_FORMAT_YCBCR444 (1<<1) -#define DRM_COLOR_FORMAT_YCBCR422 (1<<2) -#define DRM_COLOR_FORMAT_YCBCR420 (1<<3) - /** * @panel_orientation: Read only connector property for built-in panels, * indicating the orientation of the panel vs the device's casing. @@ -1107,6 +1112,13 @@ struct drm_connector_state { */ enum drm_colorspace colorspace; =20 + /** + * @color_format: State variable for Connector property to request + * color format change on Sink. This is most commonly used to switch + * between RGB to YUV and vice-versa. + */ + enum drm_color_format color_format; + /** * @writeback_job: Writeback job for writeback connectors * @@ -2060,6 +2072,12 @@ struct drm_connector { */ struct drm_property *colorspace_property; =20 + /** + * @color_format_property: Connector property to set the suitable + * color format supported by the sink. + */ + struct drm_property *color_format_property; + /** * @path_blob_ptr: * @@ -2461,6 +2479,9 @@ int drm_mode_create_dp_colorspace_property(struct drm= _connector *connector, int drm_mode_create_content_type_property(struct drm_device *dev); int drm_mode_create_suggested_offset_properties(struct drm_device *dev); =20 +int drm_mode_create_color_format_property(struct drm_connector *connector, + u32 supported_color_formats); + int drm_connector_set_path_property(struct drm_connector *connector, const char *path); int drm_connector_set_tile_property(struct drm_connector *connector); @@ -2542,6 +2563,10 @@ bool drm_connector_has_possible_encoder(struct drm_c= onnector *connector, struct drm_encoder *encoder); const char *drm_get_colorspace_name(enum drm_colorspace colorspace); =20 +int drm_connector_attach_color_format_property(struct drm_connector *conne= ctor); + +const char *drm_get_color_format_name(enum drm_color_format color_fmt); + /** * drm_for_each_connector_iter - connector_list iterator macro * @connector: &struct drm_connector pointer used as cursor --=20 2.52.0 From nobody Mon Dec 1 22:05:08 2025 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2FDB32C0F95 for ; Fri, 28 Nov 2025 21:07:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364023; cv=pass; b=sqzmbksaMIDq9UjN+WHXW+q19tV2WJrMVOAnBFIngaUUHKRRNiQ2SsEykg/VjOYwGr5N+JbkCX6p+E7PJVxV7jQlfGU9HXkWSWGlFSnsidhgGbSZmuMTVGUG97VsGK+d6s3//GYmo4OgnOjRd1KpTPFAoXkYfEgqJH+82WMwYp8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364023; c=relaxed/simple; bh=eB/dxazydzWcoNKKKp2V70b0X/8YMjD5hPdF2e8oMVA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZuLL+KKeuIe8zo2HrXyo2KCgNyjCA8iRTD+dMfiRNfSEXQZbNosd5kZECUXsScz1DagXZXIQC3dWwujKbsbnTCgdPMsxueQyHVJiqhBQxZjsF/kZ95r46Klu8Y6KKFryZDG/sNG/9K6qRK8AGeDLQrRg1k9PbTUNuPydFg3OzeY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=KDKeBn+2; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="KDKeBn+2" ARC-Seal: i=1; a=rsa-sha256; t=1764363981; cv=none; d=zohomail.com; s=zohoarc; b=KPDVuo9+EnGDLsuZweploJDFMSPxA3EwOZPw9aPHHhMz2DXUoWwiV7E4+0Iu/sGAn7NN1eYQDqoxdLuU/8cHLIKv0+/91JJqALSv8wTeWcUvbCWzKSKn1uyyUTX1dBoFx6mPE8NX2t6Z7KperR/W/6eMdu9mbtZ13QqW5iGa/2c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1764363981; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=IBxMWqX4+1NiMuBr6BGqM8VA6p9l+VBzuvI2JeWQJUk=; b=WX4+Q0p3B+Hc18XO9I7Zq5vEASk3TR/6sx4qIF/XSxXD38ioGMnk6rXUzQrVWiY7yhRgghHBEzt7bgMkvr2pKJ8hU9e9ouTecxHnKY41dseHzikuzWeSTfMSv3G0DI7VxHTCen7B4aIzcI/ZEM5NWr422qJHj9RcgNWHQC1MI6g= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1764363981; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=IBxMWqX4+1NiMuBr6BGqM8VA6p9l+VBzuvI2JeWQJUk=; b=KDKeBn+2oZerSX3QOpV37D79KcKpgD5NU/avAqmIfHn26P43sELtFMjA3PIbGItM oIF7jte8lXsA25VmsfvHpV2uKlWgnD1atDLKO+YR51bkC9N1NHmIRUclkz08CqWLEft 8DuabFfqAjcDNl6/1TXR7Sa1Yqtf1AFsv+/UCJJ8= Received: by mx.zohomail.com with SMTPS id 1764363979976684.7501352747894; Fri, 28 Nov 2025 13:06:19 -0800 (PST) From: Nicolas Frattaroli Date: Fri, 28 Nov 2025 22:05:39 +0100 Subject: [PATCH v5 03/17] drm: Add enum conversion from DRM_COLOR_FORMAT to HDMI_COLORSPACE Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251128-color-format-v5-3-63e82f1db1e1@collabora.com> References: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> In-Reply-To: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> To: Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , =?utf-8?q?Christian_K=C3=B6nig?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Dmitry Baryshkov , Sascha Hauer , Rob Herring Cc: kernel@collabora.com, amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, Nicolas Frattaroli , Marius Vlad X-Mailer: b4 0.14.3 From: Marius Vlad While the two enums have similar values, they're not identical, and HDMI's enum is defined as per the HDMI standard. Add a simple conversion function. Unexpected inputs aren't handled in any clever way, DRM_COLOR_FORMAT_AUTO and any other value that doesn't cleanly map to HDMI just gets returned as HDMI_COLORSPACE_RGB. Signed-off-by: Marius Vlad Signed-off-by: Nicolas Frattaroli --- include/drm/drm_connector.h | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index 38968a557b82..cf556f0e5731 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -2567,6 +2567,33 @@ int drm_connector_attach_color_format_property(struc= t drm_connector *connector); =20 const char *drm_get_color_format_name(enum drm_color_format color_fmt); =20 +/** + * drm_color_format_to_hdmi_colorspace - convert DRM color format to HDMI + * @fmt: the &enum drm_color_format to convert + * + * Convert a given &enum drm_color_format to an equivalent + * &enum hdmi_colorspace. For non-representable values and + * %DRM_COLOR_FORMAT_AUTO, the value %HDMI_COLORSPACE_RGB is returned. + * + * Returns: the corresponding &enum hdmi_colorspace value + */ +static inline enum hdmi_colorspace __pure +drm_color_format_to_hdmi_colorspace(enum drm_color_format fmt) +{ + switch (fmt) { + default: + case DRM_COLOR_FORMAT_AUTO: + case DRM_COLOR_FORMAT_RGB444: + return HDMI_COLORSPACE_RGB; + case DRM_COLOR_FORMAT_YCBCR444: + return HDMI_COLORSPACE_YUV444; + case DRM_COLOR_FORMAT_YCBCR422: + return HDMI_COLORSPACE_YUV422; + case DRM_COLOR_FORMAT_YCBCR420: + return HDMI_COLORSPACE_YUV420; + } +} + /** * drm_for_each_connector_iter - connector_list iterator macro * @connector: &struct drm_connector pointer used as cursor --=20 2.52.0 From nobody Mon Dec 1 22:05:08 2025 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 944902D12E7 for ; Fri, 28 Nov 2025 21:07:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364033; cv=pass; b=qtcxSD+hH/VLLkJrVZhzQ3hyW0afExMSRToLG+B6zzC/bJDTCQACh5tjpWbPzOkk3ypAnSSJnhFt5xB7ajIKNZx9EfSvpTYsl35FIzrKJPUrYxMnYDemK4w4H9sHbkSOKmtfyuDQhtbv/MuUojeXkhaOF4FHCRI2flb9POH06N0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364033; c=relaxed/simple; bh=5mjn6hgVLxKymwLhfUxBzRze/4db4pY+FDvT+feqyEM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=F4T//58dOvnd8S8JlNISuyZC0YL7ytDd5GvxUmoj+165LbM5gbtqVkFVImQpcQecvWJF8bVSnaO9KMvgu4lZZVMJXtJW139XaOIgW9Kuv5/s39DEAyKFYvCPC55NhG2rM2iRRYC3rUjPHpY+yZsLDz/xbQOTxZozUgR8nJRPBx0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=TQINlAX2; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="TQINlAX2" ARC-Seal: i=1; a=rsa-sha256; t=1764363989; cv=none; d=zohomail.com; s=zohoarc; b=ltRYQZMSQbQahlUaMGFUv6TAc+K5P0gZ2o8ic5Wwd4cO2qMDohs//nR7rv8Lg6X+p1WJRqy09HMZUne62eXZLSqKWP4BEKf0ix/I8jtCL7XqslFXfvgphSNKDKgxu0cLJSk1Hy3pgh9p6Dj0XF+NQ8g7uR9wEIozGAedXkjCWyU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1764363989; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=LJlLpIcTWK8jvmdJwFTtROJr/bm5rTE4uW19f+6gRVU=; b=fL/oErsp8z/5wTWlv1feoSa7Oc1WWgMvlmFR2HsTH5PIn0q4N39E64m1LI7ZRRbdVb5vTbkngN6s+oXlgOtamgB0V0GE7aLxMoqdQQQrlCCvdfn+8sZraXEYhDMlOezg/agWRPyecK5AQCjMHW4qE4h+oS75bhtQiKZu0C2Gtm0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1764363989; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=LJlLpIcTWK8jvmdJwFTtROJr/bm5rTE4uW19f+6gRVU=; b=TQINlAX2R4Yyg4qgu9eON73rsg6ZMNWwPTBvmRdCcjicVdHTqHjm84nYMm4NgqLG AIU1Xclcrvce2FlWRUJjKfRy3zIGOZxhZfi5RdEQknvEjPm+KgYAJDRIiI53TKNlR03 X56tyCFezyGHSgGJYTgN/9bQQoZ7yPJdjrqzyZF0= Received: by mx.zohomail.com with SMTPS id 1764363987133732.0157606341392; Fri, 28 Nov 2025 13:06:27 -0800 (PST) From: Nicolas Frattaroli Date: Fri, 28 Nov 2025 22:05:40 +0100 Subject: [PATCH v5 04/17] drm/bridge: Act on the DRM color format property Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251128-color-format-v5-4-63e82f1db1e1@collabora.com> References: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> In-Reply-To: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> To: Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , =?utf-8?q?Christian_K=C3=B6nig?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Dmitry Baryshkov , Sascha Hauer , Rob Herring Cc: kernel@collabora.com, amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, Nicolas Frattaroli X-Mailer: b4 0.14.3 The new DRM color format property allows userspace to request a specific color format on a connector. In turn, this fills the connector state's color_format member to switch color formats. Make drm_bridges consider the color_format set in the connector state during the atomic bridge check. Specifically, reject any output bus formats that do not correspond to the requested color format. Signed-off-by: Nicolas Frattaroli --- drivers/gpu/drm/drm_bridge.c | 45 ++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 45 insertions(+) diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c index 8f355df883d8..8aac9747f35e 100644 --- a/drivers/gpu/drm/drm_bridge.c +++ b/drivers/gpu/drm/drm_bridge.c @@ -1052,6 +1052,47 @@ static int select_bus_fmt_recursive(struct drm_bridg= e *first_bridge, return ret; } =20 +static bool __pure bus_format_is_color_fmt(u32 bus_fmt, enum drm_color_for= mat fmt) +{ + if (fmt =3D=3D DRM_COLOR_FORMAT_AUTO) + return true; + + switch (bus_fmt) { + case MEDIA_BUS_FMT_FIXED: + return true; + case MEDIA_BUS_FMT_RGB888_1X24: + case MEDIA_BUS_FMT_RGB101010_1X30: + case MEDIA_BUS_FMT_RGB121212_1X36: + case MEDIA_BUS_FMT_RGB161616_1X48: + return fmt =3D=3D DRM_COLOR_FORMAT_RGB444; + case MEDIA_BUS_FMT_YUV8_1X24: + case MEDIA_BUS_FMT_YUV10_1X30: + case MEDIA_BUS_FMT_YUV12_1X36: + case MEDIA_BUS_FMT_YUV16_1X48: + return fmt =3D=3D DRM_COLOR_FORMAT_YCBCR444; + case MEDIA_BUS_FMT_UYVY8_1X16: + case MEDIA_BUS_FMT_VYUY8_1X16: + case MEDIA_BUS_FMT_YUYV8_1X16: + case MEDIA_BUS_FMT_YVYU8_1X16: + case MEDIA_BUS_FMT_UYVY10_1X20: + case MEDIA_BUS_FMT_YUYV10_1X20: + case MEDIA_BUS_FMT_VYUY10_1X20: + case MEDIA_BUS_FMT_YVYU10_1X20: + case MEDIA_BUS_FMT_UYVY12_1X24: + case MEDIA_BUS_FMT_VYUY12_1X24: + case MEDIA_BUS_FMT_YUYV12_1X24: + case MEDIA_BUS_FMT_YVYU12_1X24: + return fmt =3D=3D DRM_COLOR_FORMAT_YCBCR422; + case MEDIA_BUS_FMT_UYYVYY8_0_5X24: + case MEDIA_BUS_FMT_UYYVYY10_0_5X30: + case MEDIA_BUS_FMT_UYYVYY12_0_5X36: + case MEDIA_BUS_FMT_UYYVYY16_0_5X48: + return fmt =3D=3D DRM_COLOR_FORMAT_YCBCR420; + default: + return false; + } +} + /* * This function is called by &drm_atomic_bridge_chain_check() just before * calling &drm_bridge_funcs.atomic_check() on all elements of the chain. @@ -1137,6 +1178,10 @@ drm_atomic_bridge_chain_select_bus_fmts(struct drm_b= ridge *bridge, } =20 for (i =3D 0; i < num_out_bus_fmts; i++) { + if (!bus_format_is_color_fmt(out_bus_fmts[i], conn_state->color_format))= { + ret =3D -ENOTSUPP; + continue; + } ret =3D select_bus_fmt_recursive(bridge, last_bridge, crtc_state, conn_state, out_bus_fmts[i]); if (ret !=3D -ENOTSUPP) --=20 2.52.0 From nobody Mon Dec 1 22:05:08 2025 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 72AF52D5C6E for ; Fri, 28 Nov 2025 21:07:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364037; cv=pass; b=ZRtZYY0RMOcb1WgM7zrANiD8EIUwRLKWQ0f4MpyFt4dba3aoYVVQUWUz7CQ5Qz3wfZ4W/nZfNmY33Rxocg8GVNcyWE/4o0mp3ZjG5nQ3yGjmBLQx+RVpcl3nF6TzvQAgMy54t05ESDm1dmtobkhxpAJmlEDHZQ/oi3hIjyOZ32E= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364037; c=relaxed/simple; bh=3oderf/Ov9TTbZkSR4IzUI4Ah4+QLX9PKpnGPDSzSag=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZYrMEKCiqP0L5zNVG9t7Ye1q5/MO1Ck2vYxFgYzIbcYCZDBSOxhBtoC1pxcR6mICy439A0s0dr0sjqNVFKg+51mN+ZZnDYiBKO+tsmsN1BC7pguTUeFet3jUV+RUVYrMc/qjU3VwM+KJty6nukQplG30sxMnCp4lM6nDZto/sO0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=Piw408kE; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="Piw408kE" ARC-Seal: i=1; a=rsa-sha256; t=1764363995; cv=none; d=zohomail.com; s=zohoarc; b=KYgE9XHb8ZO0/7TtjzpVxbEyr+y8G+3hKzn/c1YDuqWp2Ap6yBnJlHz9Sy0ghKnczqVyi9tNjEcSKnubeDgMwG/evdlDPNHal7VHBkFh8GZ6DjTjl9+JD2IlYexNd8doVYc1ixcWlK54XrQLShZ10P115/ACxSfUyVxe1m0uE3g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1764363995; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=1xbtabJZMloMjUyfQimimdWwjltWbAs98RHy7pqsfj0=; b=Tw9V5fLovKVxjWyYYQOBqNWpGyMClGskgAvy2tdMuJk2Ts+DLceOsNd8oKppatxacTr80zN2DwGrr6+oYPOC0aC0gEWML8JV2pVWmmgR38cFcXm03tW5KnIHNX8tBlS6H0ZwAMQUIrxRdDv634M2AYCl3XiBiuBS43ltF1IS6c0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1764363995; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=1xbtabJZMloMjUyfQimimdWwjltWbAs98RHy7pqsfj0=; b=Piw408kENqjfYhur3CUwoDADLfBuVO/QxisHKiSZu7q/0JLVkeqKS5Da1fZZ4DZ4 Xs3hBri7B2aFiJAoE8qNLl1zfzsOMdZOqcj/VTagf1GnAgBbOxK2yBQio79TxaK1o9I Im3CN1CVAnJAH3o8G6nxy0fxn0+L1QHC79jrGLVc= Received: by mx.zohomail.com with SMTPS id 1764363994308958.9729081381457; Fri, 28 Nov 2025 13:06:34 -0800 (PST) From: Nicolas Frattaroli Date: Fri, 28 Nov 2025 22:05:41 +0100 Subject: [PATCH v5 05/17] drm/display: hdmi-state-helper: Act on color format DRM property Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251128-color-format-v5-5-63e82f1db1e1@collabora.com> References: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> In-Reply-To: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> To: Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , =?utf-8?q?Christian_K=C3=B6nig?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Dmitry Baryshkov , Sascha Hauer , Rob Herring Cc: kernel@collabora.com, amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, Nicolas Frattaroli X-Mailer: b4 0.14.3 With the introduction of the "color format" DRM property, which allows userspace to request a specific color format, the HDMI state helper should implement this. Implement it by checking whether the property is set and set to something other than auto. If so, pass the requested color format, and otherwise set RGB. Signed-off-by: Nicolas Frattaroli --- drivers/gpu/drm/display/drm_hdmi_state_helper.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/display/drm_hdmi_state_helper.c b/drivers/gpu/= drm/display/drm_hdmi_state_helper.c index a561f124be99..5da956bdd68c 100644 --- a/drivers/gpu/drm/display/drm_hdmi_state_helper.c +++ b/drivers/gpu/drm/display/drm_hdmi_state_helper.c @@ -649,11 +649,21 @@ hdmi_compute_config(const struct drm_connector *conne= ctor, unsigned int max_bpc =3D clamp_t(unsigned int, conn_state->max_bpc, 8, connector->max_bpc); + enum hdmi_colorspace hdmi_colorspace =3D + drm_color_format_to_hdmi_colorspace(conn_state->color_format); int ret; =20 ret =3D hdmi_compute_format_bpc(connector, conn_state, mode, max_bpc, - HDMI_COLORSPACE_RGB); + hdmi_colorspace); if (ret) { + /* If a color format was explicitly requested, don't fall back */ + if (conn_state->color_format) { + drm_dbg_kms(connector->dev, + "Explicitly set color format '%s' doesn't work.\n", + drm_get_color_format_name(conn_state->color_format)); + return ret; + } + if (connector->ycbcr_420_allowed) { ret =3D hdmi_compute_format_bpc(connector, conn_state, mode, max_bpc, --=20 2.52.0 From nobody Mon Dec 1 22:05:08 2025 Received: from sender3-pp-f112.zoho.com (sender3-pp-f112.zoho.com [136.143.184.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5126C2DEA72 for ; Fri, 28 Nov 2025 21:07:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.184.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364047; cv=pass; b=fqheHHfPArHq4rIZdcANftEyl5HOAzIeVzZLaYGXyHetMvDrJyrzhTFY7t4sxTeEUETVldmd+5y7yOH9V3PLHNi+vga/1Ppb8H2vP9ddWmdjBpJO9mbAcYKftu79U2o0ZUCm9PXuHUH45Tl7OgqZsIty0TkXjZq0l7AGg1Rs2/4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364047; c=relaxed/simple; bh=3ukvQskUWajzqLux6am4gjAJOHswXNPFom7JkCbS6WE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RXlJduHGeuF2k2NjaSNeNRG0sX+YBC0eadsgjDxgxH58pYgcTkJoY0XzZCT5HrtinSRfaRzB4Wd0nQMjYnx3joWn9TPvl7NIPcoDfEXpMJ9cCcsA0tHNoP+WvsVurE4YyVk9OmMYhqQu7llnq2cxw4KvrF1bCRseNHxpEmuwZ9Y= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=YRUeWAHT; arc=pass smtp.client-ip=136.143.184.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="YRUeWAHT" ARC-Seal: i=1; a=rsa-sha256; t=1764364003; cv=none; d=zohomail.com; s=zohoarc; b=ZRZKyGIAohl6AiHLz+Z1Jaie2XFzIkaBqcGOMMFNsP6MEzT/ERdfTjqU3RH9uyBI/53wpkh0xDj2SObm5ea8oS+8yLlWI8hUgIgmRc94FQg846UrsQgCh5TkOALkHNaAcGnnUlYSeC81J9ALd+WmgTNvM8c1+CuLepQe7CAjvFM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1764364003; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=HuuEqm/VM8Z9sKdKKwEgeX6ClWHBKU/5BuknVOHkhMU=; b=LcLzeLuW0/vmYpS5B/sUkhJijZYajuislfZLc6Uz5836uLHf8jb5UQVrJiUEu5BUXNcn058E8iwdCfCS2Aewq1Z1G6x/8Xvq7Fv98/Yv6Uf+S5k8jpHjqVKqk2jM4RmXcd8cKwa91FugFqLkiPe2eXfrkNKkKLIL5Lb/TZyTU50= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1764364003; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=HuuEqm/VM8Z9sKdKKwEgeX6ClWHBKU/5BuknVOHkhMU=; b=YRUeWAHTr0ytDCeq8Czhp2rruQDGKby5gl2vs3aCqSXmVIpfVDYjRr4YwHoILd8j 5oO6CL8EYGUDEQUO1pByPZn1BVjS1FJQdx/P5Fb25Q7KJDYPANmIPf0a3XfCMjtCt5V g6wnHeXZ9hahin9xCAnEXD2kznvIOfA3kFSNCDWA= Received: by mx.zohomail.com with SMTPS id 1764364001462814.7343165114526; Fri, 28 Nov 2025 13:06:41 -0800 (PST) From: Nicolas Frattaroli Date: Fri, 28 Nov 2025 22:05:42 +0100 Subject: [PATCH v5 06/17] drm/display: hdmi-state-helper: Try subsampling in mode_valid Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251128-color-format-v5-6-63e82f1db1e1@collabora.com> References: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> In-Reply-To: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> To: Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , =?utf-8?q?Christian_K=C3=B6nig?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Dmitry Baryshkov , Sascha Hauer , Rob Herring Cc: kernel@collabora.com, amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, Nicolas Frattaroli X-Mailer: b4 0.14.3 drm_hdmi_connector_mode_valid assumes modes are only valid if they work with RGB. The reality is more complex however: YCbCr 4:2:0 chroma-subsampled modes only require half the pixel clock that the same mode would require in RGB. This leads to drm_hdmi_connector_mode_valid rejecting perfectly valid 420-only modes. Fix this by checking whether the mode is 420-only first. If so, then proceed by checking it with HDMI_COLORSPACE_YUV420 so long as the connector has legalized 420, otherwise error out. If the mode is not 420-only, check with RGB as was previously always the case. Fixes: 47368ab437fd ("drm/display: hdmi: add generic mode_valid helper") Signed-off-by: Nicolas Frattaroli --- drivers/gpu/drm/display/drm_hdmi_state_helper.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/display/drm_hdmi_state_helper.c b/drivers/gpu/= drm/display/drm_hdmi_state_helper.c index 5da956bdd68c..1800e00b30c5 100644 --- a/drivers/gpu/drm/display/drm_hdmi_state_helper.c +++ b/drivers/gpu/drm/display/drm_hdmi_state_helper.c @@ -892,8 +892,18 @@ drm_hdmi_connector_mode_valid(struct drm_connector *co= nnector, const struct drm_display_mode *mode) { unsigned long long clock; + enum hdmi_colorspace fmt; + + if (drm_mode_is_420_only(&connector->display_info, mode)) { + if (connector->ycbcr_420_allowed) + fmt =3D HDMI_COLORSPACE_YUV420; + else + return MODE_NO_420; + } else { + fmt =3D HDMI_COLORSPACE_RGB; + } =20 - clock =3D drm_hdmi_compute_mode_clock(mode, 8, HDMI_COLORSPACE_RGB); + clock =3D drm_hdmi_compute_mode_clock(mode, 8, fmt); if (!clock) return MODE_ERROR; =20 --=20 2.52.0 From nobody Mon Dec 1 22:05:08 2025 Received: from sender3-pp-f112.zoho.com (sender3-pp-f112.zoho.com [136.143.184.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9C85A2C2376 for ; Fri, 28 Nov 2025 21:07:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.184.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364060; cv=pass; b=IUhQJUymlV0CktLPlRV2BCbt+WqcSyN+4OuRN9YJ/gut+FswCMgAcoAM+QoRtIdfOmmokfQZOGlecp4J4QnPTFg9qjsp/eUQT3+5kyTmrpXNWQhFAg137kXLRBgduT2XVg1a+sK2inJlDaY1utboBVlcgkSdl+uL0RjiJzDT/Xc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364060; c=relaxed/simple; bh=GBmGoh1OYB6Uzd817NZwvJSVdk+w7ndNXWNXEiFq4Dg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gAxKrRbTtW9Fz2Q9tmVHtz1dm+D+yEJCEpGsSxOtGsyvwHKXodcxNiLB3DTtEJAC5MebFFBh9Zi3ynIJcmKW/vgMlsZKDR3oLTsiHAZIh0P6daNsD9R9+1TUYVTvH0kAbzhLaB/e/shEIxEcWzcsmBe6HLcb/3dqZj8kavo+oA0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=MQNFsUlQ; arc=pass smtp.client-ip=136.143.184.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="MQNFsUlQ" ARC-Seal: i=1; a=rsa-sha256; t=1764364011; cv=none; d=zohomail.com; s=zohoarc; b=DoGUBIEy+m94K5I+ObWmgGnRVK7bmQd6ZGkbJSHWsomqDK8+xxlQe4DGt+rjSQXD8zMYT2NbusIR8qRTB6P2cwDpCqVH7OuxQbZVBEW+gbGAvyJb4lXdnNjeDpsen6AYwxJYBbaL8GU4qgiHfUq47nJkFGh0N/8U5WrHZXpvErY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1764364011; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=k80pw9qFLh8nG2VtBVa/vqMN2DAOHRiK2foaSmzOQGA=; b=kcsWDHm+QaspvVin0O+v1C9fhilqOrhLkx//iiJb2cuZ4zRpfyp16i2tOBdXcmss2fYmGM59q+iQ5tNounrR/4gAGb7hRCzFDOB7Il78PqQht501MuyO9Lbrlq8DUPVVlIWXr1ShVevXn577KLm6Ebd0+jf9YD/5th/0FBks+NI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1764364011; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=k80pw9qFLh8nG2VtBVa/vqMN2DAOHRiK2foaSmzOQGA=; b=MQNFsUlQ5c/oHIgYf/L9YaAfCQ6Crkxoa7IIORtUfKPw5Z9WhT09fPb85Gdb+PU6 2qLTjfkfX6l+UqtFCugKWRGF0fY2con8zWBIKKiHrvM6gq7BRtMnIzlZixd5XGBZ5T4 ucUGbrpmB087tkpn9jGR226W4eLccYTzoFlG6e2E= Received: by mx.zohomail.com with SMTPS id 1764364009336894.3024713537475; Fri, 28 Nov 2025 13:06:49 -0800 (PST) From: Nicolas Frattaroli Date: Fri, 28 Nov 2025 22:05:43 +0100 Subject: [PATCH v5 07/17] drm/i915: Implement the "color format" DRM property Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251128-color-format-v5-7-63e82f1db1e1@collabora.com> References: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> In-Reply-To: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> To: Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , =?utf-8?q?Christian_K=C3=B6nig?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Dmitry Baryshkov , Sascha Hauer , Rob Herring Cc: kernel@collabora.com, amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, Nicolas Frattaroli , Werner Sembach , Andri Yngvason , Marius Vlad X-Mailer: b4 0.14.3 This includes RGB, YUV420, YUV444 and Auto. Auto will pick RGB, unless the mode being asked for is YUV420-only, in which case it picks YUV420. Should the explicitly requested color format not be supported by the sink, then an error is returned to userspace, so that it can make a better choice. Co-developed-by: Werner Sembach Signed-off-by: Werner Sembach Co-developed-by: Andri Yngvason Signed-off-by: Andri Yngvason Co-developed-by: Marius Vlad Signed-off-by: Marius Vlad Signed-off-by: Nicolas Frattaroli --- drivers/gpu/drm/i915/display/intel_connector.c | 11 +++++ drivers/gpu/drm/i915/display/intel_connector.h | 1 + drivers/gpu/drm/i915/display/intel_display_types.h | 15 ++++++ drivers/gpu/drm/i915/display/intel_dp.c | 55 +++++++++++++++++-= ---- drivers/gpu/drm/i915/display/intel_dp.h | 4 ++ drivers/gpu/drm/i915/display/intel_dp_mst.c | 36 +++++++++++++- drivers/gpu/drm/i915/display/intel_hdmi.c | 53 +++++++++++++++---= --- 7 files changed, 147 insertions(+), 28 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_connector.c b/drivers/gpu/d= rm/i915/display/intel_connector.c index 913d90a7a508..5ee74280b9d3 100644 --- a/drivers/gpu/drm/i915/display/intel_connector.c +++ b/drivers/gpu/drm/i915/display/intel_connector.c @@ -40,6 +40,10 @@ #include "intel_hdcp.h" #include "intel_panel.h" =20 +static const u32 supported_colorformats =3D DRM_COLOR_FORMAT_RGB444 | + DRM_COLOR_FORMAT_YCBCR444 | + DRM_COLOR_FORMAT_YCBCR420; + static void intel_connector_modeset_retry_work_fn(struct work_struct *work) { struct intel_connector *connector =3D container_of(work, typeof(*connecto= r), @@ -333,6 +337,13 @@ intel_attach_dp_colorspace_property(struct drm_connect= or *connector) drm_connector_attach_colorspace_property(connector); } =20 +void +intel_attach_colorformat_property(struct drm_connector *connector) +{ + if (!drm_mode_create_color_format_property(connector, supported_colorform= ats)) + drm_connector_attach_color_format_property(connector); +} + void intel_attach_scaling_mode_property(struct drm_connector *connector) { diff --git a/drivers/gpu/drm/i915/display/intel_connector.h b/drivers/gpu/d= rm/i915/display/intel_connector.h index 0aa86626e646..fe6149d1d559 100644 --- a/drivers/gpu/drm/i915/display/intel_connector.h +++ b/drivers/gpu/drm/i915/display/intel_connector.h @@ -31,6 +31,7 @@ void intel_attach_broadcast_rgb_property(struct drm_conne= ctor *connector); void intel_attach_aspect_ratio_property(struct drm_connector *connector); void intel_attach_hdmi_colorspace_property(struct drm_connector *connector= ); void intel_attach_dp_colorspace_property(struct drm_connector *connector); +void intel_attach_colorformat_property(struct drm_connector *connector); void intel_attach_scaling_mode_property(struct drm_connector *connector); void intel_connector_queue_modeset_retry_work(struct intel_connector *conn= ector); void intel_connector_cancel_modeset_retry_work(struct intel_connector *con= nector); diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/g= pu/drm/i915/display/intel_display_types.h index 38702a9e0f50..c82bff8a44f1 100644 --- a/drivers/gpu/drm/i915/display/intel_display_types.h +++ b/drivers/gpu/drm/i915/display/intel_display_types.h @@ -2206,6 +2206,21 @@ to_intel_frontbuffer(struct drm_framebuffer *fb) return fb ? to_intel_framebuffer(fb)->frontbuffer : NULL; } =20 +static inline __pure enum drm_color_format +intel_output_format_to_drm_color_format(enum intel_output_format input) +{ + switch (input) { + case INTEL_OUTPUT_FORMAT_RGB: + return DRM_COLOR_FORMAT_RGB444; + case INTEL_OUTPUT_FORMAT_YCBCR444: + return DRM_COLOR_FORMAT_YCBCR444; + case INTEL_OUTPUT_FORMAT_YCBCR420: + return DRM_COLOR_FORMAT_YCBCR420; + } + + return DRM_COLOR_FORMAT_AUTO; +} + /* * Conversion functions/macros from various pointer types to struct * intel_display pointer. diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915= /display/intel_dp.c index 0ec82fcbcf48..bd1687e3a53f 100644 --- a/drivers/gpu/drm/i915/display/intel_dp.c +++ b/drivers/gpu/drm/i915/display/intel_dp.c @@ -1183,7 +1183,7 @@ dfp_can_convert(struct intel_dp *intel_dp, return false; } =20 -static enum intel_output_format +enum intel_output_format intel_dp_output_format(struct intel_connector *connector, enum intel_output_format sink_format) { @@ -3141,17 +3141,24 @@ intel_dp_compute_output_format(struct intel_encoder= *encoder, struct intel_connector *connector =3D intel_dp->attached_connector; const struct drm_display_info *info =3D &connector->base.display_info; const struct drm_display_mode *adjusted_mode =3D &crtc_state->hw.adjusted= _mode; - bool ycbcr_420_only; + enum drm_color_format sink_format_drm; int ret; =20 - ycbcr_420_only =3D drm_mode_is_420_only(info, adjusted_mode); + if ((conn_state->color_format =3D=3D DRM_COLOR_FORMAT_YCBCR420 && + drm_mode_is_420(info, adjusted_mode)) || + (conn_state->color_format =3D=3D DRM_COLOR_FORMAT_AUTO && + drm_mode_is_420_only(info, adjusted_mode))) + crtc_state->sink_format =3D INTEL_OUTPUT_FORMAT_YCBCR420; + else if (conn_state->color_format =3D=3D DRM_COLOR_FORMAT_YCBCR444) + crtc_state->sink_format =3D INTEL_OUTPUT_FORMAT_YCBCR444; + else + crtc_state->sink_format =3D INTEL_OUTPUT_FORMAT_RGB; =20 - if (ycbcr_420_only && !connector->base.ycbcr_420_allowed) { + if (crtc_state->sink_format =3D=3D INTEL_OUTPUT_FORMAT_YCBCR420 && + !connector->base.ycbcr_420_allowed) { drm_dbg_kms(display->drm, - "YCbCr 4:2:0 mode but YCbCr 4:2:0 output not possible. Falling back= to RGB.\n"); - crtc_state->sink_format =3D INTEL_OUTPUT_FORMAT_RGB; - } else { - crtc_state->sink_format =3D intel_dp_sink_format(connector, adjusted_mod= e); + "YCbCr 4:2:0 mode requested but unsupported by connector.\n"); + return -EINVAL; } =20 crtc_state->output_format =3D intel_dp_output_format(connector, crtc_stat= e->sink_format); @@ -3159,9 +3166,20 @@ intel_dp_compute_output_format(struct intel_encoder = *encoder, ret =3D intel_dp_compute_link_config(encoder, crtc_state, conn_state, respect_downstream_limits); if (ret) { - if (crtc_state->sink_format =3D=3D INTEL_OUTPUT_FORMAT_YCBCR420 || - !connector->base.ycbcr_420_allowed || - !drm_mode_is_420_also(info, adjusted_mode)) + /* + * If no valid link config can be found due to bandwidth constraints, + * degrade from RGB/YCbCr 4:4:4 to YCbCr 4:2:0 if permitted by + * the source and sink. + */ + if (!connector->base.ycbcr_420_allowed) + return ret; + /* No point in trying YCbCr420 a second time. */ + if (crtc_state->sink_format =3D=3D INTEL_OUTPUT_FORMAT_YCBCR420) + return ret; + if (!drm_mode_is_420(info, adjusted_mode)) + return ret; + /* If a non-AUTO color format is chosen, don't fall back. */ + if (conn_state->color_format) return ret; =20 crtc_state->sink_format =3D INTEL_OUTPUT_FORMAT_YCBCR420; @@ -3169,9 +3187,20 @@ intel_dp_compute_output_format(struct intel_encoder = *encoder, crtc_state->sink_format); ret =3D intel_dp_compute_link_config(encoder, crtc_state, conn_state, respect_downstream_limits); + if (ret) + return ret; } =20 - return ret; + sink_format_drm =3D intel_output_format_to_drm_color_format(crtc_state->s= ink_format); + if (conn_state->color_format && conn_state->color_format !=3D sink_format= _drm) { + drm_dbg_kms(display->drm, + "Explicitly asked for color format %s, got sink format %s\n", + drm_get_color_format_name(conn_state->color_format), + drm_get_color_format_name(sink_format_drm)); + return -EINVAL; + } + + return 0; } =20 void @@ -6630,6 +6659,8 @@ intel_dp_add_properties(struct intel_dp *intel_dp, st= ruct drm_connector *_connec intel_attach_dp_colorspace_property(&connector->base); } =20 + intel_attach_colorformat_property(&connector->base); + if (intel_dp_has_gamut_metadata_dip(&dp_to_dig_port(intel_dp)->base)) drm_connector_attach_hdr_output_metadata_property(&connector->base); =20 diff --git a/drivers/gpu/drm/i915/display/intel_dp.h b/drivers/gpu/drm/i915= /display/intel_dp.h index 200a8b267f64..a7492c97ac97 100644 --- a/drivers/gpu/drm/i915/display/intel_dp.h +++ b/drivers/gpu/drm/i915/display/intel_dp.h @@ -205,6 +205,10 @@ bool intel_dp_compute_config_limits(struct intel_dp *i= ntel_dp, void intel_dp_get_dsc_sink_cap(u8 dpcd_rev, const struct drm_dp_desc *desc, bool is_branch, struct intel_connector *connector); +enum intel_output_format +intel_dp_output_format(struct intel_connector *connector, + enum intel_output_format sink_format); + bool intel_dp_has_gamut_metadata_dip(struct intel_encoder *encoder); =20 bool intel_dp_link_params_valid(struct intel_dp *intel_dp, int link_rate, diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/= i915/display/intel_dp_mst.c index 4c0b943fe86f..e059306cea40 100644 --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c @@ -653,6 +653,8 @@ static int mst_stream_compute_config(struct intel_encod= er *encoder, to_intel_connector(conn_state->connector); const struct drm_display_mode *adjusted_mode =3D &pipe_config->hw.adjusted_mode; + const struct drm_display_info *info =3D &connector->base.display_info; + enum drm_color_format sink_format_drm; struct link_config_limits limits; bool dsc_needed, joiner_needs_dsc; int num_joined_pipes; @@ -671,10 +673,35 @@ static int mst_stream_compute_config(struct intel_enc= oder *encoder, if (num_joined_pipes > 1) pipe_config->joiner_pipes =3D GENMASK(crtc->pipe + num_joined_pipes - 1,= crtc->pipe); =20 - pipe_config->sink_format =3D INTEL_OUTPUT_FORMAT_RGB; - pipe_config->output_format =3D INTEL_OUTPUT_FORMAT_RGB; + if ((conn_state->color_format =3D=3D DRM_COLOR_FORMAT_YCBCR420 && + drm_mode_is_420(info, adjusted_mode)) || + (conn_state->color_format =3D=3D DRM_COLOR_FORMAT_AUTO && + drm_mode_is_420_only(info, adjusted_mode))) + pipe_config->sink_format =3D INTEL_OUTPUT_FORMAT_YCBCR420; + else if (conn_state->color_format =3D=3D DRM_COLOR_FORMAT_YCBCR444) + pipe_config->sink_format =3D INTEL_OUTPUT_FORMAT_YCBCR444; + else + pipe_config->sink_format =3D INTEL_OUTPUT_FORMAT_RGB; + + if (pipe_config->sink_format =3D=3D INTEL_OUTPUT_FORMAT_YCBCR420 && + !connector->base.ycbcr_420_allowed) { + drm_dbg_kms(display->drm, + "YCbCr 4:2:0 mode requested but unsupported by connector.\n"); + return -EINVAL; + } + + pipe_config->output_format =3D intel_dp_output_format(connector, pipe_con= fig->sink_format); pipe_config->has_pch_encoder =3D false; =20 + sink_format_drm =3D intel_output_format_to_drm_color_format(pipe_config->= sink_format); + if (conn_state->color_format && conn_state->color_format !=3D sink_format= _drm) { + drm_dbg_kms(display->drm, + "Unsupported color format %s (0x%x), sink has 0x%x\n", + drm_get_color_format_name(conn_state->color_format), + conn_state->color_format, sink_format_drm); + return -EINVAL; + } + joiner_needs_dsc =3D intel_dp_joiner_needs_dsc(display, num_joined_pipes); =20 dsc_needed =3D joiner_needs_dsc || intel_dp->force_dsc_en || @@ -1660,6 +1687,11 @@ static int mst_topology_add_connector_properties(str= uct intel_dp *intel_dp, if (connector->base.max_bpc_property) drm_connector_attach_max_bpc_property(&connector->base, 6, 12); =20 + connector->base.color_format_property =3D + intel_dp->attached_connector->base.color_format_property; + if (connector->base.color_format_property) + intel_attach_colorformat_property(&connector->base); + return drm_connector_set_path_property(&connector->base, pathprop); } =20 diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i9= 15/display/intel_hdmi.c index 908faf17f93d..d3e77781a0a6 100644 --- a/drivers/gpu/drm/i915/display/intel_hdmi.c +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c @@ -2271,30 +2271,53 @@ static int intel_hdmi_compute_output_format(struct = intel_encoder *encoder, struct intel_connector *connector =3D to_intel_connector(conn_state->conn= ector); const struct drm_display_mode *adjusted_mode =3D &crtc_state->hw.adjusted= _mode; const struct drm_display_info *info =3D &connector->base.display_info; - bool ycbcr_420_only =3D drm_mode_is_420_only(info, adjusted_mode); + enum drm_color_format req_fmt =3D conn_state->color_format; + enum drm_color_format sink_format_drm; int ret; =20 - crtc_state->sink_format =3D - intel_hdmi_sink_format(crtc_state, connector, ycbcr_420_only); - - if (ycbcr_420_only && crtc_state->sink_format !=3D INTEL_OUTPUT_FORMAT_YC= BCR420) { - drm_dbg_kms(display->drm, - "YCbCr 4:2:0 mode but YCbCr 4:2:0 output not possible. Falling back= to RGB.\n"); - crtc_state->sink_format =3D INTEL_OUTPUT_FORMAT_RGB; - } + if (!req_fmt) + crtc_state->sink_format =3D + intel_hdmi_sink_format(crtc_state, connector, + drm_mode_is_420_only(info, adjusted_mode)); + else if (req_fmt =3D=3D DRM_COLOR_FORMAT_YCBCR444) + crtc_state->sink_format =3D INTEL_OUTPUT_FORMAT_YCBCR444; + else + crtc_state->sink_format =3D intel_hdmi_sink_format(crtc_state, connector, + req_fmt =3D=3D DRM_COLOR_FORMAT_YCBCR420); =20 crtc_state->output_format =3D intel_hdmi_output_format(crtc_state); ret =3D intel_hdmi_compute_clock(encoder, crtc_state, respect_downstream_= limits); if (ret) { - if (crtc_state->sink_format =3D=3D INTEL_OUTPUT_FORMAT_YCBCR420 || - !crtc_state->has_hdmi_sink || - !connector->base.ycbcr_420_allowed || - !drm_mode_is_420_also(info, adjusted_mode)) + /* + * If no valid link config can be found due to bandwidth constraints, + * degrade from RGB/YCbCr 4:4:4 to YCbCr 4:2:0 if permitted by + * the source and sink. + */ + if (!connector->base.ycbcr_420_allowed) + return ret; + /* No point in trying YCbCr420 a second time. */ + if (crtc_state->sink_format =3D=3D INTEL_OUTPUT_FORMAT_YCBCR420) + return ret; + if (!drm_mode_is_420(info, adjusted_mode)) + return ret; + /* If a non-AUTO color format is chosen, don't fall back. */ + if (req_fmt) return ret; =20 crtc_state->sink_format =3D INTEL_OUTPUT_FORMAT_YCBCR420; crtc_state->output_format =3D intel_hdmi_output_format(crtc_state); ret =3D intel_hdmi_compute_clock(encoder, crtc_state, respect_downstream= _limits); + if (ret) + return ret; + } + + sink_format_drm =3D intel_output_format_to_drm_color_format(crtc_state->s= ink_format); + if (req_fmt && req_fmt !=3D sink_format_drm) { + drm_dbg_kms(display->drm, + "Explicitly asked for color format %s, got sink format %s\n", + drm_get_color_format_name(req_fmt), + drm_get_color_format_name(sink_format_drm)); + ret =3D -EINVAL; } =20 return ret; @@ -2690,8 +2713,10 @@ intel_hdmi_add_properties(struct intel_hdmi *intel_h= dmi, struct drm_connector *_ if (DISPLAY_VER(display) >=3D 10) drm_connector_attach_hdr_output_metadata_property(&connector->base); =20 - if (!HAS_GMCH(display)) + if (!HAS_GMCH(display)) { drm_connector_attach_max_bpc_property(&connector->base, 8, 12); + intel_attach_colorformat_property(&connector->base); + } } =20 /* --=20 2.52.0 From nobody Mon Dec 1 22:05:08 2025 Received: from sender3-pp-f112.zoho.com (sender3-pp-f112.zoho.com [136.143.184.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 134692D29C3 for ; Fri, 28 Nov 2025 21:07:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.184.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364064; cv=pass; b=VyJlm49TZzJRC2eU+uTcN9hLs4MqaJO1Tx7WEUelBopnW1LoScAuzpCu4EfaW1FXvqKWcE+hPj5suHPdvFFwnmSTBpmNL2mCr0xdWWNhUJ5xIuv6oH8wPV1pyqMsFRo4OsiaHQwl8DCjykJ4e+knK7ArMCEfiFvtCTdk2iZ/TuI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364064; c=relaxed/simple; bh=e4c+iihjty900Oa9QbuG8W86uZIEX+JnIYWl1JGTWeE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lvy9E67WmKUhtK0Z+8Kry/2hoG0+VtZ5L0DD1UMf5oldk9PbrXucC1X/wdILendZ/wovxrhevrrbe9lLS84CVhsgXcSmebqx8Fasndmr9Y9SFlK+3DVsZWmJJansJj3xooNS6p90dQgxLPLSMOXq450sAiSlMW26/AnKf8EK79Y= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=H/G3cQE0; arc=pass smtp.client-ip=136.143.184.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="H/G3cQE0" ARC-Seal: i=1; a=rsa-sha256; t=1764364017; cv=none; d=zohomail.com; s=zohoarc; b=anBi+/SJolD8iQilLzsDvzG1YN9CF4pomerYTJhtYDtFSieDFZxU6Qcu+zhjO6nxRfwYR/oC8rjqjjE60nnSXwxZWUQqqbxeOqBuG7dVfJw97V4w3DEdoJAd9HOUajGWdF7xcEo9P+vK2mfo0fG+80Onsd91mLrjM7giJdz1yOg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1764364017; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=CMbe8pX/OKS8zodrbcPH5IAEuUFZsEIX1rCAfDPM3Fs=; b=Av7nJ70+xC4p7LbTWXuRWGNgA6WAl+xiWgvBSPh4SIZBqabrIQs5syBKkCgDnC71o90aiY8Qcav/P1FTbBSLH49Y24UsTkRYC+XQmSXsmAfNbziuPQIhQfZMAVYfBOLorAvtCzYzWYIq8jheD8w85kEqeQ3IcumCjCzC8dvnVHU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1764364017; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=CMbe8pX/OKS8zodrbcPH5IAEuUFZsEIX1rCAfDPM3Fs=; b=H/G3cQE024AaROXGswtET5iCFU5/ObLeBL90QXI03/NhCqYwL7e1XHk4iq0YUSE3 6/EemwV1R6U0GdlD24v1mRZY4hPBSIwQ0qtvh0dOm5TbbI8vEEvI9UD+Zudptl+tQvu ZEesNDJEAiUrgRsu6d1mBMc0hNGyHxfxDKR4thjQ= Received: by mx.zohomail.com with SMTPS id 1764364017064212.13365293180857; Fri, 28 Nov 2025 13:06:57 -0800 (PST) From: Nicolas Frattaroli Date: Fri, 28 Nov 2025 22:05:44 +0100 Subject: [PATCH v5 08/17] drm/amdgpu: Implement "color format" DRM property Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251128-color-format-v5-8-63e82f1db1e1@collabora.com> References: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> In-Reply-To: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> To: Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , =?utf-8?q?Christian_K=C3=B6nig?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Dmitry Baryshkov , Sascha Hauer , Rob Herring Cc: kernel@collabora.com, amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, Nicolas Frattaroli , Werner Sembach , Andri Yngvason , Marius Vlad X-Mailer: b4 0.14.3 The "color format" DRM property allows userspace to explicitly pick a color format to use. If an unsupported color format is requested, userspace will be given an error instead of silently having its request disobeyed. The default case, which is AUTO, picks YCbCr 4:2:0 if it's a 4:2:0-only mode, and RGB in all other cases. Co-developed-by: Werner Sembach Signed-off-by: Werner Sembach Co-developed-by: Andri Yngvason Signed-off-by: Andri Yngvason Co-developed-by: Marius Vlad Signed-off-by: Marius Vlad Signed-off-by: Nicolas Frattaroli --- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 85 ++++++++++++++++++= +--- .../amd/display/amdgpu_dm/amdgpu_dm_mst_types.c | 13 ++++ 2 files changed, 89 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gp= u/drm/amd/display/amdgpu_dm/amdgpu_dm.c index 0b44bfe9e7e5..60de0a748172 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -6650,11 +6650,14 @@ static void fill_stream_properties_from_drm_display= _mode( const struct dc_stream_state *old_stream, int requested_bpc) { + bool is_dp_or_hdmi =3D dc_is_hdmi_signal(stream->signal) || dc_is_dp_sign= al(stream->signal); struct dc_crtc_timing *timing_out =3D &stream->timing; const struct drm_display_info *info =3D &connector->display_info; struct amdgpu_dm_connector *aconnector =3D NULL; struct hdmi_vendor_infoframe hv_frame; struct hdmi_avi_infoframe avi_frame; + bool want_420; + bool want_422; ssize_t err; =20 if (connector->connector_type !=3D DRM_MODE_CONNECTOR_WRITEBACK) @@ -6667,19 +6670,38 @@ static void fill_stream_properties_from_drm_display= _mode( timing_out->h_border_right =3D 0; timing_out->v_border_top =3D 0; timing_out->v_border_bottom =3D 0; - /* TODO: un-hardcode */ - if (drm_mode_is_420_only(info, mode_in) || (drm_mode_is_420_also(info, mo= de_in) && - aconnector && aconnector->force_yuv420_output)) + + want_420 =3D (aconnector && aconnector->force_yuv420_output) || + (connector_state->color_format =3D=3D DRM_COLOR_FORMAT_YCBCR420); + want_422 =3D (aconnector && aconnector->force_yuv422_output) || + (connector_state->color_format =3D=3D DRM_COLOR_FORMAT_YCBCR422); + + if (drm_mode_is_420_only(info, mode_in) && (want_420 || !connector_state-= >color_format)) timing_out->pixel_encoding =3D PIXEL_ENCODING_YCBCR420; - else if ((connector->display_info.color_formats & DRM_COLOR_FORMAT_YCBCR4= 22) - && aconnector - && aconnector->force_yuv422_output) + else if (drm_mode_is_420_also(info, mode_in) && want_420) + timing_out->pixel_encoding =3D PIXEL_ENCODING_YCBCR420; + else if ((info->color_formats & DRM_COLOR_FORMAT_YCBCR422) && want_422 &&= is_dp_or_hdmi) timing_out->pixel_encoding =3D PIXEL_ENCODING_YCBCR422; - else if ((connector->display_info.color_formats & DRM_COLOR_FORMAT_YCBCR4= 44) - && stream->signal =3D=3D SIGNAL_TYPE_HDMI_TYPE_A) + else if (connector_state->color_format =3D=3D DRM_COLOR_FORMAT_YCBCR444 && + (info->color_formats & DRM_COLOR_FORMAT_YCBCR444) && is_dp_or_hdmi) timing_out->pixel_encoding =3D PIXEL_ENCODING_YCBCR444; - else + else if ((connector_state->color_format =3D=3D DRM_COLOR_FORMAT_RGB444 || + !connector_state->color_format)) timing_out->pixel_encoding =3D PIXEL_ENCODING_RGB; + else { + /* + * If a format was explicitly requested but the requested format + * can't be satisfied, set it to an invalid value so that an + * error bubbles up to userspace. This way, userspace knows it + * needs to make a better choice. + */ + if (connector_state->color_format) + timing_out->pixel_encoding =3D PIXEL_ENCODING_UNDEFINED; + else if (drm_mode_is_420_only(info, mode_in)) + timing_out->pixel_encoding =3D PIXEL_ENCODING_YCBCR420; + else + timing_out->pixel_encoding =3D PIXEL_ENCODING_RGB; + } =20 timing_out->timing_3d_format =3D TIMING_3D_FORMAT_NONE; timing_out->display_color_depth =3D convert_color_depth_from_display_info( @@ -8027,6 +8049,38 @@ static enum dc_status dm_validate_stream_and_context= (struct dc *dc, return dc_result; } =20 +static enum dc_status +dm_validate_stream_color_format(const struct drm_connector_state *drm_stat= e, + const struct dc_stream_state *stream) +{ + enum dc_pixel_encoding encoding; + + if (!drm_state->color_format) + return DC_OK; + + switch (drm_state->color_format) { + case DRM_COLOR_FORMAT_AUTO: + case DRM_COLOR_FORMAT_RGB444: + encoding =3D PIXEL_ENCODING_RGB; + break; + case DRM_COLOR_FORMAT_YCBCR444: + encoding =3D PIXEL_ENCODING_YCBCR444; + break; + case DRM_COLOR_FORMAT_YCBCR422: + encoding =3D PIXEL_ENCODING_YCBCR422; + break; + case DRM_COLOR_FORMAT_YCBCR420: + encoding =3D PIXEL_ENCODING_YCBCR420; + break; + default: + encoding =3D PIXEL_ENCODING_UNDEFINED; + break; + } + + return encoding =3D=3D stream->timing.pixel_encoding ? + DC_OK : DC_UNSUPPORTED_VALUE; +} + struct dc_stream_state * create_validate_stream_for_sink(struct drm_connector *connector, const struct drm_display_mode *drm_mode, @@ -8073,6 +8127,9 @@ create_validate_stream_for_sink(struct drm_connector = *connector, if (dc_result =3D=3D DC_OK) dc_result =3D dm_validate_stream_and_context(adev->dm.dc, stream); =20 + if (dc_result =3D=3D DC_OK) + dc_result =3D dm_validate_stream_color_format(drm_state, stream); + if (dc_result !=3D DC_OK) { DRM_DEBUG_KMS("Pruned mode %d x %d (clk %d) %s %s -- %s\n", drm_mode->hdisplay, @@ -8888,6 +8945,12 @@ static const u32 supported_colorspaces =3D BIT(DRM_MODE_COLORIMETRY_BT2020_RGB) | BIT(DRM_MODE_COLORIMETRY_BT2020_YCC); =20 +static const u32 supported_colorformats =3D + DRM_COLOR_FORMAT_RGB444 | + DRM_COLOR_FORMAT_YCBCR444 | + DRM_COLOR_FORMAT_YCBCR422 | + DRM_COLOR_FORMAT_YCBCR420; + void amdgpu_dm_connector_init_helper(struct amdgpu_display_manager *dm, struct amdgpu_dm_connector *aconnector, int connector_type, @@ -9000,6 +9063,10 @@ void amdgpu_dm_connector_init_helper(struct amdgpu_d= isplay_manager *dm, =20 if (adev->dm.hdcp_workqueue) drm_connector_attach_content_protection_property(&aconnector->base, tru= e); + + if (!drm_mode_create_color_format_property(&aconnector->base, + supported_colorformats)) + drm_connector_attach_color_format_property(&aconnector->base); } =20 if (connector_type =3D=3D DRM_MODE_CONNECTOR_eDP) { diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c b/= drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c index dbd1da4d85d3..3ae610e11806 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c @@ -52,6 +52,12 @@ =20 #define PEAK_FACTOR_X1000 1006 =20 +static const u32 supported_colorformats =3D + DRM_COLOR_FORMAT_RGB444 | + DRM_COLOR_FORMAT_YCBCR444 | + DRM_COLOR_FORMAT_YCBCR422 | + DRM_COLOR_FORMAT_YCBCR420; + /* * This function handles both native AUX and I2C-Over-AUX transactions. */ @@ -679,6 +685,13 @@ dm_dp_add_mst_connector(struct drm_dp_mst_topology_mgr= *mgr, if (connector->max_bpc_property) drm_connector_attach_max_bpc_property(connector, 8, 16); =20 + connector->color_format_property =3D master->base.color_format_property; + if (connector->color_format_property) { + if (!drm_mode_create_color_format_property(&aconnector->base, + supported_colorformats)) + drm_connector_attach_color_format_property(&aconnector->base); + } + connector->vrr_capable_property =3D master->base.vrr_capable_property; if (connector->vrr_capable_property) drm_connector_attach_vrr_capable_property(connector); --=20 2.52.0 From nobody Mon Dec 1 22:05:08 2025 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 16B5B2D73A7 for ; Fri, 28 Nov 2025 21:07:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364065; cv=pass; b=BxZWHOpotWy0ItSeBGByDkxilWwQlgp+CxnbNk2n5Awu14bM2trT9hGyKsjW7jmaYgvRwT6yVQrCThwph9OzyD/nYpPuGa/LxQ0l++bfRnN7wdLSmC5T+2PQL1fOgpU2iZJqC8+bebmWaR7CIIXy0wDU3zGA88E0f2Xxo13JjRE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364065; c=relaxed/simple; bh=q6PZpQcvY1jgZRB83JmeEzrBct/sGrioheJPTg6tZ1Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pSK+OlCXDeEdVKclT9HpF+KE9XQMvPciynf97AWtcSRf/qp5+7wqE5BRLTM5eS3zfVfb3PSeXVj7dpE2PTBfbjKmbCRGbADvVz/1PxUKWKa05fFEg54bLii2mnpNhjXefaZMCIRTN0vVsOwJY+c0qc6m4HxFF9lFZll06Wwl/Hk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=XnhKIR7b; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="XnhKIR7b" ARC-Seal: i=1; a=rsa-sha256; t=1764364026; cv=none; d=zohomail.com; s=zohoarc; b=TmLhb3FIvaaFPJvAaE+/6hag+voJDcXr1vu/D0XQNjWmqwxCfRIOrGdnknzMj++ZASqE5QZhkBiE3xdLXogsPm0sAQwmEz2yIoMGSS1dpKLZJ6AZD8TWZPm+88i//u0+zRTCGOMq12JQL+zHiurQUS39wN1o70XkT65PKHZZPk0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1764364026; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=neCvNPmKBMuP5SUVtUC32+B9nBFtTY9p42IPydBIi3E=; b=H6hE839vuyeJfYg9ZA0rywUlHwhR15RoBAu2HeYlUmNWmhTgnB9VD2x483/HZ/7bdtyufA1QW+t66iq68JqWSzPMll2h/8PfF82GxBzXB9cukVcc/S2fPEJJRvJSSaqIrCb/AtR1Wu3Y7bThuL6Amq/YQgOrK5i6U7/VFBG48hM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1764364026; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=neCvNPmKBMuP5SUVtUC32+B9nBFtTY9p42IPydBIi3E=; b=XnhKIR7b2OYj8p2aL4aQ4FO6S31k85iB7ms66vyewmJMoMoEG6Kl6wXcYsr13sBB UKFzpgcWuzDw4UvjpxUefcmRg6yizX04a6kearKM43RYgZtSfz2cOI9fFhB+CZpSmS1 xZBnx5+urO03k8T8QEUCBYJtp3oFnbQPf6js3t1A= Received: by mx.zohomail.com with SMTPS id 1764364024210163.4162873778854; Fri, 28 Nov 2025 13:07:04 -0800 (PST) From: Nicolas Frattaroli Date: Fri, 28 Nov 2025 22:05:45 +0100 Subject: [PATCH v5 09/17] drm/rockchip: Add YUV422 output mode constants for VOP2 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251128-color-format-v5-9-63e82f1db1e1@collabora.com> References: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> In-Reply-To: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> To: Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , =?utf-8?q?Christian_K=C3=B6nig?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Dmitry Baryshkov , Sascha Hauer , Rob Herring Cc: kernel@collabora.com, amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, Nicolas Frattaroli X-Mailer: b4 0.14.3 The Rockchip display controller has a general YUV422 output mode, and some SoC-specific connector-specific output modes for RK3576. Add them, based on the values in downstream and the TRM (dsp_out_mode in RK3576 TRM Part 2, register POST*_CTRL_POST_DSP_CTRL). Signed-off-by: Nicolas Frattaroli --- drivers/gpu/drm/rockchip/rockchip_drm_drv.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.h b/drivers/gpu/drm/= rockchip/rockchip_drm_drv.h index 2e86ad00979c..4705dc6b8bd7 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.h @@ -30,10 +30,14 @@ #define ROCKCHIP_OUT_MODE_P565 2 #define ROCKCHIP_OUT_MODE_BT656 5 #define ROCKCHIP_OUT_MODE_S888 8 +#define ROCKCHIP_OUT_MODE_YUV422 9 #define ROCKCHIP_OUT_MODE_S888_DUMMY 12 #define ROCKCHIP_OUT_MODE_YUV420 14 /* for use special outface */ #define ROCKCHIP_OUT_MODE_AAAA 15 +/* SoC specific output modes */ +#define ROCKCHIP_OUT_MODE_YUV422_RK3576_DP 12 +#define ROCKCHIP_OUT_MODE_YUV422_RK3576_HDMI 13 =20 /* output flags */ #define ROCKCHIP_OUTPUT_DSI_DUAL BIT(0) --=20 2.52.0 From nobody Mon Dec 1 22:05:08 2025 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D85F12DC791 for ; Fri, 28 Nov 2025 21:07:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364073; cv=pass; b=EHoNC0QtBBbVopTyCZxMnC+Yy+8l7QU7fwlwbJ7pAkYGyo4J5wpPTU1++wgTiaQecOoTBwEoDNdCzGIx6hxsd405DcOkLTAttF5rk8J98oknwZdXVYLRGPgfHs8v4iXkVUXISM2FASq+iQZrBKbqm0ufr0/eyTdtF4cRXpKP9lM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364073; c=relaxed/simple; bh=qELFdahJFjJanPq3aLi4A8Hh8zrv4Lhy4An+8vOTQhw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=BnFQ7hxH1jiz9Dgcpho2h44eX78q3nvvuM8GZ2VL+JKlWSMm7RKVXh4vw1qHhFrR1HqeEyYfmcsa0ojaPBYaju+93ZK5kZPlRDa21xA7Vm9DaO9pVGPgtv8a+ozALVM1wG3QV55jI3hmS2gkDJp1Bc1/DCdN7neBnC34OcP3060= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=X77oHtYE; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="X77oHtYE" ARC-Seal: i=1; a=rsa-sha256; t=1764364034; cv=none; d=zohomail.com; s=zohoarc; b=Nu0xqIRmGhmozM0z0zhx5llyzEbLNOHWkrCU4t7O7jg+XLm0ir8eFhFLpE/Xrc0JCe6nWyjlkUo+g1q6YyZLrRoFJMpi6lB9R1/0EVdQ+hsVtTkCTNol8EMHqTRECb9C0Gkio3TAwiudMVJ8RacSQ7Q2obgBzZX9PrPsr08f770= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1764364034; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=/MpT/AtBy9PLkAWryhr0CXHQiQHAmL0aMyFWeO6QNU4=; b=Mz7wRJx1Ya75IwbmXOAxiJVDZ6bDBRnMQbd4CdqxTh+19t/uM6GUIaTRdgHbZ34k3yl8cV+SrTl+RlFIqUxzuyJZcQY1+ZprolZnz315v3wH5VVusY+SL/+v6NGh9e1FKIzj+eBL6eVd3GnXihzjmKb2OIlyBYHG3YPqgEUnfn8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1764364034; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=/MpT/AtBy9PLkAWryhr0CXHQiQHAmL0aMyFWeO6QNU4=; b=X77oHtYEdxbo6XR7v5PUBCxoRX0oCXG27QaFIUrn875nX2jmz5q+lq54zeMXSle0 7ugpMG3+9L1c1ZulRuqTo+/S3tGbBH16m9T0KewhiXt3/fJc0y80Ryq4ejf3HRUSnpU n+qPdQMsUpVe0zWw0hDMcficet2PdBoCxfb4ONBU= Received: by mx.zohomail.com with SMTPS id 176436403133274.97397831652074; Fri, 28 Nov 2025 13:07:11 -0800 (PST) From: Nicolas Frattaroli Date: Fri, 28 Nov 2025 22:05:46 +0100 Subject: [PATCH v5 10/17] drm/rockchip: vop2: Fix YUV444 output Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251128-color-format-v5-10-63e82f1db1e1@collabora.com> References: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> In-Reply-To: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> To: Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , =?utf-8?q?Christian_K=C3=B6nig?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Dmitry Baryshkov , Sascha Hauer , Rob Herring Cc: kernel@collabora.com, amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, Nicolas Frattaroli X-Mailer: b4 0.14.3 YUV444 (aka YCbCr444) output isn't working quite right on RK3588. The resulting image on the display, while identifying itself as YUV444, has some components swapped, even after adding the necessary DRM formats to the conversion functions. Judging by downstream, this is because YUV444 also needs an rb swap performed in the AFBC case. Add the DRM formats to the appropriate switch statements, and add a function for checking whether an rb swap needs to be performed in the AFBC case. Fixes: 604be85547ce ("drm/rockchip: Add VOP2 driver") Signed-off-by: Nicolas Frattaroli --- drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm= /rockchip/rockchip_drm_vop2.c index 498df0ce4680..f1252d1f06e9 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -176,6 +176,7 @@ static enum vop2_data_format vop2_convert_format(u32 fo= rmat) case DRM_FORMAT_ARGB2101010: case DRM_FORMAT_XBGR2101010: case DRM_FORMAT_ABGR2101010: + case DRM_FORMAT_VUY101010: return VOP2_FMT_XRGB101010; case DRM_FORMAT_XRGB8888: case DRM_FORMAT_ARGB8888: @@ -184,6 +185,7 @@ static enum vop2_data_format vop2_convert_format(u32 fo= rmat) return VOP2_FMT_ARGB8888; case DRM_FORMAT_RGB888: case DRM_FORMAT_BGR888: + case DRM_FORMAT_VUY888: return VOP2_FMT_RGB888; case DRM_FORMAT_RGB565: case DRM_FORMAT_BGR565: @@ -225,6 +227,7 @@ static enum vop2_afbc_format vop2_convert_afbc_format(u= 32 format) case DRM_FORMAT_ARGB2101010: case DRM_FORMAT_XBGR2101010: case DRM_FORMAT_ABGR2101010: + case DRM_FORMAT_VUY101010: return VOP2_AFBC_FMT_ARGB2101010; case DRM_FORMAT_XRGB8888: case DRM_FORMAT_ARGB8888: @@ -233,6 +236,7 @@ static enum vop2_afbc_format vop2_convert_afbc_format(u= 32 format) return VOP2_AFBC_FMT_ARGB8888; case DRM_FORMAT_RGB888: case DRM_FORMAT_BGR888: + case DRM_FORMAT_VUY888: return VOP2_AFBC_FMT_RGB888; case DRM_FORMAT_RGB565: case DRM_FORMAT_BGR565: @@ -270,6 +274,19 @@ static bool vop2_win_rb_swap(u32 format) } } =20 +static bool vop2_afbc_rb_swap(u32 format) +{ + switch (format) { + case DRM_FORMAT_NV24: + case DRM_FORMAT_NV30: + case DRM_FORMAT_VUY888: + case DRM_FORMAT_VUY101010: + return true; + default: + return false; + } +} + static bool vop2_afbc_uv_swap(u32 format) { switch (format) { @@ -1304,6 +1321,7 @@ static void vop2_plane_atomic_update(struct drm_plane= *plane, /* It's for head stride, each head size is 16 byte */ stride =3D ALIGN(stride, block_w) / block_w * 16; =20 + rb_swap =3D vop2_afbc_rb_swap(fb->format->format); uv_swap =3D vop2_afbc_uv_swap(fb->format->format); /* * This is a workaround for crazy IC design, Cluster @@ -1321,6 +1339,7 @@ static void vop2_plane_atomic_update(struct drm_plane= *plane, vop2_win_write(win, VOP2_WIN_AFBC_ENABLE, 1); vop2_win_write(win, VOP2_WIN_AFBC_FORMAT, afbc_format); vop2_win_write(win, VOP2_WIN_AFBC_UV_SWAP, uv_swap); + vop2_win_write(win, VOP2_WIN_AFBC_RB_SWAP, rb_swap); /* * On rk3566/8, this bit is auto gating enable, * but this function is not work well so we need --=20 2.52.0 From nobody Mon Dec 1 22:05:08 2025 Received: from sender3-pp-f112.zoho.com (sender3-pp-f112.zoho.com [136.143.184.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5728F2DEA87 for ; Fri, 28 Nov 2025 21:07:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.184.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364079; cv=pass; b=LWiwN3pQGgsPS1NQAwUZ5e1Jr6G2+uy4D0p3CsTEvCtC0a8WK+OUHarylkVa/VhOgVZwGFvSzsI8vW8b3xSw7ZdEDnGl/iSkyppBy2RXPUDIm9d7sIHB6Gyu0kz6uhjlB6Q7wgYSe9Dkhkv58tuMmap7rRxKKBHX896fPHPtKiI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364079; c=relaxed/simple; bh=1w33AFtifOX/dMmEmcRG5+iXNJ3bbgf47m+4cMYUwf8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gNv5GKmu/wwGW1mt5medp6ONrSfUtOzVsJoFkRylQdSWVaawmohso4TJs6fn5FX18zLPiu7xwqL+nf8R/Kr2GBpf3+B/pwHJZM057hK8dDF0E9tCLY2I+MdMeId/cO4PZcniCdDJUIhg6OEYT0cTp2mJcG7zjTAWtpwp9oICSy0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=jRFnEV2h; arc=pass smtp.client-ip=136.143.184.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="jRFnEV2h" ARC-Seal: i=1; a=rsa-sha256; t=1764364040; cv=none; d=zohomail.com; s=zohoarc; b=mP7JOnOVmykDoJeYZ1TH/GVAybcvE5O9W95kh3HcC1xAzM6EZ7uoSSH4szoFphfEcnS+4mbm+6c5ICDrHXLHI1VQ1xeTgOR/eFM++xpUAFeDg+0z+sU2gzswUMDaEj6ARKggRNaG46LZ8g2Zoc2bYOWbGBdWg43pgdDER2D7pww= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1764364040; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=vMEVtusOOXfPRN1S7veFHRS7LrQNrJrKcU+w7cKs18Y=; b=JKABHKXUYv6hftOD2O1nEADFI9DptPuH1elVCdSOypnlazJoaAemq7eqb7CjjbcYTXzrNUAoPQQfzuQpmhJg7YHmknUEUCcFoOGmB+ufTHMS9JeTHnOOWUgDUuTQxfuo3wC0Bj1Lvo9TjRWnuLdjt11t5OQtmkiASVJ6JJq8Glk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1764364040; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=vMEVtusOOXfPRN1S7veFHRS7LrQNrJrKcU+w7cKs18Y=; b=jRFnEV2hXn49mq20FbWVpn0yKXRmpyKwj6kxw7z+Waj2+dfFloPXQdiBGf3UTD0q zwoNBQoGlhM7+mUzwfei8HuI0ItZf7I+SeSanLIam0r+uerrXSBkEL1j9iFY3oZONY6 Igj3fBUeT+vzPO8U/wHejQzfVWb3b4L2Iyq19pY8= Received: by mx.zohomail.com with SMTPS id 1764364038497541.7488626349531; Fri, 28 Nov 2025 13:07:18 -0800 (PST) From: Nicolas Frattaroli Date: Fri, 28 Nov 2025 22:05:47 +0100 Subject: [PATCH v5 11/17] drm/rockchip: vop2: Add RK3576 to the RG swap special case Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251128-color-format-v5-11-63e82f1db1e1@collabora.com> References: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> In-Reply-To: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> To: Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , =?utf-8?q?Christian_K=C3=B6nig?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Dmitry Baryshkov , Sascha Hauer , Rob Herring Cc: kernel@collabora.com, amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, Nicolas Frattaroli X-Mailer: b4 0.14.3 Much like RK3588, RK3576 requires an RG swap to be performed for YUV444 8-bit and YUV444 10-bit bus formats. Add its version to the already existing check for RK3588, so that YUV444 output is correct on this platform. Fixes: 944757a4cba6 ("drm/rockchip: vop2: Add support for rk3576") Signed-off-by: Nicolas Frattaroli --- drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm= /rockchip/rockchip_drm_vop2.c index f1252d1f06e9..0a1adf36a24f 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -354,7 +354,8 @@ static bool vop2_output_uv_swap(u32 bus_format, u32 out= put_mode) =20 static bool vop2_output_rg_swap(struct vop2 *vop2, u32 bus_format) { - if (vop2->version =3D=3D VOP_VERSION_RK3588) { + if (vop2->version =3D=3D VOP_VERSION_RK3588 || + vop2->version =3D=3D VOP_VERSION_RK3576) { if (bus_format =3D=3D MEDIA_BUS_FMT_YUV8_1X24 || bus_format =3D=3D MEDIA_BUS_FMT_YUV10_1X30) return true; --=20 2.52.0 From nobody Mon Dec 1 22:05:08 2025 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C25E22C0F95 for ; Fri, 28 Nov 2025 21:08:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364098; cv=pass; b=HVFMi2gtt3zWKUJQykzdRb0jE7tPJ/rSRTOPEITFGz/oHbjp6ZSvaRtVYGDVYf3SakpMw5d/XRp9oc06Z8Kx9wIBe0+r/YglzJQ5jzrg/rkh9wp6s7DaKnBhT9f8K5e8bijQl70upWpuYrXob2aTgxneGuDvWnTIQK2sP6Pf+uM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364098; c=relaxed/simple; bh=ix3pZzfTW4S6abNV74aBJSBiz19Cut6ShevDRTiNgok=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XRXYsa6CnQVEbWifvyVM0gv3GcIqToAya4s4MWcFkGeqs90Aj6oWWu0uU8kMGqTqouGf7W/i24RltkfFAvGtUug1YIEKKgcM/FGfos7Av6dsIBYd/kdVHHWVraeUeX2p3YPNrUxtHlDFvFQzhueYElVRw/c+wwU8Ytq1ljY5eQk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=G3GMaRlO; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="G3GMaRlO" ARC-Seal: i=1; a=rsa-sha256; t=1764364048; cv=none; d=zohomail.com; s=zohoarc; b=mxA1iGo24AnVpzkbM6BFLHKJF3iTThE8TR5+4oDudIYkq2aRD+MuFBxhCfnIgqnaE7yOq6YIbTCp5qoDILcqOIbHU//xnlKjg09juvQP9APX6q5ycatW3GgUXt9YFutVgcqHPNpMnHccrvAziowtpfMAxFRVSbmovmd6BsdmwUo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1764364048; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=AUL89ob/MZ7ra+D7aghfzym7THuhGc6TJCOHD38hX/8=; b=XHytapiDwhIUtnRCU2MtjBEzMk+36RFBJmmUXDPAHkzHAkXkJ4LZflj5BOZS1S7jTMkFQB+PYihTQv6IrpRUUee3ljaBAFaxRhv6hUW8wen1SiejREng7qnQ+KZBHBTYpBo5yHBc4CuGvEKMwbdsmVF6R91xZ2MYCewX/j4+Xws= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1764364048; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=AUL89ob/MZ7ra+D7aghfzym7THuhGc6TJCOHD38hX/8=; b=G3GMaRlOFV+JTmQA4moCKVm1kvg7TNvyrLx5eOtUvfYAuUBkaWMMQRkmSsfprQA3 4+emIaOiuRG2z70gh8h0i9GkY4LiikuJdildcFfn6PHV1sQn2Q3O1ftaqt6IaBqguNS 3tEVbdUcEdkioYJTvFcApu1DjvLm0buhWa9TIz4k= Received: by mx.zohomail.com with SMTPS id 1764364045671467.1689841398395; Fri, 28 Nov 2025 13:07:25 -0800 (PST) From: Nicolas Frattaroli Date: Fri, 28 Nov 2025 22:05:48 +0100 Subject: [PATCH v5 12/17] drm/rockchip: vop2: Recognise 10/12-bit YUV422 as YUV formats Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251128-color-format-v5-12-63e82f1db1e1@collabora.com> References: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> In-Reply-To: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> To: Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , =?utf-8?q?Christian_K=C3=B6nig?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Dmitry Baryshkov , Sascha Hauer , Rob Herring Cc: kernel@collabora.com, amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, Nicolas Frattaroli X-Mailer: b4 0.14.3 The Rockchip VOP2 video output driver has a "is_yuv_output" function, which returns true when a given bus format is a YUV format, and false otherwise. This switch statement is lacking the bus format used for YUV422 10-bit, as well as the bus format used for YUV422 12-bit. Add MEDIA_BUS_FMT_YUYV10_1X20 and MEDIA_BUS_FMT_YUYV12_1X24 to is_yuv_output's switch cases to resolve this. Fixes: 604be85547ce ("drm/rockchip: Add VOP2 driver") Signed-off-by: Nicolas Frattaroli --- drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm= /rockchip/rockchip_drm_vop2.c index 0a1adf36a24f..21afcca1218c 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -369,6 +369,8 @@ static bool is_yuv_output(u32 bus_format) switch (bus_format) { case MEDIA_BUS_FMT_YUV8_1X24: case MEDIA_BUS_FMT_YUV10_1X30: + case MEDIA_BUS_FMT_YUYV10_1X20: + case MEDIA_BUS_FMT_YUYV12_1X24: case MEDIA_BUS_FMT_UYYVYY8_0_5X24: case MEDIA_BUS_FMT_UYYVYY10_0_5X30: case MEDIA_BUS_FMT_YUYV8_2X8: --=20 2.52.0 From nobody Mon Dec 1 22:05:08 2025 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C26532D12E7 for ; Fri, 28 Nov 2025 21:08:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364097; cv=pass; b=PA4V2BECwH6houL2JsiOxNTlGu7rZUt7I7R4p7SL+g/ChC4FLbMvq/o5pbR8FjjNzkKcvCySKJgEejjUUaLttnx+5fDrO94IOJfXTiPUjhg3A7aVintE8FG6qPSxv6ymx3AC3k8XGJdxw9B318BKSWW/Sr5hD/Bl48phqqh28TE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364097; c=relaxed/simple; bh=n1WiOPpUH4fQ1wMmpuhK66tx3/sAi7ymhlYh8y42QtM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KNRs6aPPaVuWSjjs/ONcV9U5gIIwDVHgCaA+CDhnxFEHjeDehIQXKmq4kr2/uxffpb6589sDYw7tyHJvmF2EysztjGxxjfKiYRj6G2PH8gVyCV5/2NpKagQcwLxMs5cL6ecw7kahOn1jsLCr+L+m5FNgLzF43Xxhy9xFRZi138I= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=fx7Q5EJ2; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="fx7Q5EJ2" ARC-Seal: i=1; a=rsa-sha256; t=1764364054; cv=none; d=zohomail.com; s=zohoarc; b=UPWmRUTKbGui/i5e6sB805AxnGcH5CqgF+ej7cYhQX0k1JnqLWxYOjaNF8Blao2Otv9Bj3YyqYU0NI4u/1xjscc207xN4uMfIkiQtoRlWSyK0Y+GNm1W1h2ywKWx3bIT0AAlKrEw9g5f5wWShKcdpvFtcgVmEAgN88/SRO2Fe0A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1764364054; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=MSkvAHcP/G4a6alQDdr5rtYAAoRHlQiW07L6MnzhG5c=; b=k4dMunZWoDfjtqEr+6rY/CekD00x/qD9DVlEtY8+h/GKOBXy9oQVvd4p1ZIgp6MyQOCxpk0EdfAldtrBhJVbNZDiZu2P/AaNFhcTPK02dclXy0PdfVJAk82pobo48/lsDbzJdCaZ7MUz9hAA/D8EXBlPeCrBXkUVFguhZlsroxE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1764364054; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=MSkvAHcP/G4a6alQDdr5rtYAAoRHlQiW07L6MnzhG5c=; b=fx7Q5EJ2kkDka7ehv/XNboSqkwzCv3eVBtdhurXogzwSL985bn9Rw5eo+7ROZigA KX/hclhyz+kHjApR1nbf/05LRBJg8RZoh+028/OBXpbhhDulAgDGe7ebjXf/C7GB/Vh m/br9ZI78b68hafj0EZkLsWtLemNW9X60TyFdXY0= Received: by mx.zohomail.com with SMTPS id 1764364052859213.44634754490573; Fri, 28 Nov 2025 13:07:32 -0800 (PST) From: Nicolas Frattaroli Date: Fri, 28 Nov 2025 22:05:49 +0100 Subject: [PATCH v5 13/17] drm/rockchip: vop2: Set correct output format for RK3576 YUV422 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251128-color-format-v5-13-63e82f1db1e1@collabora.com> References: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> In-Reply-To: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> To: Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , =?utf-8?q?Christian_K=C3=B6nig?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Dmitry Baryshkov , Sascha Hauer , Rob Herring Cc: kernel@collabora.com, amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, Nicolas Frattaroli X-Mailer: b4 0.14.3 For RK3576 to be able to output YUV422 signals, it first needs to be able to pick the right output mode in the display controller to do so. The RK3576 hardware specifies different output formats depending on the used display protocol. Adjust the written register value based on the SoC and connector, so other users of vcstate->output_mode don't have to care about this. Signed-off-by: Nicolas Frattaroli --- drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm= /rockchip/rockchip_drm_vop2.c index 21afcca1218c..cd18876955e4 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -1707,6 +1707,22 @@ static void vop2_crtc_atomic_enable(struct drm_crtc = *crtc, if (vcstate->output_mode =3D=3D ROCKCHIP_OUT_MODE_AAAA && !(vp_data->feature & VOP2_VP_FEATURE_OUTPUT_10BIT)) out_mode =3D ROCKCHIP_OUT_MODE_P888; + else if (vcstate->output_mode =3D=3D ROCKCHIP_OUT_MODE_YUV422 && + vop2->version =3D=3D VOP_VERSION_RK3576) + switch (vcstate->output_type) { + case DRM_MODE_CONNECTOR_DisplayPort: + case DRM_MODE_CONNECTOR_eDP: + out_mode =3D ROCKCHIP_OUT_MODE_YUV422_RK3576_DP; + break; + case DRM_MODE_CONNECTOR_HDMIA: + out_mode =3D ROCKCHIP_OUT_MODE_YUV422_RK3576_HDMI; + break; + default: + drm_err(vop2->drm, "Unknown DRM_MODE_CONNECTOR %d\n", + vcstate->output_type); + vop2_unlock(vop2); + return; + } else out_mode =3D vcstate->output_mode; =20 --=20 2.52.0 From nobody Mon Dec 1 22:05:08 2025 Received: from sender3-pp-f112.zoho.com (sender3-pp-f112.zoho.com [136.143.184.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 59CA42DEA6E for ; Fri, 28 Nov 2025 21:08:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.184.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364110; cv=pass; b=YwReoGmKnnI4fe24ipr0oywhml3S6JSsKMrLW8HrwBWRKcfMvnrEqHO/XjOs/HeXVFevb3glXPi0sy/HmT5tMCCbKRtipYKeF1StN1QAfd5J5PnG7KtQnGO3NA+gsZBFKoY6lecgLVfEowDrqaN+T8FsHZsYZCx35DnPCnTVSTw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364110; c=relaxed/simple; bh=z2gkLn5ZCVP2oqnHuFVDrOQjy2gBFXozrfujbVahNl8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=eRje5ZAyWU6S+tZGGqT7s4mA42OlNojuMXN++EcDUlAKAurSKvMl7065lAwa6cR0FJewYKDoe+jEk0/OvW0bRrqLBpDyfbDwzURvQeUe2LY0QNwA+b0dLm/aw2n6+RIobfbkVrsZLVPiUjKAuxh7q2xlrdl+7U7502jzalmMkiY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=A19WYfmm; arc=pass smtp.client-ip=136.143.184.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="A19WYfmm" ARC-Seal: i=1; a=rsa-sha256; t=1764364062; cv=none; d=zohomail.com; s=zohoarc; b=grGoH9h1PdGRRJ3pOURX10ptElYtOElY974w2MJ/iJH02y/xfwCRz1gbwRGuc/wuA7lj/zQjV3oIc8ej0UMFDo3j3oL23IFiCWqnK1yWDrNLmfqCCPHIXV5Dy4CWuIfEQP0vAMDnwY50aXU4a1s+AMIC6Lznas6i+aNpsJ7TEK8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1764364062; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=t9MOLGQnjIX0i6MWMRJ3Uvi+d7WdDeCX9ytBsMIm2YI=; b=CYfBc4MsjWzggFnQXVavpzzbVStLdISfZglLeeQQhtG2rMbSvHdssYCl+0EVeSsMfcmHJXIEgpS5uK+lTmKNmbDW9uO04auTgy0mlHHEXmIJMDqzEqDEk/axJ2YVUMSvtwiDZ7AL1Gc4spxtGK32AU/c+4HzArKpJ5Mnjhfp7Jo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1764364062; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=t9MOLGQnjIX0i6MWMRJ3Uvi+d7WdDeCX9ytBsMIm2YI=; b=A19WYfmmuZJQz5hKGgA2rAC1mCnirw/J0aOZzV92pMI9HVQPBcvOXqxaqSHnVma8 rU6eprfShFmVka2xK6CiKK70HatTZaZTNkTUbRjzGLXih8gJkp9t6vXmnjqAimE38dG XxsaBlXr4m0RafDUHinG68EEFAvvBcJAmYhS5ny8= Received: by mx.zohomail.com with SMTPS id 1764364060044867.1068385253593; Fri, 28 Nov 2025 13:07:40 -0800 (PST) From: Nicolas Frattaroli Date: Fri, 28 Nov 2025 22:05:50 +0100 Subject: [PATCH v5 14/17] drm/rockchip: dw_hdmi_qp: Implement "color format" DRM property Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251128-color-format-v5-14-63e82f1db1e1@collabora.com> References: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> In-Reply-To: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> To: Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , =?utf-8?q?Christian_K=C3=B6nig?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Dmitry Baryshkov , Sascha Hauer , Rob Herring Cc: kernel@collabora.com, amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, Nicolas Frattaroli X-Mailer: b4 0.14.3 Switch between requested color formats by setting the right bus formats, configuring the VO GRF registers, and setting the right output mode. Signed-off-by: Nicolas Frattaroli --- drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c | 61 ++++++++++++++++++++++= ++-- drivers/gpu/drm/rockchip/rockchip_drm_drv.h | 1 + 2 files changed, 59 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c b/drivers/gpu/d= rm/rockchip/dw_hdmi_qp-rockchip.c index c9fe6aa3e3e3..c79ebd9e866c 100644 --- a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c +++ b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -135,24 +136,70 @@ dw_hdmi_qp_rockchip_encoder_atomic_check(struct drm_e= ncoder *encoder, struct drm_crtc_state *crtc_state, struct drm_connector_state *conn_state) { - struct rockchip_hdmi_qp *hdmi =3D to_rockchip_hdmi_qp(encoder); + struct drm_display_info *info =3D &conn_state->connector->display_info; struct rockchip_crtc_state *s =3D to_rockchip_crtc_state(crtc_state); + struct rockchip_hdmi_qp *hdmi =3D to_rockchip_hdmi_qp(encoder); union phy_configure_opts phy_cfg =3D {}; int ret; =20 if (hdmi->tmds_char_rate =3D=3D conn_state->hdmi.tmds_char_rate && - s->output_bpc =3D=3D conn_state->hdmi.output_bpc) + s->output_bpc =3D=3D conn_state->hdmi.output_bpc && + s->color_format =3D=3D conn_state->color_format) return 0; =20 + if (conn_state->color_format && + !(info->color_formats & conn_state->color_format)) + return -EINVAL; + + switch (conn_state->color_format) { + case DRM_COLOR_FORMAT_AUTO: + case DRM_COLOR_FORMAT_RGB444: + if (conn_state->hdmi.output_bpc =3D=3D 8) + s->bus_format =3D MEDIA_BUS_FMT_RGB888_1X24; + else if (conn_state->hdmi.output_bpc =3D=3D 10) + s->bus_format =3D MEDIA_BUS_FMT_RGB101010_1X30; + else + return -EINVAL; + s->output_mode =3D ROCKCHIP_OUT_MODE_AAAA; + break; + case DRM_COLOR_FORMAT_YCBCR444: + if (conn_state->hdmi.output_bpc =3D=3D 8) + s->bus_format =3D MEDIA_BUS_FMT_YUV8_1X24; + else if (conn_state->hdmi.output_bpc =3D=3D 10) + s->bus_format =3D MEDIA_BUS_FMT_YUV10_1X30; + else + return -EINVAL; + s->output_mode =3D ROCKCHIP_OUT_MODE_AAAA; + break; + case DRM_COLOR_FORMAT_YCBCR422: + if (conn_state->hdmi.output_bpc =3D=3D 8) + s->bus_format =3D MEDIA_BUS_FMT_YUYV8_1X16; + else /* 10 bpc possible, but currently busted */ + return -EINVAL; + s->output_mode =3D ROCKCHIP_OUT_MODE_YUV422; + break; + case DRM_COLOR_FORMAT_YCBCR420: + if (conn_state->hdmi.output_bpc =3D=3D 8) + s->bus_format =3D MEDIA_BUS_FMT_UYYVYY8_0_5X24; + else if (conn_state->hdmi.output_bpc =3D=3D 10) + s->bus_format =3D MEDIA_BUS_FMT_UYYVYY10_0_5X30; + else + return -EINVAL; + s->output_mode =3D ROCKCHIP_OUT_MODE_YUV420; + break; + default: + return -EINVAL; + } + phy_cfg.hdmi.tmds_char_rate =3D conn_state->hdmi.tmds_char_rate; phy_cfg.hdmi.bpc =3D conn_state->hdmi.output_bpc; =20 ret =3D phy_configure(hdmi->phy, &phy_cfg); if (!ret) { hdmi->tmds_char_rate =3D conn_state->hdmi.tmds_char_rate; - s->output_mode =3D ROCKCHIP_OUT_MODE_AAAA; s->output_type =3D DRM_MODE_CONNECTOR_HDMIA; s->output_bpc =3D conn_state->hdmi.output_bpc; + s->color_format =3D conn_state->color_format; } else { dev_err(hdmi->dev, "Failed to configure phy: %d\n", ret); } @@ -391,6 +438,8 @@ static void dw_hdmi_qp_rk3588_io_init(struct rockchip_h= dmi_qp *hdmi) static void dw_hdmi_qp_rk3576_enc_init(struct rockchip_hdmi_qp *hdmi, struct rockchip_crtc_state *state) { + enum hdmi_colorspace color =3D + drm_color_format_to_hdmi_colorspace(state->color_format); u32 val; =20 if (state->output_bpc =3D=3D 10) @@ -398,12 +447,16 @@ static void dw_hdmi_qp_rk3576_enc_init(struct rockchi= p_hdmi_qp *hdmi, else val =3D FIELD_PREP_WM16(RK3576_COLOR_DEPTH_MASK, RK3576_8BPC); =20 + val |=3D FIELD_PREP_WM16(RK3576_COLOR_FORMAT_MASK, color); + regmap_write(hdmi->vo_regmap, RK3576_VO0_GRF_SOC_CON8, val); } =20 static void dw_hdmi_qp_rk3588_enc_init(struct rockchip_hdmi_qp *hdmi, struct rockchip_crtc_state *state) { + enum hdmi_colorspace color =3D + drm_color_format_to_hdmi_colorspace(state->color_format); u32 val; =20 if (state->output_bpc =3D=3D 10) @@ -411,6 +464,8 @@ static void dw_hdmi_qp_rk3588_enc_init(struct rockchip_= hdmi_qp *hdmi, else val =3D FIELD_PREP_WM16(RK3588_COLOR_DEPTH_MASK, RK3588_8BPC); =20 + val |=3D FIELD_PREP_WM16(RK3588_COLOR_FORMAT_MASK, color); + regmap_write(hdmi->vo_regmap, hdmi->port_id ? RK3588_GRF_VO1_CON6 : RK3588_GRF_VO1_CON3, val); diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.h b/drivers/gpu/drm/= rockchip/rockchip_drm_drv.h index 4705dc6b8bd7..2549e58f3497 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.h @@ -57,6 +57,7 @@ struct rockchip_crtc_state { u32 bus_format; u32 bus_flags; int color_space; + enum drm_color_format color_format; }; #define to_rockchip_crtc_state(s) \ container_of(s, struct rockchip_crtc_state, base) --=20 2.52.0 From nobody Mon Dec 1 22:05:08 2025 Received: from sender3-pp-f112.zoho.com (sender3-pp-f112.zoho.com [136.143.184.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B4B0F2D12E7 for ; Fri, 28 Nov 2025 21:08:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.184.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364114; cv=pass; b=iul971YKVgb8Ta02P0VMvaX+TjP8v2c1rYKRJoHRtsqUgwW37mDDCDJsBxq6oJC6X+t0KeHxE4xnM6kmU7b2pfy5o8bOUNhPr6SZNn8CkYvBkusHO3i/VYvdqaDKnCDaXYET/EF58NXu41lPV+ZVbttaBzsjjgK41wOSYwz5jFs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364114; c=relaxed/simple; bh=O8BGR3FSO4BNwgByLne/Gly/HI7ofJXg+h91k+SX9/s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=p5tgu14SBklJu+Th2zD/8cMo4/lU176IS6XuquO6d4Pe0dbopIDaNF9vkZi2GdDgSoIKROeY1Nt8dc/SBnR00gDfsylQe50+bkY1/4R4wCQxL4zO5zWYuRWqAWGryAZCwvAQ96FTiSAWJxuogei2i5VooZu/P7Hl9LDpTyM0VSM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=KfSnRlYu; arc=pass smtp.client-ip=136.143.184.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="KfSnRlYu" ARC-Seal: i=1; a=rsa-sha256; t=1764364068; cv=none; d=zohomail.com; s=zohoarc; b=cLAmXQZ/YBA5qtRRcdRTLlBw5F0nvZ612w5SvVGTlxQMvbZSy4KxdPgOgszqQDdcbUYskHdii7iLAX1CwFus3qvUHdjWOdRbNQkRFHJMdCwUr50Fd0P8FAO8uqZAkNU9BAT4U2icFSHC7Xi/asiZx7W2a4D5uv+jCey70FdCG1k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1764364068; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=dAgf2IJww/37J6IOPDUXcRyIzwaZRZdmNgUMRzYM//Q=; b=MmYdFslnqdZZ/beM9gFlLFGctdN3164IRufzOe/hmW2Tkcf8oVTvR3yRwfylt7hGYWj58847MAP8D1z2i70uaUXdjzZZU4X0M96D+u2NVDmYEcYK95KTjzVFSk6/fPoKB9+8r5Xz+Sih+2k51GFvF280oNd0LPntWNszVeT6irU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1764364068; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=dAgf2IJww/37J6IOPDUXcRyIzwaZRZdmNgUMRzYM//Q=; b=KfSnRlYunBEDu96QVtg18o4Ya8eu87S4Cxd17HWPG0X1ZaBiiDiNx8qbrVxMJpZn SZ+kRnjawA7LdtXW4s2wqzSz19xBm7AzGcRBM6X9LwCVqwPkCEtym0WkQm/b60KmAh5 S7pcPzhfBrj5NP50hjPMPqNipPknLX4M/IFyyYOY= Received: by mx.zohomail.com with SMTPS id 1764364067219305.4924690153981; Fri, 28 Nov 2025 13:07:47 -0800 (PST) From: Nicolas Frattaroli Date: Fri, 28 Nov 2025 22:05:51 +0100 Subject: [PATCH v5 15/17] drm/rockchip: dw_hdmi_qp: Set supported_formats platdata Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251128-color-format-v5-15-63e82f1db1e1@collabora.com> References: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> In-Reply-To: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> To: Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , =?utf-8?q?Christian_K=C3=B6nig?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Dmitry Baryshkov , Sascha Hauer , Rob Herring Cc: kernel@collabora.com, amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, Nicolas Frattaroli X-Mailer: b4 0.14.3 With the introduction of the supported_formats member in the dw-hdmi-qp platform data struct, drivers that have access to this information should now set it. Set it in the rockchip dw_hdmi_qp glue driver. This allows this information to be passed down to the dw-hdmi-qp core, which sets it in the bridge it creates, and consequently will allow the common HDMI bridge code to act on it. Signed-off-by: Nicolas Frattaroli --- drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c b/drivers/gpu/d= rm/rockchip/dw_hdmi_qp-rockchip.c index c79ebd9e866c..5827ca2de0bd 100644 --- a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c +++ b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c @@ -576,6 +576,10 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev= , struct device *master, plat_data.phy_data =3D hdmi; plat_data.max_bpc =3D 10; =20 + plat_data.supported_formats =3D BIT(HDMI_COLORSPACE_RGB) | + BIT(HDMI_COLORSPACE_YUV444) | + BIT(HDMI_COLORSPACE_YUV422); + encoder =3D &hdmi->encoder.encoder; encoder->possible_crtcs =3D drm_of_find_possible_crtcs(drm, dev->of_node); =20 --=20 2.52.0 From nobody Mon Dec 1 22:05:08 2025 Received: from sender3-pp-f112.zoho.com (sender3-pp-f112.zoho.com [136.143.184.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9E7EB2E62A8 for ; Fri, 28 Nov 2025 21:08:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.184.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364127; cv=pass; b=Ki3Rps4KeRr3HELwuBQtj6e6iWg+cni4gigvNZomWls6HuH8vNlRRZ/HTJvx1K4LSjVSq/iSPFxtyiPhrI5ptaI2BKuvUK630o6yhwRVtuMTgk4XtjwmfKdF17MvwqD5zhvkdN2haRXjR2Ip5VGVcnJwjjx/Dtcb+SVznPt7JDU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364127; c=relaxed/simple; bh=7TUwkXOCifC1gVw1teeH4YoZqcNQ3NE9vse+0JZ8fkw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=sYlmoPytk97opRzAV0B8byBJ0DrwjZ3XxI3Xa8bY9yHLgZL1N5brdInmYo4TA5182U48e37SxcSHBC13l8TwfQCZwbdpEnqvN4I86TNKN1lrfgHPPVZNSrnrMnT4iM0pd0+FgjJ7hxuEt/fEVWy9m8FbBMbI8AWgo/ufCI05bSM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=iLKadd0W; arc=pass smtp.client-ip=136.143.184.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="iLKadd0W" ARC-Seal: i=1; a=rsa-sha256; t=1764364076; cv=none; d=zohomail.com; s=zohoarc; b=nyTRTxGsYjn7JDIYdQE6WLU3Kt/P4SfRL5acZvwnaq5ayXR76sOUhLMHOGrOdeYjd1VHPgzO8W3JZ+hn9aQUx0aVuGaCwFhQbcyjd3IaP+zaYn6I/RjfkpLNafomAbuXYMKap2fQsDmQCiaCPDtfQJ8hoBj2tX58PmbiWIrqR9o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1764364076; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=9QuLWrENbkGYBCc3w7FgA13jgu4Hw3OC9FC2Cv0BZ3U=; b=AGtQr4gwIHbp9cvtjpcrH4mwn0wvxl13Is3SyAK/gVmt96UCtbfW9feSgyRC2lJU16fKHFN034/pbq3BROixANBBgH3pqhjQnjERiBKIWoVpBDtXyFTHVmL/dtubIcpGac2NpJfQJpb8djJfgbRszRCr73IHL1iZiihby5Ud6+E= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1764364076; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=9QuLWrENbkGYBCc3w7FgA13jgu4Hw3OC9FC2Cv0BZ3U=; b=iLKadd0WNu3o+iKeaggTUViIUSuZuBGpVB5r7y8kehs6ztJLJwI3ooTgSkAGwRMw 8iDkaCRU4weCQedAjSKKAZb1FxQH6nAD0o9hneaFSsJa/kcwKSRvn/QOWZUwcxDBkNC 1ukJaoylZhYc3zUuRyurIqw9BzpuD+hMmN29Sp3A= Received: by mx.zohomail.com with SMTPS id 1764364074414719.0521648254899; Fri, 28 Nov 2025 13:07:54 -0800 (PST) From: Nicolas Frattaroli Date: Fri, 28 Nov 2025 22:05:52 +0100 Subject: [PATCH v5 16/17] drm/connector: Register color format property on HDMI connectors Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251128-color-format-v5-16-63e82f1db1e1@collabora.com> References: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> In-Reply-To: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> To: Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , =?utf-8?q?Christian_K=C3=B6nig?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Dmitry Baryshkov , Sascha Hauer , Rob Herring Cc: kernel@collabora.com, amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, Nicolas Frattaroli X-Mailer: b4 0.14.3 The drmm_connector_hdmi_init function can figure out what DRM color formats are supported by a particular connector based on the supported HDMI format bitmask that's passed in. Use it to register the drm color format property. Signed-off-by: Nicolas Frattaroli --- drivers/gpu/drm/drm_connector.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connecto= r.c index 13151d9bfb82..7c38123f99cd 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c @@ -578,6 +578,7 @@ int drmm_connector_hdmi_init(struct drm_device *dev, unsigned long supported_formats, unsigned int max_bpc) { + u32 supported_drm_formats =3D 0; int ret; =20 if (!vendor || !product) @@ -621,6 +622,18 @@ int drmm_connector_hdmi_init(struct drm_device *dev, if (max_bpc > 8) drm_connector_attach_hdr_output_metadata_property(connector); =20 + if (supported_formats & BIT(HDMI_COLORSPACE_RGB)) + supported_drm_formats |=3D DRM_COLOR_FORMAT_RGB444; + if (supported_formats & BIT(HDMI_COLORSPACE_YUV444)) + supported_drm_formats |=3D DRM_COLOR_FORMAT_YCBCR444; + if (supported_formats & BIT(HDMI_COLORSPACE_YUV422)) + supported_drm_formats |=3D DRM_COLOR_FORMAT_YCBCR422; + if (supported_formats & BIT(HDMI_COLORSPACE_YUV420)) + supported_drm_formats |=3D DRM_COLOR_FORMAT_YCBCR420; + + if (!drm_mode_create_color_format_property(connector, supported_drm_forma= ts)) + drm_connector_attach_color_format_property(connector); + connector->hdmi.funcs =3D hdmi_funcs; =20 return 0; --=20 2.52.0 From nobody Mon Dec 1 22:05:08 2025 Received: from sender3-pp-f112.zoho.com (sender3-pp-f112.zoho.com [136.143.184.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D346F2D97BD for ; Fri, 28 Nov 2025 21:08:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.184.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364131; cv=pass; b=Km4sYdino8CPUJjtAyunPXa4Swm18+bPyoUNnz+GHE8ldM1ZdMnFoU+BDmVdKhKuFFES4M2SAkpzPrF7WX156r2KYu5gM32L40Uu8K9jdE4Jv/vaNE45jPA0rc9qaTyAL181qwrEsUNfTs9mLrm3dQeauYB5bREBlmA4IAQYuJI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764364131; c=relaxed/simple; bh=mm2P3DdrkSVRs0vpLx0K0h9hN7+Zo1+8GauwXP4PihQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=M2brJe7SxMV7Sugr5onPkvTc1C/rgEmZEjvrnMINrY+kLUV6KvHRmSxPgoyhE7EFHi1XLXxmJ+EbUc9zWjXuj92jatwa17vctkDDwkcTg5o6pzz+W5MoX9AM35MpgqmKm/f7Ie1XmJyvYaV/LPiEo2Vb1qWCfyb1dli9b92ecN8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=NZbHEXjT; arc=pass smtp.client-ip=136.143.184.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="NZbHEXjT" ARC-Seal: i=1; a=rsa-sha256; t=1764364082; cv=none; d=zohomail.com; s=zohoarc; b=W0wRcrmmJx5TV0wiGP3y8G0CADpZyebzywEeKT9Qu2O3RAYUWH1pWuLPjChwEi4FqF0fdhkIdumjn4IhFXO7B1SyHA/upBT2E1yiYWDo3T0SnywVbqr4xLu/PrI7t1vyzAk1chOPTXtHSqCfrKFb9WVb+1AMWh6q8TBa3ARur5M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1764364082; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=G/TwWJgbgaJ4CV8gTMN/jzKwmmdChg5+47UVxWfc6AU=; b=iPTCfclv0aGzId86DHKASv/9cZY8Eb9TOkuBUCESDywgdwD9+PQZ+q4OZq5iS1mQzlGY2eX1N24ej91pzq1hk6Wh2ckTCLf/TkiZMFpsgcp8/dSGpF53cNDGd8SD1wKyPJfp6FClh013tJd7rPDDFhJIo47UraIXJJ8COY0YFlM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1764364082; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=G/TwWJgbgaJ4CV8gTMN/jzKwmmdChg5+47UVxWfc6AU=; b=NZbHEXjT1kiPnE7l5lMpIarCRF3zWxpE+Se0Ul+zB3ze/1YVk4Sn/sEAcfvp5I8X 13hWJXnwn3HrZ8cF5Ij7sHs5nmHNevurqboRp11sZRRAPCVuOpVRtKRYkT6g6SBWKxU OLnL0RN3zmdbPs1NIXRzmGuU9GKr9OpHDdxHpMsE= Received: by mx.zohomail.com with SMTPS id 1764364081586438.6523800934766; Fri, 28 Nov 2025 13:08:01 -0800 (PST) From: Nicolas Frattaroli Date: Fri, 28 Nov 2025 22:05:53 +0100 Subject: [PATCH v5 17/17] drm/tests: hdmi: Add tests for the color_format property Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251128-color-format-v5-17-63e82f1db1e1@collabora.com> References: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> In-Reply-To: <20251128-color-format-v5-0-63e82f1db1e1@collabora.com> To: Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , =?utf-8?q?Christian_K=C3=B6nig?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Dmitry Baryshkov , Sascha Hauer , Rob Herring Cc: kernel@collabora.com, amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, Nicolas Frattaroli X-Mailer: b4 0.14.3 Add some KUnit tests to check the color_format property is working as expected with the HDMI state helper. The added tests check that AUTO results in RGB, and the YCBCR modes result in the corresponding YUV modes. An additional test ensures that only DRM_COLOR_FORMAT_AUTO falls back to YUV420 with a YUV420-only mode, and RGB errors out instead, while explicitly asking for YUV420 still works. This requires exporting hdmi_compute_config, so that it is accessible from the tests. Signed-off-by: Nicolas Frattaroli --- drivers/gpu/drm/display/drm_hdmi_state_helper.c | 3 +- drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c | 109 +++++++++++++++++= ++++ include/drm/display/drm_hdmi_state_helper.h | 4 + 3 files changed, 115 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/display/drm_hdmi_state_helper.c b/drivers/gpu/= drm/display/drm_hdmi_state_helper.c index 1800e00b30c5..e86fb837ceaf 100644 --- a/drivers/gpu/drm/display/drm_hdmi_state_helper.c +++ b/drivers/gpu/drm/display/drm_hdmi_state_helper.c @@ -641,7 +641,7 @@ hdmi_compute_format_bpc(const struct drm_connector *con= nector, return -EINVAL; } =20 -static int +int hdmi_compute_config(const struct drm_connector *connector, struct drm_connector_state *conn_state, const struct drm_display_mode *mode) @@ -680,6 +680,7 @@ hdmi_compute_config(const struct drm_connector *connect= or, =20 return ret; } +EXPORT_SYMBOL(hdmi_compute_config); =20 static int hdmi_generate_avi_infoframe(const struct drm_connector *connect= or, struct drm_connector_state *conn_state) diff --git a/drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c b/drivers/g= pu/drm/tests/drm_hdmi_state_helper_test.c index 8bd412735000..e7050cd9cb12 100644 --- a/drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c +++ b/drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c @@ -55,6 +55,23 @@ static struct drm_display_mode *find_preferred_mode(stru= ct drm_connector *connec return preferred; } =20 +static struct drm_display_mode *find_420_only_mode(struct drm_connector *c= onnector) +{ + struct drm_device *drm =3D connector->dev; + struct drm_display_mode *mode; + + mutex_lock(&drm->mode_config.mutex); + list_for_each_entry(mode, &connector->modes, head) { + if (drm_mode_is_420_only(&connector->display_info, mode)) { + mutex_unlock(&drm->mode_config.mutex); + return mode; + } + } + mutex_unlock(&drm->mode_config.mutex); + + return NULL; +} + static int set_connector_edid(struct kunit *test, struct drm_connector *co= nnector, const void *edid, size_t edid_len) { @@ -1999,6 +2016,95 @@ static void drm_test_check_disable_connector(struct = kunit *test) drm_modeset_acquire_fini(&ctx); } =20 +struct color_format_test_param { + enum drm_color_format fmt; + enum hdmi_colorspace expected; + const char *desc; +}; + +/* Test that AUTO results in RGB, and explicit choices result in those */ +static void drm_test_check_hdmi_color_format(struct kunit *test) +{ + const struct color_format_test_param *param =3D test->param_value; + struct drm_atomic_helper_connector_hdmi_priv *priv; + struct drm_connector_state *conn_state; + struct drm_display_info *info; + struct drm_display_mode *preferred; + int ret; + + priv =3D drm_kunit_helper_connector_hdmi_init_with_edid_funcs(test, + BIT(HDMI_COLORSPACE_RGB) | + BIT(HDMI_COLORSPACE_YUV422) | + BIT(HDMI_COLORSPACE_YUV420) | + BIT(HDMI_COLORSPACE_YUV444), + 12, + &dummy_connector_hdmi_funcs, + test_edid_hdmi_4k_rgb_yuv420_dc_max_340mhz); + KUNIT_ASSERT_NOT_NULL(test, priv); + + conn_state =3D priv->connector.state; + info =3D &priv->connector.display_info; + conn_state->color_format =3D param->fmt; + KUNIT_ASSERT_TRUE(test, priv->connector.ycbcr_420_allowed); + + preferred =3D find_preferred_mode(&priv->connector); + KUNIT_ASSERT_TRUE(test, drm_mode_is_420(info, preferred)); + + ret =3D hdmi_compute_config(&priv->connector, conn_state, preferred); + KUNIT_EXPECT_EQ(test, ret, 0); + KUNIT_EXPECT_EQ(test, conn_state->hdmi.output_format, param->expected); +} + +static const struct color_format_test_param hdmi_color_format_params[] =3D= { + { DRM_COLOR_FORMAT_AUTO, HDMI_COLORSPACE_RGB, "AUTO -> RGB" }, + { DRM_COLOR_FORMAT_YCBCR422, HDMI_COLORSPACE_YUV422, "YCBCR422 -> YUV422"= }, + { DRM_COLOR_FORMAT_YCBCR420, HDMI_COLORSPACE_YUV420, "YCBCR420 -> YUV420"= }, + { DRM_COLOR_FORMAT_YCBCR444, HDMI_COLORSPACE_YUV444, "YCBCR444 -> YUV444"= }, + { DRM_COLOR_FORMAT_RGB444, HDMI_COLORSPACE_RGB, "RGB -> RGB" }, +}; + +KUNIT_ARRAY_PARAM_DESC(check_hdmi_color_format, + hdmi_color_format_params, desc); + + +/* Test that AUTO falls back to YUV420, and that RGB does not, but YUV420 = works */ +static void drm_test_check_hdmi_color_format_420_only(struct kunit *test) +{ + struct drm_atomic_helper_connector_hdmi_priv *priv; + struct drm_connector_state *conn_state; + struct drm_display_mode *dank; + int ret; + + priv =3D drm_kunit_helper_connector_hdmi_init_with_edid_funcs(test, + BIT(HDMI_COLORSPACE_RGB) | + BIT(HDMI_COLORSPACE_YUV422) | + BIT(HDMI_COLORSPACE_YUV420) | + BIT(HDMI_COLORSPACE_YUV444), + 12, + &dummy_connector_hdmi_funcs, + test_edid_hdmi_1080p_rgb_yuv_4k_yuv420_dc_max_200mhz); + KUNIT_ASSERT_NOT_NULL(test, priv); + + conn_state =3D priv->connector.state; + + dank =3D find_420_only_mode(&priv->connector); + KUNIT_ASSERT_NOT_NULL(test, dank); + + conn_state->color_format =3D DRM_COLOR_FORMAT_AUTO; + ret =3D hdmi_compute_config(&priv->connector, conn_state, dank); + KUNIT_EXPECT_EQ(test, ret, 0); + KUNIT_EXPECT_EQ(test, conn_state->hdmi.output_format, HDMI_COLORSPACE_YUV= 420); + + conn_state->color_format =3D DRM_COLOR_FORMAT_RGB444; + ret =3D hdmi_compute_config(&priv->connector, conn_state, dank); + KUNIT_EXPECT_LT(test, ret, 0); + + conn_state->color_format =3D DRM_COLOR_FORMAT_YCBCR420; + ret =3D hdmi_compute_config(&priv->connector, conn_state, dank); + KUNIT_EXPECT_EQ(test, ret, 0); + KUNIT_EXPECT_EQ(test, conn_state->hdmi.output_format, HDMI_COLORSPACE_YUV= 420); +}; + static struct kunit_case drm_atomic_helper_connector_hdmi_check_tests[] = =3D { KUNIT_CASE(drm_test_check_broadcast_rgb_auto_cea_mode), KUNIT_CASE(drm_test_check_broadcast_rgb_auto_cea_mode_vic_1), @@ -2028,6 +2134,9 @@ static struct kunit_case drm_atomic_helper_connector_= hdmi_check_tests[] =3D { KUNIT_CASE(drm_test_check_tmds_char_rate_rgb_8bpc), KUNIT_CASE(drm_test_check_tmds_char_rate_rgb_10bpc), KUNIT_CASE(drm_test_check_tmds_char_rate_rgb_12bpc), + KUNIT_CASE_PARAM(drm_test_check_hdmi_color_format, + check_hdmi_color_format_gen_params), + KUNIT_CASE(drm_test_check_hdmi_color_format_420_only), /* * TODO: We should have tests to check that a change in the * format triggers a CRTC mode change just like we do for the diff --git a/include/drm/display/drm_hdmi_state_helper.h b/include/drm/disp= lay/drm_hdmi_state_helper.h index 2349c0d0f00f..01ae31209820 100644 --- a/include/drm/display/drm_hdmi_state_helper.h +++ b/include/drm/display/drm_hdmi_state_helper.h @@ -30,4 +30,8 @@ enum drm_mode_status drm_hdmi_connector_mode_valid(struct drm_connector *connector, const struct drm_display_mode *mode); =20 +int hdmi_compute_config(const struct drm_connector *connector, + struct drm_connector_state *conn_state, + const struct drm_display_mode *mode); + #endif // DRM_HDMI_STATE_HELPER_H_ --=20 2.52.0