From patchwork Wed Dec 24 01:02:53 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Baryshkov X-Patchwork-Id: 536 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (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 217B626A0DB for ; Wed, 24 Dec 2025 01:03:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766538228; cv=none; b=hGK/RGeI4yBvxUUKC20phGTxZ6yI5LN1PguY5lBmndRwtiKBdFmnwK1D9MwQNPWnwmZS1Mo4Cgv83HBY9MG6ZCW1yam29jiy7N44C2Pl9qbngmQVnpSeCl/qf0f9Zy9IKOaJ/NuPsolyc4iSIfwLUUnOT+FK8B9lT35SZ20XcMo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766538228; c=relaxed/simple; bh=nzElO3qrN1ngMVHhZahBd7pKCsEHzR84mn0cPkFgNGc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bulh1jbTZimuuuFI0xdk0/aQVX6nYXdGoYd2bhUokuUss2bqvtHAP++xbdF+YOsnviuxEB9tK4921xs08qOgE18N+/XAcXXAoRnPqoNeKBeLieQx89oXp/PMhBtilhqTj48ilFogoevk7IJBZoM8+hauMGuOj2azZ+YPHHvO3xM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=Esi0DjvA; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=O76dv6QF; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="Esi0DjvA"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="O76dv6QF" Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BNEN8sn913445 for ; Wed, 24 Dec 2025 01:03:44 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= P+SBTDTtGkE8RnKwaj4dcEp5VbeaO6x7ZVfHg3H5ESs=; b=Esi0DjvAzJhxorsi g/+0CqqpWMMGETBCdKGbWAK6+wNpcpUgTsjDU9DlpBhFnx5A2q/r6vi44H6iJUXd rPPoPBKv2ob/TY6coqKmULhrTq2Ws6j+f1M5oSTqqnWsgVyacZy7WUZUBsb+QMhe sVf7WTTTDaZPKrSeFvRIcvrsmY9LL6x5U1DHtvybghVoCFvFFqxVCZzkgRnOiIYx H35A0mjZyRosZPZTj7L+ZI3MajMOghue3ZY7KIoamPv5jAAt1K1TE602mnIix5mB USOF+TIqUZJyVRx1gM9WdnGaDLRzkPzwjk6ea6N96EV/KiLzbxuB8eejkGQj0J+I X+d4Eg== Received: from mail-qt1-f199.google.com (mail-qt1-f199.google.com [209.85.160.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4b7vt2hn1m-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 24 Dec 2025 01:03:44 +0000 (GMT) Received: by mail-qt1-f199.google.com with SMTP id d75a77b69052e-4ee16731ceaso107834971cf.2 for ; Tue, 23 Dec 2025 17:03:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1766538224; x=1767143024; darn=lists.linux.dev; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=P+SBTDTtGkE8RnKwaj4dcEp5VbeaO6x7ZVfHg3H5ESs=; b=O76dv6QFLBNC5Ok/sAQzpPWeJ4xKuSjuhxzcgj+CFaEh+1MwDEXduxvpGVrf3jCKgk 2zr2EZmi5CBKSiBIzKv7XzWt601zfqraGBcNejjvS6D09ijr4vCFQnvR1OFUlb7sxQg+ PXnzQmeZUuL5fof5wtvOhATjag5GQ+O4EBc2Ccfg7UArk59utu7Y5FVnYN71Wn4n9FEt 1k/QEyWMRHIaI5IL4fXQaXw8q0nIzK8MdxiUAyoY9ZHLQ1mmHPGn17o1ln5sv55wSUB2 AFdVTsh96Y0ktzPDO3RjsjVD7T708A3RwTcQrDb764P+TKkBTF/a9t4DHp66ax4dQMY2 Wo4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766538224; x=1767143024; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=P+SBTDTtGkE8RnKwaj4dcEp5VbeaO6x7ZVfHg3H5ESs=; b=Xj88bPS4iZxsyCOQvGV4oRS/smu19eCHi5QAeFF50wJClENZWd2GmStb3QZP+dT2MF OP3I/6CB9/v3jTjVNMldmqqbwfb5754s+Jn4wcX8utPsIYsFclEeo98dBJaAOzWiZ5bS e66KQANb4zeWJpOM1AHxupboiTLPgo9yDwft9Klv076207hGeFermq+bUSvEp4XwYRu5 PoDwiLUx/ku8U9L7UKEsADQw9DgGtPafSSpoFo/iiWDQCzJHML5CDIYUBF5qbSnkhOEk 6tvWyosVzv411i056OEozl6v/1gEKJawDYtpxi9C+Zsun2p1xSHF4ANFG6LpBTXwrZL/ 4C1A== X-Forwarded-Encrypted: i=1; AJvYcCVm05cIOPMRhmAIvyoNtKk21w//m8Q1mXV+XSiZhwCdgepdMqoedfxJsyCHDzx6xryZnms+YPFYAK8Xgw==@lists.linux.dev X-Gm-Message-State: AOJu0YyOVbPNHOf0FEouEf5mDQ40aqw3lGvHOAxCkIw0wQFxN14JxO3j FF1R1P9/PaDVGrgQJW0qWE6ASzUdLB5ZOkx3OCescZl+WXNJbTHRJUCy+6XdmY5P3Cg4FJ4adLQ bIQzLHYuKy7WNCdemZfwmFBFUpDoqgwjjQGwjXtvpdC6iUy/7KWpTsTrjYaaodGs0AQ== X-Gm-Gg: AY/fxX6QYpDj4D59LZft0mooIkAmX15XIm5Oncfri6X/RaYAtfEzg1ilatAhMfcOct9 Lx3Gl2yt0gftUvmpEFi+ElS8h5I2UD2EGCH0rZ4mlWNTRdsKqzuEzTBrLtriUfqxUw+3owQ8jy4 zpCMDrEmLyyajqFWaq9nqs+rdYtIOxC4pe3p45x01Mv2YEFd/exu019Hu4GGV83aulo042yM08q XPpxJq+0lX1Tb0TGPoPy433dueIqJmUtnn2s8X4nw2BQRsZwYj6CLDSBaoB2sanOztIDeKEmcLh 98VhNMwFDsKFJUYY5c86Hc8mb8esoVwO3WzOxkkH7TWd0osJvk7phEiU5dHRuI0gtkkXX9zBlVE D+gl0uP174G0yFzR2alVaI9/exYB/p7wqLMu6L/wNZ97TARl0mRRwvJlDYA7MCKYbsz1mxCq+lA r9vR8m+5Fhmq/2kORfjZQC6u0= X-Received: by 2002:ac8:5714:0:b0:4ed:b06b:d67d with SMTP id d75a77b69052e-4f4abd79a65mr200344171cf.45.1766538223813; Tue, 23 Dec 2025 17:03:43 -0800 (PST) X-Google-Smtp-Source: AGHT+IF3FPxruJlcg4sByZJPHlC6i+AJRJP3LWX/PRkxW+hSkPSJ4R06usLW/tOcstjoguUC6XxUXg== X-Received: by 2002:ac8:5714:0:b0:4ed:b06b:d67d with SMTP id d75a77b69052e-4f4abd79a65mr200343621cf.45.1766538223198; Tue, 23 Dec 2025 17:03:43 -0800 (PST) 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 2adb3069b0e04-59a18628284sm4545268e87.93.2025.12.23.17.03.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Dec 2025 17:03:40 -0800 (PST) From: Dmitry Baryshkov Date: Wed, 24 Dec 2025 03:02:53 +0200 Subject: [PATCH v3 04/10] drm/connector: make clear_infoframe callback mandatory for HDMI connectors Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20251224-limit-infoframes-2-v3-4-7fd3cacfefed@oss.qualcomm.com> References: <20251224-limit-infoframes-2-v3-0-7fd3cacfefed@oss.qualcomm.com> In-Reply-To: <20251224-limit-infoframes-2-v3-0-7fd3cacfefed@oss.qualcomm.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Dave Stevenson , =?utf-8?q?Ma=C3=ADra_Canal?= , Raspberry Pi Kernel Maintenance , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Liu Ying , Chun-Kuang Hu , Philipp Zabel , Matthias Brugger , AngeloGioacchino Del Regno , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-mediatek@lists.infradead.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, linux-rockchip@lists.infradead.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=5379; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=nzElO3qrN1ngMVHhZahBd7pKCsEHzR84mn0cPkFgNGc=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBpSzvY4okwjZ995SvLTt2suiGbzvPytcBxbUZoJ IPFjD2XFqiJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCaUs72AAKCRCLPIo+Aiko 1VbaB/9msli7nDTqX+64qChKWsJQHzLJSmqJubE1UJ2Nf5Hi/AwpsU7hfYtfCl3WwKKmKfuuu8Q Lnl1Ig4EyHgBKD8apvy+9QiFbhlYaqL42IMOn+b4fFQG+1HPmsw4bhcy1pYeNPK2nWrNf4Iot+s sd3Qh5XwmI66qB1NAgelgo+ogMATAG/krn39azAVbzRMw8HrEzuws07zAM9ceLRCB1ggf6IEBFQ TFqvoA7DhLiuf8z1XlDYFdpss+zjWGa6X0rgks+Jb7dLupcHZqGP6X4NiZ6MxeJ8PeusTd6aEyy LwfXlcUtR0hby0mDACU1DWxjeEkPR22us8arufoAaAdFAFeo X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjI0MDAwNyBTYWx0ZWRfX+QeBVh0da/6u rprucHYdZtUQHzcHb31FouVuK5H+Edhf2/oDdxWP5Q/8BqYY93Y9kJdW3pTmCUjKGaQYmIQLfO6 4HN8caHRS7tsmlfcLs0en2E5Vlvt6namPFT0ezKrAiwoUJiG2eF8ecoCPTPmxshftGkYUnhCN/G URBvITWVpeHy7gojUd/7PwChIxbHd1FhgwBY59ecUvCZxnRfacRYTtUqV6hUmwjamWn/4rjoWTr Krb0JuC0/mo3b9U8p9ZgQLV2BGGrLyCtvMIp9PvzxvkX0azSDbMOACBGzPeWhrCPAHcoIZWbByR /bGJIMxF2ghx+MA2JEuapQxKbuX8kptgHBvQteW1UH94H+7eelWbZ+rFEeEunly70vA0Ambwas3 kij0V9Lpfjb5AwwGrA0RQkFkXn5wbyx65kQhz/OObtpfXmG4FFr0rica97byvC76vjnCVvw1eDB Rtrym/hEZorRMGRj/Iw== X-Proofpoint-GUID: pGFyp3l0BCL7-hwfPQFkfB7Xmr2C7gFy X-Proofpoint-ORIG-GUID: pGFyp3l0BCL7-hwfPQFkfB7Xmr2C7gFy X-Authority-Analysis: v=2.4 cv=brtBxUai c=1 sm=1 tr=0 ts=694b3bf0 cx=c_pps a=WeENfcodrlLV9YRTxbY/uA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=9fyoTQa5ixSHU3Y6h0oA:9 a=QEXdDO2ut3YA:10 a=kacYvNCVWA4VmyqE58fU:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-23_05,2025-12-22_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 suspectscore=0 spamscore=0 adultscore=0 priorityscore=1501 malwarescore=0 phishscore=0 lowpriorityscore=0 bulkscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512240007 Status: O We already require both hdmi_write_infoframe and hdmi_clear_infoframe for bridges implementing DRM_BRIDGE_OP_HDMI. It makes sense to require the clear_infoframes callback for HDMI connectors utilizing drmm_connector_hdmi_init(). Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/drm_connector.c | 4 ++++ drivers/gpu/drm/tests/drm_connector_test.c | 15 +++++++++++++++ drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c | 22 ++++++++++++++++++++++ include/drm/drm_connector.h | 2 +- 4 files changed, 42 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c index 4d6dc9ebfdb5..40e025712c9b 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c @@ -600,6 +600,10 @@ int drmm_connector_hdmi_init(struct drm_device *dev, if (!(max_bpc == 8 || max_bpc == 10 || max_bpc == 12)) return -EINVAL; + if (!hdmi_funcs->clear_infoframe || + !hdmi_funcs->write_infoframe) + return -EINVAL; + ret = drmm_connector_init(dev, connector, funcs, connector_type, ddc); if (ret) return ret; diff --git a/drivers/gpu/drm/tests/drm_connector_test.c b/drivers/gpu/drm/tests/drm_connector_test.c index 22e2d959eb31..f356ea695ae7 100644 --- a/drivers/gpu/drm/tests/drm_connector_test.c +++ b/drivers/gpu/drm/tests/drm_connector_test.c @@ -25,7 +25,22 @@ struct drm_connector_init_priv { struct i2c_adapter ddc; }; +static int accept_infoframe_clear_infoframe(struct drm_connector *connector, + enum hdmi_infoframe_type type) +{ + return 0; +} + +static int accept_infoframe_write_infoframe(struct drm_connector *connector, + enum hdmi_infoframe_type type, + const u8 *buffer, size_t len) +{ + return 0; +} + static const struct drm_connector_hdmi_funcs dummy_hdmi_funcs = { + .clear_infoframe = accept_infoframe_clear_infoframe, + .write_infoframe = accept_infoframe_write_infoframe, }; static const struct drm_connector_funcs dummy_funcs = { diff --git a/drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c b/drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c index bdf14a0623b2..915dcd106703 100644 --- a/drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c +++ b/drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c @@ -76,7 +76,22 @@ static int set_connector_edid(struct kunit *test, struct drm_connector *connecto return ret; } +static int accept_infoframe_clear_infoframe(struct drm_connector *connector, + enum hdmi_infoframe_type type) +{ + return 0; +} + +static int accept_infoframe_write_infoframe(struct drm_connector *connector, + enum hdmi_infoframe_type type, + const u8 *buffer, size_t len) +{ + return 0; +} + static const struct drm_connector_hdmi_funcs dummy_connector_hdmi_funcs = { + .clear_infoframe = accept_infoframe_clear_infoframe, + .write_infoframe = accept_infoframe_write_infoframe, }; static enum drm_mode_status @@ -89,6 +104,8 @@ reject_connector_tmds_char_rate_valid(const struct drm_connector *connector, static const struct drm_connector_hdmi_funcs reject_connector_hdmi_funcs = { .tmds_char_rate_valid = reject_connector_tmds_char_rate_valid, + .clear_infoframe = accept_infoframe_clear_infoframe, + .write_infoframe = accept_infoframe_write_infoframe, }; static enum drm_mode_status @@ -101,6 +118,8 @@ reject_100mhz_connector_tmds_char_rate_valid(const struct drm_connector *connect static const struct drm_connector_hdmi_funcs reject_100mhz_connector_hdmi_funcs = { .tmds_char_rate_valid = reject_100mhz_connector_tmds_char_rate_valid, + .clear_infoframe = accept_infoframe_clear_infoframe, + .write_infoframe = accept_infoframe_write_infoframe, }; static int dummy_connector_get_modes(struct drm_connector *connector) @@ -2419,6 +2438,7 @@ static int reject_avi_infoframe_write_infoframe(struct drm_connector *connector, } static const struct drm_connector_hdmi_funcs reject_avi_infoframe_hdmi_funcs = { + .clear_infoframe = accept_infoframe_clear_infoframe, .write_infoframe = reject_avi_infoframe_write_infoframe, }; @@ -2500,6 +2520,7 @@ static int reject_hdr_infoframe_write_infoframe(struct drm_connector *connector, } static const struct drm_connector_hdmi_funcs reject_hdr_infoframe_hdmi_funcs = { + .clear_infoframe = accept_infoframe_clear_infoframe, .write_infoframe = reject_hdr_infoframe_write_infoframe, }; @@ -2685,6 +2706,7 @@ static int reject_audio_infoframe_write_infoframe(struct drm_connector *connecto } static const struct drm_connector_hdmi_funcs reject_audio_infoframe_hdmi_funcs = { + .clear_infoframe = accept_infoframe_clear_infoframe, .write_infoframe = reject_audio_infoframe_write_infoframe, }; diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index 8f34f4b8183d..4543833acdec 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -1253,7 +1253,7 @@ struct drm_connector_hdmi_funcs { * called multiple times, once for every disabled infoframe * type. * - * The @clear_infoframe callback is optional. + * The @clear_infoframe callback is mandatory. * * Returns: * 0 on success, a negative error code otherwise