From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 58429F364C9 for ; Thu, 9 Apr 2026 22:08:34 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 929D910E0CF; Thu, 9 Apr 2026 22:08:32 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.b="jnoN8bWY"; dkim=pass (2048-bit key; unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="DDmVIgAR"; dkim-atps=neutral Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by gabe.freedesktop.org (Postfix) with ESMTPS id 066A610E025 for ; Thu, 9 Apr 2026 22:08:31 +0000 (UTC) Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 639DdKaU2812070 for ; Thu, 9 Apr 2026 22:08:30 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-type:date:from:in-reply-to:message-id:mime-version :references:subject:to; s=qcppdkim1; bh=iETKg8FvpT4ZN+EK0fX3kJUj 6Q9RbW2hQbNGtGbKoyw=; b=jnoN8bWYgZLnSIlM+agOuqFEkJaoTNQBwruxepLZ ThL5Y01ObekZaA0ik9yYlMgYYok1DneaOIsODX+1ov3pqpt19CexpFckhLzF+Xcp 6kQMQ7motvxmlXObMXN6JJweuoIzjrG9IZMNxoT2/FhHV9VqtpdNzzfpkLDrceIg emXARy/bk37u1Vd2ai/VJI9nXcX0c1izxsbVM8mPRlmg3J/Sc4SkXxAJldYep4K/ UxsfAljXcztQ8+87yGt11vKYVO13PmDJGtCKvdLAU+g50esSDcF1o859QmL24bHp UFjWeBuoPw3ee/PtTaBP6mRQ5L2/jSMmmR2uAefYF3I/BA== Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ded6h9ngx-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 09 Apr 2026 22:08:30 +0000 (GMT) Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-50d63962d83so36498071cf.2 for ; Thu, 09 Apr 2026 15:08:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775772509; x=1776377309; darn=lists.freedesktop.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=iETKg8FvpT4ZN+EK0fX3kJUj6Q9RbW2hQbNGtGbKoyw=; b=DDmVIgAR6eXJcaqQ6lMjBW88RlsnAQrh9uDzrzettPVVhf21GDzEbC0QPz1n9AyNhV XOXHKK6lULkCf9AH599s5cXgEhO0oa9obopPrrSwc716iqfSo+MCBBLxQC1GJplJR4LF 04OM4u0hhLA7Q2bDKb0s1IKHeaFfrCYbp/yWEmhpPGTXDiusdGP1r5trvebcAMIhJWqT 41bnWCI29a6VKZkWJPgYdxIHBBGetfkoCMh7uSnapOYT9wyy8ueLsw7op0nMXPY7RT1u 8nGjQ9sE44d4nDRomxJK8TmAdVBcay1NnNRU2xeC4+WmJpudjfFgZcH7RDg3f0H0ncrl MFew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775772509; x=1776377309; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=iETKg8FvpT4ZN+EK0fX3kJUj6Q9RbW2hQbNGtGbKoyw=; b=MQcdv9jPyqqSFSQ3L76waLbdsYh0VMlNRHhkl1E51qnRYQQKRGSPelnEFjELjcYQnU Imad0x9dLHWRCYjwwQv+eJ6TJQrRBSuyMu9nFdP1E1ffzPZJNGKdV+g3B6b1P8zhI3u/ gXuA64Hh6dJFEKFB9n/UQNlwi+9m+GD+m3o40didyW7d71BKGA74eLziPhHuk0acQnCY PKfzUDtpWdhg09vQZmTdOh0VkfKnS8g2ZestvsoliRTQlc56jD7RnWDlCotyv0n8igMS OCQ/5zi8Hi+6luUBMaULGcEuRqucdTMid0sb4H32+TfhagohJ2l06KYSxLivlFZvDaMG xh5g== X-Forwarded-Encrypted: i=1; AJvYcCXAgVkDPfV1FfW00GzGtjw/gWBrK2UPy6nYBw/xTDx9YTc0cpLgFRqoWqwTxGTBfvVYbDtIiddeo18=@lists.freedesktop.org X-Gm-Message-State: AOJu0YwUsDZZlLoXCO3zC6IKRLp8uJOWegumDYF0qkTyuRT7ssQ2KY4M apuAowEbS0dN00i5BnNIicFBTDP/scUq9U1g3EtJfXaHZZKobl6GS9ScwkzcKHZv2jAE6s9YtqD I68kyZNNMp6+7tNIZMDo2vKTl6iXfxooxVIGIlw5YRjGOlzsw7iDbdoSn9SqHW21N4nXke3w= X-Gm-Gg: AeBDiescJMAEvCnkKZyk2pVwUfkNzag/800sXYDrW5bZcYKBTI5cHyzRK4ug+u3jgRI 6eiYGB9cakCWRASsCKjslUw7kOKxoyOHUtwyXQB7Johxq/3YCPxt10MGU4PEjR95W3XKIWhyT28 hU2BIygyph8zqdcx8IsLG57CCbYhaOlRs39hmQcmspB+FHxLNoWVoofmlCzFmG/UGc5jM5vJj3p lJs+vi/M/zoqN8R5lFdIcU9nsLFxeOqcGqPY/5BgR3mIwApmz9YMJVMRL/2XAfxOHHSiYtSqp9Q A1iiR0KJ4lD1WG31LcWSAcHCHVvuTCbIx8TUyf8zJHAs6nSaHrTW0rebXpLmLgUn0jrPDNYXyh/ fRkR5LPdHUdkZ9XiB7WswTpb5ZkcPjw7jz0lMVXMD+hKOKHTVOMl2+FRmnOB3SS5az2/DJbpM5c kZy4u4OEDmUnxt1N1IfgXapljjgTw4Wi99bFY= X-Received: by 2002:a05:622a:4a88:b0:50d:8cad:2381 with SMTP id d75a77b69052e-50dd5cae418mr15903441cf.54.1775772509213; Thu, 09 Apr 2026 15:08:29 -0700 (PDT) X-Received: by 2002:a05:622a:4a88:b0:50d:8cad:2381 with SMTP id d75a77b69052e-50dd5cae418mr15902681cf.54.1775772508751; Thu, 09 Apr 2026 15:08:28 -0700 (PDT) Received: from umbar.lan (2001-14ba-a073-af00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a073:af00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-38e49567101sm2221331fa.30.2026.04.09.15.08.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Apr 2026 15:08:27 -0700 (PDT) Date: Fri, 10 Apr 2026 01:08:24 +0300 From: Dmitry Baryshkov To: Nicolas Frattaroli Cc: Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , Christian =?utf-8?B?S8O2bmln?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Sandy Huang , Heiko =?utf-8?Q?St=C3=BCbner?= , Andy Yan , Jani Nikula , Rodrigo Vivi , Joonas Lahtinen , Tvrtko Ursulin , Dmitry Baryshkov , Sascha Hauer , Rob Herring , Jonathan Corbet , Shuah Khan , 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, linux-doc@vger.kernel.org Subject: Re: [PATCH v12 04/25] drm/bridge: Act on the DRM color format property Message-ID: References: <20260409-color-format-v12-0-ce84e1817a27@collabora.com> <20260409-color-format-v12-4-ce84e1817a27@collabora.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20260409-color-format-v12-4-ce84e1817a27@collabora.com> X-Authority-Analysis: v=2.4 cv=RfCgzVtv c=1 sm=1 tr=0 ts=69d8235e cx=c_pps a=JbAStetqSzwMeJznSMzCyw==:117 a=xqWC_Br6kY4A:10 a=kj9zAlcOel0A:10 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=QX4gbG5DAAAA:8 a=NxoPbATI1rPzGprmJi8A:9 a=CjuIK1q_8ugA:10 a=uxP6HrT_eTzRwkO_Te1X:22 a=AbAUZ8qAyYyZVLSsDulk:22 X-Proofpoint-GUID: E4600E3xJ9oihwbZwM4EagxEADufhiK8 X-Proofpoint-ORIG-GUID: E4600E3xJ9oihwbZwM4EagxEADufhiK8 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDA5MDIwNCBTYWx0ZWRfX/r3JMsXRSZJQ gHD7aqdyjiBh065B17sD1Ugn6t7oqRuDOZb6Aa8bKfkg8L/uHY7jxq+MeDhJDV6IaMBgaAafpgY WegieGHToZxfET5ibVhpN8Qjnj0sRxyHeaA/Cho52ros20yMgV+9Lvw4QOTKTJp04byK56Zoyed WV9K87bNRWBXAUifYZog+/OR5n0x5dtdFIyYdwPqu9AHCQskJfOvLGxGMz/ZMTDBk+fTUmMK9ps ExImlISDom8+vuXUO3s7t7BPFZh9cN8aEWxD0y6bxL9LfyeiSOcUyrIrCURwwOQR5zAStjYFs00 wTbHKCOnpkdsyagUiIZRSDroBU67/K8Zh3ZITUJB8xs7kEjUQevhL3r1ENf9DZCpuvhRLn8NtFH tvN8gBAF3rjlvUBbkNvxzhNmWm61AEA5MSXH2iHZMRcql9fs5e1lQSW7rdPSI60rScYGhKJ51WV Bu4FubPHErX3hzwSeIA== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-04-09_04,2026-04-09_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 clxscore=1015 impostorscore=0 adultscore=0 priorityscore=1501 lowpriorityscore=0 spamscore=0 suspectscore=0 malwarescore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604010000 definitions=main-2604090204 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" On Thu, Apr 09, 2026 at 05:44:54PM +0200, Nicolas Frattaroli wrote: > 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. For bridges that represent HDMI bridges, > rely on whatever format the HDMI logic set. Reject any output bus > formats that do not correspond to the requested color format. > > Non-HDMI last bridges with DRM_CONNECTOR_COLOR_FORMAT_AUTO set will end > up choosing the first output format that functions to make a whole > recursive bridge chain format selection succeed. > > Signed-off-by: Nicolas Frattaroli > --- > drivers/gpu/drm/drm_bridge.c | 89 +++++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 88 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c > index ba80bebb5685..7c1516864d96 100644 > --- a/drivers/gpu/drm/drm_bridge.c > +++ b/drivers/gpu/drm/drm_bridge.c > @@ -1150,6 +1150,47 @@ static int select_bus_fmt_recursive(struct drm_bridge *first_bridge, > return ret; > } > > +static bool __pure bus_format_is_color_fmt(u32 bus_fmt, enum drm_connector_color_format fmt) > +{ > + if (fmt == DRM_CONNECTOR_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 == DRM_CONNECTOR_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 == DRM_CONNECTOR_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 == DRM_CONNECTOR_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 == DRM_CONNECTOR_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. > @@ -1193,6 +1234,7 @@ drm_atomic_bridge_chain_select_bus_fmts(struct drm_bridge *bridge, > struct drm_encoder *encoder = bridge->encoder; > struct drm_bridge_state *last_bridge_state; > unsigned int i, num_out_bus_fmts = 0; > + enum drm_connector_color_format fmt; > u32 *out_bus_fmts; > int ret = 0; > > @@ -1234,13 +1276,58 @@ drm_atomic_bridge_chain_select_bus_fmts(struct drm_bridge *bridge, > out_bus_fmts[0] = MEDIA_BUS_FMT_FIXED; > } > > + /* > + * On HDMI connectors, use the output format chosen by whatever does the > + * HDMI logic. For everyone else, just trust that the bridge out_bus_fmts > + * are sorted by preference for %DRM_CONNECTOR_COLOR_FORMAT_AUTO, as > + * bus_format_is_color_fmt() always returns true for AUTO. > + */ > + if (last_bridge->type == DRM_MODE_CONNECTOR_HDMIA) { I still think this is misplaced (and misidentified). Consider HDMI bridge being routed to the DVI-D connector. The last bridge would have different type, but the HDMI-specific logic must still be applied. The bridge must use RGB444, but it must be handled in a generic way. Or other way around, a DVI bridge being routed through the HDMI connector (thinking about PandaBoard here). The combo should not go through the HDMI-specific color format selection although the last bridge in the chanin is the HDMI-A bridge. I think all these cases should be handled by the connector, which knows if there is an OP_HDMI bridge in the chain or not. > + drm_dbg_kms(last_bridge->dev, > + "HDMI bridge requests format %s\n", > + drm_hdmi_connector_get_output_format_name( > + conn_state->hdmi.output_format)); > + switch (conn_state->hdmi.output_format) { > + case DRM_OUTPUT_COLOR_FORMAT_RGB444: > + fmt = DRM_CONNECTOR_COLOR_FORMAT_RGB444; > + break; > + case DRM_OUTPUT_COLOR_FORMAT_YCBCR444: > + fmt = DRM_CONNECTOR_COLOR_FORMAT_YCBCR444; > + break; > + case DRM_OUTPUT_COLOR_FORMAT_YCBCR422: > + fmt = DRM_CONNECTOR_COLOR_FORMAT_YCBCR422; > + break; > + case DRM_OUTPUT_COLOR_FORMAT_YCBCR420: > + fmt = DRM_CONNECTOR_COLOR_FORMAT_YCBCR420; > + break; > + default: > + ret = -EINVAL; > + goto out_free_bus_fmts; > + } > + } else { > + fmt = conn_state->color_format; > + drm_dbg_kms(last_bridge->dev, "Non-HDMI bridge requests format %d\n", fmt); > + } > + > for (i = 0; i < num_out_bus_fmts; i++) { > + if (!bus_format_is_color_fmt(out_bus_fmts[i], fmt)) { > + drm_dbg_kms(last_bridge->dev, > + "Skipping bus format 0x%04x as it doesn't match format %d\n", > + out_bus_fmts[i], fmt); > + ret = -ENOTSUPP; > + continue; > + } > ret = select_bus_fmt_recursive(bridge, last_bridge, crtc_state, > conn_state, out_bus_fmts[i]); > - if (ret != -ENOTSUPP) > + if (ret != -ENOTSUPP) { > + drm_dbg_kms(last_bridge->dev, > + "Found bridge chain ending with bus format 0x%04x\n", > + out_bus_fmts[i]); > break; > + } > } > > +out_free_bus_fmts: > kfree(out_bus_fmts); > > return ret; > > -- > 2.53.0 > -- With best wishes Dmitry