From nobody Fri Jul 24 23:30:38 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 31B613A963C for ; Wed, 22 Jul 2026 06:36:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702195; cv=none; b=CAlJBCNkag99OIhpeuRb2E+XeR6bmh1oHOEx0iRXNK/2NNWrDKSdFsED2shrq4FkMUpsxVC8RBrv7/Ssu5D7Ee+H5GJMUFDnR1EDrHfqA/4yQktqqDEUuiTVNpJaW/TVr1ZR6nnL+j1rWdHp9ePnJndn345QI+bE9xf/b+ltoJY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702195; c=relaxed/simple; bh=xwiwed+YWzAlxad0yWcCPqbevU3q9KR+updrF6TdV7A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mR+8GoLZgo6IJKC+/wdmRgplwFiYT+EqSizv+Hfm/ZWv5909nymySPCbnMS/tsOvBOqNp7HjRVh9Yhd8Mt+10JcPI7VUXkuelWq9FMsKVprA7MejjGcgZPXJMmN1X9T6n6ufivSfi1x7CZBAolsW64hypWCctj+sM+QlXiZwYoQ= 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=P0dK7G7r; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=GYwPDVBP; arc=none smtp.client-ip=205.220.168.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="P0dK7G7r"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="GYwPDVBP" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66M54CRH3474518 for ; Wed, 22 Jul 2026 06:36:32 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= VeNdAJLI50rwT6a6MA64hU5opQaYoTEBW1fpBic2B3U=; b=P0dK7G7rYPmB6TLy NDh9Xy0gn0SzcTa+Iqq+oMawFR0/rw7XccM29K39fo2zp0neGNI+DQPV6wlWZCEc 1LUttBlICu0q5U87xKgjAhtLwRIIAw5BnySh26/3WHC5bdX1TWAy7+sTq6NypfNj bx3we3V5szCRyFjLQd92nNYJlZ/2S0u0cXtAwrq/sErJgz7oASyCDX1eQ9PCKKoN 43KuE+/a//gWhVes/DZP6w76rce4kf1b6vGoQSmyYFaHFnX1LS//yWRyaTHEQX4+ /uVNM7aVD3mylVoCIwC1eb/PI85ztJ7kWORKgghmyUXduFAuUt07cI+xyXOjA1no UshReg== 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 4fjd6ftm6h-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 22 Jul 2026 06:36:32 +0000 (GMT) Received: by mail-qt1-f199.google.com with SMTP id d75a77b69052e-51c0199faafso187488321cf.3 for ; Tue, 21 Jul 2026 23:36:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784702191; x=1785306991; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=VeNdAJLI50rwT6a6MA64hU5opQaYoTEBW1fpBic2B3U=; b=GYwPDVBP+JiKGvqzj0z1iJ+1qZebBC9NNKAh5L6FrM5ZQYc4RxUhoEPKIZcCa3Hawk 6DqGdotNMKoCxgA8EkzBdv4ReJtsNIXk6wICh8G2PAu34qUtTzRCvaUJ47fK1XEGrRlG yY7QGdr6pt1uh1WkeX9DAoG6QJKT1KgVQYXAwMwLnfSkv5bJW9RpkpprJ5lzdbr7+rNX NEZ8qW/0m3WzygfB16/wTWFL6+7nm2X2c4Utu6WB2BwB+dvzf/UJty4vhyguYc5Qgvqm HU/QrRsFldt8LqSTeWsbcxq7gBOIcNLjlP0KlM60EJvU6UgKs3HmgzhtQ9helDQJQZ/i kMzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784702191; x=1785306991; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=VeNdAJLI50rwT6a6MA64hU5opQaYoTEBW1fpBic2B3U=; b=DwB/vi4x1XINQXD9sQfE7b1kOa+ukpEV77kSlb8ML5kd0VByjDoo0OLIPUwX4ivlYb Vv4CTftsRYan9WaP5QuLnx3xcgVj9SGVnPYMWq1qXYaqLW/aaK36vcY7XoSjwAxxGlSi lGw+U5j5ph2abj1GAyeFYMf6FW9yYw/+aA9k/JLO6hxy/TEg2FhNzr1bKwTDX6uCoYoR Fq/f3LapYJMkf376IxJHpFdGxC6kDKrSt99DDHUb5EpANPF4FedErkmRfPyEfjd6jlmt lrUKklfCFDcu1pYAAIthTXI6GyG+5v6JdVYdyP0rUZQh+0KV66CDW9iBazDL9Q2zlfvD JI+A== X-Forwarded-Encrypted: i=1; AHgh+RryqfaWtQ1asCI6wNmeXsyGkrf1lSLEqe7Pu/8QICh9xhNRt+Y2DDKn6g3cc/TxHKy9aW7le0PLXw7eHws=@vger.kernel.org X-Gm-Message-State: AOJu0YyB+PkpfVgyxQ69R0DJvPTLQwv5OAPYYhuxfrUZWX/deoIraH49 skRdvQafBW5GobxiKpTREgaMRXjF59RXKw9oxhKtk/s3aHY44D+wUx2nx3V3J8j34Q/67Lw4vgh wTMkvpFVh0bdLEx8kUpJDO1s7+EbnUz8dHzE6rryWHySwrm23X5LeTz75ZCVm7AY3byx/scd1Hi E= X-Gm-Gg: AR+sD114tbRGc0SG3iOJvD2gHTpZR9S9siES67Z53qYfJwSTAPY5LgzWZESGtS4YT34 csbLTEllW6J62TGBUGJaJr0jQl5PlnLSRJqWy72ccNrFX8jsoGZrqSLqLMhsTBYp3QFUEBKLloB V5qzsQ2+KARELfvuuzJYQyh1XvalwH5aKC+vbafgAgrLqk68hE/dn6LBx5GcjWWu1NYiUrvkUEW V+PoicLcPw2NptojQWs9LRGGsIzB746BoJ4RuWDLK2NsuZoMd7Eqwgft6KljFkdLTFT8TjeoXf+ V94ddfkJuiK/v6LOaGpHHjV6RSzTqM1q3CChLw7Fa7WfoWdzibeovUwzKn2UZKhHcyDjuiCppVe jT7oOKcxUh5+p67ymQ8+B4l3D1lE3bNKXO681HExM2t5/ahQ/gwMAM3Avbv8VsnTCjj0gVKpFl4 IltqYum4VwBvPv+Q== X-Received: by 2002:a05:622a:1c09:b0:51c:7b12:5fe3 with SMTP id d75a77b69052e-5213f174546mr197315671cf.79.1784702191330; Tue, 21 Jul 2026 23:36:31 -0700 (PDT) X-Received: by 2002:a05:622a:1c09:b0:51c:7b12:5fe3 with SMTP id d75a77b69052e-5213f174546mr197315491cf.79.1784702190862; Tue, 21 Jul 2026 23:36:30 -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 2adb3069b0e04-5b2a9b8c6f6sm309696e87.4.2026.07.21.23.36.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 23:36:29 -0700 (PDT) From: Dmitry Baryshkov Date: Wed, 22 Jul 2026 09:36:16 +0300 Subject: [PATCH 01/24] drm/msm/dp: reject YUV420-only modes without VSC SDP support 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: <20260722-drm-msm-display-interface-v1-1-368c10fe62fd@oss.qualcomm.com> References: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> In-Reply-To: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5325; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=xwiwed+YWzAlxad0yWcCPqbevU3q9KR+updrF6TdV7A=; b=owGbwMvMwMXYbdNlx6SpcZXxtFoSQ1ZCyjPlhP1iD85plJTrXns08/XsY2v6mg54ifpFBKhMj OUXKg7vZDRmYWDkYpAVU2TxKWiZGrMpOezDjqn1MINYmUCmMHBxCsBEShnY/8oekhVL0L25MOy8 vGP+i/Q0/205sRxlVre/zRfoiA7btz9P/MO6mEc3f7LHGVa0513aacgnnlzH+sBvWvnv/WvFox1 9QxoctwodkNlZ6/uy5tCjvjD/SYe4xO9ITq9lPPRHZI9dRlbtqhiB1wW9xeeLS6bkzTHSX2CYbG fzPKTilYzvuUsa0f/39U/2TVU9dTJ1ideNFlWNy6V3dN8eDbUrfKTlpxTXyejtvlTfQ8Woeff/Q IZ5lZMP+LW6ytyVfi67OnWnTM65nQrcB9Km/ONcKS6+Zd57ZcVA5ulV+7fECnNu3pP8p48n4sYP O/3krpNuStdNJ/1fKxjfzFywe0UAd8DqJws7xTL+2FUAAA== X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-GUID: fBYJFqADRnTNZ1tAQVMOsEAwOxv6niER X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIyMDA1OSBTYWx0ZWRfXyYpx4NTnJ0eg vue4JJ9QUnOUpK4D/ZAfPch0Dj6sSpGtgK7QWRRpWySNRSeaHASCrJXFhe9+0vqT9rWxVOgIq5g bzOEtjZJY+kti0179G9BOciw/wDIaddCGIxbLgBQUCNg5lIbTeEQp7R79jxbv4npeNMA5Y76jt/ wexDg0kz14YB7E9kH8S1XOL6V5AxOYRkbw+3Vbcq2TYb0e+0GGkRj4L9wQcfNn3QSb2VV8fe5VO bLFcbJlMNiM1IdYc4LlPfToRYaC0LROIf7wv35QW04HCBzTeTsCgx0ezcNR4pe3f3+J/ar51YJs 3BApXabL2IX4hbksClFs2tVmrkBckzqIoUrjfSF4CDNhCHPNtLR0ljsFHpDiHkqnpH+84rP0w7e YHwDKAnJaIwdhMi+G6TsI9WjtYc4Q0DWifzYZb+ljWqEd1EwRx5dyDePchh3SJ9+vbtz7XUiLxP Pc1BhmVTfYTszog8XHQ== X-Authority-Analysis: v=2.4 cv=e/o2j6p/ c=1 sm=1 tr=0 ts=6a6064f0 cx=c_pps a=WeENfcodrlLV9YRTxbY/uA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=EUspDBNiAAAA:8 a=zXqIQI19J2VV67nQZaQA:9 a=QEXdDO2ut3YA:10 a=kacYvNCVWA4VmyqE58fU:22 X-Proofpoint-ORIG-GUID: fBYJFqADRnTNZ1tAQVMOsEAwOxv6niER X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIyMDA1OSBTYWx0ZWRfXxCzyoZG4TnCa HD5xzju0MgGYNU/4Z7IkDOnZ7Zc4bPNoYSdbHCzGtP1wQJbZMhTvSE5jjXMtmRDpxf4SoqOBCGi OlBeAcAzVDjgK8HQrX4UrZMyu3wp2tI= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-22_02,2026-07-21_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 suspectscore=0 spamscore=0 bulkscore=0 priorityscore=1501 impostorscore=0 lowpriorityscore=0 phishscore=0 clxscore=1015 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607220059 DP conveys YUV 420 colorimetry through a VSC SDP. A sink that advertises a mode as YUV-420-only therefore cannot be driven at all unless the panel supports VSC SDP, yet msm_dp_bridge_mode_valid() only used the VSC SDP capability to decide whether to halve the pixel clock, otherwise letting such modes through to be validated (and possibly accepted) at the full RGB clock the sink cannot display. Reject 420-only modes with MODE_NO_420 when the panel does not support VSC SDP. With those modes filtered out, being a 420-only mode implies VSC SDP support, so the YUV-420 test reduces to drm_mode_is_420_only(): drop msm_dp_is_yuv_420_enabled() and call the DRM helper directly at its two callers (the DPU encoder already has the connector from the atomic state). Fixes: df9cf852ca30 ("drm/msm/dp: account for widebus and yuv420 during mod= e validation") Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 3 +-- drivers/gpu/drm/msm/dp/dp_display.c | 28 ++++++++++++-------------= --- drivers/gpu/drm/msm/msm_drv.h | 8 -------- 3 files changed, 13 insertions(+), 26 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/= msm/disp/dpu1/dpu_encoder.c index 778e231d4967..1f20695f81e3 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c @@ -710,8 +710,7 @@ void dpu_encoder_update_topology(struct drm_encoder *dr= m_enc, if (fb && MSM_FORMAT_IS_YUV(msm_framebuffer_format(fb))) topology->num_cdm++; } else if (disp_info->intf_type =3D=3D INTF_DP) { - if (msm_dp_is_yuv_420_enabled(priv->kms->dp[disp_info->h_tile_instance[0= ]], - adj_mode)) + if (drm_mode_is_420_only(&connector->display_info, adj_mode)) topology->num_cdm++; } } diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index dc6f33809ca5..e0c44eef3aba 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -698,6 +698,7 @@ enum drm_mode_status msm_dp_bridge_mode_valid(struct dr= m_bridge *bridge, u32 mode_rate_khz =3D 0, supported_rate_khz =3D 0, mode_bpp =3D 0; struct msm_dp *dp; int mode_pclk_khz =3D mode->clock; + bool is_yuv_420; =20 dp =3D to_dp_bridge(bridge)->msm_dp_display; =20 @@ -709,9 +710,16 @@ enum drm_mode_status msm_dp_bridge_mode_valid(struct d= rm_bridge *bridge, msm_dp_display =3D container_of(dp, struct msm_dp_display_private, msm_dp= _display); link_info =3D &msm_dp_display->panel->link_info; =20 - if ((drm_mode_is_420_only(&dp->connector->display_info, mode) && - msm_dp_display->panel->vsc_sdp_supported) || - msm_dp_wide_bus_available(dp)) + is_yuv_420 =3D drm_mode_is_420_only(&dp->connector->display_info, mode); + + /* + * YUV 420 is carried over DP by signalling the colorimetry through a + * VSC SDP, so a 420-only mode cannot be driven without VSC SDP support. + */ + if (is_yuv_420 && !msm_dp_display->panel->vsc_sdp_supported) + return MODE_NO_420; + + if (is_yuv_420 || msm_dp_wide_bus_available(dp)) mode_pclk_khz /=3D 2; =20 if (mode_pclk_khz > DP_MAX_PIXEL_CLK_KHZ) @@ -1277,22 +1285,10 @@ void __exit msm_dp_unregister(void) platform_driver_unregister(&msm_dp_display_driver); } =20 -bool msm_dp_is_yuv_420_enabled(const struct msm_dp *msm_dp_display, - const struct drm_display_mode *mode) -{ - struct msm_dp_display_private *dp; - const struct drm_display_info *info; - - dp =3D container_of(msm_dp_display, struct msm_dp_display_private, msm_dp= _display); - info =3D &msm_dp_display->connector->display_info; - - return dp->panel->vsc_sdp_supported && drm_mode_is_420_only(info, mode); -} - bool msm_dp_needs_periph_flush(const struct msm_dp *msm_dp_display, const struct drm_display_mode *mode) { - return msm_dp_is_yuv_420_enabled(msm_dp_display, mode); + return drm_mode_is_420_only(&msm_dp_display->connector->display_info, mod= e); } =20 bool msm_dp_wide_bus_available(const struct msm_dp *msm_dp_display) diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h index 3787db8770ad..3d5679be488e 100644 --- a/drivers/gpu/drm/msm/msm_drv.h +++ b/drivers/gpu/drm/msm/msm_drv.h @@ -356,8 +356,6 @@ void __exit msm_dp_unregister(void); int msm_dp_modeset_init(struct msm_dp *dp_display, struct drm_device *dev, struct drm_encoder *encoder, bool yuv_supported); void msm_dp_snapshot(struct msm_disp_state *disp_state, struct msm_dp *dp_= display); -bool msm_dp_is_yuv_420_enabled(const struct msm_dp *dp_display, - const struct drm_display_mode *mode); bool msm_dp_needs_periph_flush(const struct msm_dp *dp_display, const struct drm_display_mode *mode); bool msm_dp_wide_bus_available(const struct msm_dp *dp_display); @@ -382,12 +380,6 @@ static inline void msm_dp_snapshot(struct msm_disp_sta= te *disp_state, struct msm { } =20 -static inline bool msm_dp_is_yuv_420_enabled(const struct msm_dp *dp_displ= ay, - const struct drm_display_mode *mode) -{ - return false; -} - static inline bool msm_dp_needs_periph_flush(const struct msm_dp *dp_displ= ay, const struct drm_display_mode *mode) { --=20 2.47.3 From nobody Fri Jul 24 23:30:38 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 D23BF37C0FE for ; Wed, 22 Jul 2026 06:36:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702196; cv=none; b=FkZC9I1QuIYLKxVmFvVk91PttGbT+E0G6JTnuY/pMrTGkPmvxBpPLuBOBmxsyq2/1n6b05r33ruSpvk7w64TxwYEb0YBNhZfP0Qv7K4WFsYeGecq4xjT2Ai0i3eJlWmpFiZr8I/dmabGkAJsFlFf9ZGW1OkkXGXK0qdRUn83wJw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702196; c=relaxed/simple; bh=BzOvnMI5yT23J0skjUtVdX/YbK2+8ydFXE2ObmImkrQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gl+kKUauVbZ/MiE5ZD0rQ9aqLq4puFhlKRuvjq2wHWkSMCBvzJzfHieUs+E1nOHEZDoEyAnaY+WfzS8lbBc9mQAIAhZxY08qUZNBuwGHock0ix6zo5COLe97mX3rNPMDDfd517C/iAcffY9tUUrm75urwgF/Zkb5/Li2gvvevjQ= 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=n7HSxYmR; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=LPcfYKka; arc=none smtp.client-ip=205.220.168.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="n7HSxYmR"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="LPcfYKka" 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 66M53hQs4168753 for ; Wed, 22 Jul 2026 06:36:34 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= Q3fc9Te4dKFk2JaGmRMxsej67CBbIGs9m76jWKgHR1g=; b=n7HSxYmRty0vw2QN LYI/22+5XXVmJlrhWIJUD8pPw1zDloEnRbZmBMC+GXQNwEwTOSQUmZ8Aw+b/3JCW x1eLDiYdstc3oEAKvdiaccfd9kUv1aXHXqypMjbxjceHOGKdftGgVTYHMjjFN70x ShkQEpFPCQQxZIXqjkJGpx07D/NUG7rBkc08C02obWT3rmlLu4Gzlv3gWsAgJyB3 6+bnTobeUMkRREC+htRkK/KveIvYpQjf1mzKPmMvOk18EHCMpR2ckMH5R7mOG3U6 9GY/gO+ZU59oQFJ/z0aTAG3BZuLkYpOm1488O2GKR7TPWJBUHkE6Fq+wS4Ujird/ ilh0dQ== Received: from mail-qt1-f198.google.com (mail-qt1-f198.google.com [209.85.160.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fj6r3mpft-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 22 Jul 2026 06:36:33 +0000 (GMT) Received: by mail-qt1-f198.google.com with SMTP id d75a77b69052e-51c110a3b6aso142353001cf.1 for ; Tue, 21 Jul 2026 23:36:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784702193; x=1785306993; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Q3fc9Te4dKFk2JaGmRMxsej67CBbIGs9m76jWKgHR1g=; b=LPcfYKkaVLkRdUwjlnlKGUh60Nsb4NAI7bnYyWdIS+OwmO6ArsJGXZwHJiHbyJvtDT HujDEIRp0l5TIhYA3pLeUPg7GuTs7vle8ldGXpNO1z+lLpQ8lZlWVtH/Qp3IBAsPSnft /lV05FjrkNivalNO6yHbnHgr5sjV118Aqw1K7NZ1Uak6LHvObocJFgp4AVVbw0yIcGqZ M6VbPqI6/QQMTBYCEa4Spu4ATUsZTqk3RTKxcmUgFXPfW+uNEZvw7eU9j8JnbqmUqFoI elMaLnXnHXZHOmi92Si2UL7kWjj0oVGiJRzHZOaANf3l1l6S8Q5SiXzzrI7OjaFhpJyH QTYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784702193; x=1785306993; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Q3fc9Te4dKFk2JaGmRMxsej67CBbIGs9m76jWKgHR1g=; b=GdLmShq4ezBB0cCaqPCPA145/4+weJs79QFMUuNqxbxeTjChEQCtwxcIh2G3jzzTpB jjInulzRRoOVRd69cAZ/7TehbOPPsUwqafcY/4VA6tG4BfjqdrZNqIa2hdtbkuwfMxTr u7umxu1VKzgSwq/NW87p4Kjf931MdP/X3rJM3pEyKkj7hBlMVgvCyVDIyCyH5J9WjrRb w3p3U3PR4G3DkC5BDKTP4JmBHKuJ1KH8HkqqNCIDwIlCvgDtctHj0HlIpFGDf2ELxp5Q mt8qiIvCSjXBJwzRz4IJVcE0FlEnZ35VFtc1noe0J0aXat5EzAOhoUqgQywztsw37xTV 4cUw== X-Forwarded-Encrypted: i=1; AHgh+RoMpnS3J3vR2UwUi9KAjz2jx1DyBCBbqWLYNSoALaa7GGBddXO6PLWlh8CYihu+/ySkXwhe6qq5tSy0bzo=@vger.kernel.org X-Gm-Message-State: AOJu0YyegD70eYlhYxLt/tHEiJZph8NwSkprOFZoQUqDeMk6XOXuF10M 4bYvBT+rXsu9VVyCClVkMmcOYSgDppbBDnCc1EtTvYC36nIEqeOkeaH0tEvE0an7XN9owYBOQS1 we1SaKppfWDghJYUWk6zJG00vxDhaCkA7PBg8iOJ4n/2CE1BasJGyBTSWq3TgMNp3Wxw= X-Gm-Gg: AR+sD11ZEjqQMfWasufPIhMMWxwyxXyADKBtqxWU5UsIBHC4QWnXZn+Z4yqS6SbMVvD sOUzU3eRleQRzki07636D9lCKkOGu1yEB+aNo2maLzo5w33HQAl1uiiRalViCF4Akd5aehAMEGN 9dVWgZi2DN9Z2IJFQpmZBma9vVYh3JlhcHC284Em4akiPNsUYoyEusEOUJMmLwTnlEcVnvmJzJM 9uQ2/oLyhYYffxP4t3uBq9YguFYxK5rMfX5kBpAWm8CLtE+aWabglg8DaIBq7thkX+A3lBC3oTH 53b1UGmZB6A9igJD0qecsVtnJ88rGX5QDCck1Skn2jPnxsVnsmgBGs8bHEwVHWapoHqcMDVUJju rhjIiUbZy/PfV1hQ/BeXqQOI93zV7YdmbVKMkpB3Av3NxmZEfsimkpYC9rhG5ZLPCLuakOZigEa g0uQnJdcPdphgwOw== X-Received: by 2002:a05:622a:13c9:b0:51c:7b12:1213 with SMTP id d75a77b69052e-521403455d1mr205562281cf.81.1784702192875; Tue, 21 Jul 2026 23:36:32 -0700 (PDT) X-Received: by 2002:a05:622a:13c9:b0:51c:7b12:1213 with SMTP id d75a77b69052e-521403455d1mr205562131cf.81.1784702192459; Tue, 21 Jul 2026 23:36:32 -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 2adb3069b0e04-5b2a9b8c6f6sm309696e87.4.2026.07.21.23.36.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 23:36:31 -0700 (PDT) From: Dmitry Baryshkov Date: Wed, 22 Jul 2026 09:36:17 +0300 Subject: [PATCH 02/24] drm/msm/dp: drop the always-true yuv_supported argument 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: <20260722-drm-msm-display-interface-v1-2-368c10fe62fd@oss.qualcomm.com> References: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> In-Reply-To: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5212; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=BzOvnMI5yT23J0skjUtVdX/YbK2+8ydFXE2ObmImkrQ=; b=owGbwMvMwMXYbdNlx6SpcZXxtFoSQ1ZCyjNde7nU/Swzl0bM98xeFeMw7/ePXNP4tkuBr99ee FB72Tmsk9GYhYGRi0FWTJHFp6Blasym5LAPO6bWwwxiZQKZwsDFKQATiedi/8Vsk6vvmbc6vDop 7GXQSUm1GhEL0QCWtVqZurIfKzRf9jtliDMKum0Qnvju29oURoMXcpVyP7zftfZcWjt7Zkuham/ k29AtSx1swy+encJx0k1y+lfb6b0lXjl3Undp6dX/nHVj57m4ucc9a5SnnZxUPv/pUpF2Mbn3by rzSzbee6Dj0sW0+vynrZMyLE+YTGX2W6HyMNG1rLOfT/fznvPFJjO81FnzQzncw+V+PvgYkKBfI fu3r2JrX+0/py8vVXprBf7ocf6uqjB0UvE5yxXUs+v+/tjISrFTKQwylQKXxKaxtna/YppgKqy4 f87i8mclGpoPfKW9Fcu9Z53ST1fyeBOWP/NiO7dq8B4A X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX+/Am1sxw8du9 IPL96VodfH+boidqUPe9S5sVxNlVc4TuCqa+sG/UjsaRu2aHVLJn1PQtiDOdcW+zp8C2mn9vanK tE2IW/K5qzZ4kbUQloykaTUAfMVf0gF96RG3wjrGysFyBkCM7wXGwoMXIDlDBBLBe7o+q9hCwP5 04+KHjpCov9xTj48JCEeyAV9o/ZgV3+rev/+jjKp13lKmquXsBo6yW/mM+wJEATSaDf2NNxf4p3 F7tPt9u1pbMKdj5orZG5W+4VQgX/1pB6VQg8YrLFK8FM6b5jxqt0RMjUsyDUa61/HWZNJUX1UTH ISvFtk+oz6t+wGg79Fq/Dm7+y76tDttx6COLzyDurlTCltz4x+b/cV4FFzqPG4SEv5IAhu3Ba6h GqJeW34LKmzmRhO7WIdE8I6bn5JAl9M57ovhT7utxS0uSiN6iLqBPneqOPfGxIE9mdtVz4f9mtO VmujmuumyZJpGsIxegg== X-Proofpoint-ORIG-GUID: RFRejaecL9EusvNzmsRp6X6zxSJu2rP6 X-Proofpoint-GUID: RFRejaecL9EusvNzmsRp6X6zxSJu2rP6 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX3jk1kBBn+XQ9 +FDRsXd/E43nz3/W+cXkyCZV5LD/Qk7ouXJY0C9ZhqzUNMqPFnEK26NhbSaeym0XHl7r3FN995Q gnKWWvTG24HhkOS4pVBi6N+j5JcprTA= X-Authority-Analysis: v=2.4 cv=SIRykuvH c=1 sm=1 tr=0 ts=6a6064f1 cx=c_pps a=mPf7EqFMSY9/WdsSgAYMbA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=nfG2dtz5EEHLLqw77CsA:9 a=QEXdDO2ut3YA:10 a=dawVfQjAaf238kedN5IG:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-22_02,2026-07-21_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 spamscore=0 phishscore=0 clxscore=1015 suspectscore=0 adultscore=0 impostorscore=0 lowpriorityscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607220060 msm_dp_modeset_init() and msm_dp_bridge_init() take a yuv_supported argument, which the DPU driver fills in from the presence of a CDM block in the hardware catalog. All platforms that support DisplayPort have a CDM block, so this argument is always true and only obscures the code. Drop the argument and set the bridge's ycbcr_420_allowed flag unconditionally. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 4 +--- drivers/gpu/drm/msm/dp/dp_display.c | 4 ++-- drivers/gpu/drm/msm/dp/dp_drm.c | 5 +++-- drivers/gpu/drm/msm/dp/dp_drm.h | 3 +-- drivers/gpu/drm/msm/msm_drv.h | 5 ++--- 5 files changed, 9 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/= disp/dpu1/dpu_kms.c index da3556eb6ecc..ede935a426d1 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c @@ -653,7 +653,6 @@ static int _dpu_kms_initialize_displayport(struct drm_d= evice *dev, { struct drm_encoder *encoder =3D NULL; struct msm_display_info info; - bool yuv_supported; int rc; int i; =20 @@ -672,8 +671,7 @@ static int _dpu_kms_initialize_displayport(struct drm_d= evice *dev, return PTR_ERR(encoder); } =20 - yuv_supported =3D !!dpu_kms->catalog->cdm; - rc =3D msm_dp_modeset_init(priv->kms->dp[i], dev, encoder, yuv_supported= ); + rc =3D msm_dp_modeset_init(priv->kms->dp[i], dev, encoder); if (rc) { DPU_ERROR("modeset_init failed for DP, rc =3D %d\n", rc); return rc; diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index e0c44eef3aba..5ae5eed7e010 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -1318,7 +1318,7 @@ void msm_dp_display_debugfs_init(struct msm_dp *msm_d= p_display, struct dentry *r } =20 int msm_dp_modeset_init(struct msm_dp *msm_dp_display, struct drm_device *= dev, - struct drm_encoder *encoder, bool yuv_supported) + struct drm_encoder *encoder) { struct msm_dp_display_private *msm_dp_priv; int ret; @@ -1327,7 +1327,7 @@ int msm_dp_modeset_init(struct msm_dp *msm_dp_display= , struct drm_device *dev, =20 msm_dp_priv =3D container_of(msm_dp_display, struct msm_dp_display_privat= e, msm_dp_display); =20 - ret =3D msm_dp_bridge_init(msm_dp_display, dev, encoder, yuv_supported); + ret =3D msm_dp_bridge_init(msm_dp_display, dev, encoder); if (ret) { DRM_DEV_ERROR(dev->dev, "failed to create dp bridge: %d\n", ret); diff --git a/drivers/gpu/drm/msm/dp/dp_drm.c b/drivers/gpu/drm/msm/dp/dp_dr= m.c index 06881bfd6181..4f615b45fff7 100644 --- a/drivers/gpu/drm/msm/dp/dp_drm.c +++ b/drivers/gpu/drm/msm/dp/dp_drm.c @@ -243,7 +243,7 @@ static const struct drm_bridge_funcs msm_edp_bridge_ops= =3D { }; =20 int msm_dp_bridge_init(struct msm_dp *msm_dp_display, struct drm_device *d= ev, - struct drm_encoder *encoder, bool yuv_supported) + struct drm_encoder *encoder) { int rc; struct msm_dp_bridge *msm_dp_bridge; @@ -259,7 +259,8 @@ int msm_dp_bridge_init(struct msm_dp *msm_dp_display, s= truct drm_device *dev, =20 bridge =3D &msm_dp_bridge->bridge; bridge->type =3D msm_dp_display->connector_type; - bridge->ycbcr_420_allowed =3D yuv_supported; + /* all platforms which support DP have a CDM block for YUV output */ + bridge->ycbcr_420_allowed =3D true; =20 /* * Many ops only make sense for DP. Why? diff --git a/drivers/gpu/drm/msm/dp/dp_drm.h b/drivers/gpu/drm/msm/dp/dp_dr= m.h index 041aa026ae2e..3b046822f05e 100644 --- a/drivers/gpu/drm/msm/dp/dp_drm.h +++ b/drivers/gpu/drm/msm/dp/dp_drm.h @@ -22,8 +22,7 @@ struct msm_dp_bridge { struct drm_connector *msm_dp_drm_connector_init(struct msm_dp *msm_dp_disp= lay, struct drm_encoder *encoder); int msm_dp_bridge_init(struct msm_dp *msm_dp_display, struct drm_device *d= ev, - struct drm_encoder *encoder, - bool yuv_supported); + struct drm_encoder *encoder); =20 enum drm_connector_status msm_dp_bridge_detect(struct drm_bridge *bridge, struct drm_connector *connector); diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h index 3d5679be488e..0ec0622d9217 100644 --- a/drivers/gpu/drm/msm/msm_drv.h +++ b/drivers/gpu/drm/msm/msm_drv.h @@ -354,7 +354,7 @@ struct msm_dp; int __init msm_dp_register(void); void __exit msm_dp_unregister(void); int msm_dp_modeset_init(struct msm_dp *dp_display, struct drm_device *dev, - struct drm_encoder *encoder, bool yuv_supported); + struct drm_encoder *encoder); void msm_dp_snapshot(struct msm_disp_state *disp_state, struct msm_dp *dp_= display); bool msm_dp_needs_periph_flush(const struct msm_dp *dp_display, const struct drm_display_mode *mode); @@ -370,8 +370,7 @@ static inline void __exit msm_dp_unregister(void) } static inline int msm_dp_modeset_init(struct msm_dp *dp_display, struct drm_device *dev, - struct drm_encoder *encoder, - bool yuv_supported) + struct drm_encoder *encoder) { return -EINVAL; } --=20 2.47.3 From nobody Fri Jul 24 23:30:38 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 F1E833ACF1C for ; Wed, 22 Jul 2026 06:36:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702199; cv=none; b=DEkMuSNkftCYifv3caUF/UJzQ4YkEcrGJx/w5f4Myb4/Te4RGyqfywa7A3mzPl4RKFBCXUosPlWYwyWrWKTb16SJUetiKcIQNeZvAN1pBDQGvUMWv6BtaS8AhGxQGF/EhvbQQ17Meb0c9hJKA0ulOpVyK9mQJ0LyyGxAdbrcUa4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702199; c=relaxed/simple; bh=qvvzQGIvCJFBeyjflw7v8rndU0UY2akeaNn006NwjUA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=J9IfdKmvclJOU3UQECVY+/p75EWtQFRmu0bxJetK6hcYD3kiyF4yFU7R02jjltt9y6mJba1JyGi15MmcWGZRD6i2tIv1ZmLep+JYbS7ojCp1p9g6CbBpjsqRJqfMfB2m2evzPBxAvc/O9COfnAwWTqVZ5z/zbNAZVuC278g5Jmo= 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=pvtWZFqP; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=LSY7GkPn; arc=none smtp.client-ip=205.220.168.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="pvtWZFqP"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="LSY7GkPn" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66M54CRI3474518 for ; Wed, 22 Jul 2026 06:36:37 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= 9yG3RAW2UmHvNScmd7UPrq6tcvvwfJPeN7NawmzDlzY=; b=pvtWZFqPMgNtioFh WhFwJh29HDck7RTrym/Y+jJ+G2ARZinYo21MMc8ks+fpWLtTfVEDEBpcdzq2LyYP u4MyLZfWVu7MpJS7Hdz3rQxFXslRf05XtYo0Nalx/Q+Y9pnsBp+2hqtmOMiiGQWS bUvRgZNwl7ZMQvtUFwB0QYSFbDbHYKGwZAzO9uVymbT5DVMcPKNqPTpatTcM50Hu YgmIMEvbeOyh93bv4ZHzae1RllXBGy55HQslZg9xx1hqZ6J8D67+1niM1yFcIHJZ ZdJcccjVHJ6VcaVw8kbjkqxs2ynPTFI5CZqJN7jCdhFLjpbKa8ADWsjYxjGFZDei Tfh1ag== Received: from mail-qt1-f198.google.com (mail-qt1-f198.google.com [209.85.160.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fjd6ftm77-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 22 Jul 2026 06:36:37 +0000 (GMT) Received: by mail-qt1-f198.google.com with SMTP id d75a77b69052e-52769fc3f2eso21041971cf.0 for ; Tue, 21 Jul 2026 23:36:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784702196; x=1785306996; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=9yG3RAW2UmHvNScmd7UPrq6tcvvwfJPeN7NawmzDlzY=; b=LSY7GkPnE8Y+rrFFTBxh8oM08iakYPG/TxhQ5UewssNFvVo22yqGjCexR1hBcWswdM w+KzjQIfM+Azp2JC/90LetCmJO12YZIhwCD6AFIdsCphTVXJoLPc02OvDrw51WEWKf/E g3HTO+TNX0/X4s9OkDdKe6B+LmVHwPObVf2cOWoAVN67EBDhzZ7KDsxruBTmtdmWKe7X OZMeGpBqaxihJqhvYOxHTTQAv6FRTlGTPRf518ZBAhil2qpxIIzlfSHTSZ6BraCOdEct y1n2wwrf9kDutg+YCK4fvK/FMVxVPg3lNd6B2IMy8UUKVOaXuiv5PLqK3cF3d4UsB14s 5D3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784702196; x=1785306996; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=9yG3RAW2UmHvNScmd7UPrq6tcvvwfJPeN7NawmzDlzY=; b=UOO+kmr2MUZ2VD8oBHMF1WOOCy+2XcT9L0NRnel6YVo1t36LT6996vagieXRec2M/o gBBGgJmsH9FTq8hpGKsQ1K+Kd10UUhqSR77xondxK4+YPpettI0LKNnLHSCL7j+3ULWe s9OsS+uGX/wr8ddN3gE+KpsHAIpXO1OZ7wrgvJVh6jA0EdoITjxqhp7o0/iQzBrsfp82 XpmRn/x5NLsYWyfofL6JG/Wg0NaqUFKJ9jJWNTkmO8B7nfx4TKrYtiJGh3PwNLyUi0QY 9d0ozJ2HgssiX6d9oZk+VdOnNXzZJbzKWmi7Yg9qhW9mSjdjrCoyZxs/t3peMP0uzmtR KUsQ== X-Forwarded-Encrypted: i=1; AHgh+RozUJzlGvT/UF9HP9doeGUVEXhJE7bt4LdCcmDOP8kLtqSYekcHA9r+iBsN8+7LboCweGgC1lA5S9FMbww=@vger.kernel.org X-Gm-Message-State: AOJu0Yzt+JOMYJb/DvZs5SCfcic71ID1mKIwpL/RbmyxN+aZa7MRAXFu t8xMD8rYUCFmwYdkokzu4NUH0Fk3DzX5zzcVT5kcceN40PhcChwA9aDx8WiD3yigg8QknMHPu/p lhYhk3jPxYn/VN/dxapKhu9wbSWmgmLYPayHRZ+mrjGDtOLf9g/PYDQ2P0OLbiX1/BPQ= X-Gm-Gg: AR+sD1291attJmQnK4JRVta4KsHNaKqZXUBC+Rp/NbBVPREgZsh3jHy4LVgYzTzIe4w JTsq+Cw8/nhCf9aAQNvdbFBKkkDxw87NkLwYpeBVOUK1Ik5q/zIDOY+fY7n1kl0RdxEWrotxA+N 2HjhSLSfSGxTpfMNcC7DN5mwLPOjdrgof4q3olBFtr+hTXRFd5+8OsAhQVghcgA6s3JXegB4uwO 7IMnSxhY79EwoaJ2N9XflM64Qpy2/BTxX3A12RFgewsB+JLyuPY6TM1zZ6Ipy+TNY9/+zcSuK4C 9CkXxdKzJ8wh/PBbc6w9/KztwIJrkYcU2B0uPJVCMFO8slPFlrh+iXzRtqRFjXPxjVILFOb+fwr C/8ERSnXkS1WRBNsknSUm7avFn9IUEqgrnYD749HI5AE5RZKnsFlP4L1114ISurMB0CdxWyrNZy 8EyHMhQ+8efp5MWQ== X-Received: by 2002:a05:622a:2b09:b0:51c:ae7:fa1d with SMTP id d75a77b69052e-5213c006b33mr212219761cf.5.1784702195957; Tue, 21 Jul 2026 23:36:35 -0700 (PDT) X-Received: by 2002:a05:622a:2b09:b0:51c:ae7:fa1d with SMTP id d75a77b69052e-5213c006b33mr212219531cf.5.1784702195241; Tue, 21 Jul 2026 23:36:35 -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 2adb3069b0e04-5b2a9b8c6f6sm309696e87.4.2026.07.21.23.36.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 23:36:34 -0700 (PDT) From: Dmitry Baryshkov Date: Wed, 22 Jul 2026 09:36:18 +0300 Subject: [PATCH 03/24] drm/msm: create the display connectors from common code 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: <20260722-drm-msm-display-interface-v1-3-368c10fe62fd@oss.qualcomm.com> References: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> In-Reply-To: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=8599; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=qvvzQGIvCJFBeyjflw7v8rndU0UY2akeaNn006NwjUA=; b=owGbwMvMwMXYbdNlx6SpcZXxtFoSQ1ZCyrOkDRmncvJrb3pdjN9zu85iavCiJTG8Wj+yqycHa 0tdVi3qZDRmYWDkYpAVU2TxKWiZGrMpOezDjqn1MINYmUCmMHBxCsBE3GM4GNa2Fc0QXVCp4JDy 9HXzh1q76X5ZNxbEfbLbuPlVi4xelJT31cyoVzF9Ew9tV5LfrB8o+y8pKeyi5+74j/4HGYq0Yi7 x93ku4HIMmDdv3qzYH/m9ygUMr9dLXgrOC5rx6EXJesk+w9yCeRMZSiZbVe+QeK86b3njsQldZ9 l2qRWHTr1sq/rNxpGR3W/OyuAfd5hSGA6sDbhispR5J2dh7xtNrY0nwl8aLppfuEfpYZRh0ByuX zfUvNoV/wq/m8RbaLDUpkXGg+fI7Q/usS9iZhom+d9T/hdnLLnKOjnT8uTmR9VRjSlX83ef+Nsd e2mXqZTC5FnCbXK6+d2TObsXtN/WnHiHPfXfh8xFNkxKAA== X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-GUID: xmx2IIVfr8LZxW8XNsRrVGNJIR3ZeiES X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX/3OcjMVkhC8g W/Za2mmDYKT+zSwxqcjbq82809L/0q80D/2FIw0Pxf9qzDKwtfGJfJDEh/MV9kzosOQISbeRci6 050Xc4B2hdIsAZoB/sz3T2Gqs6TIZCfSYy97zZ6MsQw5ynwroxBPTOoxbFi9lRJKoUbHFxqJOpq EGKlzjJPbg7fnupLgWwftuYjKz70Vtn2C/ApkhA8R+RLkhLVGch4i3drqoVeGpiAHtyJZ60Plnk GBCJVZrZBhQh+R6qeMaChdEU9osVZlWAXTkan5gcnEIndIDd5MFKi71hHakrocI9bwXXq2IUkPb ef1EyCOAl5wDygNW8LOGyPT12p3ZcV4C7nxe3CfX5bCMxG/OuaixyTBdUtRu4v3iBCnQGkS18Hy wyv17PHjePjfVV4C1agW/Rp2FydcDl/LlwdpeIQwxdYOYxkRjcOxv3wvVWUF6Wvnc/1au4e+TAx 2x36e+rg7CfE+FM4aqw== X-Authority-Analysis: v=2.4 cv=e/o2j6p/ c=1 sm=1 tr=0 ts=6a6064f5 cx=c_pps a=mPf7EqFMSY9/WdsSgAYMbA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=EUspDBNiAAAA:8 a=WN0DelYTnYdyuVf2XKsA:9 a=QEXdDO2ut3YA:10 a=dawVfQjAaf238kedN5IG:22 X-Proofpoint-ORIG-GUID: xmx2IIVfr8LZxW8XNsRrVGNJIR3ZeiES X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfXwdZbr69tfX+T 253nAMNGoesdkkS+XKVv85msFEQP4pUj+GL/ipZdgxBG86QK/wfMiBo0PxgJORgm+IA7BdayHXv nX+NGWWXQP8+OKkwMaicgWXzqBeh4Zg= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-22_02,2026-07-21_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 suspectscore=0 spamscore=0 bulkscore=0 priorityscore=1501 impostorscore=0 lowpriorityscore=0 phishscore=0 clxscore=1015 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607220060 Each KMS backend (mdp4, mdp5, dpu1) open-codes the loop over the DSI, DP and HDMI sub-blocks and the calls to msm_dsi_modeset_init(), msm_dp_modeset_init() and msm_hdmi_modeset_init() that build the bridges and connectors. The dispatch, including the bonded-DSI handling, is duplicated three times with subtle variations. The encoder each sub-block is attached to is genuinely backend-specific (the DPU builds a display-info descriptor, MDP5 requests a CTL, MDP4 uses fixed CRTC masks), but the connector setup that follows is not. Have each backend only create the encoder and record it in struct msm_kms, and move the msm_*_modeset_init() dispatch into a common msm_kms_init_connectors() called from msm_drm_kms_init() after the backend's ->hw_init(), where the encoders and, on DPU, the GEM address space (kms->vm) that msm_dsi_host_modeset_init() allocates the DSI TX buffer from are set up. No functional change intended. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 34 ++++-------------- drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c | 18 +++------- drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c | 9 +++-- drivers/gpu/drm/msm/msm_kms.c | 60 ++++++++++++++++++++++++++++= ++++ drivers/gpu/drm/msm/msm_kms.h | 3 ++ 5 files changed, 78 insertions(+), 46 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/= disp/dpu1/dpu_kms.c index ede935a426d1..42dff1a98292 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c @@ -627,21 +627,11 @@ static int _dpu_kms_initialize_dsi(struct drm_device = *dev, return PTR_ERR(encoder); } =20 - rc =3D msm_dsi_modeset_init(priv->kms->dsi[i], dev, encoder); - if (rc) { - DPU_ERROR("modeset_init failed for dsi[%d], rc =3D %d\n", - i, rc); - break; - } - - if (msm_dsi_is_bonded_dsi(priv->kms->dsi[i]) && priv->kms->dsi[other]) { - rc =3D msm_dsi_modeset_init(priv->kms->dsi[other], dev, encoder); - if (rc) { - DPU_ERROR("modeset_init failed for dsi[%d], rc =3D %d\n", - other, rc); - break; - } - } + /* + * A bonded pair is driven by a single encoder; the connector + * setup for both hosts is handled from common code later. + */ + priv->kms->dsi_encoder[i] =3D encoder; } =20 return rc; @@ -653,7 +643,6 @@ static int _dpu_kms_initialize_displayport(struct drm_d= evice *dev, { struct drm_encoder *encoder =3D NULL; struct msm_display_info info; - int rc; int i; =20 for (i =3D 0; i < ARRAY_SIZE(priv->kms->dp); i++) { @@ -671,11 +660,7 @@ static int _dpu_kms_initialize_displayport(struct drm_= device *dev, return PTR_ERR(encoder); } =20 - rc =3D msm_dp_modeset_init(priv->kms->dp[i], dev, encoder); - if (rc) { - DPU_ERROR("modeset_init failed for DP, rc =3D %d\n", rc); - return rc; - } + priv->kms->dp_encoder[i] =3D encoder; } =20 return 0; @@ -687,7 +672,6 @@ static int _dpu_kms_initialize_hdmi(struct drm_device *= dev, { struct drm_encoder *encoder =3D NULL; struct msm_display_info info; - int rc; =20 if (!priv->kms->hdmi) return 0; @@ -703,11 +687,7 @@ static int _dpu_kms_initialize_hdmi(struct drm_device = *dev, return PTR_ERR(encoder); } =20 - rc =3D msm_hdmi_modeset_init(priv->kms->hdmi, dev, encoder); - if (rc) { - DPU_ERROR("modeset_init failed for DP, rc =3D %d\n", rc); - return rc; - } + priv->kms->hdmi_encoder =3D encoder; =20 return 0; } diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c b/drivers/gpu/drm/msm= /disp/mdp4/mdp4_kms.c index 7726edb0d4ed..cd566a287f6f 100644 --- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c +++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c @@ -243,14 +243,9 @@ static int mdp4_modeset_init_intf(struct mdp4_kms *mdp= 4_kms, /* DTV can be hooked to DMA_E: */ encoder->possible_crtcs =3D 1 << 1; =20 - if (priv->kms->hdmi) { - /* Construct bridge/connector for HDMI: */ - ret =3D msm_hdmi_modeset_init(priv->kms->hdmi, dev, encoder); - if (ret) { - DRM_DEV_ERROR(dev->dev, "failed to initialize HDMI: %d\n", ret); - return ret; - } - } + /* the bridge/connector for HDMI is set up from common code */ + if (priv->kms->hdmi) + priv->kms->hdmi_encoder =3D encoder; =20 break; case DRM_MODE_ENCODER_DSI: @@ -271,12 +266,7 @@ static int mdp4_modeset_init_intf(struct mdp4_kms *mdp= 4_kms, /* TODO: Add DMA_S later? */ encoder->possible_crtcs =3D 1 << DMA_P; =20 - ret =3D msm_dsi_modeset_init(priv->kms->dsi[dsi_id], dev, encoder); - if (ret) { - DRM_DEV_ERROR(dev->dev, "failed to initialize DSI: %d\n", - ret); - return ret; - } + priv->kms->dsi_encoder[dsi_id] =3D encoder; =20 break; default: diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm= /disp/mdp5/mdp5_kms.c index 0a004ab9fc85..68b71a7c6666 100644 --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c @@ -330,7 +330,7 @@ static int modeset_init_intf(struct mdp5_kms *mdp5_kms, break; } =20 - ret =3D msm_hdmi_modeset_init(priv->kms->hdmi, dev, encoder); + priv->kms->hdmi_encoder =3D encoder; break; case INTF_DSI: { @@ -360,10 +360,9 @@ static int modeset_init_intf(struct mdp5_kms *mdp5_kms, break; } =20 - ret =3D msm_dsi_modeset_init(priv->kms->dsi[dsi_id], dev, encoder); - if (!ret) - mdp5_encoder_set_intf_mode(encoder, - msm_dsi_is_cmd_mode(priv->kms->dsi[dsi_id])); + priv->kms->dsi_encoder[dsi_id] =3D encoder; + mdp5_encoder_set_intf_mode(encoder, + msm_dsi_is_cmd_mode(priv->kms->dsi[dsi_id])); =20 break; } diff --git a/drivers/gpu/drm/msm/msm_kms.c b/drivers/gpu/drm/msm/msm_kms.c index e5d0ea629448..87530145e82b 100644 --- a/drivers/gpu/drm/msm/msm_kms.c +++ b/drivers/gpu/drm/msm/msm_kms.c @@ -260,6 +260,57 @@ void msm_drm_kms_uninit(struct device *dev) kms->funcs->destroy(kms); } =20 +/* + * Set up the bridges and connectors for the display sub-blocks, using the + * encoders the backend created in ->kms_init(). + */ +static int msm_kms_init_connectors(struct drm_device *ddev) +{ + struct msm_drm_private *priv =3D ddev->dev_private; + struct msm_kms *kms =3D priv->kms; + int i, ret; + + /* + * The slave link of a bonded DSI pair shares its master's encoder and + * creates no connector of its own; msm_dsi_modeset_init() handles that + * internally, so it needs no special-casing here. + */ + for (i =3D 0; i < ARRAY_SIZE(kms->dsi); i++) { + if (!kms->dsi[i]) + continue; + + ret =3D msm_dsi_modeset_init(kms->dsi[i], ddev, kms->dsi_encoder[i]); + if (ret) { + DRM_DEV_ERROR(ddev->dev, + "modeset_init failed for dsi[%d]: %d\n", i, ret); + return ret; + } + } + + for (i =3D 0; i < ARRAY_SIZE(kms->dp); i++) { + if (!kms->dp[i]) + continue; + + ret =3D msm_dp_modeset_init(kms->dp[i], ddev, kms->dp_encoder[i]); + if (ret) { + DRM_DEV_ERROR(ddev->dev, + "modeset_init failed for dp[%d]: %d\n", i, ret); + return ret; + } + } + + if (kms->hdmi) { + ret =3D msm_hdmi_modeset_init(kms->hdmi, ddev, kms->hdmi_encoder); + if (ret) { + DRM_DEV_ERROR(ddev->dev, + "modeset_init failed for HDMI: %d\n", ret); + return ret; + } + } + + return 0; +} + int msm_drm_kms_init(struct device *dev, const struct drm_driver *drv) { struct msm_drm_private *priv =3D dev_get_drvdata(dev); @@ -298,6 +349,15 @@ int msm_drm_kms_init(struct device *dev, const struct = drm_driver *drv) goto err_msm_uninit; } =20 + /* + * The backend created the encoders for each display sub-block in + * ->hw_init(); now set up the bridges and connectors for them from + * common code. + */ + ret =3D msm_kms_init_connectors(ddev); + if (ret) + goto err_msm_uninit; + drm_helper_move_panel_connectors_to_head(ddev); =20 drm_for_each_crtc(crtc, ddev) { diff --git a/drivers/gpu/drm/msm/msm_kms.h b/drivers/gpu/drm/msm/msm_kms.h index f25b31e502d2..06646091604a 100644 --- a/drivers/gpu/drm/msm/msm_kms.h +++ b/drivers/gpu/drm/msm/msm_kms.h @@ -140,10 +140,13 @@ struct msm_kms { struct drm_device *dev; =20 struct hdmi *hdmi; + struct drm_encoder *hdmi_encoder; =20 struct msm_dsi *dsi[MSM_DSI_CONTROLLER_COUNT]; + struct drm_encoder *dsi_encoder[MSM_DSI_CONTROLLER_COUNT]; =20 struct msm_dp *dp[MSM_DP_CONTROLLER_COUNT]; + struct drm_encoder *dp_encoder[MSM_DP_CONTROLLER_COUNT]; =20 /* irq number to be passed on to msm_irq_install */ int irq; --=20 2.47.3 From nobody Fri Jul 24 23:30:38 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 CF51634CFAB for ; Wed, 22 Jul 2026 06:36:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702203; cv=none; b=rRyQU6wp4CuoErmqV0vJ37yA4Q0fSML3kW6bqkDnXEu6ipEv128QLEWYA7V+1Id3YpkI4eSwxFdDjib/wK7MIDLzAfpBbE1CypbV+zJAckVo+8Uq7OD9Uqul44mOdzXCSkBCJyALgzwjF2b7iwc6n/Q6iiRzwjyHC3I6E5GU/MU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702203; c=relaxed/simple; bh=dQq1YP1Zgxo5wlRNn1ky+tfmQFYD+CU0qqdX3e33yF4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QVObqvxEASivN+mmcpzWRxnEAxFVglTtmg8/93BHxLiJ3HKfHSoU9vAptGjSZBAVGOReK2wHHD+99Bck7c5vFLjAuiDMEp/RyEWYLBimJZXpA0ClTGcyiA9pvPHCVnKSw/0Vb0wkiPL6UOI/rxmCxdAi+7+BSMTx9XYHe3n0380= 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=PMuIjw10; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=PLpxtQT7; arc=none smtp.client-ip=205.220.168.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="PMuIjw10"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="PLpxtQT7" Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66M53ZJb3662150 for ; Wed, 22 Jul 2026 06:36:41 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= s2WFosEjx5mL1fry95UZtUlBXhZEDC7Nphcd8IbkOew=; b=PMuIjw10/fpWE+i9 tpIxgw0iQSglHKshT/xWjSqtPxEeYJVB/mNAl05LT5Sj4syrdAZAjc6KXWOWX1qi NxEI6Mwm+NBXqygZsRq/79j9dAqxij8fLsioraC6J29UPdW0xXsD8lagH8Ngli6t wQwiNnIYwcWotFhI5eyIpTe71nGdO2A5UsaEFmZLP/Jk1ma8zv22tiD10Qg4smPO llbkPvmBGcBjFTfnEt52CWz+Aw7AF1AIAI0aJi0W+uht3DQBubvFdXfyoT0ct6Y9 ZHfQV2YLA6DNOY1VgFH+/quTDdAnI6FgbVmchtIrZrek3yqgpQN7BQ7f45xoBS0I sanr/w== 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 4fjd5e2jke-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 22 Jul 2026 06:36:41 +0000 (GMT) Received: by mail-qt1-f199.google.com with SMTP id d75a77b69052e-51c0199faafso187490281cf.3 for ; Tue, 21 Jul 2026 23:36:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784702200; x=1785307000; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=s2WFosEjx5mL1fry95UZtUlBXhZEDC7Nphcd8IbkOew=; b=PLpxtQT7uR9KnPMWBiI8ZyO0BFRTIZct6o3jhn94M/E6TRstXbrSFaANTDDPb+pV+8 3QPaeWLuZYy0/YwJ9/RUyo4pX1Z1tUj8pzwLTNz4G3iB1I/Xcjb1hubz0Gj2Tjg4VVJ9 BW3Zqzk50R+oXhO8hzCXS4Ua/RKpUvFtWJN9PTCLQg41wYUOwluwNwpv+DV33yxncyS8 GalS93anxjNrb3PS0eiQDREkOaakECoaCOxPLmJ8hPlKzk3FQIlr/h9/Nyo1IlaOmNBP /7VDpdoQxIDDdv8MS8pC7QffPeLepeXx+c9fr0mfcMWXAF2RxMiYXY6VihJLqp0acLoH WoAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784702200; x=1785307000; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=s2WFosEjx5mL1fry95UZtUlBXhZEDC7Nphcd8IbkOew=; b=Jm1dlnX7YUM4j3xQLBOtG7X5GlaOyRHjadZ99Si1huRxYNIeA6dAj0xhKnTLVPzxSe p5TBBvQNXUeJJpLzQTz78YBkhXTucFigAgr65AmKrbAxJ+mUYkJwPV4AzxypjjojKF2+ 8roBItPHO4Vb1KqITZEuAVEwdJ19Hf1ixyA0QU3WkoTqJ+JWBesR/9t9kt/Qm/cR77Z1 9QQEbSowPCHW4r0wncIpU+GiVmemsvgzcPGJOYcTUDtYnB+MJko4i4/p+JvP1OsVKgvQ zV9GQ8fCs3BqaKMY9f9H0GMJV+Tu06Yj0y3lkcP6AHxYdXqXjnMtHjmOZmCKnoBTPtIx nwjw== X-Forwarded-Encrypted: i=1; AHgh+RrSzIfwawTyn/DRw0EHDcsBO92YiNWi39FDg45zbJKLRP5TQ3k4UNck8zddlp79Uiheek7i5EUTuVTzFD8=@vger.kernel.org X-Gm-Message-State: AOJu0YzCXn1eomQexyQ9HpgyiB8VrFkoXrTmjUwj6WkCvIhtbk5NgREN k4PI2/5Ka0LQivLXB9fB8MnnNuwDEJPHH/AvjoI9/4drXVU6ITnw7secupFwe+iCXmayJ+tw92z 6MA4r5fsnFepEOKoVr4PT03mxTfwwCS5Zq66Fk6UsX+sE+553YyjKEV4Dvqh50CUmqkQ= X-Gm-Gg: AR+sD11631ThZev8JsPraM2SwArGuQDyxvoybmMmXMqCOLYpZWpUa6MqjgYavBq4gVR HrKAFpdtzVc57HLY5Tn8cFdO0qT97tu6TDu9mkCxDVJSVa7JtSqq9HKkITk4s6gFrrsSxRzhv+D V/OJxiFF5YG0evpADGfnEg4XeECs4fOYRnCM9t+BoyJ6K5s4jTf0CEHTBf77XuXti0qLBc3e8g6 NnlBaoKJ5H5uS8mhtblDHlwG/IGwIGW3N0y7dA7+1GPcjw7NyDJ3wsIw5Zdj5YTH9A75vxXjC3+ CHCOpOLY22LIgsvy6Nl0oS2UDMxHd3zEPtGsow9b69QNPnQgqc2r0E6BV7rPZ2Ucovmm4XNUPle H85X1LG3dXJsV6vZCwCnDfBz4B9kfoJOokNO1Oe48zDAjatRXmJNYWmsCKbFHErD0Lb2r7hXVsm 2Aah4lrkeciDxi5w== X-Received: by 2002:ac8:5705:0:b0:51c:7b12:5fe9 with SMTP id d75a77b69052e-5213f46eecemr203114801cf.85.1784702199984; Tue, 21 Jul 2026 23:36:39 -0700 (PDT) X-Received: by 2002:ac8:5705:0:b0:51c:7b12:5fe9 with SMTP id d75a77b69052e-5213f46eecemr203114571cf.85.1784702199446; Tue, 21 Jul 2026 23:36:39 -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 2adb3069b0e04-5b2a9b8c6f6sm309696e87.4.2026.07.21.23.36.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 23:36:37 -0700 (PDT) From: Dmitry Baryshkov Date: Wed, 22 Jul 2026 09:36:19 +0300 Subject: [PATCH 04/24] drm/msm: introduce the struct msm_display interface 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: <20260722-drm-msm-display-interface-v1-4-368c10fe62fd@oss.qualcomm.com> References: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> In-Reply-To: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=14063; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=dQq1YP1Zgxo5wlRNn1ky+tfmQFYD+CU0qqdX3e33yF4=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqYGTm32+s5Aq9TFVw6J/Dt04/OahxDzQYoqv8o tY4vg/1PKmJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCamBk5gAKCRCLPIo+Aiko 1WBlB/4wkfgDeTfXALuLn/xPGBejzMsFa67zv5YfgYdek89ujIIdXd0e8IupplKTUBCEbNMVIm/ CEF5eDGd9WxHV8EPuFMMSSNIPNwMVazIPKKxovYCKJ1ZRdnU5emr+2gCRRG8ZB3goP1nkyWlgUx z1xWey+KzJYzAnpy3zHBKpA8ukvokdKgQkO8NKKhAdSKs4cXrjiqBcdjlRUBoFPg5Gfkn/omVrz Xvd2MtQlqEI6UFCorBgZN/Rj27GvPV7dZvUo/4F8yWTU9GVE2+FqbgygD/ztYGzF5yecE9RfbOG 8PY773N7dApmhULTSbuoqhPnlLiNLqzULB4XGaDnFSfV2izv X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-GUID: LGxyTGsDjSzj7UWzpnc_bA_bUgjGPboP X-Authority-Analysis: v=2.4 cv=CbE4Irrl c=1 sm=1 tr=0 ts=6a6064f9 cx=c_pps a=WeENfcodrlLV9YRTxbY/uA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=EUspDBNiAAAA:8 a=KkC0EXddP0L80uirutwA:9 a=QEXdDO2ut3YA:10 a=kacYvNCVWA4VmyqE58fU:22 X-Proofpoint-ORIG-GUID: LGxyTGsDjSzj7UWzpnc_bA_bUgjGPboP X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX1J0e0qwn4DU9 UtbLupCqC5yYzQM3aLtiN54e4T0C6v/dRcUSKUeAZOjgfzEyYHsvua8yrHow6zieAzJslJk4wGH N2Xo/sDebg/F/PPXLKaykNv8/6bXhDIZAU4muBRSTUQtvS8flKmyjoqlk+3/MCOp2KS14VT+qx7 fO4vKhCduLQQWyxqT0cTF32E0lrNFHUn5DjTBiv+CD+rPuGt/kXrvZMor2d7ptIK/m+MOHg+0EK HBR61t72xWFAcVIOQLb9VJ0wv51PgQrC6VKueA39X7as7OZ3pznWi7tbdl1lXFEMjZzpZ/aT/Rf 0m3n0BxLHz5HuqM15fzFAvTA9S9L+kSqkYLCUTyzFqCgaZCJKVb2f11PUFax0vgvTtaR3DUc8qz WQUczZZDjxFi0vpElNZMUj4CkIq0bFFioupntCi4kBVweUc/JfawlAiqD+rsLxXaE6+BEiFPhZA 7APR4L8rkCF2Vd8GJCg== X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfXz00M8jjColsK ZGPIloM0tHa1S2MidxhXM3f/1+8e1IrMg7QDnbTNJ+daWSW31pDyUfOsQ/alzBnPVUZhFkGoqJu qvZY5YO6HfjimlCd8ENe73glZ5ZWWqo= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-22_02,2026-07-21_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 adultscore=0 suspectscore=0 clxscore=1015 spamscore=0 malwarescore=0 bulkscore=0 impostorscore=0 lowpriorityscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607220060 The common connector setup in msm_kms_init_connectors() calls the type-specific msm_dsi_modeset_init(), msm_dp_modeset_init() and msm_hdmi_modeset_init() functions, so it has to know about each concrete sub-block type. Introduce a small struct msm_display interface with a modeset_init() callback, embedded in struct hdmi, struct msm_dsi and struct msm_dp. Each sub-block registers its ops and provides a msm_*_get_display() accessor; the common code then dispatches through display->funcs->modeset_init() without knowing the concrete type. Further per-sub-block operations will be folded into this interface in following patches. No functional change intended. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/dp/dp_display.c | 17 ++++++++-- drivers/gpu/drm/msm/dp/dp_display.h | 2 ++ drivers/gpu/drm/msm/dsi/dsi.c | 18 ++++++++-- drivers/gpu/drm/msm/dsi/dsi.h | 2 ++ drivers/gpu/drm/msm/hdmi/hdmi.c | 13 +++++++- drivers/gpu/drm/msm/hdmi/hdmi.h | 2 ++ drivers/gpu/drm/msm/msm_drv.h | 50 ++++++++++++++++++---------- drivers/gpu/drm/msm/msm_kms.c | 66 ++++++++++++++++++---------------= ---- 8 files changed, 115 insertions(+), 55 deletions(-) diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index 5ae5eed7e010..79dd556e96c2 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -203,6 +203,8 @@ void msm_dp_display_signal_audio_complete(struct msm_dp= *msm_dp_display) complete_all(&dp->audio_comp); } =20 +static const struct msm_display_funcs msm_dp_display_funcs; + static int msm_dp_display_bind(struct device *dev, struct device *master, void *data) { @@ -212,6 +214,7 @@ static int msm_dp_display_bind(struct device *dev, stru= ct device *master, struct drm_device *drm =3D priv->dev; =20 dp->msm_dp_display.drm_dev =3D drm; + dp->msm_dp_display.display.funcs =3D &msm_dp_display_funcs; priv->kms->dp[dp->id] =3D &dp->msm_dp_display; =20 dp->drm_dev =3D drm; @@ -1317,9 +1320,10 @@ void msm_dp_display_debugfs_init(struct msm_dp *msm_= dp_display, struct dentry *r DRM_ERROR("failed to initialize debug, rc =3D %d\n", rc); } =20 -int msm_dp_modeset_init(struct msm_dp *msm_dp_display, struct drm_device *= dev, - struct drm_encoder *encoder) +static int msm_dp_modeset_init(struct msm_display *display, + struct drm_device *dev, struct drm_encoder *encoder) { + struct msm_dp *msm_dp_display =3D container_of(display, struct msm_dp, di= splay); struct msm_dp_display_private *msm_dp_priv; int ret; =20 @@ -1348,6 +1352,15 @@ int msm_dp_modeset_init(struct msm_dp *msm_dp_displa= y, struct drm_device *dev, return 0; } =20 +static const struct msm_display_funcs msm_dp_display_funcs =3D { + .modeset_init =3D msm_dp_modeset_init, +}; + +struct msm_display *msm_dp_get_display(struct msm_dp *msm_dp_display) +{ + return msm_dp_display ? &msm_dp_display->display : NULL; +} + void msm_dp_bridge_atomic_enable(struct drm_bridge *drm_bridge, struct drm_atomic_commit *state) { diff --git a/drivers/gpu/drm/msm/dp/dp_display.h b/drivers/gpu/drm/msm/dp/d= p_display.h index 0b65e16c790d..20a71afb1f90 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.h +++ b/drivers/gpu/drm/msm/dp/dp_display.h @@ -12,6 +12,8 @@ #define DP_MAX_PIXEL_CLK_KHZ 675000 =20 struct msm_dp { + struct msm_display display; + struct drm_device *drm_dev; struct platform_device *pdev; struct drm_connector *connector; diff --git a/drivers/gpu/drm/msm/dsi/dsi.c b/drivers/gpu/drm/msm/dsi/dsi.c index 3c9f01ed6271..6cd844d08733 100644 --- a/drivers/gpu/drm/msm/dsi/dsi.c +++ b/drivers/gpu/drm/msm/dsi/dsi.c @@ -115,6 +115,8 @@ static struct msm_dsi *dsi_init(struct platform_device = *pdev) return ERR_PTR(ret); } =20 +static const struct msm_display_funcs msm_dsi_display_funcs; + static int dsi_bind(struct device *dev, struct device *master, void *data) { struct msm_drm_private *priv =3D dev_get_drvdata(master); @@ -136,6 +138,7 @@ static int dsi_bind(struct device *dev, struct device *= master, void *data) msm_dsi->next_bridge =3D ext_bridge; } =20 + msm_dsi->display.funcs =3D &msm_dsi_display_funcs; priv->kms->dsi[msm_dsi->id] =3D msm_dsi; =20 return 0; @@ -230,9 +233,11 @@ void __exit msm_dsi_unregister(void) platform_driver_unregister(&dsi_driver); } =20 -int msm_dsi_modeset_init(struct msm_dsi *msm_dsi, struct drm_device *dev, - struct drm_encoder *encoder) +static int msm_dsi_modeset_init(struct msm_display *display, + struct drm_device *dev, + struct drm_encoder *encoder) { + struct msm_dsi *msm_dsi =3D container_of(display, struct msm_dsi, display= ); int ret; =20 msm_dsi->dev =3D dev; @@ -262,6 +267,15 @@ int msm_dsi_modeset_init(struct msm_dsi *msm_dsi, stru= ct drm_device *dev, return 0; } =20 +static const struct msm_display_funcs msm_dsi_display_funcs =3D { + .modeset_init =3D msm_dsi_modeset_init, +}; + +struct msm_display *msm_dsi_get_display(struct msm_dsi *msm_dsi) +{ + return msm_dsi ? &msm_dsi->display : NULL; +} + void msm_dsi_snapshot(struct msm_disp_state *disp_state, struct msm_dsi *m= sm_dsi) { msm_dsi_host_snapshot(disp_state, msm_dsi->host); diff --git a/drivers/gpu/drm/msm/dsi/dsi.h b/drivers/gpu/drm/msm/dsi/dsi.h index 93c028a122f3..1d1bda0682db 100644 --- a/drivers/gpu/drm/msm/dsi/dsi.h +++ b/drivers/gpu/drm/msm/dsi/dsi.h @@ -32,6 +32,8 @@ enum msm_dsi_phy_usecase { #define DSI_BUS_CLK_MAX 4 =20 struct msm_dsi { + struct msm_display display; + struct drm_device *dev; struct platform_device *pdev; =20 diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.c b/drivers/gpu/drm/msm/hdmi/hdm= i.c index 474006084633..03367c6ba428 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi.c +++ b/drivers/gpu/drm/msm/hdmi/hdmi.c @@ -159,9 +159,10 @@ static int msm_hdmi_init(struct hdmi *hdmi) * should be handled in msm_hdmi_init() so that failure happens from * hdmi sub-device's probe. */ -int msm_hdmi_modeset_init(struct hdmi *hdmi, +static int msm_hdmi_modeset_init(struct msm_display *display, struct drm_device *dev, struct drm_encoder *encoder) { + struct hdmi *hdmi =3D container_of(display, struct hdmi, display); int ret; =20 hdmi->dev =3D dev; @@ -210,6 +211,15 @@ int msm_hdmi_modeset_init(struct hdmi *hdmi, return ret; } =20 +static const struct msm_display_funcs msm_hdmi_display_funcs =3D { + .modeset_init =3D msm_hdmi_modeset_init, +}; + +struct msm_display *msm_hdmi_get_display(struct hdmi *hdmi) +{ + return hdmi ? &hdmi->display : NULL; +} + /* * The hdmi device: */ @@ -243,6 +253,7 @@ static int msm_hdmi_bind(struct device *dev, struct dev= ice *master, void *data) err =3D msm_hdmi_init(hdmi); if (err) return err; + hdmi->display.funcs =3D &msm_hdmi_display_funcs; priv->kms->hdmi =3D hdmi; =20 return 0; diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.h b/drivers/gpu/drm/msm/hdmi/hdm= i.h index 49433f7727c3..f24444610fe1 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi.h +++ b/drivers/gpu/drm/msm/hdmi/hdmi.h @@ -31,6 +31,8 @@ struct hdmi_audio { struct hdmi_hdcp_ctrl; =20 struct hdmi { + struct msm_display display; + struct drm_device *dev; struct platform_device *pdev; =20 diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h index 0ec0622d9217..dbd955091ce7 100644 --- a/drivers/gpu/drm/msm/msm_drv.h +++ b/drivers/gpu/drm/msm/msm_drv.h @@ -274,17 +274,39 @@ int msm_fbdev_driver_fbdev_probe(struct drm_fb_helper= *helper, .fbdev_probe =3D NULL #endif =20 +struct msm_display; + +/** + * struct msm_display_funcs - ops provided by a display sub-block (DSI/DP/= HDMI) + * @modeset_init: create the bridge and connector for the sub-block, attac= hing + * to @encoder. + */ +struct msm_display_funcs { + int (*modeset_init)(struct msm_display *display, struct drm_device *dev, + struct drm_encoder *encoder); +}; + +/** + * struct msm_display - common interface to a display sub-block + * @funcs: sub-block provided ops + * + * Embedded in each sub-block (&struct hdmi, &struct msm_dsi, &struct msm_= dp) + * so that common KMS code can set up their connectors without knowing the + * concrete type. + */ +struct msm_display { + const struct msm_display_funcs *funcs; +}; + struct hdmi; #ifdef CONFIG_DRM_MSM_HDMI -int msm_hdmi_modeset_init(struct hdmi *hdmi, struct drm_device *dev, - struct drm_encoder *encoder); +struct msm_display *msm_hdmi_get_display(struct hdmi *hdmi); void __init msm_hdmi_register(void); void __exit msm_hdmi_unregister(void); #else -static inline int msm_hdmi_modeset_init(struct hdmi *hdmi, struct drm_devi= ce *dev, - struct drm_encoder *encoder) +static inline struct msm_display *msm_hdmi_get_display(struct hdmi *hdmi) { - return -EINVAL; + return NULL; } static inline void __init msm_hdmi_register(void) {} static inline void __exit msm_hdmi_unregister(void) {} @@ -296,8 +318,7 @@ int dsi_dev_attach(struct platform_device *pdev); void dsi_dev_detach(struct platform_device *pdev); void __init msm_dsi_register(void); void __exit msm_dsi_unregister(void); -int msm_dsi_modeset_init(struct msm_dsi *msm_dsi, struct drm_device *dev, - struct drm_encoder *encoder); +struct msm_display *msm_dsi_get_display(struct msm_dsi *msm_dsi); void msm_dsi_snapshot(struct msm_disp_state *disp_state, struct msm_dsi *m= sm_dsi); bool msm_dsi_is_cmd_mode(struct msm_dsi *msm_dsi); bool msm_dsi_is_bonded_dsi(struct msm_dsi *msm_dsi); @@ -312,11 +333,9 @@ static inline void __init msm_dsi_register(void) static inline void __exit msm_dsi_unregister(void) { } -static inline int msm_dsi_modeset_init(struct msm_dsi *msm_dsi, - struct drm_device *dev, - struct drm_encoder *encoder) +static inline struct msm_display *msm_dsi_get_display(struct msm_dsi *msm_= dsi) { - return -EINVAL; + return NULL; } static inline void msm_dsi_snapshot(struct msm_disp_state *disp_state, str= uct msm_dsi *msm_dsi) { @@ -353,8 +372,7 @@ struct msm_dp; #ifdef CONFIG_DRM_MSM_DP int __init msm_dp_register(void); void __exit msm_dp_unregister(void); -int msm_dp_modeset_init(struct msm_dp *dp_display, struct drm_device *dev, - struct drm_encoder *encoder); +struct msm_display *msm_dp_get_display(struct msm_dp *dp_display); void msm_dp_snapshot(struct msm_disp_state *disp_state, struct msm_dp *dp_= display); bool msm_dp_needs_periph_flush(const struct msm_dp *dp_display, const struct drm_display_mode *mode); @@ -368,11 +386,9 @@ static inline int __init msm_dp_register(void) static inline void __exit msm_dp_unregister(void) { } -static inline int msm_dp_modeset_init(struct msm_dp *dp_display, - struct drm_device *dev, - struct drm_encoder *encoder) +static inline struct msm_display *msm_dp_get_display(struct msm_dp *dp_dis= play) { - return -EINVAL; + return NULL; } =20 static inline void msm_dp_snapshot(struct msm_disp_state *disp_state, stru= ct msm_dp *dp_display) diff --git a/drivers/gpu/drm/msm/msm_kms.c b/drivers/gpu/drm/msm/msm_kms.c index 87530145e82b..3f855f9b3d06 100644 --- a/drivers/gpu/drm/msm/msm_kms.c +++ b/drivers/gpu/drm/msm/msm_kms.c @@ -260,9 +260,24 @@ void msm_drm_kms_uninit(struct device *dev) kms->funcs->destroy(kms); } =20 +static int msm_display_modeset_init(struct msm_display *display, + struct drm_device *ddev, + struct drm_encoder *encoder) +{ + if (!display) + return 0; + + return display->funcs->modeset_init(display, ddev, encoder); +} + /* - * Set up the bridges and connectors for the display sub-blocks, using the - * encoders the backend created in ->kms_init(). + * Set up the bridges and connectors for the display sub-blocks, dispatchi= ng + * through the common display interface using the encoders the backend cre= ated + * in ->kms_init(). + * + * The slave link of a bonded DSI pair shares its master's encoder and cre= ates + * no connector of its own; its ->modeset_init() handles that internally, = so it + * needs no special-casing here. */ static int msm_kms_init_connectors(struct drm_device *ddev) { @@ -270,45 +285,30 @@ static int msm_kms_init_connectors(struct drm_device = *ddev) struct msm_kms *kms =3D priv->kms; int i, ret; =20 - /* - * The slave link of a bonded DSI pair shares its master's encoder and - * creates no connector of its own; msm_dsi_modeset_init() handles that - * internally, so it needs no special-casing here. - */ for (i =3D 0; i < ARRAY_SIZE(kms->dsi); i++) { - if (!kms->dsi[i]) - continue; - - ret =3D msm_dsi_modeset_init(kms->dsi[i], ddev, kms->dsi_encoder[i]); - if (ret) { - DRM_DEV_ERROR(ddev->dev, - "modeset_init failed for dsi[%d]: %d\n", i, ret); - return ret; - } + ret =3D msm_display_modeset_init(msm_dsi_get_display(kms->dsi[i]), + ddev, kms->dsi_encoder[i]); + if (ret) + goto fail; } =20 for (i =3D 0; i < ARRAY_SIZE(kms->dp); i++) { - if (!kms->dp[i]) - continue; - - ret =3D msm_dp_modeset_init(kms->dp[i], ddev, kms->dp_encoder[i]); - if (ret) { - DRM_DEV_ERROR(ddev->dev, - "modeset_init failed for dp[%d]: %d\n", i, ret); - return ret; - } + ret =3D msm_display_modeset_init(msm_dp_get_display(kms->dp[i]), + ddev, kms->dp_encoder[i]); + if (ret) + goto fail; } =20 - if (kms->hdmi) { - ret =3D msm_hdmi_modeset_init(kms->hdmi, ddev, kms->hdmi_encoder); - if (ret) { - DRM_DEV_ERROR(ddev->dev, - "modeset_init failed for HDMI: %d\n", ret); - return ret; - } - } + ret =3D msm_display_modeset_init(msm_hdmi_get_display(kms->hdmi), + ddev, kms->hdmi_encoder); + if (ret) + goto fail; =20 return 0; + +fail: + DRM_DEV_ERROR(ddev->dev, "modeset_init failed: %d\n", ret); + return ret; } =20 int msm_drm_kms_init(struct device *dev, const struct drm_driver *drv) --=20 2.47.3 From nobody Fri Jul 24 23:30:38 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 9B0463AD528 for ; Wed, 22 Jul 2026 06:36:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702207; cv=none; b=T2jMtaaommil8Aq2p3X4qOdqAEGoVttNtD/3mv+4K5mohARw3DfJZ3sFzwzOhz5WWHGvDW6AEJ/Dag8O/h/d8T745n5afBl5PzApuTp8RwqluYKn6QpriDoyWDzNkTLLyAfh5ydcKP6ymV+ogm9/HhVj4OBIZty8vy6N+t6BFRI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702207; c=relaxed/simple; bh=7l1TNDYd9/evXG4aQDhF4a5Sh4Vi7IaJGNioaNskXy0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=stbdMM3SlNQbfsJyZhQSfRtMF8l2amjSCZ7FKv5x5U8bPgNbDPXeYeQSGceLXxUQf8GX5nk6H9fA920nph/nq75R58Cx7hI1sQYVK22MRJAEgPu47S76PBQW4UJIZvQmRNAuwqdEuqwhoFVepxgYOX0sy5liyWfvHjHYEH2Fdko= 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=j/DRue11; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=f8Gb+uWv; arc=none smtp.client-ip=205.220.168.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="j/DRue11"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="f8Gb+uWv" Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66M53kUm4027335 for ; Wed, 22 Jul 2026 06:36:45 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= orMX6Xv/umQ/GQKMS7aEJeoThKF81pS2FroIwcu9Ga0=; b=j/DRue11FJz22DVX 16+sajVZvyN+RqmOE6BLxXK8PzM350ID9bMLiJjKr611RP3NKnm4nfRK86ET7HtZ Lri4s3k0AsryPz1oQUKBmaAUwvu3f1gm+ip6s2Z8K/XE4ZGW4WoLW5ppM6DIV6Cn xQh48/0WwJV/HriPhRllzdeEMLbLfu0pJeV8+N+g43SaHWnrNTx2u8YbDC8xSoM0 9ZcZLJijbRXrt+rgPIr5NESOYpcwkgS2z/xxS5KLpnRE/iSVUg8qu5WribeQ3HTy t/E7hLwWSLfuNQflMVRlCnjwoBmo7ObPXzzKQSE1X0ZYm6v5YCAtu6TmMPp8QedL fwEjKQ== Received: from mail-qt1-f198.google.com (mail-qt1-f198.google.com [209.85.160.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fj9bsbvhg-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 22 Jul 2026 06:36:44 +0000 (GMT) Received: by mail-qt1-f198.google.com with SMTP id d75a77b69052e-51c0e702df8so181835171cf.2 for ; Tue, 21 Jul 2026 23:36:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784702204; x=1785307004; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=orMX6Xv/umQ/GQKMS7aEJeoThKF81pS2FroIwcu9Ga0=; b=f8Gb+uWv02ESmG1G5YhwkqvrCJPLsd4dEIduPncgQ0ny/drB2k7nk8GSGC7RgEELen mRCWqKQS8LybUZaWIbhMS+R0ZRBt9e5qNUE8STSoUejcebPzENecKuTeZp16iTK1jooj rJsQgqVIdZWNrATt5YH7fMVt8x/JJuvcvO9IKkwcKFj6/VLyd/67G/YFGw2o6n5BZiAE umPnnGKMZZhOyuc2jGuY1NBIf79YTKaHuvZ6/+7asar53u2lXGUT2yeMPnQCik7DHfJ6 otZrxP0ieWIEkthCIFeUUteA0WmAjs7DEK6g/8VdrMyyRXmeOy+K/kBDFOfgIniXVsw+ 460g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784702204; x=1785307004; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=orMX6Xv/umQ/GQKMS7aEJeoThKF81pS2FroIwcu9Ga0=; b=jOOY1Gt3GMa7TAzgiPES3izOUimK4TvgKi7Yv9K3WSvZgyaEuuYpv5MNbgqK4Zy2Uv FNK3TybQ3lp2rs2egYkdfhQEG/79qdDR5r9AEwlU/WZ2+1dtCDhx+/oWxbvVryH5FDwy NwSqUwfNuM8XInI+BGt7jiKrOAJtcID+has8G2oz315s9+L3mlBvBlNNn+1j6PocDgik Jt66QuXHkqeNOfvmDTORiMGgqigajmIaxnLW56Y0EXQ/tLN4FrKyPPcRgkPxIdr7UwjG 0X9ye5sC2QvYB5f8lF5YFwgvi3OAjFueaDQr/kkKc4JQMs5kAV9CIBnPaG+sLixOFxwI vS3g== X-Forwarded-Encrypted: i=1; AHgh+RqoqaShXM3ZxUSulPI0vUi828ryKphm1v6iqWZF4XbEw/Kjo8FnYVZPdbt6jYAU8XQ4XEDjXjphrpj+f6Y=@vger.kernel.org X-Gm-Message-State: AOJu0YzfIiuPP7Bms2Ts9l3FTnLGybz6DucdtnBq1y6oCLpBY9hHOEgC y02EgvDPx0IiJGB8rMsUdPBxiIshxFSLbBs9j0K8PtzPNke8/4YX/q3RLv3Nl5dDH3WQ1Klx+// uL7kY71lNno3UH0Rp5e6bmvwOH1QP2pVzdaCop7Fiy3sGT0c+42RRJYa+Z1yVcyCeSNc= X-Gm-Gg: AR+sD13omnd4Z6FeiuRJiGVF++B9rdovRxDLG96ymKPU3K3maCgS+E9ve40ktFP7EWS tWsytggP7XoTmENhqgA8Hq9/6n8eXDtvWsdf0B16GsiVqHNRIGcjPKGC5T7HpZdt5/3HXCdWeuM /MIHmz0GGZ2LlQxoyrnGnIZo6EarBxOT6nrruJoqtPsSuOh0bb5KQnk4sM4OoDXk/sy7F17T6Tr 6UiFvwyNtl+2hF3wNvtaNGdZkUMxuIzjLs8cG2D7Fix9gCXNiFdpQyNcLKUysAkjFKsCZkL5MgA oQKjvVWOQX78E1kQG2VLcfISkzlneC0CzJasq3sj+FF4AGT/AKVYtVEqsYUGXM2O57CGBPdQfQO 9bcnjAnoeh7VRy9tQIWWWk6UL3mEEi+YeXrosfXXY/Sfy106HYgCW/OnlN3zmZg8CziAIU23Zcg yI8lInBRaIFOP5jw== X-Received: by 2002:a05:622a:1816:b0:51c:13d6:b4f0 with SMTP id d75a77b69052e-5213e28e1famr204276791cf.47.1784702204000; Tue, 21 Jul 2026 23:36:44 -0700 (PDT) X-Received: by 2002:a05:622a:1816:b0:51c:13d6:b4f0 with SMTP id d75a77b69052e-5213e28e1famr204276511cf.47.1784702203550; Tue, 21 Jul 2026 23:36:43 -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 2adb3069b0e04-5b2a9b8c6f6sm309696e87.4.2026.07.21.23.36.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 23:36:41 -0700 (PDT) From: Dmitry Baryshkov Date: Wed, 22 Jul 2026 09:36:20 +0300 Subject: [PATCH 05/24] drm/msm: route the display snapshot through the msm_display interface 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: <20260722-drm-msm-display-interface-v1-5-368c10fe62fd@oss.qualcomm.com> References: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> In-Reply-To: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=7703; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=7l1TNDYd9/evXG4aQDhF4a5Sh4Vi7IaJGNioaNskXy0=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqYGTmgZ33GTCdA8gTzYYJcTRQq+WMF0WCFDbqO EeiMjh4VBKJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCamBk5gAKCRCLPIo+Aiko 1dYeCACCzg+5VE5TqEYdtmNPPUVEm+ouK1WhpQdv/3AGxwrZb4hQ0UlOYhV6mWJBf57z5eK0dGV FE5eufC76lW4kyjIxRpgl9nlmmVhug+Co3hbz8g2GiPGl7KXEvtrNCBTel+XwcT6BxlxsihNKjI RZIorpMsSw5Dg/rM/ROaYJBWDqhqvp9iYRQ2QB5wPOTV3uDMZhV4CIYok/2HArnREiGoxcKgFUy hpMwYTGyEJFRDak8PmkreLmLY8T1+VoXCrS/8Amh9XhtU5dyaaWqFvX2tL8Wrpik1XMUddtBc54 zJ3JfXmmAhqx8AVtvMjN79QyzH21htHKYeS7cjefyXjColZf X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-ORIG-GUID: Zqb12ywRR3mMp3mcPYhgaW40yr4pNvmy X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX7E1rtVNKc3J4 DDRUieGQAmPiZos1KXDtcVbY3FKPufDiJgNGuh5CzMr6lHhf8mDUMeXaQYI+F2zrreXuJ+YyLED U3Qp4pxeXeu7VHCXCNID2C7cI8Qsqd5kwj1NsY1Xzy09gqeGAbAgcXpX8XIIEewxCR7H6k2pv5I PTaJOtfGZM+vTc55T4DLcQmXJ/HLsEWJONU4FQjQhXeF0Q2mYs47WsefpaSdA4Fyd5ygo0iDtvd PVdyN3XE5TrMf9ERVZpvRcjdCHZ2pudDKDZPfhlgSiqKQxt38eZ1XkBujWGhuIl12IjoPHFMeOx ST9qUIVLGv4fGvHvXm3q9sM8c+19COnhxFH2MOQnZQYSR8WjW9NcaoKRRGE9jzGnlzljwIUqr3H gW/iJdYQDWqBemVsRwV9gS4oLQ0+HhdGS3f4Nyn19FpPYwm5O26/I8D7cfpHuqZOrF0zCxzR4gE 5fmeUceyrUI8ZLg/bQg== X-Proofpoint-GUID: Zqb12ywRR3mMp3mcPYhgaW40yr4pNvmy X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX1KjCno6/LdOr zBjKvlT7jksHSLSMba0nbnV+TE2OjNfcB25r5bOy0ONw21UTWIETGEOG8YBjfDnxMzsgoemypnP qaiA+Nmzp4xYyuD7UFXEY32harH4jAM= X-Authority-Analysis: v=2.4 cv=QK1YgALL c=1 sm=1 tr=0 ts=6a6064fc cx=c_pps a=mPf7EqFMSY9/WdsSgAYMbA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8 a=hdl_M5XMN9aFjBodsmYA:9 a=QEXdDO2ut3YA:10 a=dawVfQjAaf238kedN5IG:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-22_02,2026-07-21_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 spamscore=0 phishscore=0 impostorscore=0 bulkscore=0 suspectscore=0 clxscore=1015 adultscore=0 lowpriorityscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607220060 The display snapshot code calls msm_dsi_snapshot() and msm_dp_snapshot() directly, so it has to know the concrete sub-block type of each entry. Add a mandatory snapshot() callback to struct msm_display_funcs and turn the DSI and DP snapshot helpers into implementations of it. HDMI did not have a snapshot helper before; give it an empty implementation for now (a following patch fills it in). The snapshot code now dispatches through the interface for all three sub-blocks. No functional change intended. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/disp/msm_disp_snapshot_util.c | 19 +++++++++++-------- drivers/gpu/drm/msm/dp/dp_display.c | 5 ++++- drivers/gpu/drm/msm/dsi/dsi.c | 16 ++++++++++------ drivers/gpu/drm/msm/hdmi/hdmi.c | 6 ++++++ drivers/gpu/drm/msm/msm_drv.h | 14 +++++--------- 5 files changed, 36 insertions(+), 24 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/msm_disp_snapshot_util.c b/drivers/gp= u/drm/msm/disp/msm_disp_snapshot_util.c index 850246fc89e1..b42a92c2ffad 100644 --- a/drivers/gpu/drm/msm/disp/msm_disp_snapshot_util.c +++ b/drivers/gpu/drm/msm/disp/msm_disp_snapshot_util.c @@ -131,6 +131,7 @@ void msm_disp_snapshot_capture_state(struct msm_disp_st= ate *disp_state) { struct msm_drm_private *priv; struct drm_device *drm_dev; + struct msm_display *display; struct msm_kms *kms; int i; =20 @@ -139,19 +140,21 @@ void msm_disp_snapshot_capture_state(struct msm_disp_= state *disp_state) kms =3D priv->kms; =20 for (i =3D 0; i < ARRAY_SIZE(kms->dp); i++) { - if (!kms->dp[i]) - continue; - - msm_dp_snapshot(disp_state, kms->dp[i]); + display =3D msm_dp_get_display(kms->dp[i]); + if (display) + display->funcs->snapshot(display, disp_state); } =20 for (i =3D 0; i < ARRAY_SIZE(kms->dsi); i++) { - if (!kms->dsi[i]) - continue; - - msm_dsi_snapshot(disp_state, kms->dsi[i]); + display =3D msm_dsi_get_display(kms->dsi[i]); + if (display) + display->funcs->snapshot(display, disp_state); } =20 + display =3D msm_hdmi_get_display(kms->hdmi); + if (display) + display->funcs->snapshot(display, disp_state); + if (kms->funcs->snapshot) kms->funcs->snapshot(disp_state, kms); =20 diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index 79dd556e96c2..f4fa86d1b9c7 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -783,8 +783,10 @@ int msm_dp_display_get_test_bpp(struct msm_dp *dp) msm_dp_display->link->test_video.test_bit_depth); } =20 -void msm_dp_snapshot(struct msm_disp_state *disp_state, struct msm_dp *dp) +static void msm_dp_snapshot(struct msm_display *display, + struct msm_disp_state *disp_state) { + struct msm_dp *dp =3D container_of(display, struct msm_dp, display); struct msm_dp_display_private *msm_dp_display; =20 msm_dp_display =3D container_of(dp, struct msm_dp_display_private, msm_dp= _display); @@ -1354,6 +1356,7 @@ static int msm_dp_modeset_init(struct msm_display *di= splay, =20 static const struct msm_display_funcs msm_dp_display_funcs =3D { .modeset_init =3D msm_dp_modeset_init, + .snapshot =3D msm_dp_snapshot, }; =20 struct msm_display *msm_dp_get_display(struct msm_dp *msm_dp_display) diff --git a/drivers/gpu/drm/msm/dsi/dsi.c b/drivers/gpu/drm/msm/dsi/dsi.c index 6cd844d08733..c86142f66237 100644 --- a/drivers/gpu/drm/msm/dsi/dsi.c +++ b/drivers/gpu/drm/msm/dsi/dsi.c @@ -267,8 +267,18 @@ static int msm_dsi_modeset_init(struct msm_display *di= splay, return 0; } =20 +static void msm_dsi_snapshot(struct msm_display *display, + struct msm_disp_state *disp_state) +{ + struct msm_dsi *msm_dsi =3D container_of(display, struct msm_dsi, display= ); + + msm_dsi_host_snapshot(disp_state, msm_dsi->host); + msm_dsi_phy_snapshot(disp_state, msm_dsi->phy); +} + static const struct msm_display_funcs msm_dsi_display_funcs =3D { .modeset_init =3D msm_dsi_modeset_init, + .snapshot =3D msm_dsi_snapshot, }; =20 struct msm_display *msm_dsi_get_display(struct msm_dsi *msm_dsi) @@ -276,9 +286,3 @@ struct msm_display *msm_dsi_get_display(struct msm_dsi = *msm_dsi) return msm_dsi ? &msm_dsi->display : NULL; } =20 -void msm_dsi_snapshot(struct msm_disp_state *disp_state, struct msm_dsi *m= sm_dsi) -{ - msm_dsi_host_snapshot(disp_state, msm_dsi->host); - msm_dsi_phy_snapshot(disp_state, msm_dsi->phy); -} - diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.c b/drivers/gpu/drm/msm/hdmi/hdm= i.c index 03367c6ba428..350867ada0cf 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi.c +++ b/drivers/gpu/drm/msm/hdmi/hdmi.c @@ -211,8 +211,14 @@ static int msm_hdmi_modeset_init(struct msm_display *d= isplay, return ret; } =20 +static void msm_hdmi_snapshot(struct msm_display *display, + struct msm_disp_state *disp_state) +{ +} + static const struct msm_display_funcs msm_hdmi_display_funcs =3D { .modeset_init =3D msm_hdmi_modeset_init, + .snapshot =3D msm_hdmi_snapshot, }; =20 struct msm_display *msm_hdmi_get_display(struct hdmi *hdmi) diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h index dbd955091ce7..d25d783b4f11 100644 --- a/drivers/gpu/drm/msm/msm_drv.h +++ b/drivers/gpu/drm/msm/msm_drv.h @@ -275,15 +275,20 @@ int msm_fbdev_driver_fbdev_probe(struct drm_fb_helper= *helper, #endif =20 struct msm_display; +struct msm_disp_state; =20 /** * struct msm_display_funcs - ops provided by a display sub-block (DSI/DP/= HDMI) * @modeset_init: create the bridge and connector for the sub-block, attac= hing * to @encoder. + * @snapshot: capture the sub-block's state for a display snapshot; + * mandatory. */ struct msm_display_funcs { int (*modeset_init)(struct msm_display *display, struct drm_device *dev, struct drm_encoder *encoder); + void (*snapshot)(struct msm_display *display, + struct msm_disp_state *disp_state); }; =20 /** @@ -319,7 +324,6 @@ void dsi_dev_detach(struct platform_device *pdev); void __init msm_dsi_register(void); void __exit msm_dsi_unregister(void); struct msm_display *msm_dsi_get_display(struct msm_dsi *msm_dsi); -void msm_dsi_snapshot(struct msm_disp_state *disp_state, struct msm_dsi *m= sm_dsi); bool msm_dsi_is_cmd_mode(struct msm_dsi *msm_dsi); bool msm_dsi_is_bonded_dsi(struct msm_dsi *msm_dsi); bool msm_dsi_is_master_dsi(struct msm_dsi *msm_dsi); @@ -337,9 +341,6 @@ static inline struct msm_display *msm_dsi_get_display(s= truct msm_dsi *msm_dsi) { return NULL; } -static inline void msm_dsi_snapshot(struct msm_disp_state *disp_state, str= uct msm_dsi *msm_dsi) -{ -} static inline bool msm_dsi_is_cmd_mode(struct msm_dsi *msm_dsi) { return false; @@ -373,7 +374,6 @@ struct msm_dp; int __init msm_dp_register(void); void __exit msm_dp_unregister(void); struct msm_display *msm_dp_get_display(struct msm_dp *dp_display); -void msm_dp_snapshot(struct msm_disp_state *disp_state, struct msm_dp *dp_= display); bool msm_dp_needs_periph_flush(const struct msm_dp *dp_display, const struct drm_display_mode *mode); bool msm_dp_wide_bus_available(const struct msm_dp *dp_display); @@ -391,10 +391,6 @@ static inline struct msm_display *msm_dp_get_display(s= truct msm_dp *dp_display) return NULL; } =20 -static inline void msm_dp_snapshot(struct msm_disp_state *disp_state, stru= ct msm_dp *dp_display) -{ -} - static inline bool msm_dp_needs_periph_flush(const struct msm_dp *dp_displ= ay, const struct drm_display_mode *mode) { --=20 2.47.3 From nobody Fri Jul 24 23:30:38 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 BF3A03AE701 for ; Wed, 22 Jul 2026 06:36:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702211; cv=none; b=le0w0wh2VWrEaSYeE6fz1Rw2wJsrxEnJWtDHGeldv6o0+uYNrGia9C07tz0bbNlvNlw+bHN2/vbO2tqmloMIiuzPjKiAX8wzUPUGqCfTikDH7aN2SvvSbtuxENmwiK2TsvRfftJT06vS3noPvY7t9yrxhx0dQGlPOYeirBMQObs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702211; c=relaxed/simple; bh=wHwe7eJuJTYqmz/TsunqqWhXimzjZh7z7oauF1VXkeg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=oYN4aT44vTT73J5RRHGWHPi44+0KwdaBeHJXzJHFclKFQ5Sy6KRXN+eLcWPHW/y/WbbEVXpnsQ8zbv3QZL11l9HSdq4M0gS9+mVUcuKoG1pRMIKOghOgCzK+V8JnbTMUuCKgs6mAQo6sGnX39mivf6SZhfE9Iega42z4N1a7jaQ= 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=islnYv1w; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Nrzd+i26; arc=none smtp.client-ip=205.220.168.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="islnYv1w"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Nrzd+i26" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66M53bCJ3767556 for ; Wed, 22 Jul 2026 06:36:49 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= f8f3pTQWb1DUH/SMD1hqL4uhPClug+lZg6FGrEkFBbg=; b=islnYv1w0yq2w6d0 2ninNRob4gjDNO995Owp67Jp9+wDIHuCd1/kEX+UWRKwKlqOfXmYd1g0nIHK7ouY I8S6NBY/PZDr8eI6eBqYJyQu1vS5NKjgF48fllkYQe/yy9zNJC6WHPKkGi4++x4L Wes6+Wtb5dAo2hqLBqVWmpu90baFBycXMB4aCKeaxjsw0MjgmrtYiGxYmHP+2mhE Jd99Hpgi9Gs/DBZFXCfr675pRuKK6h4nNcv1QGoEXTbpwkVy+cLB6W8Y+/mC9K4q gJZ38hbJLimlxAMwO0WwJE7ZC49/5+zJB119betri8Nim1KP1gOJPpuos35MYCDs 1tOysA== Received: from mail-qt1-f198.google.com (mail-qt1-f198.google.com [209.85.160.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fjnu4rn6a-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 22 Jul 2026 06:36:49 +0000 (GMT) Received: by mail-qt1-f198.google.com with SMTP id d75a77b69052e-526da7e3c9dso24035881cf.1 for ; Tue, 21 Jul 2026 23:36:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784702208; x=1785307008; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=f8f3pTQWb1DUH/SMD1hqL4uhPClug+lZg6FGrEkFBbg=; b=Nrzd+i26yuz8yaQI8MwuUOIuFr0Lfqq25obiP5LVVXZlxoNUuaLzxuzTMieXQ7Vs1w cUyTT/pi39SXoYQDYJ9EjlF17E7Xgm4XbFD6BLn21ybodspce0+0zD9+telh+Y31b+u9 FCkAY/DcYsGsLFkeCboZ4WHWTWKm8OgKJV/gWJYYS2H9OUHGcL3B60NhAU5gzenqb7nK ysMRRD21EZAAPIVgfYF3VSXXLoew5c+Se7pqeSuom/DSKzBB7ft9x48J/oMatuDLnil0 iAWISf+6MPqjJB7SrG/H1+4koyNG5WVmdRLHuvkb1tZC7nuqI6bwI/AhBGuZfL9Xg8f/ +cYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784702208; x=1785307008; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=f8f3pTQWb1DUH/SMD1hqL4uhPClug+lZg6FGrEkFBbg=; b=Ukzom15D1cShjxKJwSMENNbko4EKGWx9fMKmWyLobmD3x3JMvAmB7WQujxtJPMN2wH DXf6AscQGPNojjSSCU3osRM07V6ZgSsGuhPDYP6hwowjWnWzdnnSuwlDp4NND6lj6cj7 7ZP8urR+UZsW36FOUztIaMCnEjnuK0S6HU6rCNVRU2sa5w0V1TElD3LNVxsrQRZwOsiC U3PH7LBWk+oRwXLyiP/1I6ei35VCmA6xaGZmU7ahvkPs5OHD4wzejfQlzUGC4Dnf9PAX Ux380rZQt/J0j2/+ASwhVK3uchJjmdr2ZCc3kmKCqzCmW/fZO/bmGwUeABJv+Mm/5eVG QX9g== X-Forwarded-Encrypted: i=1; AHgh+RoA9/vrYHAeDhxdaBjKpZTTiCeazMmez3AyR5UYYuG0ICD5iZhmg5xO9FsA7lXJAEiLcKLjv4yzRHdYrrI=@vger.kernel.org X-Gm-Message-State: AOJu0Yw1kGnJs83qMi36Ie3L72xxstWQCnPo0/ggnZbokdibm7y4+6eU WVnhNvKGOJFX4LA+mjExpjxo7bKAYQ4HDy00Lq2G+3ZscK6AbopgSC94UDePAli/3MhzeMiiRNI veUTlmKw0rolapnxolpxEXZ+ueo5U8EadjAc6arhGM1kSzrn/cJoR+sjjVQ13y15kjQs= X-Gm-Gg: AR+sD12l+wtbKeVi4GoybER+MzA8VnnBGJOfuTFKeqdCMDM+PoP2Xp3VXqrD7H/jmLX +t0BZZ3XIWWnLbhOhZOvdsu0uQO/8MqxBiBbSOlSUTsajlp9nAYU75rXyRGMSpHt9aa0klViaz9 yfGQK0SxnwUd9/gxvxYlVo+3h1cvK+/sUwrRWfj64wqeL738nFuBdNClhhjL/mUbOkmJ15kqTkp ju/rPsijMnGSz03T+CKt4OGw0tTgt7lZRuM9wL4f9/5TE6+njeZWBhvDIVOoyyUAq1gsUOJ9HWz T7t+17SzL4wV/bqyCT3sB0jkQlpwA8CmqJh9DtPpj3sPhtEOne/uDIafjjuFNIuCJmJN8edvsqH dwJ02JtgsERttYEO+Ea/bwETNEeanLUdZnxRazAr1SmaTPZUqZ9cJPrHiBhlBbtEB95ht2WGmix BjYhC2Lj5SqbWzUA== X-Received: by 2002:ac8:58cd:0:b0:51c:1117:c7c with SMTP id d75a77b69052e-5213c2015femr202516331cf.25.1784702208000; Tue, 21 Jul 2026 23:36:48 -0700 (PDT) X-Received: by 2002:ac8:58cd:0:b0:51c:1117:c7c with SMTP id d75a77b69052e-5213c2015femr202516161cf.25.1784702207520; Tue, 21 Jul 2026 23:36:47 -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 2adb3069b0e04-5b2a9b8c6f6sm309696e87.4.2026.07.21.23.36.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 23:36:45 -0700 (PDT) From: Dmitry Baryshkov Date: Wed, 22 Jul 2026 09:36:21 +0300 Subject: [PATCH 06/24] drm/msm/hdmi: capture the HDMI registers in the display snapshot 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: <20260722-drm-msm-display-interface-v1-6-368c10fe62fd@oss.qualcomm.com> References: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> In-Reply-To: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2412; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=wHwe7eJuJTYqmz/TsunqqWhXimzjZh7z7oauF1VXkeg=; b=owGbwMvMwMXYbdNlx6SpcZXxtFoSQ1ZCyvOUHD6riAeqFdIfzqzVm8yjksD7+YKAgwt37+Wtb z2Wu27pZDRmYWDkYpAVU2TxKWiZGrMpOezDjqn1MINYmUCmMHBxCsBETiux/y9gvzFFd+oKnocH 133fZByUtqF8QWnR6b9PpPqib93XZ88NTBRYHFim9mB5R7IYY9PRqUtbLI92bLMWWja74NGFhq3 HvzB5aawW+ZF4zWylhNIKwSyfW9LLQhNT6qL3yk87J+dgKa4Vcr+t4rLy5Ud7duwW/LmmxG3fiX 9/JDI8/dMPvZW8/sFM+5Wk02ZP7kMnX842VFBqNXitskJ7fZ9pQ19bvk/sMt7fJf/eT2zSVue4m HY5cprcDMPkome7hf7Z6eh2f8ti3pZ3v2qy0M+PiyQFz6VOTRIzl9R9ZPjXKq/XmLNXvDU24uof EW3z0zrJC8pyX4cl6VYwW6oLeu/516RY6S8eUbkmLXshAA== X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-GUID: cwWbOhaeF7SfTE3u2ke9qyNDpYSr0fgM X-Authority-Analysis: v=2.4 cv=KLhqylFo c=1 sm=1 tr=0 ts=6a606501 cx=c_pps a=mPf7EqFMSY9/WdsSgAYMbA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=kDeXkUw5qkRwNzW-y3oA:9 a=QEXdDO2ut3YA:10 a=dawVfQjAaf238kedN5IG:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX8nRwDkWgO/WP pE4PkYCpqRf8leWiHc4RLW69NqCVNFerAyNQ8LQ9y+1ftSpSGHO3W96yphwV0JKC2tDqz7yJQA5 CIrlLdnWIq7dNbasVyccPjhVB8gr1tygJjd6h0OArKSObwHHrpiiHTV9B6UKnIeK+Rzep084RHX 3JeqyMh5uom3ADFHmZjVE8DVgwNRzaSZqONiw2rZLxKDQAvci462HrVo2hAuQQD5haylJUq9X5j GCkyIJV78tb7qOdiOKeTI0dAbvAM1Td9J0zQHLYo6i5+TJVAAmii0zdyOQBzrbgvCQZ8KEuR5mC 2ufk5OtiCMnxnTqDW/VFQ9v+WPOtOa9tiqc28jiJcHVOkc7v9TsEiSrrYpLoO+hMdgaPV5hr0RE ILPUars/anoOctgscPHNxrhVbB+PONcH6gCtg6nEj7sgB00L74QK0+B0sTzQ6sABVYTHD1X7Mpv b5b8FvrRAqLOcyQH6rw== X-Proofpoint-ORIG-GUID: cwWbOhaeF7SfTE3u2ke9qyNDpYSr0fgM X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX3z10GWkAkgDO Bh+r63fIDrfEtDeYGhxoE8qGm/+lyEvY93NQeG/EEWLy8fHRBAx33mdgxmd08dSzDySiyFyQbq7 nrwUDRjlXF+bcqBsX2sSmKMKI9X2cQ8= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-22_02,2026-07-21_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 spamscore=0 clxscore=1015 impostorscore=0 lowpriorityscore=0 priorityscore=1501 malwarescore=0 phishscore=0 adultscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607220060 The HDMI block was never included in the display snapshot, so its register state is missing when a snapshot is captured for debugging. Fill in the previously empty HDMI snapshot callback to dump the HDMI core register block. The size of the block is now obtained via msm_ioremap_size() at probe time and stored in the hdmi structure. As with DP, the registers are only accessed while the block is powered on, to avoid an unclocked access. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/hdmi/hdmi.c | 14 +++++++++++++- drivers/gpu/drm/msm/hdmi/hdmi.h | 1 + 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.c b/drivers/gpu/drm/msm/hdmi/hdm= i.c index 350867ada0cf..72ab2e92964e 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi.c +++ b/drivers/gpu/drm/msm/hdmi/hdmi.c @@ -17,6 +17,7 @@ =20 #include "msm_kms.h" #include "hdmi.h" +#include "disp/msm_disp_snapshot.h" =20 void msm_hdmi_set_mode(struct hdmi *hdmi, bool power_on) { @@ -214,6 +215,17 @@ static int msm_hdmi_modeset_init(struct msm_display *d= isplay, static void msm_hdmi_snapshot(struct msm_display *display, struct msm_disp_state *disp_state) { + struct hdmi *hdmi =3D container_of(display, struct hdmi, display); + + /* + * Accessing the HDMI registers requires the clocks to be running, + * which is only guaranteed while the block is powered on. + */ + if (!hdmi->power_on) + return; + + msm_disp_snapshot_add_block(disp_state, hdmi->mmio_size, + hdmi->mmio, "hdmi"); } =20 static const struct msm_display_funcs msm_hdmi_display_funcs =3D { @@ -310,7 +322,7 @@ static int msm_hdmi_dev_probe(struct platform_device *p= dev) hdmi->next_bridge =3D NULL; } =20 - hdmi->mmio =3D msm_ioremap(pdev, "core_physical"); + hdmi->mmio =3D msm_ioremap_size(pdev, "core_physical", &hdmi->mmio_size); if (IS_ERR(hdmi->mmio)) { ret =3D PTR_ERR(hdmi->mmio); goto err_put_bridge; diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.h b/drivers/gpu/drm/msm/hdmi/hdm= i.h index f24444610fe1..869f55d4704a 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi.h +++ b/drivers/gpu/drm/msm/hdmi/hdmi.h @@ -48,6 +48,7 @@ struct hdmi { unsigned long pixclock; =20 void __iomem *mmio; + phys_addr_t mmio_size; void __iomem *qfprom_mmio; phys_addr_t mmio_phy_addr; =20 --=20 2.47.3 From nobody Fri Jul 24 23:30:38 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 108193AEB5C for ; Wed, 22 Jul 2026 06:36:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702214; cv=none; b=omAlf2WnGZg8x+4bxYSd6k9Wsd3AmdaahzaZEP4ma3s6VB2FxTcnekK0CT7pTlLe796kITYZU/h0IpDqAo+FhU8bTWds4L7vwbICfdZrF26GtLVYw83o+ezUflMMsrug3ytI7EVngcqMA8PsNlJ4g1RceR/ve8SmIayp46sC1pQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702214; c=relaxed/simple; bh=+OUGc5FgVaREgTIXpTKbHBCCj4cUh+urB6VbsBn5Osk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=W8BTF/fIzmQSFLEzAuA1ebFuOFFEfg1nn/MkygVkpXF+n7uNJyJnrLOgFMo8arxiPgQXRtZ+bEy1dgnhdgRtQotsxF3lrYeaba5AghWur9ymoKFoIHwcA3lV/SsoX3J+57qGaJHvuX2jHZjMMauu2SVMdytxiNZx66Y/P1bzXR8= 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=RcW4rOuK; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=AgX58w0R; arc=none smtp.client-ip=205.220.168.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="RcW4rOuK"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="AgX58w0R" Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66M53flB4027272 for ; Wed, 22 Jul 2026 06:36:52 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= YWr9wwuoYNg3NTbM6h8++bi9NeLoqHztxgk7/YWPoxM=; b=RcW4rOuK2fwD+LzM N13XfMOdyCqjokMjHcDrkyMb389lIWNH2UbJGpmcluaqtE+HStWcpY8ihhFdyt4z 1+gFGH/DIVNE6Y1OnmoeEYWJc1IGNZO9eYkf1dmff6FMgrxr+J2rLOGSKADH1XwP tLh2O7wTNMPOMmM4HGL+EEJC3SajW+AH2SpKlen1EelVecK0FHf1LNKoXgs3bVJw jGk0pT7VivPGPurJ06WwlKBhNdmLvuLniaen2vBrCRdYNQnr3FpVpfQPoZtL5Ebg +obvv3lk7Mg2ZbAbpyOgCK03KfcssuUK4UjdU2FAarjfgo90gFCbHnASzz/hH0cj AX/H/Q== Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fj9bsbvj5-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 22 Jul 2026 06:36:52 +0000 (GMT) Received: by mail-qt1-f197.google.com with SMTP id d75a77b69052e-522de3c645dso104714631cf.3 for ; Tue, 21 Jul 2026 23:36:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784702211; x=1785307011; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=YWr9wwuoYNg3NTbM6h8++bi9NeLoqHztxgk7/YWPoxM=; b=AgX58w0RdvPSwzqcauZ+ddFXgRp5NOb5d3DrgIv2chNun3rkVaIMt1UM+SkbXyJRHP Zb2e3r5nunnDeYaiVh/ZeJAVq/+tsslgXAt+xkMRjNDlUnxUCmUzjZOpZV7l4o35AgxH 9lt6IdDW49OLWEEQpEy+d0ORG8IVJQhM7vSx41g6JG/ahtYOL57ejTVtz9XZ+XA94OyJ 1SGqalPXJ6r7WllRFk6ykn46wek6aF2sFo6wSrepDI/ht5xeFB+Kf7pu+1QoUxAGS8QN rxUN/NIc0gBND1SY8mq23Z0J166WJOoRaVRNbMPwrkfvJyx/7sId3uzcG2bu2cxuA4Np V/6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784702211; x=1785307011; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=YWr9wwuoYNg3NTbM6h8++bi9NeLoqHztxgk7/YWPoxM=; b=Y5qn29w3Y+ltdausqS30uwkdw/PiEXlaH0OdDxJ3NAwd6gKgZvvPfZ1hS2ur3V1pGU otBH0mDMlA7638NlcatD4ZOjYsIGqXdIpQTy+46lbt7FCkSZlKntWUcYsTrVbjJJ54lC 23gI7j1ISHo/QB5PYc0XuO9Me4YNIr0ldqCG3k87XK0C9iMLMGaaWi8W2wodYKy1mtEE K+UpQdtkj6BJvT4Li3JFkraD94HybpasnUtckMThsvr32djzPEpvQICdiJt8C+EVS6t8 G5fZn6JxhKs7rUvNHY4LDYc+MFl4/Ufco77ABtf2cERvCv7kyffVddBHmZmykVeB5ApZ UBdQ== X-Forwarded-Encrypted: i=1; AHgh+RpB/qFxB8UJDSuLCl6Pi6lQDGs62fjDc1zwxF+RgI9svfJsuXUqNRTs1usbcsMpP2/7Mb1qergpyCz2eAk=@vger.kernel.org X-Gm-Message-State: AOJu0YxySYS21P0B2BUB9wNpttokBR/nAivWjYL8azZeF9ppDQoNSMo8 9YgHuyGNbfPDljS0OQqfdU0FK/yNvFHnQbpVTVNfYaiF5RkfOWOUk0XZIpK2CXVfRlPRlb5AH8H yCm2IMkT1Ippc6SbgzawuWLdXg/BjRW87zTaJQ9+YpYs88FcLEza+3ayjRvnrUORzFVs= X-Gm-Gg: AR+sD10QTXYXRFfSYZNDQEbh2Jbb14ar5vjLrU6vkgtHsOtUqswg/c0UkeFePo/5yqj jvRnjJs8l8pgUUcVcpdnNhufaXkjfnSn3Qe65XHNdEc9EIEf2PYLKSiLnElo/4Y//86Oa+rp8mv pAtXN62tqRd/t3pekJg/pGxgsK38vyCoO68WfA7FLwq8rMqY32X5ta0ypF5dZpQq/M+pwLYesFA VHdu22he4s5rI4AoqR34RJo/7F0rNhrEVaOpqqAABXk4kw7EQvUdY580PdbGbTE5hCrPHSxVMVp JkFvMPCSvaYMO7PIiRHtHTokq4Fg8TNklYb8cWFLUTbmT1FSJPOmsAv1AqUc5cTnc0FgzfR5uBX smHP1TVk3ltCwOHv48+DEBqgs7nCZj7NWdlF3rY/cexEoCyioLQ/nkTVDGGOumMtgBBbCdlFXgY WZL6UXI51jeZzifw== X-Received: by 2002:a05:622a:118c:b0:51c:8571:1ccc with SMTP id d75a77b69052e-5213c7e67acmr203287331cf.41.1784702211175; Tue, 21 Jul 2026 23:36:51 -0700 (PDT) X-Received: by 2002:a05:622a:118c:b0:51c:8571:1ccc with SMTP id d75a77b69052e-5213c7e67acmr203287141cf.41.1784702210731; Tue, 21 Jul 2026 23:36:50 -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 2adb3069b0e04-5b2a9b8c6f6sm309696e87.4.2026.07.21.23.36.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 23:36:48 -0700 (PDT) From: Dmitry Baryshkov Date: Wed, 22 Jul 2026 09:36:22 +0300 Subject: [PATCH 07/24] drm/msm: add the wide_bus_enabled callback to msm_display 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: <20260722-drm-msm-display-interface-v1-7-368c10fe62fd@oss.qualcomm.com> References: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> In-Reply-To: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=8943; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=+OUGc5FgVaREgTIXpTKbHBCCj4cUh+urB6VbsBn5Osk=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqYGTnQ1UXylmG+15DdhP4e9ml2vmSj7jklAamp ggsil/0I/WJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCamBk5wAKCRCLPIo+Aiko 1V6qB/9WyRNAfBFo35hPzLIXNxJaPSTXCFo5MdVTLj/MZzFIixos99vQgv1VDVt5nayNyjSHzdG F7bzWkzNqVLs6fo3ewHfJFx0d8rRoNMhw9LmG5Ruwy3EDVlsm2dfCMeQIjZq9S9RSiAM3/xUAxd y4jkLJG7TbL/G+dbyt0md1kbg9ZuszRYd73LAfteM1dvtSbZXhx69xIF/maWWvCHutu0zr6XgHo fWyrVTNnX6PQBkPHuP64K1Pyb/m2DfloFhS+/5FySCEDHFEL6Yirn/s25exAaHqN1vsBnRVMmiG j++SL3Q6Fc8xHwECqLYW3vQkzZuFltepPqE3SR6p9kTKplBH X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-ORIG-GUID: 1jwu1s9c1a-FqO_pLgNmbv8j2E12ItJy X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX/UfejjPTHjQe SPAqIO7d8g67g9ym6wxWAMSd54PtsXdxZTQFrnjDXx3UN/VdC0JMS+9gPVRu2p0Yk2I152KDUG2 bhYfsQu+INIVyabDNcGVqIcHi8LnK0rz2wCFXRObqDzYMlBeSuGg7Lo8jL2RbceqPrQBOp09V4o LtSVWwtZBMb7eGx4DDEi3+XSoO5qXbYaOP5rNxupmp2yjU23jtERL78hQeHmqvkHzOkzdMFomAz xwj2xaIAuBdsLyUzutAmC2vaEUvds5hMt+KDpTkmjuElxTjuQ7pFYJM8s3fIRzgKAhk7oT7XBvG L1mZT6BnAlyvUCMVCqop6+j/TF4NRvU1Q2fdK9DwmMhCoK6q1cD1zw6S8n03GMm/Qfq2ZY0N0HQ iNxwRO6WsBCH5+JoRfAxnD1qKfP4sh9iPYwHREQtuQvq9/Vyvz5DYlpu5C4bAyc8mtUSuaLH2Xk fg0MuZSbd1v+4JechNg== X-Proofpoint-GUID: 1jwu1s9c1a-FqO_pLgNmbv8j2E12ItJy X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX8vG06jMc1Oq3 3Dc3TmDnLEaJQl6C1v1IYbxSNm7M/yAdqVCmD3aJA2Ni+GKVqO+wf/Co6GaxUvZjp8UoZ8oPMPZ 9RGJOqRuW/sbXeEfH0xsWcIFcRraVBY= X-Authority-Analysis: v=2.4 cv=QK1YgALL c=1 sm=1 tr=0 ts=6a606504 cx=c_pps a=EVbN6Ke/fEF3bsl7X48z0g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8 a=EXGRFEm-sg837V2a6F4A:9 a=QEXdDO2ut3YA:10 a=a_PwQJl-kcHnX1M80qC6:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-22_02,2026-07-21_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 spamscore=0 phishscore=0 impostorscore=0 bulkscore=0 suspectscore=0 clxscore=1015 adultscore=0 lowpriorityscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607220060 dpu_encoder_is_widebus_enabled() switches on the interface type to call either msm_dsi_wide_bus_enabled() or msm_dp_wide_bus_available(), two differently named sub-block functions. Replace them with a single mandatory wide_bus_enabled() callback on struct msm_display_funcs. DSI and DP implement it (DP keeps its internal msm_dp_wide_bus_available() helper, now declared privately in dp_display.h); HDMI, which never drives a wide bus, returns false. Add a dpu_encoder_get_display() helper that maps a struct msm_display_info to its struct msm_display, so the DPU encoder can look up the sub-block and call the callback without open-coding the interface-type switch. It is reused by the following callback conversions. No functional change intended. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 42 +++++++++++++++++++++----= ---- drivers/gpu/drm/msm/dp/dp_display.c | 8 ++++++ drivers/gpu/drm/msm/dp/dp_display.h | 1 + drivers/gpu/drm/msm/dsi/dsi.c | 5 +++- drivers/gpu/drm/msm/hdmi/hdmi.c | 6 +++++ drivers/gpu/drm/msm/msm_drv.h | 14 +++------- 6 files changed, 53 insertions(+), 23 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/= msm/disp/dpu1/dpu_encoder.c index 1f20695f81e3..ce358c1c9757 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c @@ -268,25 +268,45 @@ bool dpu_encoder_needs_periph_flush(struct dpu_encode= r_phys *phys_enc) msm_dp_needs_periph_flush(priv->kms->dp[disp_info->h_tile_instance= [0]], mode); } =20 +/** + * dpu_encoder_get_display - find the display sub-block driving an interfa= ce + * @dev: the DRM device + * @disp_info: the interface description + * + * Return: the &struct msm_display (DSI/DP/HDMI) driving the interface, or= NULL + * for interfaces (e.g. writeback) that have no such sub-block. + */ +static struct msm_display *dpu_encoder_get_display(struct drm_device *dev, + const struct msm_display_info *disp_info) +{ + struct msm_drm_private *priv =3D dev->dev_private; + int index =3D disp_info->h_tile_instance[0]; + + switch (disp_info->intf_type) { + case INTF_DP: + return msm_dp_get_display(priv->kms->dp[index]); + case INTF_DSI: + return msm_dsi_get_display(priv->kms->dsi[index]); + case INTF_HDMI: + return msm_hdmi_get_display(priv->kms->hdmi); + default: + return NULL; + } +} + /** * dpu_encoder_is_widebus_enabled - return bool value if widebus is enabled * @drm_enc: Pointer to previously created drm encoder structure */ bool dpu_encoder_is_widebus_enabled(const struct drm_encoder *drm_enc) { - const struct dpu_encoder_virt *dpu_enc; - struct msm_drm_private *priv =3D drm_enc->dev->dev_private; - const struct msm_display_info *disp_info; - int index; + const struct dpu_encoder_virt *dpu_enc =3D to_dpu_encoder_virt(drm_enc); + struct msm_display *display; =20 - dpu_enc =3D to_dpu_encoder_virt(drm_enc); - disp_info =3D &dpu_enc->disp_info; - index =3D disp_info->h_tile_instance[0]; + display =3D dpu_encoder_get_display(drm_enc->dev, &dpu_enc->disp_info); =20 - if (disp_info->intf_type =3D=3D INTF_DP) - return msm_dp_wide_bus_available(priv->kms->dp[index]); - else if (disp_info->intf_type =3D=3D INTF_DSI) - return msm_dsi_wide_bus_enabled(priv->kms->dsi[index]); + if (display) + return display->funcs->wide_bus_enabled(display); =20 return false; } diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index f4fa86d1b9c7..04d291a93d20 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -1354,9 +1354,17 @@ static int msm_dp_modeset_init(struct msm_display *d= isplay, return 0; } =20 +static bool msm_dp_display_wide_bus_enabled(struct msm_display *display) +{ + struct msm_dp *dp =3D container_of(display, struct msm_dp, display); + + return msm_dp_wide_bus_available(dp); +} + static const struct msm_display_funcs msm_dp_display_funcs =3D { .modeset_init =3D msm_dp_modeset_init, .snapshot =3D msm_dp_snapshot, + .wide_bus_enabled =3D msm_dp_display_wide_bus_enabled, }; =20 struct msm_display *msm_dp_get_display(struct msm_dp *msm_dp_display) diff --git a/drivers/gpu/drm/msm/dp/dp_display.h b/drivers/gpu/drm/msm/dp/d= p_display.h index 20a71afb1f90..8c34a473c7db 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.h +++ b/drivers/gpu/drm/msm/dp/dp_display.h @@ -34,6 +34,7 @@ int msm_dp_display_get_test_bpp(struct msm_dp *msm_dp_dis= play); void msm_dp_display_signal_audio_start(struct msm_dp *msm_dp_display); void msm_dp_display_signal_audio_complete(struct msm_dp *msm_dp_display); void msm_dp_display_set_psr(struct msm_dp *dp, bool enter); +bool msm_dp_wide_bus_available(const struct msm_dp *dp_display); void msm_dp_display_debugfs_init(struct msm_dp *msm_dp_display, struct den= try *dentry, bool is_edp); =20 #endif /* _DP_DISPLAY_H_ */ diff --git a/drivers/gpu/drm/msm/dsi/dsi.c b/drivers/gpu/drm/msm/dsi/dsi.c index c86142f66237..ce3b261123ea 100644 --- a/drivers/gpu/drm/msm/dsi/dsi.c +++ b/drivers/gpu/drm/msm/dsi/dsi.c @@ -17,8 +17,10 @@ struct drm_dsc_config *msm_dsi_get_dsc_config(struct msm= _dsi *msm_dsi) return msm_dsi_host_get_dsc_config(msm_dsi->host); } =20 -bool msm_dsi_wide_bus_enabled(struct msm_dsi *msm_dsi) +static bool msm_dsi_wide_bus_enabled(struct msm_display *display) { + struct msm_dsi *msm_dsi =3D container_of(display, struct msm_dsi, display= ); + return msm_dsi_host_is_wide_bus_enabled(msm_dsi->host); } =20 @@ -279,6 +281,7 @@ static void msm_dsi_snapshot(struct msm_display *displa= y, static const struct msm_display_funcs msm_dsi_display_funcs =3D { .modeset_init =3D msm_dsi_modeset_init, .snapshot =3D msm_dsi_snapshot, + .wide_bus_enabled =3D msm_dsi_wide_bus_enabled, }; =20 struct msm_display *msm_dsi_get_display(struct msm_dsi *msm_dsi) diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.c b/drivers/gpu/drm/msm/hdmi/hdm= i.c index 72ab2e92964e..5f24f778c7ef 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi.c +++ b/drivers/gpu/drm/msm/hdmi/hdmi.c @@ -228,9 +228,15 @@ static void msm_hdmi_snapshot(struct msm_display *disp= lay, hdmi->mmio, "hdmi"); } =20 +static bool msm_hdmi_wide_bus_enabled(struct msm_display *display) +{ + return false; +} + static const struct msm_display_funcs msm_hdmi_display_funcs =3D { .modeset_init =3D msm_hdmi_modeset_init, .snapshot =3D msm_hdmi_snapshot, + .wide_bus_enabled =3D msm_hdmi_wide_bus_enabled, }; =20 struct msm_display *msm_hdmi_get_display(struct hdmi *hdmi) diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h index d25d783b4f11..519571170207 100644 --- a/drivers/gpu/drm/msm/msm_drv.h +++ b/drivers/gpu/drm/msm/msm_drv.h @@ -283,12 +283,15 @@ struct msm_disp_state; * to @encoder. * @snapshot: capture the sub-block's state for a display snapshot; * mandatory. + * @wide_bus_enabled: whether the sub-block drives a wide (2 pixel/clock) = bus; + * mandatory. */ struct msm_display_funcs { int (*modeset_init)(struct msm_display *display, struct drm_device *dev, struct drm_encoder *encoder); void (*snapshot)(struct msm_display *display, struct msm_disp_state *disp_state); + bool (*wide_bus_enabled)(struct msm_display *display); }; =20 /** @@ -327,7 +330,6 @@ struct msm_display *msm_dsi_get_display(struct msm_dsi = *msm_dsi); bool msm_dsi_is_cmd_mode(struct msm_dsi *msm_dsi); bool msm_dsi_is_bonded_dsi(struct msm_dsi *msm_dsi); bool msm_dsi_is_master_dsi(struct msm_dsi *msm_dsi); -bool msm_dsi_wide_bus_enabled(struct msm_dsi *msm_dsi); struct drm_dsc_config *msm_dsi_get_dsc_config(struct msm_dsi *msm_dsi); const char *msm_dsi_get_te_source(struct msm_dsi *msm_dsi); #else @@ -353,10 +355,6 @@ static inline bool msm_dsi_is_master_dsi(struct msm_ds= i *msm_dsi) { return false; } -static inline bool msm_dsi_wide_bus_enabled(struct msm_dsi *msm_dsi) -{ - return false; -} =20 static inline struct drm_dsc_config *msm_dsi_get_dsc_config(struct msm_dsi= *msm_dsi) { @@ -376,7 +374,6 @@ void __exit msm_dp_unregister(void); struct msm_display *msm_dp_get_display(struct msm_dp *dp_display); bool msm_dp_needs_periph_flush(const struct msm_dp *dp_display, const struct drm_display_mode *mode); -bool msm_dp_wide_bus_available(const struct msm_dp *dp_display); =20 #else static inline int __init msm_dp_register(void) @@ -397,11 +394,6 @@ static inline bool msm_dp_needs_periph_flush(const str= uct msm_dp *dp_display, return false; } =20 -static inline bool msm_dp_wide_bus_available(const struct msm_dp *dp_displ= ay) -{ - return false; -} - #endif =20 #ifdef CONFIG_DRM_MSM_MDP4 --=20 2.47.3 From nobody Fri Jul 24 23:30:38 2026 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 599873B2FCC for ; Wed, 22 Jul 2026 06:36:57 +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=1784702219; cv=none; b=BYJG1fDIfAhz4IMl7YjvxTFpJIinbxQaRn8VgGTlXiEEuHtxSH7xk3ZW2SCvQeTy03JIZzj0W+C7oX7HeDwwQlcUhFni4M6/ojs81YuSZHTmJKSGwsrLz1iKXguqqvw6o3xyhBuXlMUOExn00qhsTb3007OcoF3S4Bu7LITxJ5A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702219; c=relaxed/simple; bh=2uXfUn5g7kRlwm21Pr9tBhdKWBQ199h8b1vj9ghErGk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WDT4k+HMeEqokndXaP/AW+b+a2FeC//dlYYW5/5IHIL+4exvc49v56Ax7scG9wlqyANsckbToQiP0o3+4ci4/IpDVNEyZNkqkvgV3lch/47vm/v63UnxWFKm28IQkH3og0gmD8hzR/gKEoAxB7w3VdnmJUoOiBorWfi2mnJUVuQ= 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=oePr3/Vt; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Ulq0dA7a; 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="oePr3/Vt"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Ulq0dA7a" Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66M53fFT4054962 for ; Wed, 22 Jul 2026 06:36:56 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= fnFqMPIwhl9ESQYxC7SAYAMToEfuxgRlxIUeZ483144=; b=oePr3/VtTbd/9p3c uQdXguzxISS9GGDiyM9ynFZJ/XjmVFomJ/lYsF256yZItM7PHTybpqPuxeg3RcYA uJdbMdEPaiBDKaCh+CWqMmYF3cqegN8jbvt0IaUosYcFVpFpd81klhg3pc2OjCQw dVXnyNKgR45lco22HhNjLA2tVtTMTZciIhPHWNDhxbM7nysyfv9hCKeKrdQ+So46 2n2BuMFeUDzWKNA6MfKlg/DGwzbPZa1yP1Bde11UpExgs1UdFlTdC4KM94t80mDn wS+bI/+nH+gIspHnsoSbNVlfWqCHR0uPp3nB9rP1lWwMjYHPMCD1RHPeDlCtg0/c WcNKwQ== Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fjpxdgd9a-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 22 Jul 2026 06:36:55 +0000 (GMT) Received: by mail-qt1-f197.google.com with SMTP id d75a77b69052e-51c075c1e25so173460011cf.3 for ; Tue, 21 Jul 2026 23:36:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784702215; x=1785307015; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=fnFqMPIwhl9ESQYxC7SAYAMToEfuxgRlxIUeZ483144=; b=Ulq0dA7afT55dtf2IyLrManrCpL0zylPfJeQKu2ScHv1EAb66AlQGgG8EQtSRyGo8P f+0soEQmFlBR9PuAtqs35yFDdZKedhBEyMM7o2lR1ErNfJHCt05MY+BpGXwkHYUY9GtP gAwYVTBGhTUP6uAp4lHAoE97t94mhaTI+u+UxtQlRifxSoN0Drh9jAZvYko1PZVsHcQt itvGj5y67zHU+MtDikXyUYreK/w0oLYB1CTiB1HA9rjJA16p6GQmUJox6aBuMB+omMDZ 146HuHei55VXIF/a414tet7R8mlSsW/mN/mOvSGuqb1AfDfNVhcrxFG2qtMNNUr/ZFe9 ImOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784702215; x=1785307015; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=fnFqMPIwhl9ESQYxC7SAYAMToEfuxgRlxIUeZ483144=; b=lX8N6Hmv/m2UWHw/MoDmczhdIXbt5bPf9E3CPw+gTm/36sPPlQpFhP0UK4mMUnys6v O3o9tDi5eZ1xpNWoYJ3yi/ccAYnsYeYbzyqldvywqS774cLwCpBn0d1X70xUj4PbGO81 xyVz+OrEddDV+pB1/m+C/skJSh5/knK1Pk2D1K57geypTXz6DUsjWW5PLpB1zf0lm9/i DLdEEopjRHaWLErYwj8GE5JrVzd0I2OC5s62j+O45NS+i7JiZFy686/MQEtNuOgzXgTp oXBCrr4LI/MnoWvyP+sFsujLfHtTcIQcXSAB34dt6gO9M6IIUWmBmCS7y5TblUV+HuJn 6DKQ== X-Forwarded-Encrypted: i=1; AHgh+RpMvdlHRegPa0S/eo5IZfemsVIwOsJ/O3wzysQTJYG153+Td3HSEX2/M9kZd+MwGc4TvJXOcffbwdcBg/4=@vger.kernel.org X-Gm-Message-State: AOJu0YyntJpVvzyoIW66i04OjT3wZ8PG5d/Ak+Rx6bvPnVZST7pE9Deo 7YrsBPj5HRbRdXXoWGazjtaJhyuWNBGgenAaH6PaL5kWzTHUeRfugO3GGJArXGYxpc6o6jcPX4I MBhsV+gcD7gcS6WSb1UpHeOUBmxvLk85ZPTXO+4nD14TNn+cT2DdxGn11rPjISpg5Thg= X-Gm-Gg: AR+sD12YuRbHgzyl0glY67vIJbNdhM+Jq0HDWB7JGLP12pHHr5WPQIhavAvevgFAHCc DEh3kY7Tk+VuOaWL4horarFcW6VRMTWXDpGEZP2Qjt0xz9NWODdCvxONYm2QwTqATHONkW255Fs y3uGB5e4gwYzO0PcE9uhAA/ncpqEaIz/F80JuT+4IqaBXs+UISgu2x/RhratpX037eZ51x/tNNK YCCJTbL27BY4v3TBVeEiUxXF40NrESUc0H83XjwDnkTsHOpjWxAYavGJuvl3xl6rPgthdCk4aGj +l/45uWC1EuiKiiIp2HK9JRLMzPVkT7A/G5dLatzGSfM8xPmaFbjvUDxEXmPd+Iubok5QdYnTHd tqd02Lr2VxEKPeffKjsuCQn47GlNbUr4BLyHFbdO7cxt8OhDyeOq+0+2i53kl17qDJJtqHxE5Er 9DsSKRphtzUCgv4w== X-Received: by 2002:a05:622a:2517:b0:516:dff5:68c4 with SMTP id d75a77b69052e-5213c008207mr199181511cf.7.1784702215139; Tue, 21 Jul 2026 23:36:55 -0700 (PDT) X-Received: by 2002:a05:622a:2517:b0:516:dff5:68c4 with SMTP id d75a77b69052e-5213c008207mr199181121cf.7.1784702214660; Tue, 21 Jul 2026 23:36:54 -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 2adb3069b0e04-5b2a9b8c6f6sm309696e87.4.2026.07.21.23.36.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 23:36:52 -0700 (PDT) From: Dmitry Baryshkov Date: Wed, 22 Jul 2026 09:36:23 +0300 Subject: [PATCH 08/24] drm/msm: add the needs_periph_flush callback to msm_display 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: <20260722-drm-msm-display-interface-v1-8-368c10fe62fd@oss.qualcomm.com> References: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> In-Reply-To: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=7968; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=2uXfUn5g7kRlwm21Pr9tBhdKWBQ199h8b1vj9ghErGk=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqYGTnXge1bBgGka1roOOJfkQGuKiQpSpfSTOp6 wPoENWyq2uJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCamBk5wAKCRCLPIo+Aiko 1VwXB/90SZS2MJUkkk5cwpAYTgeoMq1uX2oGAQaTPQb6gpLSr6ud/GRotHgpeQPptSUkHivuVzy o/MTk2OpQJRy6jRwOLsNVNAqCafwhji9IM5A2rlEk5Vs6na3ESNVcpriGifUiZdlLlD1ZNfkJi7 vHptat35d/gIyNsrDYNnL7sOgt6wYyrh1TjNFvZwc0t8+Uq6GSuk0qK72WcM/k8BMDB5mIBifgb JZJJ/wZsVUWIjGab3iNiM+gWHxbhwpc1vIk9H/RmVTObw92EPt6cTYto6BhcUUQavbEaxDHcLFX JPvgM/atAwFNbZ0QfobExXiPhsEQMlFn99JB6TN0FZ32WDp2 X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX6G6IWiXdhE7h jZM9GJjh/GTqxex76RxrKoYdDCoF9i5pb4L4C7QU/fyEjzCoqM2cYDE8KF4a4oMNak2Sd6Es1S8 g5eQmJvznuhtw6v5LsUA4f81ayZ2xwBUkj7cMfwWAKK8uXyoaGxcgoDM8FgNyMn9PcZfBRIBW4z h500YuEUZzc5wWK5V39xWtVzsg1YcI3rWKX8JmjbB6FUb5kSJIEpCN/0FZlxG2I2brbg1D5N13N oInBx3o1fKnmW3IXwpHU4RD4JIMYrHAkqkiuVS599pSTOOkE8IhJgbW2yvpgrTfnnPgsvL/7XR9 GAFvKrh/6selSaJy9EWi8ZA3epSK93xZqgwhyuwkD6Etfsj4xadYXvNm/yV6Rp2TsRi+JRpTKmj hPeK6c/remyIkSzdShy9lx3JuG8KjUzGvDnEa6je4zOBK9rB8OR0WTZD75cOpeohgguEEsCc/lc gxRAksCQ3NGnnp7wAqw== X-Proofpoint-GUID: 5OmeNuKyDLbfzW9C0bKvVjCsw5TmhqHO X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX2QU3b9yeCw1p YyJfmIoQ8gGJJ1HL2OisYy65qC8609xprX4XdXnA/SusWnlR0u4VgMG5pYJs0yRog6uYLGmUyjn njBpQ5e6jScCdYFH7SHCFNbFuS4gKMM= X-Authority-Analysis: v=2.4 cv=b7iCJNGx c=1 sm=1 tr=0 ts=6a606507 cx=c_pps a=EVbN6Ke/fEF3bsl7X48z0g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=EUspDBNiAAAA:8 a=3NYe07cDTqo7tWFtHwUA:9 a=QEXdDO2ut3YA:10 a=a_PwQJl-kcHnX1M80qC6:22 X-Proofpoint-ORIG-GUID: 5OmeNuKyDLbfzW9C0bKvVjCsw5TmhqHO X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-22_02,2026-07-21_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 priorityscore=1501 suspectscore=0 spamscore=0 lowpriorityscore=0 bulkscore=0 adultscore=0 impostorscore=0 clxscore=1015 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607220060 dpu_encoder_needs_periph_flush() switches on the interface type to call msm_dp_needs_periph_flush() on the DP sub-block directly, hardcoding that only DP interfaces ever need a peripheral flush. Add a mandatory needs_periph_flush() callback to struct msm_display_funcs. DP implements it (keeping its internal msm_dp_needs_periph_flush() helper, now declared privately); DSI and HDMI, which never need a peripheral flush, return false. The DPU encoder now looks up the sub-block and calls the one callback. No functional change intended. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 49 +++++++++++++++----------= ---- drivers/gpu/drm/msm/dp/dp_display.c | 13 ++++++-- drivers/gpu/drm/msm/dsi/dsi.c | 7 +++++ drivers/gpu/drm/msm/hdmi/hdmi.c | 7 +++++ drivers/gpu/drm/msm/msm_drv.h | 11 ++----- 5 files changed, 54 insertions(+), 33 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/= msm/disp/dpu1/dpu_encoder.c index ce358c1c9757..09bf959b2ca7 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c @@ -245,29 +245,6 @@ u32 dpu_encoder_get_drm_fmt(struct dpu_encoder_phys *p= hys_enc) return DRM_FORMAT_RGB888; } =20 -/** - * dpu_encoder_needs_periph_flush - return true if physical encoder requir= es - * peripheral flush - * @phys_enc: Pointer to physical encoder structure - */ -bool dpu_encoder_needs_periph_flush(struct dpu_encoder_phys *phys_enc) -{ - struct drm_encoder *drm_enc; - struct dpu_encoder_virt *dpu_enc; - struct msm_display_info *disp_info; - struct msm_drm_private *priv; - struct drm_display_mode *mode; - - drm_enc =3D phys_enc->parent; - dpu_enc =3D to_dpu_encoder_virt(drm_enc); - disp_info =3D &dpu_enc->disp_info; - priv =3D drm_enc->dev->dev_private; - mode =3D &phys_enc->cached_mode; - - return phys_enc->hw_intf->cap->type =3D=3D INTF_DP && - msm_dp_needs_periph_flush(priv->kms->dp[disp_info->h_tile_instance= [0]], mode); -} - /** * dpu_encoder_get_display - find the display sub-block driving an interfa= ce * @dev: the DRM device @@ -294,6 +271,32 @@ static struct msm_display *dpu_encoder_get_display(str= uct drm_device *dev, } } =20 +/** + * dpu_encoder_needs_periph_flush - return true if physical encoder requir= es + * peripheral flush + * @phys_enc: Pointer to physical encoder structure + */ +bool dpu_encoder_needs_periph_flush(struct dpu_encoder_phys *phys_enc) +{ + struct drm_encoder *drm_enc; + struct dpu_encoder_virt *dpu_enc; + struct msm_display_info *disp_info; + struct drm_display_mode *mode; + struct msm_display *display; + + drm_enc =3D phys_enc->parent; + dpu_enc =3D to_dpu_encoder_virt(drm_enc); + disp_info =3D &dpu_enc->disp_info; + mode =3D &phys_enc->cached_mode; + + display =3D dpu_encoder_get_display(drm_enc->dev, disp_info); + + if (display) + return display->funcs->needs_periph_flush(display, mode); + + return false; +} + /** * dpu_encoder_is_widebus_enabled - return bool value if widebus is enabled * @drm_enc: Pointer to previously created drm encoder structure diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index 04d291a93d20..773dee9d0be4 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -1290,8 +1290,8 @@ void __exit msm_dp_unregister(void) platform_driver_unregister(&msm_dp_display_driver); } =20 -bool msm_dp_needs_periph_flush(const struct msm_dp *msm_dp_display, - const struct drm_display_mode *mode) +static bool msm_dp_needs_periph_flush(const struct msm_dp *msm_dp_display, + const struct drm_display_mode *mode) { return drm_mode_is_420_only(&msm_dp_display->connector->display_info, mod= e); } @@ -1361,10 +1361,19 @@ static bool msm_dp_display_wide_bus_enabled(struct = msm_display *display) return msm_dp_wide_bus_available(dp); } =20 +static bool msm_dp_display_needs_periph_flush(struct msm_display *display, + const struct drm_display_mode *mode) +{ + struct msm_dp *dp =3D container_of(display, struct msm_dp, display); + + return msm_dp_needs_periph_flush(dp, mode); +} + static const struct msm_display_funcs msm_dp_display_funcs =3D { .modeset_init =3D msm_dp_modeset_init, .snapshot =3D msm_dp_snapshot, .wide_bus_enabled =3D msm_dp_display_wide_bus_enabled, + .needs_periph_flush =3D msm_dp_display_needs_periph_flush, }; =20 struct msm_display *msm_dp_get_display(struct msm_dp *msm_dp_display) diff --git a/drivers/gpu/drm/msm/dsi/dsi.c b/drivers/gpu/drm/msm/dsi/dsi.c index ce3b261123ea..085e202bf7e6 100644 --- a/drivers/gpu/drm/msm/dsi/dsi.c +++ b/drivers/gpu/drm/msm/dsi/dsi.c @@ -24,6 +24,12 @@ static bool msm_dsi_wide_bus_enabled(struct msm_display = *display) return msm_dsi_host_is_wide_bus_enabled(msm_dsi->host); } =20 +static bool msm_dsi_needs_periph_flush(struct msm_display *display, + const struct drm_display_mode *mode) +{ + return false; +} + static int dsi_get_phy(struct msm_dsi *msm_dsi) { struct platform_device *pdev =3D msm_dsi->pdev; @@ -282,6 +288,7 @@ static const struct msm_display_funcs msm_dsi_display_f= uncs =3D { .modeset_init =3D msm_dsi_modeset_init, .snapshot =3D msm_dsi_snapshot, .wide_bus_enabled =3D msm_dsi_wide_bus_enabled, + .needs_periph_flush =3D msm_dsi_needs_periph_flush, }; =20 struct msm_display *msm_dsi_get_display(struct msm_dsi *msm_dsi) diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.c b/drivers/gpu/drm/msm/hdmi/hdm= i.c index 5f24f778c7ef..72f7403265f9 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi.c +++ b/drivers/gpu/drm/msm/hdmi/hdmi.c @@ -233,10 +233,17 @@ static bool msm_hdmi_wide_bus_enabled(struct msm_disp= lay *display) return false; } =20 +static bool msm_hdmi_needs_periph_flush(struct msm_display *display, + const struct drm_display_mode *mode) +{ + return false; +} + static const struct msm_display_funcs msm_hdmi_display_funcs =3D { .modeset_init =3D msm_hdmi_modeset_init, .snapshot =3D msm_hdmi_snapshot, .wide_bus_enabled =3D msm_hdmi_wide_bus_enabled, + .needs_periph_flush =3D msm_hdmi_needs_periph_flush, }; =20 struct msm_display *msm_hdmi_get_display(struct hdmi *hdmi) diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h index 519571170207..806d72ed393b 100644 --- a/drivers/gpu/drm/msm/msm_drv.h +++ b/drivers/gpu/drm/msm/msm_drv.h @@ -285,6 +285,7 @@ struct msm_disp_state; * mandatory. * @wide_bus_enabled: whether the sub-block drives a wide (2 pixel/clock) = bus; * mandatory. + * @needs_periph_flush: whether @mode requires a peripheral flush; mandato= ry. */ struct msm_display_funcs { int (*modeset_init)(struct msm_display *display, struct drm_device *dev, @@ -292,6 +293,8 @@ struct msm_display_funcs { void (*snapshot)(struct msm_display *display, struct msm_disp_state *disp_state); bool (*wide_bus_enabled)(struct msm_display *display); + bool (*needs_periph_flush)(struct msm_display *display, + const struct drm_display_mode *mode); }; =20 /** @@ -372,8 +375,6 @@ struct msm_dp; int __init msm_dp_register(void); void __exit msm_dp_unregister(void); struct msm_display *msm_dp_get_display(struct msm_dp *dp_display); -bool msm_dp_needs_periph_flush(const struct msm_dp *dp_display, - const struct drm_display_mode *mode); =20 #else static inline int __init msm_dp_register(void) @@ -388,12 +389,6 @@ static inline struct msm_display *msm_dp_get_display(s= truct msm_dp *dp_display) return NULL; } =20 -static inline bool msm_dp_needs_periph_flush(const struct msm_dp *dp_displ= ay, - const struct drm_display_mode *mode) -{ - return false; -} - #endif =20 #ifdef CONFIG_DRM_MSM_MDP4 --=20 2.47.3 From nobody Fri Jul 24 23:30:38 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 BAE6B3AEB2C for ; Wed, 22 Jul 2026 06:36:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702221; cv=none; b=UcfrDfLnIzuTZ4/0OeAxL0yqs8fSILb7T6KWWVqvWHD0KSVbfUKv0RclzSnFoVDxmQccuFYsHMlPcHxCa+USa85sGmDV4BhoBF609fIQS2f8jWepCzNrDc2AJHbzh1AhefLc8wfWxAIWmDkQbx5FyMduRLJGJtTc4PHiAOsd0Vk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702221; c=relaxed/simple; bh=pBWRP7CW7402hSiIR+bCI9JjVAYLuwniHNi90OzwRGE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nMKCLgEfO4zSjfYhct2vi/Cx3exSxbYUy9iGy21Gdqz38Tkh91YVlw/T3lO2ADQtbmf/e5PlDN4a9jniDVnjjY9VO+nxTorzW1PWCUEIRYNgpO0aPar2z+jA0J415L5zeWoeoEJNeBWHNhhFPKM5pgXl5dbpGWtHgpk7I8zNpO8= 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=pj/GOYzf; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=ZsBdi9Vn; arc=none smtp.client-ip=205.220.168.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="pj/GOYzf"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="ZsBdi9Vn" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66M53ZgO3767528 for ; Wed, 22 Jul 2026 06:36:58 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= rGpNlcLNCKBAGjCH7PVJuWAxbvSjcIcNj9l3odZvHF8=; b=pj/GOYzft/MdCvdr BOLWknwlOUzEccWqhoYuIovEbcRZvpCX4hA/rrZGdWNi5FsMeu3kaOaxeo60Sncn 4jdXAbxOve1z0u5hsWe8uyy5GqZWQSIGXzqvgnjMt9+6FQKj/BMvnPZTs6nmeO3e fwOvdbJ/0+nk+ZNhdHgsNRg3zx8HLgYhjdQjisAboGUWXeimu4uz3V5IT33cQo6b 8AIsz3nnQoyahEorwVPUoeAh0ZgLpR5o73fQ5yUm5jJZpZAZktgz+Ss4jPEfve8X tNjYRJtRrTNpjONuIuIovg7o+cp8IC406G1wbKIb1J+xsWJz0WYyDLuXz6Za/F7G fo2nmQ== 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 4fjnu4rn76-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 22 Jul 2026 06:36:57 +0000 (GMT) Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-51c19493ac2so25705601cf.1 for ; Tue, 21 Jul 2026 23:36:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784702217; x=1785307017; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=rGpNlcLNCKBAGjCH7PVJuWAxbvSjcIcNj9l3odZvHF8=; b=ZsBdi9VnPr8U30wvBvqxSDZAthULc4CaRqF/H4Z+aDPCNuDDfjjXeKSsx73Dl5il9L MtnxchIIEHWlQimW3ne8Mkd67A4sLp8ugCJmpLU7T2QUGKQF43m0uenGyPmfODAAddeV DPxxW+rZC9gZUl2PdLQObF3tvaGePKNw0FakzwiUpDnvYzIAwN1lmtgyI3k7R51VugfQ KlzZZIiTPptD06KvLq0QoB1hxvrUe7qpD9cMsYaDbasDO+Ripnmu1rF4SjN4o35zOYSx NvUcE1LpZGQV6q4SFRfmCDl+tfmneL+YgDaEQACYVLNpDzoGNBRMEU/GzenHg3nqwfj0 nzEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784702217; x=1785307017; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=rGpNlcLNCKBAGjCH7PVJuWAxbvSjcIcNj9l3odZvHF8=; b=RWY0fLinUVAVdMiAMp+vUACQWUDJFhRM1O2jAplcvpwKlka1fXdt63E/wfL+aByzNx jwWDQ32eqWgvMelHwmNO3/nZZiIK4b2FhM3/LLQwN4gokdGLEIiO5z2HkvzqxcsSxA3V sMVg4NFM7NTa74SsiuftDBbEClOPOeDOfWhMSPMRfz7TSuqz1a5rZOMLcfyPdHinrcEo T8ItdpL6N3xMg62PI7BhK2tJRoAYJbo3D++CCUx1CcElL+BKDihBbYKoYiJFyp/yhQLW Sdhxe4RWnxVnp/s/U3SGxa4sVHfTqlqhqAylgQA/dyy2nYE0T1/LyftmAsKXRzF4KU4w 2syw== X-Forwarded-Encrypted: i=1; AHgh+Rpw0iuuT0K/l2YfB4zMW4xnmdeB5yu/NKZ+CXb4+jZ7NtWe4f2GmBVc8MsLI1VJrqeqg0LVWD9hgUfevDE=@vger.kernel.org X-Gm-Message-State: AOJu0Yz4Oh2MwIJxSTiyknDBm3DVvlVQjTk14WS+ON/pDyYoc56PCaCT j4b5eGNPeEEWGYFX01bRYQvjpSh9e+dWUuG+FXt20mcN/2GL+S9IbWEoJiT91AwF0KBvL0mcXj0 VroSbbExTCXsjym0ulTtDfhokMggBQ/cDFcsKQ12gVDQNAZ46mz1h/m9ibH+J9gtyBmE= X-Gm-Gg: AR+sD13Q4UHGZpWNE15zIqw//83Ed2/w0zKvtBr/YBGNGrFCTkTNLO0xoVCIkx6ul/R JgPlsq6nChw6QXgCATZk6HhiaaIhQF00WUrLjDBDPw/CjmZYWNYezWdqckbAz4RF6HEsBNpfsRu BXCPt49kZ68zvZZaLuGYJLC5Pg9Y6o2vEMi5PPwyf2dtUhhi5Bas5tftWUCCttwV+GC+950ZA+1 EisVcEW23TfCydHX5B+buvVRKERjHgfPzUSVCfaepdpVG9R9M2zgSdtJJvu4Vm/BznmpjVGOA+O V+DeA54GQUTMs7NKPK+5HfuUuDYK5a9g32sTGz4LkwZtKE32JKXxaXT7JrRDaHL7rczpsL0gIKQ pQRQ0i7t+ozntMp3w6a1tMDtBR5Dv4jOEGYQQ6E06vfkyP3uhhE6i2/40bwNRmnXLz49PCnXdG8 E/xIa1+XzSvC5BWw== X-Received: by 2002:a05:622a:4d44:b0:51c:7b11:41b5 with SMTP id d75a77b69052e-5213f374d31mr206859811cf.81.1784702216755; Tue, 21 Jul 2026 23:36:56 -0700 (PDT) X-Received: by 2002:a05:622a:4d44:b0:51c:7b11:41b5 with SMTP id d75a77b69052e-5213f374d31mr206859571cf.81.1784702216299; Tue, 21 Jul 2026 23:36:56 -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 2adb3069b0e04-5b2a9b8c6f6sm309696e87.4.2026.07.21.23.36.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 23:36:55 -0700 (PDT) From: Dmitry Baryshkov Date: Wed, 22 Jul 2026 09:36:24 +0300 Subject: [PATCH 09/24] drm/msm: add the is_cmd_mode callback to msm_display 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: <20260722-drm-msm-display-interface-v1-9-368c10fe62fd@oss.qualcomm.com> References: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> In-Reply-To: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6968; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=pBWRP7CW7402hSiIR+bCI9JjVAYLuwniHNi90OzwRGE=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqYGTnExifL7rU2hhr3InCOFU2scDV4u7idMuBy gAPLvZgO8qJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCamBk5wAKCRCLPIo+Aiko 1Tt2B/9WUmKit0v/CTdVHUMLqa2W5b9YySHhAfqcTt9d6EIvnFcjzrSHuxEqKWWc4GETLCDUbOC hRjV6n7PajHSCAwahTPrEWDyYOvoaRoL3nRxTP7EA0M/P28kklYPxNhRkRQnngCS54uFgJlzl3p xNO25vvxiNviXQLn8Sd82kGxxP2OJmYZuYMTH0CwH7xuXYhQzKbMNEqfiZBvLvxRyDuxxwsoX6A 5ZnNpy4KzIpv3zAnJs3w6XM+qdwanvOFVBT/3rnw0kM4oVung5NxWj6NOlFLnVU/OQklsfzjz+Q zTfobVeiiyj7RLIuBNXv8SU4ukNe4SXKVpg6Hb5YhURQUesn X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-GUID: 7oSyIoTmq6IAdlj9-llqH1ZNOr8j4Z-t X-Authority-Analysis: v=2.4 cv=KLhqylFo c=1 sm=1 tr=0 ts=6a606509 cx=c_pps a=JbAStetqSzwMeJznSMzCyw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=U3fWpF8k-n0SBARnw3cA:9 a=QEXdDO2ut3YA:10 a=uxP6HrT_eTzRwkO_Te1X:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX/pgSjXmbx5yP KM17ZaVl0W9mIu2vMw40Y0XBbRRDQkYO6e6Yf1THFWWTqpHuhbBeBtK+3vivY6NPCx4AnItXynj ri8gZ1I6gsIYx0NP/bIEqVmaRJdskfqassEHpIPD3ym3cw4KtvFU4UzPttNnZ4z+sXrV3HSlp1k bR61/vzb9SfLUW9yukaHxNQZouaTnOFdZEWBCu2KUwEM3vzf3NKXIMm2PM/yYu4lwde7ZleNiU6 NlndiUmZM/snPF0OGIj/LQBZn6FbrAtlqhWDE7kx1K7BAkWa/kiHlqERxXlIo+d4tfDq1LGWCnA R9sBuXdyf7x4j/fX2lNK9y9seR3W+k0bjXSSLJBAZkpTDixpS3+NSTazbt8h1B0WxSq5fxdLguQ /EOalwvayDITNLo/An2YDulNXO7DD9PTfyR5E1vI5uE6G51GTLMXq2heugbzcrku598gvAVLAFe sqnVlLaDaN1d0Hxat4Q== X-Proofpoint-ORIG-GUID: 7oSyIoTmq6IAdlj9-llqH1ZNOr8j4Z-t X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX5y/mRtGsCcIZ Z2omePdd+xcd5JkEMWO6300djhBoI8ZxNxr9qxhbKIcM2aVu2XmqHtEjxtCheufzl3VLKeuNS0l dQ4yu/BYXaaYFbaAsWZgmApBqKaNTnc= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-22_02,2026-07-21_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 spamscore=0 clxscore=1015 impostorscore=0 lowpriorityscore=0 priorityscore=1501 malwarescore=0 phishscore=0 adultscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607220060 The DPU and MDP5 backends query whether a DSI link runs in command mode by calling msm_dsi_is_cmd_mode() directly on the concrete sub-block while building their encoders. Add a mandatory is_cmd_mode() callback to struct msm_display_funcs; DSI implements it, DP and HDMI (always video) return false. The backends dispatch through the callback. No functional change intended. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 4 +++- drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c | 4 +++- drivers/gpu/drm/msm/dp/dp_display.c | 6 ++++++ drivers/gpu/drm/msm/dsi/dsi.c | 4 +++- drivers/gpu/drm/msm/hdmi/hdmi.c | 6 ++++++ drivers/gpu/drm/msm/msm_drv.h | 7 ++----- 6 files changed, 23 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/= disp/dpu1/dpu_kms.c index 42dff1a98292..7928bc1a73f3 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c @@ -583,6 +583,7 @@ static int _dpu_kms_initialize_dsi(struct drm_device *d= ev, { struct drm_encoder *encoder =3D NULL; struct msm_display_info info; + struct msm_display *display; int i, rc =3D 0; =20 if (!(priv->kms->dsi[0] || priv->kms->dsi[1])) @@ -613,7 +614,8 @@ static int _dpu_kms_initialize_dsi(struct drm_device *d= ev, if (msm_dsi_is_bonded_dsi(priv->kms->dsi[i])) info.h_tile_instance[info.num_of_h_tiles++] =3D other; =20 - info.is_cmd_mode =3D msm_dsi_is_cmd_mode(priv->kms->dsi[i]); + display =3D msm_dsi_get_display(priv->kms->dsi[i]); + info.is_cmd_mode =3D display->funcs->is_cmd_mode(display); =20 rc =3D dpu_kms_dsi_set_te_source(&info, priv->kms->dsi[i]); if (rc) { diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm= /disp/mdp5/mdp5_kms.c index 68b71a7c6666..e372d295b80f 100644 --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c @@ -337,6 +337,7 @@ static int modeset_init_intf(struct mdp5_kms *mdp5_kms, const struct mdp5_cfg_hw *hw_cfg =3D mdp5_cfg_get_hw_config(mdp5_kms->cfg); int dsi_id =3D get_dsi_id_from_intf(hw_cfg, intf->num); + struct msm_display *display; =20 if ((dsi_id >=3D ARRAY_SIZE(priv->kms->dsi)) || (dsi_id < 0)) { DRM_DEV_ERROR(dev->dev, "failed to find dsi from intf %d\n", @@ -360,9 +361,10 @@ static int modeset_init_intf(struct mdp5_kms *mdp5_kms, break; } =20 + display =3D msm_dsi_get_display(priv->kms->dsi[dsi_id]); priv->kms->dsi_encoder[dsi_id] =3D encoder; mdp5_encoder_set_intf_mode(encoder, - msm_dsi_is_cmd_mode(priv->kms->dsi[dsi_id])); + display->funcs->is_cmd_mode(display)); =20 break; } diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index 773dee9d0be4..425526db7ef9 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -1369,11 +1369,17 @@ static bool msm_dp_display_needs_periph_flush(struc= t msm_display *display, return msm_dp_needs_periph_flush(dp, mode); } =20 +static bool msm_dp_display_is_cmd_mode(struct msm_display *display) +{ + return false; +} + static const struct msm_display_funcs msm_dp_display_funcs =3D { .modeset_init =3D msm_dp_modeset_init, .snapshot =3D msm_dp_snapshot, .wide_bus_enabled =3D msm_dp_display_wide_bus_enabled, .needs_periph_flush =3D msm_dp_display_needs_periph_flush, + .is_cmd_mode =3D msm_dp_display_is_cmd_mode, }; =20 struct msm_display *msm_dp_get_display(struct msm_dp *msm_dp_display) diff --git a/drivers/gpu/drm/msm/dsi/dsi.c b/drivers/gpu/drm/msm/dsi/dsi.c index 085e202bf7e6..bda778dbcc5b 100644 --- a/drivers/gpu/drm/msm/dsi/dsi.c +++ b/drivers/gpu/drm/msm/dsi/dsi.c @@ -5,8 +5,9 @@ =20 #include "dsi.h" =20 -bool msm_dsi_is_cmd_mode(struct msm_dsi *msm_dsi) +static bool msm_dsi_is_cmd_mode(struct msm_display *display) { + struct msm_dsi *msm_dsi =3D container_of(display, struct msm_dsi, display= ); unsigned long host_flags =3D msm_dsi_host_get_mode_flags(msm_dsi->host); =20 return !(host_flags & MIPI_DSI_MODE_VIDEO); @@ -289,6 +290,7 @@ static const struct msm_display_funcs msm_dsi_display_f= uncs =3D { .snapshot =3D msm_dsi_snapshot, .wide_bus_enabled =3D msm_dsi_wide_bus_enabled, .needs_periph_flush =3D msm_dsi_needs_periph_flush, + .is_cmd_mode =3D msm_dsi_is_cmd_mode, }; =20 struct msm_display *msm_dsi_get_display(struct msm_dsi *msm_dsi) diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.c b/drivers/gpu/drm/msm/hdmi/hdm= i.c index 72f7403265f9..828cb89ebf9a 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi.c +++ b/drivers/gpu/drm/msm/hdmi/hdmi.c @@ -239,11 +239,17 @@ static bool msm_hdmi_needs_periph_flush(struct msm_di= splay *display, return false; } =20 +static bool msm_hdmi_is_cmd_mode(struct msm_display *display) +{ + return false; +} + static const struct msm_display_funcs msm_hdmi_display_funcs =3D { .modeset_init =3D msm_hdmi_modeset_init, .snapshot =3D msm_hdmi_snapshot, .wide_bus_enabled =3D msm_hdmi_wide_bus_enabled, .needs_periph_flush =3D msm_hdmi_needs_periph_flush, + .is_cmd_mode =3D msm_hdmi_is_cmd_mode, }; =20 struct msm_display *msm_hdmi_get_display(struct hdmi *hdmi) diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h index 806d72ed393b..5320e4977af9 100644 --- a/drivers/gpu/drm/msm/msm_drv.h +++ b/drivers/gpu/drm/msm/msm_drv.h @@ -286,6 +286,7 @@ struct msm_disp_state; * @wide_bus_enabled: whether the sub-block drives a wide (2 pixel/clock) = bus; * mandatory. * @needs_periph_flush: whether @mode requires a peripheral flush; mandato= ry. + * @is_cmd_mode: whether the sub-block runs in command mode; mandatory. */ struct msm_display_funcs { int (*modeset_init)(struct msm_display *display, struct drm_device *dev, @@ -295,6 +296,7 @@ struct msm_display_funcs { bool (*wide_bus_enabled)(struct msm_display *display); bool (*needs_periph_flush)(struct msm_display *display, const struct drm_display_mode *mode); + bool (*is_cmd_mode)(struct msm_display *display); }; =20 /** @@ -330,7 +332,6 @@ void dsi_dev_detach(struct platform_device *pdev); void __init msm_dsi_register(void); void __exit msm_dsi_unregister(void); struct msm_display *msm_dsi_get_display(struct msm_dsi *msm_dsi); -bool msm_dsi_is_cmd_mode(struct msm_dsi *msm_dsi); bool msm_dsi_is_bonded_dsi(struct msm_dsi *msm_dsi); bool msm_dsi_is_master_dsi(struct msm_dsi *msm_dsi); struct drm_dsc_config *msm_dsi_get_dsc_config(struct msm_dsi *msm_dsi); @@ -346,10 +347,6 @@ static inline struct msm_display *msm_dsi_get_display(= struct msm_dsi *msm_dsi) { return NULL; } -static inline bool msm_dsi_is_cmd_mode(struct msm_dsi *msm_dsi) -{ - return false; -} static inline bool msm_dsi_is_bonded_dsi(struct msm_dsi *msm_dsi) { return false; --=20 2.47.3 From nobody Fri Jul 24 23:30:38 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 B04E23B8D40 for ; Wed, 22 Jul 2026 06:37:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702224; cv=none; b=WNZRX9bbIRnRWV1PDxUtKEq2rYwXL4sJrXzoyGQYp3c7TKW43h+qGuOjpgH31V9VFothTm9EiOTMQn8ddM3G1RRH5Q8O6O60aKVZcSqVe1vGEtVanYDd7QWodyw59yYOKfJBJuj6kVyXkLUnHhkeVkHZNI99R22p04Q+D7lco5c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702224; c=relaxed/simple; bh=mic+nEGujiZA8skeNgXqs73Yz1UH5vF0sRWJb295FiA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hrWvbalD5pLgXku2jWH31zLVLkmr1b0zJ7wl1OLn8fN+uYhlOdEi0Sg6fs1N9itIYx9msNUqXRgARe52Xh7lnzwMCLMp/9FFd1hKXiIT/bpala0X5H9MNKV5p45g+3HcaU6VRmCLmdtZmj9KY0Rk9pTX9raslThDVDEjyXXbuMI= 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=Xal8yxiR; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=aNAcE4lr; arc=none smtp.client-ip=205.220.168.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="Xal8yxiR"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="aNAcE4lr" Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66M53bO53662182 for ; Wed, 22 Jul 2026 06:37:02 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= bu7eRwc4ThvRAi2plwmdFoPFrPMRFwSAWWRJNUn4iXs=; b=Xal8yxiRF3YwO/jy SmWVze4QAW16aYwtowEsdIxb16iDe9JUtwFXa43WLPQHAqatyHnQm5lymADYYjKq cxGjp7ctX+c56LJ93owMAnd8biX6IRg8L5eDtHzEgifPxJ54i7iio/euKbdT3BFo 3eJD7trz2QQaOlR9M4wH+hq5qfn3BKrZBmiPpLgVJeTFckGYqwp8/K2MTxueiqM2 Kr9tsVLsHCx66wIXAAKyyTujvCbdR7aw0OdbtcrY7eZJL1WhgbghUPImiWCDtftP Eo/LZ8tWI38ljjsRyvA5YG7QYS39I7spQL64eNcI0LVONtZ8hqqVMoALR6xuUosX NJ6YIw== Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fjd5e2jnp-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 22 Jul 2026 06:37:01 +0000 (GMT) Received: by mail-qt1-f197.google.com with SMTP id d75a77b69052e-51c083f1818so164895011cf.0 for ; Tue, 21 Jul 2026 23:37:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784702221; x=1785307021; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=bu7eRwc4ThvRAi2plwmdFoPFrPMRFwSAWWRJNUn4iXs=; b=aNAcE4lr6uJYmgoRyYJA315QBa/WLTlKNs/tSdp4eZrWVYkymbvEjA+VPgN00OC+Ki dJfXPRY64Yi+dHwzG86uP6E7UdAcL5orCk5jgt+/BrJXYFWSO4iOeWqrb9evM8DhhWMD d1/gXwWCpu1hKu+8luGuRJFpgfb4VIt/MCj8xn/OKP1rKg3Y/s0VNR5xuehd7muD9YSx 5w7EPsYIs29k8qF49GlnaGJ5jb2eonWvEWznJUYMP08YfOfcFf4K2ORe32N5xGZxhgDE akNpCbkXyZJISootcmN7fxh3OwnXf3Iwqc9MUj7YjiRHrRj0pLC2FRReF4RdtncMFnNQ uF5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784702221; x=1785307021; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=bu7eRwc4ThvRAi2plwmdFoPFrPMRFwSAWWRJNUn4iXs=; b=XdJhXxTACG4IA+2f/wGbOPP3W11tCpb1y4HXqSeeTFS+C7X/9/BOku2ix6pzZDoQeq zIPK1oAlht+H/jdUVFWM4E3EcsWQQ2eOEMZACXNc6jyCiBFh0k3FsrlKK/MMWE6GvWWh PM68DVhGifhaoSNDQRUfMGdL4YmCaE2kEbErDRduB/kCBPK9dITKi8CwWhExkIB+lF5D ogekY+BPmhqX3Jq3qXX05kgyNIPbQtyVWr2DQZvx569qULbDzyDEoCDA/Vy3fAaZagfA LG3+dIlmpN1W6lot0sGzZ50z15EkrfimvyeuO4G50RhkSblNSsvl1lH16+NKJz5+P7Sq VADw== X-Forwarded-Encrypted: i=1; AHgh+Rq79o5D3LeB7FuS++toBjnY8YQa6UZaDbtiqX5rPLR1zzn0GaNcREqkRmMI92ujTQE6JCGh+RBXYbQeGTc=@vger.kernel.org X-Gm-Message-State: AOJu0YwrRa++vPXruy3RwOIxqMmsKcfale+JBRM3bZmdl5hLzP4SEt1t TtXM026Hj86axJltCSbcRkwgApNbepHarSDUJyhQ5OA78U3fszaS8s2BmPKjWueWrlIygLfOM2a Hdr+h5p4XFg/6Msqq6S2isUp9y1AnQ2yjq/0BCwoSWLwCoiQeOJTzxl7jqE2A/V/SMcs= X-Gm-Gg: AR+sD10r6K3OggJuLkSb20CyJRIapJHx7zg7ahsehtge2P+mE6KDAUvuqnRbtWW6WsK zW+qoqdYBeludCrzrmiCwtjO/WCiIzRGwRqD8A2BkJydi5p+tg87EeQxft5kMyA+bFos4aDQKMw YASc7bpWE7Hx3XdCpM039Kf4fxVb6CsZ5xtzVBZEHEVJqsZy7vT7A7Citvb3u4GH5dv9aLWvYwz Qs8I4dZuvcuUeRbeVnWprkGEPB+eNLWGYpBOzyd8IZD3kBorWYvPavZH8EDgssDj7ThR0v8QBJY KyY5lCtDMxml63eL00d8I+pd3FlzjVvZtIdTALRsEvoQ6TyfS6sXq6S/HFEDegTeGE304+v6Xv4 RaQuumfI8on0b7N32jbfFUSkLi98lrGDZOkbnyX7rNQ+nOHVnVUecXMVTx0/BFiPsW61EXwCE2f HVfErVy09YLb3TJQ== X-Received: by 2002:a05:622a:2595:b0:51c:844f:28da with SMTP id d75a77b69052e-5213aa6e34amr200542161cf.5.1784702220945; Tue, 21 Jul 2026 23:37:00 -0700 (PDT) X-Received: by 2002:a05:622a:2595:b0:51c:844f:28da with SMTP id d75a77b69052e-5213aa6e34amr200542081cf.5.1784702220527; Tue, 21 Jul 2026 23:37:00 -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 2adb3069b0e04-5b2a9b8c6f6sm309696e87.4.2026.07.21.23.36.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 23:36:57 -0700 (PDT) From: Dmitry Baryshkov Date: Wed, 22 Jul 2026 09:36:25 +0300 Subject: [PATCH 10/24] drm/msm: add the get_dsc_config callback to msm_display 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: <20260722-drm-msm-display-interface-v1-10-368c10fe62fd@oss.qualcomm.com> References: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> In-Reply-To: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6149; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=mic+nEGujiZA8skeNgXqs73Yz1UH5vF0sRWJb295FiA=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqYGTnGBoAGG/QDQJd06aG3s1xGr+xz59NKFvji FbUT2sc6+mJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCamBk5wAKCRCLPIo+Aiko 1QwtB/9MUZd7vpnKI3x8owNAN1eIDN7gdRv4WAb4zGN8bbEDTgO4s11JkzWdzWYx9Ch/8y4nR5R sTHWH7GMxNpDijjNylxwv6bO4Qq2iOazuF1Qfs0Ygc7cAUSy6iW06aAMJfg4gzOSSXf10RHlwn8 C33CCroFRlbciRDxJB4oAn/8DxpK15cJ0f/Qh1JAmR+1PnB8Hb0wA9ZoBk1db9xo39vEnMphP47 qDv2SGEtFFLxOJKE+Ie2/U0J2yCxmTQSaUb3oD2L4ZwLvlXF7ZYf1nGblxv2+MWcgNMakZrUETv JebETE7954mpiPl1TY53WOKw5Klf0onUXwkKDYHuIs/A6rYf X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-GUID: CiX99xaJkM4SldbXlHbs6GeoiOsaBdJc X-Authority-Analysis: v=2.4 cv=CbE4Irrl c=1 sm=1 tr=0 ts=6a60650e cx=c_pps a=EVbN6Ke/fEF3bsl7X48z0g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=EUspDBNiAAAA:8 a=zUt5drCBtZ0E8LnXtbIA:9 a=QEXdDO2ut3YA:10 a=a_PwQJl-kcHnX1M80qC6:22 X-Proofpoint-ORIG-GUID: CiX99xaJkM4SldbXlHbs6GeoiOsaBdJc X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX5TKWH/3m5nH9 cgiPWQMQ4wtKI8PAch4+W2k9aWL3HBizK9O/YJCrw7zM07D2M4cWfv/dCQycuJUYC4GFrMugic7 izf2lvya6GcUZIOgFgm0+aayJNDO4enok4tCDTX+J91GXRpt3lfeOpmTuPThjIh9L+ZT0O6BqGN BPCIiaU1YsvGNvN2y/2Q2vGqoGthceHTETOoy0os2l83NZ0h9RwRFNAu2nDAuyz6Kp1mmlLWzDR QgK7IuN5aBY8IW4EprKbTdl+jX4sHws3HWXP03dniQDUlBLB4tqUkZnVp9O6l0zplBwMOd8lKeU kzwYpB/xErZRni+X/lNz+v85q66eEbIK86jW0kXz54tilrPteeCKR9A/YY76JBZVOMjUJxmfcTC tjfDiui4M6+iLEOibS6kdjWR5OUL0qlo3liDT9JagiJGr8K7eD1Kx3bPB59HAQS8lDSZl0Lzvxf GQEdfrc/c3o51Pz9K5w== X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfXzVMwwagteLb2 qEo2Y9Iz5lTOEWGU6WegN6QrerBQi7eIoCT9OpVcVTYIIwe/e5txPA0RGrkTp34ywdxhhNGr+4n sooSnNgnCl2yyfEwIAxJbSQRmc2v1v4= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-22_02,2026-07-21_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 adultscore=0 suspectscore=0 clxscore=1015 spamscore=0 malwarescore=0 bulkscore=0 impostorscore=0 lowpriorityscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607220060 dpu_encoder_get_dsc_config() special-cases INTF_DSI to fetch the DSC config from the concrete DSI sub-block via msm_dsi_get_dsc_config(). Add a mandatory get_dsc_config() callback to struct msm_display_funcs; DSI returns its host DSC config, DP and HDMI return NULL. The DPU encoder now uses the generic display lookup and the callback, dropping the interface-type special case. No functional change intended. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 8 ++++---- drivers/gpu/drm/msm/dp/dp_display.c | 6 ++++++ drivers/gpu/drm/msm/dsi/dsi.c | 5 ++++- drivers/gpu/drm/msm/hdmi/hdmi.c | 6 ++++++ drivers/gpu/drm/msm/msm_drv.h | 8 ++------ 5 files changed, 22 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/= msm/disp/dpu1/dpu_encoder.c index 09bf959b2ca7..569f3759d02c 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c @@ -666,12 +666,12 @@ bool dpu_encoder_use_dsc_merge(struct drm_encoder *dr= m_enc) */ struct drm_dsc_config *dpu_encoder_get_dsc_config(struct drm_encoder *drm_= enc) { - struct msm_drm_private *priv =3D drm_enc->dev->dev_private; struct dpu_encoder_virt *dpu_enc =3D to_dpu_encoder_virt(drm_enc); - int index =3D dpu_enc->disp_info.h_tile_instance[0]; + struct msm_display *display =3D dpu_encoder_get_display(drm_enc->dev, + &dpu_enc->disp_info); =20 - if (dpu_enc->disp_info.intf_type =3D=3D INTF_DSI) - return msm_dsi_get_dsc_config(priv->kms->dsi[index]); + if (display) + return display->funcs->get_dsc_config(display); =20 return NULL; } diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index 425526db7ef9..047295d46c02 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -1374,12 +1374,18 @@ static bool msm_dp_display_is_cmd_mode(struct msm_d= isplay *display) return false; } =20 +static struct drm_dsc_config *msm_dp_display_get_dsc_config(struct msm_dis= play *display) +{ + return NULL; +} + static const struct msm_display_funcs msm_dp_display_funcs =3D { .modeset_init =3D msm_dp_modeset_init, .snapshot =3D msm_dp_snapshot, .wide_bus_enabled =3D msm_dp_display_wide_bus_enabled, .needs_periph_flush =3D msm_dp_display_needs_periph_flush, .is_cmd_mode =3D msm_dp_display_is_cmd_mode, + .get_dsc_config =3D msm_dp_display_get_dsc_config, }; =20 struct msm_display *msm_dp_get_display(struct msm_dp *msm_dp_display) diff --git a/drivers/gpu/drm/msm/dsi/dsi.c b/drivers/gpu/drm/msm/dsi/dsi.c index bda778dbcc5b..e42f5b929b84 100644 --- a/drivers/gpu/drm/msm/dsi/dsi.c +++ b/drivers/gpu/drm/msm/dsi/dsi.c @@ -13,8 +13,10 @@ static bool msm_dsi_is_cmd_mode(struct msm_display *disp= lay) return !(host_flags & MIPI_DSI_MODE_VIDEO); } =20 -struct drm_dsc_config *msm_dsi_get_dsc_config(struct msm_dsi *msm_dsi) +static struct drm_dsc_config *msm_dsi_get_dsc_config(struct msm_display *d= isplay) { + struct msm_dsi *msm_dsi =3D container_of(display, struct msm_dsi, display= ); + return msm_dsi_host_get_dsc_config(msm_dsi->host); } =20 @@ -291,6 +293,7 @@ static const struct msm_display_funcs msm_dsi_display_f= uncs =3D { .wide_bus_enabled =3D msm_dsi_wide_bus_enabled, .needs_periph_flush =3D msm_dsi_needs_periph_flush, .is_cmd_mode =3D msm_dsi_is_cmd_mode, + .get_dsc_config =3D msm_dsi_get_dsc_config, }; =20 struct msm_display *msm_dsi_get_display(struct msm_dsi *msm_dsi) diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.c b/drivers/gpu/drm/msm/hdmi/hdm= i.c index 828cb89ebf9a..918fc9c88a19 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi.c +++ b/drivers/gpu/drm/msm/hdmi/hdmi.c @@ -244,12 +244,18 @@ static bool msm_hdmi_is_cmd_mode(struct msm_display *= display) return false; } =20 +static struct drm_dsc_config *msm_hdmi_get_dsc_config(struct msm_display *= display) +{ + return NULL; +} + static const struct msm_display_funcs msm_hdmi_display_funcs =3D { .modeset_init =3D msm_hdmi_modeset_init, .snapshot =3D msm_hdmi_snapshot, .wide_bus_enabled =3D msm_hdmi_wide_bus_enabled, .needs_periph_flush =3D msm_hdmi_needs_periph_flush, .is_cmd_mode =3D msm_hdmi_is_cmd_mode, + .get_dsc_config =3D msm_hdmi_get_dsc_config, }; =20 struct msm_display *msm_hdmi_get_display(struct hdmi *hdmi) diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h index 5320e4977af9..cda9849811b1 100644 --- a/drivers/gpu/drm/msm/msm_drv.h +++ b/drivers/gpu/drm/msm/msm_drv.h @@ -287,6 +287,7 @@ struct msm_disp_state; * mandatory. * @needs_periph_flush: whether @mode requires a peripheral flush; mandato= ry. * @is_cmd_mode: whether the sub-block runs in command mode; mandatory. + * @get_dsc_config: return the DSC config for the sub-block, or NULL; mand= atory. */ struct msm_display_funcs { int (*modeset_init)(struct msm_display *display, struct drm_device *dev, @@ -297,6 +298,7 @@ struct msm_display_funcs { bool (*needs_periph_flush)(struct msm_display *display, const struct drm_display_mode *mode); bool (*is_cmd_mode)(struct msm_display *display); + struct drm_dsc_config *(*get_dsc_config)(struct msm_display *display); }; =20 /** @@ -334,7 +336,6 @@ void __exit msm_dsi_unregister(void); struct msm_display *msm_dsi_get_display(struct msm_dsi *msm_dsi); bool msm_dsi_is_bonded_dsi(struct msm_dsi *msm_dsi); bool msm_dsi_is_master_dsi(struct msm_dsi *msm_dsi); -struct drm_dsc_config *msm_dsi_get_dsc_config(struct msm_dsi *msm_dsi); const char *msm_dsi_get_te_source(struct msm_dsi *msm_dsi); #else static inline void __init msm_dsi_register(void) @@ -356,11 +357,6 @@ static inline bool msm_dsi_is_master_dsi(struct msm_ds= i *msm_dsi) return false; } =20 -static inline struct drm_dsc_config *msm_dsi_get_dsc_config(struct msm_dsi= *msm_dsi) -{ - return NULL; -} - static inline const char *msm_dsi_get_te_source(struct msm_dsi *msm_dsi) { return NULL; --=20 2.47.3 From nobody Fri Jul 24 23:30:38 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 056063C3F5C for ; Wed, 22 Jul 2026 06:37:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702227; cv=none; b=NLg+BgNb2FmLyntBqF4zArrWtZ9V9WvsWmfMcj0qNeEVyTafQxGBw91NJSljTta5d+XyUhVmTl3lFdTXyM9BerpenuLQPP1Rh0cOCNY6XzWirggIidaDtEIhA64OEQg+NCTT/17TZK/Am5KkM6chVhh3FsVwltfThavwgXjHi94= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702227; c=relaxed/simple; bh=iW1HxeBV/OI9ywvqkNJiv6+quKkZPYuL+t2SrY2ZMEk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TQH69mG9JT+TfWiQpaUjBFjmMJOBJQBAElOzX4w9d0xT5j3AdogD/lZQbJAK9tOfFQ5wQa/rac3F9ZQ7gGSlx1cIyHGLYUqg8HG4/hdVSlRnH8wa4+dqs1f/yWHaC7kM4imgjGdruxeqVrZhMAJJrTZ5qqsru9xoL33PDeh5IxQ= 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=Mx06ZQ5c; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=juc8WBSZ; arc=none smtp.client-ip=205.220.168.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="Mx06ZQ5c"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="juc8WBSZ" 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 66M53iTu4168892 for ; Wed, 22 Jul 2026 06:37:05 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= yaFuNCRXAnSBOSZbKpBDQZFE6PEtYKAhtV7IE6fz5U8=; b=Mx06ZQ5cHMSTVUJA NgVYJxtuOH3q+cprAmcBhKy6pUnSr8eOcsPQr5wMKznZ1/wBvQOKtM+CSOCjHKDH exW5wQOjbwvuZgMPoh8M5CahkuR4dxvWu5nVsM/10rnwdn+LJk85lMLzmCaLO9zj ayyQz37QmyGTIO3IiGjb+8GPM48XbKhHrQGb9GveF8cGI2KyRXHUVcewml84nnZC v307/+68a4Uk360TyziE8baem0rTDix0gUoUdtZ6vmbVkH+L8yywkUHZPw2hdLRS iZrXn1zJ6A8nMlAToN744pqeWtq3kRODMUL4XQmyyd9hwntI1AKnEGBuzA5+q1qB RepVwA== 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 4fj6r3mphx-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 22 Jul 2026 06:37:05 +0000 (GMT) Received: by mail-qt1-f199.google.com with SMTP id d75a77b69052e-51c1d137a68so333056721cf.3 for ; Tue, 21 Jul 2026 23:37:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784702224; x=1785307024; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=yaFuNCRXAnSBOSZbKpBDQZFE6PEtYKAhtV7IE6fz5U8=; b=juc8WBSZp/2uGNhHD8+dQODXxXT3bi0ClHwNzZRV6bTFdijIK1TgjP3FbBafcHIL4R An9UOsTs46nYVvXSaOIKzXEky5KzgAKS4AZ9V9etXkkvydX7v52NdM9Y3SVIQaudqG9V Rik1xSQM/RBcvG0yBpQzNTvHvFAJZ6h1i9c00/zkIzmSfSbrJmu4jYZWLYTKaHjaKI2f 8geUQ5jqa0kaLkcKtGmSIDRkEq9dlacW0dEkKg32Ixlz1TzbiOwfcuLwQl245dlbd19R erlqZxKKnewvXnU3rZWXfixUVLhOwFAaaXrRWsAqk8hNKwDxCIhm28QYM5mhDMbOTHoJ 7jNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784702224; x=1785307024; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=yaFuNCRXAnSBOSZbKpBDQZFE6PEtYKAhtV7IE6fz5U8=; b=QOUmKYcZoZWCu8kMue0tbAxsbnIB/fMMq0ctg9vr0piK6I51ojta2XEitDttEG3t7s VSM7dfvx7VESYgRU9NZHGT0wPx8TimipB2BuYj2lmF7UZDpcu4Rwk/cwrJz/4z9kxoeW pLKe8bvhEYsNv7X86cF+KpF4NkVBpOmJEw3ynJpIpF8AtT0rnpoWGPkZOI07gebkyxuJ V6DAUBXuYoqZNa4gpWNS1742onbQ373w2L5xnLF8Sox4/EG37MOjOftyTd8DT1gpMlXh u7/+eA+KgC93rOs8TlDG9cRskEMdxLKIbaOFNhw1YM3GbK62FNko3iTTUTKGU8qu8AEC 3ndw== X-Forwarded-Encrypted: i=1; AHgh+Rr5cSBPLxBkB6HTE9x9xfrmpO9dEbYMV47WS3eSTeoH9NL6NN9/ccf07rQv9fptljR7yc2/akV2kDf3nos=@vger.kernel.org X-Gm-Message-State: AOJu0Yy5PwAmH8CYx70D5Achf4BBNjlYtAjB0qCgzLpqEJhZ4ZEDrb7K tnPC7j5ATxAH+/lNImRJi1j7phFGqzwPv3+G6Mvg5D/1USkbFCNAYQfqjVLdBWzwgbkmXAE0MOC dxRUpooj9rc1GdW6lnCEU5/MOa6bl2159afT4Xn2J9gKYL7V9b75Hz9+s5d/mBRm6nyY= X-Gm-Gg: AR+sD10J5Fn4kb7iapYbT+IpEKTnznJo5VSHocOkxj5ySDpEah/XVOxgldBWqlNDlYf qjARYr/oiqcf9sv19pAEY7tNSgGx4cRqkpozE9+eIBSZUVg17SJp89Bjz2UNc6mpUJFqIeF7xC0 ufwCwPm0tsTHjH01m9adfpSDLPdV/TDael9BWWD3ls7WWbOeAz9Ry0PTyCQ8Q6G8JjTaUjl0Tih BPicHqMJnt9fepNTxhkgTk/uFudKAiQJV1orHhSuJIy4zVZWnILEPhxvU8/PXiDVi7Q+Abi3W2J kbKtHunAwfRZ8G5QvXcNv55+fQwiBjk1H60bo/4D0nuUK7NZrV85SShbjeXMiN7v2I9DnukptCD IHDJqyKBTUR9nfFMj3pNafgEjUqy64b7/I4RBkKKyj5JCs1fv3n5g315EF3LTuB2aHVoxmM0TbH /0ZegtsS5+IDHwCw== X-Received: by 2002:ac8:5948:0:b0:528:2e9:c0e8 with SMTP id d75a77b69052e-52802e9cb3fmr13547051cf.79.1784702224118; Tue, 21 Jul 2026 23:37:04 -0700 (PDT) X-Received: by 2002:ac8:5948:0:b0:528:2e9:c0e8 with SMTP id d75a77b69052e-52802e9cb3fmr13546751cf.79.1784702223696; Tue, 21 Jul 2026 23:37:03 -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 2adb3069b0e04-5b2a9b8c6f6sm309696e87.4.2026.07.21.23.37.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 23:37:02 -0700 (PDT) From: Dmitry Baryshkov Date: Wed, 22 Jul 2026 09:36:26 +0300 Subject: [PATCH 11/24] drm/msm: add the get_te_source callback to msm_display 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: <20260722-drm-msm-display-interface-v1-11-368c10fe62fd@oss.qualcomm.com> References: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> In-Reply-To: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6856; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=iW1HxeBV/OI9ywvqkNJiv6+quKkZPYuL+t2SrY2ZMEk=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqYGTnw1h0vZ/U19qP9/PsZqlqJC1adcirKYutC 5BZP5dFV6GJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCamBk5wAKCRCLPIo+Aiko 1SO9B/43+hlIiu2z8gpg4OwbpHLYJYpOfC4IFQ72OIXq4yxPiC4131IQIllEtx7uhIBV+8SB+9G /UlJKn2TwpCVGJnoavS1DqpuSQF+bPu+WMCstxSJZ2Mvh0KctK4KX8BXKSNGHVKwpYQTVz8c0yq rfAVw3a+IjW35ykK6HsVwF3zolXhnVFO1v4CuCMMmPqlp0ohP8oql9Etl3ojOh5djwqdHyUz+e7 Sor1NjCmE0KZ8vpFSzaCdiY7Pknd5Zrm8y/rhHSMfy2keblcuzE16X/p1W3EU2ruMV3tYyVhxAL DOeW8XkHS9N1jJi7nyqP8b74To7TuHmP5jS6KBaofMS3k+iL X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX7HZFLlUshtM2 jSW2KugvCJEDJw9OgDNmR4yyNfgKdo2fsImfFeTzC52fupC0xEb8sWKnmUZlhbCfzUAb8ZvaWFp cRAFht5ppO+tfgIpTrzI0TXFZgX+A554/7L4hV/E9SNHWMZEcijSQKkZsxP8B6jUyZg2jFVdD8U mEvbiycbGLtf7sWAB+f1OroAVTCA8RXuD7JAosjHsOLH7g9Nj57FHborsxj38w6QWaEcO5GMbEQ KGc63VCJCfMWw2QY0xGIJLF1lvJIkTFCpFnQ0K9nTadSThFW6sFwdv068Cy99rQcVbh1FtZGGvh Yu7bEHsdWPa8UzztR0nK6YfngBgT8kNAfKnMOnkkCNRpDHa+Axhcbt0TzYzpARQKnLFu99iVBmV EvKOCKt8oMe0l31ujJRa/FvwLLO9V9GQ1z0xd14sgYV0S0InvKjdzv/3jwLxhk+XVOG8MZVxcv1 lMAesq+7irpPgJLCmqQ== X-Proofpoint-ORIG-GUID: BvJRZVMoDG2tsQOYUMONFMveIJtfV_cY X-Proofpoint-GUID: BvJRZVMoDG2tsQOYUMONFMveIJtfV_cY X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX+PXB2l9Q9t97 mMqDNylm06ZO65UWWf/AfgWWbzoQNApsWi/3T1NGimUzx7sHYowsSZrZT8MHv9gGWtX3HxR9HZY oxfH4NL9sB0aTO49TsIIyGKGTHYKg18= X-Authority-Analysis: v=2.4 cv=SIRykuvH c=1 sm=1 tr=0 ts=6a606511 cx=c_pps a=WeENfcodrlLV9YRTxbY/uA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=5UgVsPALq_5EqvSQFhsA:9 a=QEXdDO2ut3YA:10 a=kacYvNCVWA4VmyqE58fU:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-22_02,2026-07-21_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 spamscore=0 phishscore=0 clxscore=1015 suspectscore=0 adultscore=0 impostorscore=0 lowpriorityscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607220060 The DPU backend reads the tear-check source name of a DSI link through msm_dsi_get_te_source() on the concrete sub-block while building the display info. Add a mandatory get_te_source() callback to struct msm_display_funcs; DSI returns its te_source string, DP and HDMI return NULL. dpu_kms_dsi_set_te_ source() now takes a struct msm_display and dispatches through the callback. No functional change intended. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 6 +++--- drivers/gpu/drm/msm/dp/dp_display.c | 6 ++++++ drivers/gpu/drm/msm/dsi/dsi.c | 8 ++++++++ drivers/gpu/drm/msm/dsi/dsi_manager.c | 5 ----- drivers/gpu/drm/msm/hdmi/hdmi.c | 6 ++++++ drivers/gpu/drm/msm/msm_drv.h | 8 ++------ 6 files changed, 25 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/= disp/dpu1/dpu_kms.c index 7928bc1a73f3..8dacde316033 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c @@ -555,9 +555,9 @@ static const char *dpu_vsync_sources[] =3D { }; =20 static int dpu_kms_dsi_set_te_source(struct msm_display_info *info, - struct msm_dsi *dsi) + struct msm_display *display) { - const char *te_source =3D msm_dsi_get_te_source(dsi); + const char *te_source =3D display->funcs->get_te_source(display); int i; =20 if (!te_source) { @@ -617,7 +617,7 @@ static int _dpu_kms_initialize_dsi(struct drm_device *d= ev, display =3D msm_dsi_get_display(priv->kms->dsi[i]); info.is_cmd_mode =3D display->funcs->is_cmd_mode(display); =20 - rc =3D dpu_kms_dsi_set_te_source(&info, priv->kms->dsi[i]); + rc =3D dpu_kms_dsi_set_te_source(&info, display); if (rc) { DPU_ERROR("failed to identify TE source for dsi display\n"); return rc; diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index 047295d46c02..95810e3b01a7 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -1379,6 +1379,11 @@ static struct drm_dsc_config *msm_dp_display_get_dsc= _config(struct msm_display * return NULL; } =20 +static const char *msm_dp_display_get_te_source(struct msm_display *displa= y) +{ + return NULL; +} + static const struct msm_display_funcs msm_dp_display_funcs =3D { .modeset_init =3D msm_dp_modeset_init, .snapshot =3D msm_dp_snapshot, @@ -1386,6 +1391,7 @@ static const struct msm_display_funcs msm_dp_display_= funcs =3D { .needs_periph_flush =3D msm_dp_display_needs_periph_flush, .is_cmd_mode =3D msm_dp_display_is_cmd_mode, .get_dsc_config =3D msm_dp_display_get_dsc_config, + .get_te_source =3D msm_dp_display_get_te_source, }; =20 struct msm_display *msm_dp_get_display(struct msm_dp *msm_dp_display) diff --git a/drivers/gpu/drm/msm/dsi/dsi.c b/drivers/gpu/drm/msm/dsi/dsi.c index e42f5b929b84..e07d1a964c7c 100644 --- a/drivers/gpu/drm/msm/dsi/dsi.c +++ b/drivers/gpu/drm/msm/dsi/dsi.c @@ -20,6 +20,13 @@ static struct drm_dsc_config *msm_dsi_get_dsc_config(str= uct msm_display *display return msm_dsi_host_get_dsc_config(msm_dsi->host); } =20 +static const char *msm_dsi_get_te_source(struct msm_display *display) +{ + struct msm_dsi *msm_dsi =3D container_of(display, struct msm_dsi, display= ); + + return msm_dsi->te_source; +} + static bool msm_dsi_wide_bus_enabled(struct msm_display *display) { struct msm_dsi *msm_dsi =3D container_of(display, struct msm_dsi, display= ); @@ -294,6 +301,7 @@ static const struct msm_display_funcs msm_dsi_display_f= uncs =3D { .needs_periph_flush =3D msm_dsi_needs_periph_flush, .is_cmd_mode =3D msm_dsi_is_cmd_mode, .get_dsc_config =3D msm_dsi_get_dsc_config, + .get_te_source =3D msm_dsi_get_te_source, }; =20 struct msm_display *msm_dsi_get_display(struct msm_dsi *msm_dsi) diff --git a/drivers/gpu/drm/msm/dsi/dsi_manager.c b/drivers/gpu/drm/msm/ds= i/dsi_manager.c index 959daa88b1d0..2a5326f1fa8b 100644 --- a/drivers/gpu/drm/msm/dsi/dsi_manager.c +++ b/drivers/gpu/drm/msm/dsi/dsi_manager.c @@ -614,8 +614,3 @@ bool msm_dsi_is_master_dsi(struct msm_dsi *msm_dsi) { return IS_MASTER_DSI_LINK(msm_dsi->id); } - -const char *msm_dsi_get_te_source(struct msm_dsi *msm_dsi) -{ - return msm_dsi->te_source; -} diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.c b/drivers/gpu/drm/msm/hdmi/hdm= i.c index 918fc9c88a19..6e077747ebce 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi.c +++ b/drivers/gpu/drm/msm/hdmi/hdmi.c @@ -249,6 +249,11 @@ static struct drm_dsc_config *msm_hdmi_get_dsc_config(= struct msm_display *displa return NULL; } =20 +static const char *msm_hdmi_get_te_source(struct msm_display *display) +{ + return NULL; +} + static const struct msm_display_funcs msm_hdmi_display_funcs =3D { .modeset_init =3D msm_hdmi_modeset_init, .snapshot =3D msm_hdmi_snapshot, @@ -256,6 +261,7 @@ static const struct msm_display_funcs msm_hdmi_display_= funcs =3D { .needs_periph_flush =3D msm_hdmi_needs_periph_flush, .is_cmd_mode =3D msm_hdmi_is_cmd_mode, .get_dsc_config =3D msm_hdmi_get_dsc_config, + .get_te_source =3D msm_hdmi_get_te_source, }; =20 struct msm_display *msm_hdmi_get_display(struct hdmi *hdmi) diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h index cda9849811b1..989b0a37d6aa 100644 --- a/drivers/gpu/drm/msm/msm_drv.h +++ b/drivers/gpu/drm/msm/msm_drv.h @@ -288,6 +288,7 @@ struct msm_disp_state; * @needs_periph_flush: whether @mode requires a peripheral flush; mandato= ry. * @is_cmd_mode: whether the sub-block runs in command mode; mandatory. * @get_dsc_config: return the DSC config for the sub-block, or NULL; mand= atory. + * @get_te_source: return the tear-check source name, or NULL; mandatory. */ struct msm_display_funcs { int (*modeset_init)(struct msm_display *display, struct drm_device *dev, @@ -299,6 +300,7 @@ struct msm_display_funcs { const struct drm_display_mode *mode); bool (*is_cmd_mode)(struct msm_display *display); struct drm_dsc_config *(*get_dsc_config)(struct msm_display *display); + const char *(*get_te_source)(struct msm_display *display); }; =20 /** @@ -336,7 +338,6 @@ void __exit msm_dsi_unregister(void); struct msm_display *msm_dsi_get_display(struct msm_dsi *msm_dsi); bool msm_dsi_is_bonded_dsi(struct msm_dsi *msm_dsi); bool msm_dsi_is_master_dsi(struct msm_dsi *msm_dsi); -const char *msm_dsi_get_te_source(struct msm_dsi *msm_dsi); #else static inline void __init msm_dsi_register(void) { @@ -356,11 +357,6 @@ static inline bool msm_dsi_is_master_dsi(struct msm_ds= i *msm_dsi) { return false; } - -static inline const char *msm_dsi_get_te_source(struct msm_dsi *msm_dsi) -{ - return NULL; -} #endif =20 struct msm_dp; --=20 2.47.3 From nobody Fri Jul 24 23:30:38 2026 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 E08B83C8C62 for ; Wed, 22 Jul 2026 06:37:07 +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=1784702229; cv=none; b=CC0HDHicgjcIj6aRpc9VoeKZY5dRLjhmGT2Hp2hirwZgUdCYtB21Ic/6PoJrYYeA6nOsUiDlZoMDHsGry3/q7UQZ8mKGXzdpvHJjEpXsC4g+brVCE0alX5oC2iU/XZ5Kzx6SRExwTXDaKvJXTwziCigaVhxpAKqAVz2A3SSWDsU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702229; c=relaxed/simple; bh=J5JcUdjVT9C9QWSw0xv74Lqie6fwSBbv71Yn78RRXBM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=daRNsPKKqYlNppFjPtWEgV6BAcwzaLkXahOqkoAP38NtFp9E1xdCSL1yTLKp/u6lFM5lf8jJqrSQO2MvZBVCbq7KuPOYHIkcfr4Wo5BE5nmiU5wETqiXgf6S2pyjYzbbprYDli8LbZ6OS6uIh6zUcD0iUAluMNmSwxyRzk+FOno= 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=BlqLdlbH; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Uut7bUb1; 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="BlqLdlbH"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Uut7bUb1" Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66M53iO83787186 for ; Wed, 22 Jul 2026 06:37:06 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= dh9XTLUmPOwHTHXAtvP3AK+tH304PXtEioaM+6qNcog=; b=BlqLdlbHaMzZxr8x Jfa8wsPRL+T4xkXL8ZoGJLniwsokR2JzvSTXLFEOOo8QLpcsKNE2ibD0RUDzETvm ZK+wtpbiT6jrHC6D+eledNVHz92Tf17cYDCzKRiBVyyvYYYS5Qu/2wynX4lS1D54 EAjRsJu5cGBO+6HSlKG0Jgm8i4gyQuL67dSBxYPJknn6fxkf6tpI4QUqSnAyNPM1 d2w7Wn7GAS2HmOCF4dBrxhYuyrFgApJXcs2rmy9qjdSAKVkgSxFIjJ53UE2tx9hE VDzpV/pDwQsGIxSZRu6IVjfQ5YZsZzZ6R0v9OhhjJNByXPWRpaWccg+s2Ze7MJYr 1gsM5w== 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 4fj9aec0cv-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 22 Jul 2026 06:37:06 +0000 (GMT) Received: by mail-qt1-f199.google.com with SMTP id d75a77b69052e-51a8c689b5fso239257571cf.0 for ; Tue, 21 Jul 2026 23:37:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784702226; x=1785307026; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=dh9XTLUmPOwHTHXAtvP3AK+tH304PXtEioaM+6qNcog=; b=Uut7bUb141upI/6spqRHVpfGWc+9QrImxqmuvN6Dyzc6+vl+dJl756FzDSgZUZBToh kyEXQAvo+dLiDO2O6AYnJM0VmMhA9UEpRZMujzJkVuG4alkJWVJXHem9ahGF8cE5oTCS 97mJHj2N3jz/JJwQNoGc+2Q5OvafeJdgt2i1OS/FlC+BbaShh8WEp0vfBpYsIlv2f8on 4FVSAGGEwLl7w+/xwri0U2gkmjL0AF/qOhTPB16qCPbs3Z07+3AJaqBlPQL7F9zwfwmX GsuuZrZr2vWE5y2XDfPet0KstmbuEPaYId4EVnseNnzjztfT+RL0S+ho+S8apzToeXoW 83Vg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784702226; x=1785307026; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=dh9XTLUmPOwHTHXAtvP3AK+tH304PXtEioaM+6qNcog=; b=KIKdmtTjfWWBK689bYdVkUkWst2wZa70jrFQw9PIW/qw3hs8ToKkcl5y4imUTXPTdz KHZ0d4ScL3UcOtjqJQMPAKztDZP1/31uC4ZUH6fCJk+MImBSUpVcwDTyR3CQWLC3yLnZ ST1vfRJfO7bmQRHK/U9EAhtSFu4Jss8eRWoiKar7++iHRH1SKM655L18O1kznx0IIhU5 Nr8E74GOmRV6J5J36rj19bPzjGBBrYYcfZq0c2VnW+f6XK6xKRr9T2BXWzjVlHUA6Z57 AnpZ8juwVne4XVDBB0LSxHAfVh7LzWKYJqhRVtvkdRIE+LbIV0mTVPQ1F0fFQRwLtCKR K13A== X-Forwarded-Encrypted: i=1; AHgh+RptAJNPLb2NqlIelSlT/xTv9PP5Ysu7vYYK/8LhIR1mPDYE/1QQHiUmvuJouNl63tHkPO0lpYmCT4zdoiE=@vger.kernel.org X-Gm-Message-State: AOJu0Ywz2ln98mzF/66U83cI84CT//yfu6sanvGG/bXTRt8W15947XPL AgX/DyJa5CGkp+aGBafnQF2esHnE1lwXYH2/PihEZB26QfGRLnYtlqGIX7PIfznvDrwD9TP6i0K XFvKrnkQvwdBT5jWsoxrq9MuJaDqjTpssdxTmDqQ2iylV+bg7UeulUulgo7SWYzFe8W0= X-Gm-Gg: AR+sD11qG8xICE2K1LS6JcP6SKJcnF0VKNvYm3C1RK3tSzEgS4qJUAazEHlOAM/6WWQ C+IwPgkIpVWFmTjInRdgBwR2gfKDCt0mlbphkFZ0C5D4iDRp2BSpWnpRudoFYAHtlzljdA3nn42 Ta4bVQr9Ug77txn41BObMy+Ldj+CoAjRfivZXrB/4zwNiwSxaaI1pC04vjGHA/k9C7Ckm9Nevhq f+G79A1CQLn2/fd3KlGCXXDprSsdF9YW+Bh0QT1bLmcSrvWc91Z5t2FBwR+kVRxHjFw8LwNDG69 uZ+x5D6z42EA+TKqDyP90y8lcA2VycOuy+ZoXB6o33kFTee5bKpo7mquAELzX2ygFzDtD6zJsUd YyYDEHVSQF5xzxe/O+o0woz1T6LCFcRU8CfTlK/bDyefyxiBGzunUYAE2ytpVQd7ogEJkf2shiS Yl34FqvYLN/shr2A== X-Received: by 2002:ac8:5fc4:0:b0:51c:17cd:1fd4 with SMTP id d75a77b69052e-5213e28d313mr204926721cf.41.1784702225804; Tue, 21 Jul 2026 23:37:05 -0700 (PDT) X-Received: by 2002:ac8:5fc4:0:b0:51c:17cd:1fd4 with SMTP id d75a77b69052e-5213e28d313mr204926451cf.41.1784702225287; Tue, 21 Jul 2026 23:37:05 -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 2adb3069b0e04-5b2a9b8c6f6sm309696e87.4.2026.07.21.23.37.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 23:37:04 -0700 (PDT) From: Dmitry Baryshkov Date: Wed, 22 Jul 2026 09:36:27 +0300 Subject: [PATCH 12/24] drm/msm: add is_bonded and needs_encoder callbacks to msm_display 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: <20260722-drm-msm-display-interface-v1-12-368c10fe62fd@oss.qualcomm.com> References: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> In-Reply-To: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=8063; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=J5JcUdjVT9C9QWSw0xv74Lqie6fwSBbv71Yn78RRXBM=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqYGTosLfEn7Qh9Mbdbzfe8ragWNL7jpuO/cg9W DHuVF5y2SyJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCamBk6AAKCRCLPIo+Aiko 1SGwB/4xm0DUK8KHEcta9ibJjkjRO9FRytup/K4DbMJyJ0zE6VcTSRiXFjUWWGgUMBIflwbeZ4i b6xKzQjtnNyFGSgjDioL2216MMJNsgdSALZFv2Y9pfrvBn6EIReMcVLnYL2sytQ3tXcqSDXnfdn shd5EmCnU1ZsaBi7pzpoy9Jq6voCLLYxQ/gkivR/mR5lWuM+H0t7tbLmAxylAvbR/poqZ16f10X kaoC7JjkzeCiZJdRt8NyZxURXKli5X718e4+SB1XfwCON+y25v9k1KM97yMM7t/6C+FQTwEyV5Q Je4BY1FrNMC0DL1qriYBEbKa1ORQv4nTITo+u8/rzGk0UNqb X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-ORIG-GUID: riXS_nygXlUCffH-qEnQNM8f3jdRxZsC X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX0VmXj3/AZkhL vyOxBuPp41t5yUstQNQI/f2Z9W+B8n68zh//QLbFmYxmK3nlhJ8fjScpWO9WPkXgh5ZxIUV9WBs /s3CSflHODgbqAZe/gzudq5uai+N/48= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX00Q1eoWKI22t wlW+5yHnUflPGV3GbkrEOYjpcIwtZwfK3j5C3nIvkFKXPMzGby3sC54O+vc8uAQmRnDN8Shbw1i CiPgXlL+6dKoxhUcUdnp33EhpOhykhh808PZ599g9FjKmnSXN5TJ1wagP9x5aRHmdnYu66Ywr+I gxSK9RaccT8Z21Zl30PAqW4gW0AO5z8SffxiNGrgiq7lo7U4ETQHMz78cQ+uYKGgZkNqLxE0l4B dBPRoyq4AqkAdee8dnD2toMILKH4phv3rQbGZOvjvldkjbeagqFruRKgX3A/uzWI11QaBvUMBS9 jzkwCuXaQvYerzxlP+T/3aZ7uSqMaqV+rj/N+kapG/651yIQPl/Zy/PYE+AXLcwbL9IFZWZ4fRf ZvShOLhCgnjaGjit2284Byl/xCgJDF9KY+vn3hXUfTbI5SI+1lMl04+sdkJLlDrNH1HEbTRO4yF NQzug3c91nKOOWGYyvw== X-Proofpoint-GUID: riXS_nygXlUCffH-qEnQNM8f3jdRxZsC X-Authority-Analysis: v=2.4 cv=Cr6PtH4D c=1 sm=1 tr=0 ts=6a606512 cx=c_pps a=WeENfcodrlLV9YRTxbY/uA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=EUspDBNiAAAA:8 a=RdJ1Xk1vZwbINtqq3GsA:9 a=QEXdDO2ut3YA:10 a=kacYvNCVWA4VmyqE58fU:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-22_02,2026-07-21_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 adultscore=0 impostorscore=0 lowpriorityscore=0 spamscore=0 phishscore=0 clxscore=1015 suspectscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607220060 The DPU DSI setup calls msm_dsi_is_bonded_dsi() and msm_dsi_is_master_dsi() on the concrete sub-block to decide whether to create an encoder (the slave of a bonded pair shares the master's) and whether to add a second tile. Add two mandatory callbacks: is_bonded() and needs_encoder(). DSI implements them in terms of its internal bonded/master helpers (now declared privately in dsi.h); DP and HDMI are never bonded and always need their own encoder. The DPU backend uses the callbacks, dropping the last concrete msm_dsi_*() queries from its display setup. No functional change intended. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 8 ++++---- drivers/gpu/drm/msm/dp/dp_display.c | 12 ++++++++++++ drivers/gpu/drm/msm/dsi/dsi.c | 15 +++++++++++++++ drivers/gpu/drm/msm/dsi/dsi.h | 2 ++ drivers/gpu/drm/msm/hdmi/hdmi.c | 12 ++++++++++++ drivers/gpu/drm/msm/msm_drv.h | 17 +++++++---------- 6 files changed, 52 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/= disp/dpu1/dpu_kms.c index 8dacde316033..2eeaef963e1a 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c @@ -603,18 +603,18 @@ static int _dpu_kms_initialize_dsi(struct drm_device = *dev, if (!priv->kms->dsi[i]) continue; =20 - if (msm_dsi_is_bonded_dsi(priv->kms->dsi[i]) && - !msm_dsi_is_master_dsi(priv->kms->dsi[i])) + display =3D msm_dsi_get_display(priv->kms->dsi[i]); + + if (!display->funcs->needs_encoder(display)) continue; =20 memset(&info, 0, sizeof(info)); info.intf_type =3D INTF_DSI; =20 info.h_tile_instance[info.num_of_h_tiles++] =3D i; - if (msm_dsi_is_bonded_dsi(priv->kms->dsi[i])) + if (display->funcs->is_bonded(display)) info.h_tile_instance[info.num_of_h_tiles++] =3D other; =20 - display =3D msm_dsi_get_display(priv->kms->dsi[i]); info.is_cmd_mode =3D display->funcs->is_cmd_mode(display); =20 rc =3D dpu_kms_dsi_set_te_source(&info, display); diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index 95810e3b01a7..914cf9dd0f21 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -1384,6 +1384,16 @@ static const char *msm_dp_display_get_te_source(stru= ct msm_display *display) return NULL; } =20 +static bool msm_dp_display_is_bonded(struct msm_display *display) +{ + return false; +} + +static bool msm_dp_display_needs_encoder(struct msm_display *display) +{ + return true; +} + static const struct msm_display_funcs msm_dp_display_funcs =3D { .modeset_init =3D msm_dp_modeset_init, .snapshot =3D msm_dp_snapshot, @@ -1392,6 +1402,8 @@ static const struct msm_display_funcs msm_dp_display_= funcs =3D { .is_cmd_mode =3D msm_dp_display_is_cmd_mode, .get_dsc_config =3D msm_dp_display_get_dsc_config, .get_te_source =3D msm_dp_display_get_te_source, + .is_bonded =3D msm_dp_display_is_bonded, + .needs_encoder =3D msm_dp_display_needs_encoder, }; =20 struct msm_display *msm_dp_get_display(struct msm_dp *msm_dp_display) diff --git a/drivers/gpu/drm/msm/dsi/dsi.c b/drivers/gpu/drm/msm/dsi/dsi.c index e07d1a964c7c..69e57ab47258 100644 --- a/drivers/gpu/drm/msm/dsi/dsi.c +++ b/drivers/gpu/drm/msm/dsi/dsi.c @@ -27,6 +27,19 @@ static const char *msm_dsi_get_te_source(struct msm_disp= lay *display) return msm_dsi->te_source; } =20 +static bool msm_dsi_is_bonded(struct msm_display *display) +{ + return msm_dsi_is_bonded_dsi(container_of(display, struct msm_dsi, displa= y)); +} + +static bool msm_dsi_needs_encoder(struct msm_display *display) +{ + struct msm_dsi *msm_dsi =3D container_of(display, struct msm_dsi, display= ); + + /* the slave of a bonded pair shares the master's encoder */ + return !(msm_dsi_is_bonded_dsi(msm_dsi) && !msm_dsi_is_master_dsi(msm_dsi= )); +} + static bool msm_dsi_wide_bus_enabled(struct msm_display *display) { struct msm_dsi *msm_dsi =3D container_of(display, struct msm_dsi, display= ); @@ -302,6 +315,8 @@ static const struct msm_display_funcs msm_dsi_display_f= uncs =3D { .is_cmd_mode =3D msm_dsi_is_cmd_mode, .get_dsc_config =3D msm_dsi_get_dsc_config, .get_te_source =3D msm_dsi_get_te_source, + .is_bonded =3D msm_dsi_is_bonded, + .needs_encoder =3D msm_dsi_needs_encoder, }; =20 struct msm_display *msm_dsi_get_display(struct msm_dsi *msm_dsi) diff --git a/drivers/gpu/drm/msm/dsi/dsi.h b/drivers/gpu/drm/msm/dsi/dsi.h index 1d1bda0682db..d594a7399f54 100644 --- a/drivers/gpu/drm/msm/dsi/dsi.h +++ b/drivers/gpu/drm/msm/dsi/dsi.h @@ -50,6 +50,8 @@ struct msm_dsi { }; =20 /* dsi manager */ +bool msm_dsi_is_bonded_dsi(struct msm_dsi *msm_dsi); +bool msm_dsi_is_master_dsi(struct msm_dsi *msm_dsi); int msm_dsi_manager_connector_init(struct msm_dsi *msm_dsi, struct drm_encoder *encoder); int msm_dsi_manager_cmd_xfer(int id, const struct mipi_dsi_msg *msg); diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.c b/drivers/gpu/drm/msm/hdmi/hdm= i.c index 6e077747ebce..506a9856459e 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi.c +++ b/drivers/gpu/drm/msm/hdmi/hdmi.c @@ -254,6 +254,16 @@ static const char *msm_hdmi_get_te_source(struct msm_d= isplay *display) return NULL; } =20 +static bool msm_hdmi_is_bonded(struct msm_display *display) +{ + return false; +} + +static bool msm_hdmi_needs_encoder(struct msm_display *display) +{ + return true; +} + static const struct msm_display_funcs msm_hdmi_display_funcs =3D { .modeset_init =3D msm_hdmi_modeset_init, .snapshot =3D msm_hdmi_snapshot, @@ -262,6 +272,8 @@ static const struct msm_display_funcs msm_hdmi_display_= funcs =3D { .is_cmd_mode =3D msm_hdmi_is_cmd_mode, .get_dsc_config =3D msm_hdmi_get_dsc_config, .get_te_source =3D msm_hdmi_get_te_source, + .is_bonded =3D msm_hdmi_is_bonded, + .needs_encoder =3D msm_hdmi_needs_encoder, }; =20 struct msm_display *msm_hdmi_get_display(struct hdmi *hdmi) diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h index 989b0a37d6aa..378d2cc80b66 100644 --- a/drivers/gpu/drm/msm/msm_drv.h +++ b/drivers/gpu/drm/msm/msm_drv.h @@ -289,6 +289,11 @@ struct msm_disp_state; * @is_cmd_mode: whether the sub-block runs in command mode; mandatory. * @get_dsc_config: return the DSC config for the sub-block, or NULL; mand= atory. * @get_te_source: return the tear-check source name, or NULL; mandatory. + * @is_bonded: whether the sub-block is part of a bonded (tiled) pair; + * mandatory. + * @needs_encoder: whether the sub-block needs its own encoder created (fa= lse + * for e.g. the slave of a bonded pair, which shares the + * master's encoder); mandatory. */ struct msm_display_funcs { int (*modeset_init)(struct msm_display *display, struct drm_device *dev, @@ -301,6 +306,8 @@ struct msm_display_funcs { bool (*is_cmd_mode)(struct msm_display *display); struct drm_dsc_config *(*get_dsc_config)(struct msm_display *display); const char *(*get_te_source)(struct msm_display *display); + bool (*is_bonded)(struct msm_display *display); + bool (*needs_encoder)(struct msm_display *display); }; =20 /** @@ -336,8 +343,6 @@ void dsi_dev_detach(struct platform_device *pdev); void __init msm_dsi_register(void); void __exit msm_dsi_unregister(void); struct msm_display *msm_dsi_get_display(struct msm_dsi *msm_dsi); -bool msm_dsi_is_bonded_dsi(struct msm_dsi *msm_dsi); -bool msm_dsi_is_master_dsi(struct msm_dsi *msm_dsi); #else static inline void __init msm_dsi_register(void) { @@ -349,14 +354,6 @@ static inline struct msm_display *msm_dsi_get_display(= struct msm_dsi *msm_dsi) { return NULL; } -static inline bool msm_dsi_is_bonded_dsi(struct msm_dsi *msm_dsi) -{ - return false; -} -static inline bool msm_dsi_is_master_dsi(struct msm_dsi *msm_dsi) -{ - return false; -} #endif =20 struct msm_dp; --=20 2.47.3 From nobody Fri Jul 24 23:30:38 2026 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 457673D1CCA for ; Wed, 22 Jul 2026 06:37:09 +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=1784702230; cv=none; b=AwlQcco/FgMWx4+tonUm/r1lEvb5OOMJDvFI5Sa2LbaOIEN7rIXaqH69tRcmbNgBLA52Ig7ojqhrlsfuvottM91Oln1zkwJZAhKxfMyh9vomjdQma3mSIGy/Ykl5/LT0NQsBhfXC8RRkqfsgEVH1T+QXOizhdCdCBzz3XRjJqBk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702230; c=relaxed/simple; bh=AqGGr0Rt7sNJZEaxYRLu/whaI4ak/KQrIfKpyXCjw1s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ckfQHZCweaXfJnTgHYI0dYiHedEY59Hk4Gfop3gj0gness/aa1OwxC9f5Ezzyiw/gPCBhfgXAqc3Qp/Wvwe4+jSS3Rk31hG/v6F9appusn+UWcOA2iyITcAckDrmNK6VXsUBgmmQwweXn3Aw2SMO8kQ/ByzdPtsYbz5sU9MP/cs= 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=SDcDK5Nz; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=S7+z+97q; 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="SDcDK5Nz"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="S7+z+97q" Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66M53rme3917829 for ; Wed, 22 Jul 2026 06:37:08 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= ZiBIsylPCkNax8ix1SjuSMzRFBkg3HmZWMUJ4ntbMfo=; b=SDcDK5NzOu0F0wCC GoJNcV1rxw/IqBHHa1n7PGIYUAtlVSyG4fj0IRuuqhhl5KUn2skmScdaGaUArIIM G/Va/HMc2q/XA4bkfOHgxxatHHza2ac5zf2syYmrkKrGfvaYfOj/diBRHRgJOD8b wEus41X/Yvy0ZF2THHh+VC2uhyMc9gavYZE/pw54Chrg4HeqsFjJoO3VZhfWfdo6 15YyTwo0UhJNhCVsmyJqWkaxyUBwMCOrjyYsqyUv2PMFRR90+2QJiYjh7zS+FXQY 2BC/D3/HRQ1TIojFO7YEpgBgfU6wgdUkAO1k9flHvw/kDStBw2VujDZgDFvmW+x5 34kV0g== Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fjd6aahtg-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 22 Jul 2026 06:37:07 +0000 (GMT) Received: by mail-qt1-f197.google.com with SMTP id d75a77b69052e-51c1b4d961dso102805071cf.1 for ; Tue, 21 Jul 2026 23:37:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784702227; x=1785307027; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=ZiBIsylPCkNax8ix1SjuSMzRFBkg3HmZWMUJ4ntbMfo=; b=S7+z+97qyMQHAhsvYHmOtBD0GShvwOeHEJINHbax9nbkHEQoxmaichNnFyiPFy3Lt7 iK9rHcwiy5woXy38N30PkWJC0Rj3FEqmdXWDTY0iCDKsy0XjfQyCIur5iCkJrApBAyvK ZGQdlEm8RCOqiPikoQ8AWC0xN1EZmY8S+jcshBeVTm75HLFxoU1D2i+F9qlsr+ieJ7Ny w8o5yiSt/UDPBk2t2F53m9dFQ+s2tKKTR0nLG6klTS28ER01NNshPcSlrTffk+D6s8ZC RtmSxK+HjKeeuQxUaAo/CYPLq281zRuRbIar8K4gL4sh0mOrfO0tMCbu/NproP5d7j+G QaqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784702227; x=1785307027; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=ZiBIsylPCkNax8ix1SjuSMzRFBkg3HmZWMUJ4ntbMfo=; b=NnKxVdBi0SI1+c7q1Ga+b83IruIQg5Uy4Z4c6pcTL3dS78p5huRVlbjgdQIVEzVWEF +iVUva4ip4bBsLugdBdzkcFsyaaZrdhdTzO6rLha1zPu4xKcw37lR5xlX2lD157QgLKM N585S6np8eQamIVigl0J5mHD/oRC0RVpS5r3+Dg+z4F9za1nur/8PjFed85R74pv9ayy jwx+o+Wy3CWJ0VyCgLejOZzrowJ0UeckbjmktMRpyRi6bJ+IW+MQ8PoTab+U2SC9XKoC uhLROkBKQeqPuWpZjUsS24KEcP0WLpkB8RC0/W150BC/UKwgyA202CxGwO8EtiqZvos2 MwoQ== X-Forwarded-Encrypted: i=1; AHgh+RohIxojX02jQ8hfsqHbYbOO/qhtEZOYJW8yr08rHBN+Wp4orw+YtXWlfmpf7panHP3fF6ItwfH7zihdSzU=@vger.kernel.org X-Gm-Message-State: AOJu0YzrgTW+GiLVrCUjwZ/d1N9D6x1LIXrhH2ZJlRgu4J3PH4IEzkdD Dk3VYYq6AR/Wg41SWg4/on1yMVlZzkpGmYExwWrbDARwSXwOhxuueubHXWJcuIC+Zi8jtlZtjuJ M1kUtb/ftnr3ifjin2hei/Tp/WgMIXsBOOOMUhRLqZ6Eb3xXX1B0nNS35f3TnyRUNW1o= X-Gm-Gg: AR+sD13yfpnYJZqJK1Fv52EpLKTS3NH/MfR4T1O/zmTE4lX0a2kkDTLpvlw2R1UPPnu AQeX9VNMbnAFd2QydYaIEjs0/90MxzskR826HA/5Azh3Zup78sV4c0OC6q5dtd9yNtquxGF23AL Ci1stFREh+bS7ByHoPVvvMiTugYIl39PpY1X4xbn9q8/IDsiFoHqK3s/fYhwLclaFtc+IpcWlF2 FNxgPGepNcUT3r+rpi6XfiQIyXFxas+LtCXHjEkpYzM+jE13eUxUUSov1y5wUjjT3C0GzkTxE5L HDx13EIuRWFgjtb/EPjPdDa0tfpMwHAWnDKVXLphmD/QMwxEKl73KdyGeksZQG3y3WbBpiXuBi3 MRY7cCxUAuLsygnnxRhYqcyRJQPIgr/+BbaBV5ygPiLmwbLLRuus2TmplxbHqg2BHFbFJkL3BN+ 4cpMRV3ZxENVOIIQ== X-Received: by 2002:ac8:7e86:0:b0:51c:7aa7:e0e9 with SMTP id d75a77b69052e-527a8c47932mr28198061cf.38.1784702227427; Tue, 21 Jul 2026 23:37:07 -0700 (PDT) X-Received: by 2002:ac8:7e86:0:b0:51c:7aa7:e0e9 with SMTP id d75a77b69052e-527a8c47932mr28197901cf.38.1784702227021; Tue, 21 Jul 2026 23:37:07 -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 2adb3069b0e04-5b2a9b8c6f6sm309696e87.4.2026.07.21.23.37.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 23:37:05 -0700 (PDT) From: Dmitry Baryshkov Date: Wed, 22 Jul 2026 09:36:28 +0300 Subject: [PATCH 13/24] drm/msm/hdmi: use dev_get_drvdata() in msm_hdmi_unbind() 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: <20260722-drm-msm-display-interface-v1-13-368c10fe62fd@oss.qualcomm.com> References: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> In-Reply-To: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1198; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=AqGGr0Rt7sNJZEaxYRLu/whaI4ak/KQrIfKpyXCjw1s=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqYGToionz/6DV8ZJm4VhBU5q5cv0PTogHzLvP1 E0dMH7Ja2eJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCamBk6AAKCRCLPIo+Aiko 1c4jB/sGpoJuEPkjQmHA+gOgJJldC9vfgxczwZ/mlbfo1qcHv0crA6wb9wWjkhGqtdoke/T3+Xq zoCmjXzS6pjPL6FAgqbp1fnb4eSoe87Ny0Q+b1ZjW+3Yr2fNpMPUinjSmFt5wihbljgyXqoJhsM fCO/pYrPPiKuPpvuUw9LyboJUxAS7kig8cx9xIyb9XcG1Zl04chRDqu9/tdxg+lZa/KiS5ZeVBL T8XAwNPGXw5l0J0qfOo/JieidzCUlkTbPj6DbWdId1m007EXNRd2M3zDj6pQ35/nNkAXziYrFIw rlEM+HoJ5UjEEs1QvYvW5F69w8tr01Z/9WuzUyfQ+D/POHU4 X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX50vyIPuQ0kC5 tYxM1PnFVVK16YLfWr2jRUgSeOwksOgcYGLUtWxyIy5AmLo82Cn65tZXGCCUXwc5tGotisIdE9Q DEYtXq+IpvcNXMiHl0HPHc2y1ZAA5+R8CN+VJb03Kn8w1S8hHfE7qgykMnq0FjLwxVml+AEUavi pRFru4yTBHMrR/cIzJ77YEdL58PvGwcHBx4vvKuxLHk6Q0I/4WiEtjBuFt9AIXOHkAfQzpmEz8F aJX13CsO4GVX4jiDcDtG8l4FXP9Mnw3B+SVyqfnz/tpi0bZQJNrTFUw/JpbQytKxtwzGPflL8eM iEIkVNdyC7Vhj0e1NxawZ9wlDNA7sRr4iionGx/DCLA9ZIRr3u7b9LyAyHfHqwjo6D92gUsqD2m /jwKdbpOlEogr74B4E4bRcDfPSPk7zl9lIxZoOtXkS19ht/ysMx4Owm8unikXqwLyiNmVRZyNBB RxhWavTQr0hNol6iC0g== X-Proofpoint-GUID: RhfcZ35CyQCCOxUsaMUDxGbWlUngFfgp X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX9lmRrPO6BJa3 QL7tcPkJF0gOzB7ZWsAxtrwnH4Fe4gKawPhmZsPhkzVrTtprBP37ZSHdLyDdeED0kp4BGLzWrK6 PqN9Sbqs+ggZxvn5oskX+Dov78zY9gY= X-Authority-Analysis: v=2.4 cv=HvJG3UTS c=1 sm=1 tr=0 ts=6a606513 cx=c_pps a=EVbN6Ke/fEF3bsl7X48z0g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=EUspDBNiAAAA:8 a=sJWZvIJlLrokpUqr1y0A:9 a=QEXdDO2ut3YA:10 a=a_PwQJl-kcHnX1M80qC6:22 X-Proofpoint-ORIG-GUID: RhfcZ35CyQCCOxUsaMUDxGbWlUngFfgp X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-22_02,2026-07-21_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 lowpriorityscore=0 malwarescore=0 phishscore=0 clxscore=1015 adultscore=0 priorityscore=1501 impostorscore=0 spamscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607220060 msm_hdmi_unbind() fetches its struct hdmi indirectly through priv->kms->hdmi. The hdmi structure is already stored as the driver data of the HDMI device (and retrieved that way in msm_hdmi_bind()), so use dev_get_drvdata() here too. The hdmi pointer is always valid at unbind time, so the priv->kms->hdmi check can be dropped as well. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/hdmi/hdmi.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.c b/drivers/gpu/drm/msm/hdmi/hdm= i.c index 506a9856459e..0327098287d1 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi.c +++ b/drivers/gpu/drm/msm/hdmi/hdmi.c @@ -324,11 +324,10 @@ static void msm_hdmi_unbind(struct device *dev, struc= t device *master, void *data) { struct msm_drm_private *priv =3D dev_get_drvdata(master); + struct hdmi *hdmi =3D dev_get_drvdata(dev); =20 - if (priv->kms->hdmi) { - msm_hdmi_destroy(priv->kms->hdmi); - priv->kms->hdmi =3D NULL; - } + msm_hdmi_destroy(hdmi); + priv->kms->hdmi =3D NULL; } =20 static const struct component_ops msm_hdmi_ops =3D { --=20 2.47.3 From nobody Fri Jul 24 23:30:38 2026 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 669023E49E7 for ; Wed, 22 Jul 2026 06:37:11 +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=1784702234; cv=none; b=nY1EX5kCKRe4Wxkwu8XV7qBwJ/zqlM8YQcuw5WI9OYVJr5fCTQdr+pCHMLMdhU+8Vjvw/Yv9PL7gN028wqLOoV5bDQpeNVXqMBaI9dqinw18xueGbIl/t9kEcBjQmwWScaqnGvTsirz4YMCe6+gJzegSkTLsL7rczZ8bjv+K4lI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702234; c=relaxed/simple; bh=2gZIjt+CW7BgzLYsCIE9YAc5XmD7te0tRFqzurdAo68=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=eMOOQuVs5XHHnRNFwqj9RtLrcO8B/44mOM/LVxh5fzKWPEVPDSecy7c9BtWK9CTtl2D7mkqdTCSK8oEeKApPs/qDdRm2n7Woyk3ITLrObBAPlL3y5eg1ALhFMjLktaapSI1nRbVEH5lfWR9VXWRm3r3kpmUBIGm75DuCaeZjgHo= 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=lmG6/wqA; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=DQPmiYsa; 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="lmG6/wqA"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="DQPmiYsa" 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 66M547C44046130 for ; Wed, 22 Jul 2026 06:37:10 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= oGW1zFzCpiJIZJA57ARRLMmK4sTskI8VOnNO41WxLkA=; b=lmG6/wqA+eIjqDC6 XzkC3OiF0xPoO61nYfiZKACkTC/dc3CtpqmQX5ZIqLy4QtyzcdPDFLDha5z0F67H fpignWTIsjpwsi9IMqnlvvcMpY5eQSqn8seNiH464id7Xc/8XvZWKVtpCMfJuyYI CvdfTUvF+AyG+VnjVWr6lqeCMQoV2fTXhGm7/AAIQBKkocy6kr2D3DP34JLKTwcG QjfuwTTsg689zeTu8rRuUrwYZuK340vntHoZjLg7VpWDBBqZXD8iA57Mr71NBnXo gzPyEEgsU3lc9XW5kFVqhN08hefoAAfLpbnqvUZxjGe8vJ2PeinrZ4HBHaZNY+N7 /PEKpQ== Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fjd6dan34-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 22 Jul 2026 06:37:10 +0000 (GMT) Received: by mail-qt1-f197.google.com with SMTP id d75a77b69052e-51c083f1818so164896451cf.0 for ; Tue, 21 Jul 2026 23:37:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784702229; x=1785307029; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=oGW1zFzCpiJIZJA57ARRLMmK4sTskI8VOnNO41WxLkA=; b=DQPmiYsaSml/M3UgmHJpbDvTGhgo7CNhIVsULiYDlhKRZZ5yMbqcoyKulDbWL6IgAt o19CiJDpU6hvsykm1RIJuBiGPgmvxg4/qP7utBRZCdxSzQv241I5ESuZvnPTimoiUAWI Ld6Dk7abDAKmXhbRdfn5GacjFiAiZMAF+our6klv/TFcQ+DpRB6scE8ZWuKbKfXeXJ6q P/xHkdYNOLduJV/43KRkm1hMDeOsd3POJOGKr/NBTWL625BniH3VIIjz8+04ajvB8vpB zRUWOlYls9RPgGf1ZNmTe+kxuUFDdvqNRd4ZrTBp3yIIy7SuhJmoyqy7T4awx1EXui72 rx6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784702229; x=1785307029; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=oGW1zFzCpiJIZJA57ARRLMmK4sTskI8VOnNO41WxLkA=; b=Oc8ebJRdsY4/Mm9Vi6kUedrJx4Slze1UTzcTdBUdCkGb9vNZX2ui0Fa8Gi0OClKepy oTduH9YbjkfqCGjR+Rq7EhQMxVY6NJLO6XPS1U421FLlswvApi6C2+c8tM+HXIq2hMa3 09CVkYedJ6hoo2bXjyojVuv9zcZF8TNwIa/kTsSZwZ15npN6uJ5zOmeLfno0aQ4eo/QY uxd82qA/G6HjLikoPDVtEsAQCtw34QP2vYDKpflszt/QNIDmZ/8bmp9PJweXPJP4rzzN 0d4lfaMBtOWCtJ0iW6l8RVFaCVotkL8AzwL16ZNCD8wdgPHpIVEAiC68FMQJWX0SONK2 Sqpg== X-Forwarded-Encrypted: i=1; AHgh+Rqx4K49mxcD0XZuaA8w75sP1SxMYDWKt91UY2CjtgKkYVO+2S0D9B+asLmRnN2qLv+34Cy0fnbFYxhV+Dg=@vger.kernel.org X-Gm-Message-State: AOJu0YxB/cp3ISWV65152Wvzft4Bla/QsL9g29JkCB1Afea3nKjD5Ych 0vX6sMPli9ZA22JDuganTztdhSc/ZWi1Yl0ISnhHRJjDBdOHsb8hvSJDiSuXlfmgBq0/1WnRgKA no3pkwgZt7vyU56FL7TxyEfNGpYeXxBNEG+gOZ5IRcigXjvkRPV3um8zvADgKYsSB+Ok= X-Gm-Gg: AR+sD11pXl6liQIF+8gYg2cMcgR302ZkPOVKLEqM+skRAsjCty3bbS6J69yhbD2/sl6 VHMFM3nCqE1zsq4sq1LCK+8vU2Rc2QwEsFPEvOBXB9/po6G6cUeMfEh2PzIkgdhBxxcj29Kxkt+ 3i4jBCdTxGT9u9+44eoZPG1xS+YGXO1lp/bkv7J+WgWYLsWDq7OseY0Sv4tPsYum60I3iMnY2dZ pzpczXDCH4b7CmKtbU6voUqGS7BNLCM5xjwm9c690UCtg89nf4gQbynyi2iFqWigLC/+T46+n+I XtuSvGWcdMZGm9cX2yO1O+pbmFAXJjhBye3+uFVZjSIMgACbnegroqnuOuk5DqYQYER9n5uLqLB b9GlTf1fPi2Qj2hGDzJTwZLzvTIvWCHZzmB1UHBIjxdVgd2kl53fyAlE1P0Iop+wcSXyQe/hJIX Su/MDYh5RqjaV1UQ== X-Received: by 2002:ac8:7f53:0:b0:51c:7b12:5ff9 with SMTP id d75a77b69052e-5213d7abfc0mr208200021cf.85.1784702229328; Tue, 21 Jul 2026 23:37:09 -0700 (PDT) X-Received: by 2002:ac8:7f53:0:b0:51c:7b12:5ff9 with SMTP id d75a77b69052e-5213d7abfc0mr208199691cf.85.1784702228839; Tue, 21 Jul 2026 23:37:08 -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 2adb3069b0e04-5b2a9b8c6f6sm309696e87.4.2026.07.21.23.37.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 23:37:07 -0700 (PDT) From: Dmitry Baryshkov Date: Wed, 22 Jul 2026 09:36:29 +0300 Subject: [PATCH 14/24] drm/msm: store the display sub-blocks as struct msm_display 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: <20260722-drm-msm-display-interface-v1-14-368c10fe62fd@oss.qualcomm.com> References: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> In-Reply-To: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=10011; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=2gZIjt+CW7BgzLYsCIE9YAc5XmD7te0tRFqzurdAo68=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqYGTojVumxCAb/menMez1MJQjApmx7tpHl7KyR yhEZLS/4seJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCamBk6AAKCRCLPIo+Aiko 1a72CACjUO43qEeNKr/ZzJA9xLX8XkrW8tjs8HyPWuSk0oNsgXoWzNle5FwhTyVoJTbBQLcDxjA nTrq39DN/OP1cFUcibOF23bbPFlvwHRLJR1vIc5uMF7/YjxLx+XsPC+kke4ox4GrpggCkIDb3ye ldrKzKpVHzImBxybw6yw5IvHJ0medyrDn5c5r7KCHKcgrfXXNcsssn0g/m64NmZ+HE1BZaSd7Z7 0oAcpDn9B46B6SYtWj/Md9LnCDWSGJHWOJWzwgE7CYVBaE0QjSbAml9Yy2K4U/BEEwaPvi1EFpu a/303zhwdyJMvN/anIhVWjO87VWJHg3j79Fa0YP//P1+Q3j3 X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX16xnPS3AD4RB x+OyydJKrflymLOf/Mqhzia5jp7HQBId0Kc/yvbS+kjrcrWj5ihqr1MKI6efYylpet4S00FgyLL BPlAvgoNwmuSEjt/Wf1Sol+pmLG3QEM= X-Authority-Analysis: v=2.4 cv=Ipsutr/g c=1 sm=1 tr=0 ts=6a606516 cx=c_pps a=EVbN6Ke/fEF3bsl7X48z0g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=EUspDBNiAAAA:8 a=v7Gipn9cxXP9LZtw54EA:9 a=QEXdDO2ut3YA:10 a=a_PwQJl-kcHnX1M80qC6:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX1UTQOqLu0H9l E75VqjfeYGd84YQvow0jZ+3Rffq6gFPiAGwb9X5g4WEKzzpmxNX+PliL/7gELTVpj8utEOLiOk5 yWQUo5BpoDl+YWrXbOiQsEzc0Arl/zjI5dlxmcgC58O1nTh+3CCVFYRrGWgcl/NEqdNSHmJqo3r dM6N6/Ksghb1/AUS87n4Iuf5bJiGDLN/ko7UbYL3wMJE6x1ILtTee8AaK3sxqcnrsZpNdRLtVKA 6b0uHx0cctZqG/51VCi0rMzjYFHTxZzLOR+Ul3SZw1HNItqdkkLLFCSNdqvqeo2eRRADFFySKlO fUciSwZmDot+7VBmfoMQKj8BX+O7FNIB7k0w3DYnFSQK60EP7SPlLBjq1vowMJ/iSwVe3BGU75A FU9KlRW96kOrNiMhr5DHJO9HyCsLoZrbJjQgIewqRRExodGQu8vVAX/tC6dePTkbtIh2hXZnqlJ aeyE0zs7Ve/tHpwdn6w== X-Proofpoint-GUID: JshJg41FH-txcYNuO3olz9VJyA3FPfvP X-Proofpoint-ORIG-GUID: JshJg41FH-txcYNuO3olz9VJyA3FPfvP X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-22_02,2026-07-21_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 suspectscore=0 spamscore=0 phishscore=0 bulkscore=0 priorityscore=1501 impostorscore=0 malwarescore=0 adultscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607220060 With every cross-module query of the DSI, DP and HDMI sub-blocks now going through the msm_display interface, struct msm_kms no longer needs to know their concrete types. Store the sub-blocks as struct msm_display pointers in struct msm_kms; each sub-driver registers &obj->display. The msm_*_get_display() accessors are no longer needed and are removed, and callers use kms->dsi[]/dp[]/hdmi directly. No functional change intended. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 6 +++--- drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 2 +- drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c | 2 +- drivers/gpu/drm/msm/disp/msm_disp_snapshot_util.c | 6 +++--- drivers/gpu/drm/msm/dp/dp_display.c | 7 +------ drivers/gpu/drm/msm/dsi/dsi.c | 7 +------ drivers/gpu/drm/msm/hdmi/hdmi.c | 7 +------ drivers/gpu/drm/msm/msm_drv.h | 15 --------------- drivers/gpu/drm/msm/msm_kms.c | 11 +++++------ drivers/gpu/drm/msm/msm_kms.h | 6 +++--- 10 files changed, 19 insertions(+), 50 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/= msm/disp/dpu1/dpu_encoder.c index 569f3759d02c..aa8a9b7c1beb 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c @@ -261,11 +261,11 @@ static struct msm_display *dpu_encoder_get_display(st= ruct drm_device *dev, =20 switch (disp_info->intf_type) { case INTF_DP: - return msm_dp_get_display(priv->kms->dp[index]); + return priv->kms->dp[index]; case INTF_DSI: - return msm_dsi_get_display(priv->kms->dsi[index]); + return priv->kms->dsi[index]; case INTF_HDMI: - return msm_hdmi_get_display(priv->kms->hdmi); + return priv->kms->hdmi; default: return NULL; } diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/= disp/dpu1/dpu_kms.c index 2eeaef963e1a..ec5e02c395f6 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c @@ -603,7 +603,7 @@ static int _dpu_kms_initialize_dsi(struct drm_device *d= ev, if (!priv->kms->dsi[i]) continue; =20 - display =3D msm_dsi_get_display(priv->kms->dsi[i]); + display =3D priv->kms->dsi[i]; =20 if (!display->funcs->needs_encoder(display)) continue; diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm= /disp/mdp5/mdp5_kms.c index e372d295b80f..c91915030111 100644 --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c @@ -361,7 +361,7 @@ static int modeset_init_intf(struct mdp5_kms *mdp5_kms, break; } =20 - display =3D msm_dsi_get_display(priv->kms->dsi[dsi_id]); + display =3D priv->kms->dsi[dsi_id]; priv->kms->dsi_encoder[dsi_id] =3D encoder; mdp5_encoder_set_intf_mode(encoder, display->funcs->is_cmd_mode(display)); diff --git a/drivers/gpu/drm/msm/disp/msm_disp_snapshot_util.c b/drivers/gp= u/drm/msm/disp/msm_disp_snapshot_util.c index b42a92c2ffad..d376c3cdd8b5 100644 --- a/drivers/gpu/drm/msm/disp/msm_disp_snapshot_util.c +++ b/drivers/gpu/drm/msm/disp/msm_disp_snapshot_util.c @@ -140,18 +140,18 @@ void msm_disp_snapshot_capture_state(struct msm_disp_= state *disp_state) kms =3D priv->kms; =20 for (i =3D 0; i < ARRAY_SIZE(kms->dp); i++) { - display =3D msm_dp_get_display(kms->dp[i]); + display =3D kms->dp[i]; if (display) display->funcs->snapshot(display, disp_state); } =20 for (i =3D 0; i < ARRAY_SIZE(kms->dsi); i++) { - display =3D msm_dsi_get_display(kms->dsi[i]); + display =3D kms->dsi[i]; if (display) display->funcs->snapshot(display, disp_state); } =20 - display =3D msm_hdmi_get_display(kms->hdmi); + display =3D kms->hdmi; if (display) display->funcs->snapshot(display, disp_state); =20 diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index 914cf9dd0f21..1baeb9401cfa 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -215,7 +215,7 @@ static int msm_dp_display_bind(struct device *dev, stru= ct device *master, =20 dp->msm_dp_display.drm_dev =3D drm; dp->msm_dp_display.display.funcs =3D &msm_dp_display_funcs; - priv->kms->dp[dp->id] =3D &dp->msm_dp_display; + priv->kms->dp[dp->id] =3D &dp->msm_dp_display.display; =20 dp->drm_dev =3D drm; dp->aux->drm_dev =3D drm; @@ -1406,11 +1406,6 @@ static const struct msm_display_funcs msm_dp_display= _funcs =3D { .needs_encoder =3D msm_dp_display_needs_encoder, }; =20 -struct msm_display *msm_dp_get_display(struct msm_dp *msm_dp_display) -{ - return msm_dp_display ? &msm_dp_display->display : NULL; -} - void msm_dp_bridge_atomic_enable(struct drm_bridge *drm_bridge, struct drm_atomic_commit *state) { diff --git a/drivers/gpu/drm/msm/dsi/dsi.c b/drivers/gpu/drm/msm/dsi/dsi.c index 69e57ab47258..3bcea5f5b5a3 100644 --- a/drivers/gpu/drm/msm/dsi/dsi.c +++ b/drivers/gpu/drm/msm/dsi/dsi.c @@ -170,7 +170,7 @@ static int dsi_bind(struct device *dev, struct device *= master, void *data) } =20 msm_dsi->display.funcs =3D &msm_dsi_display_funcs; - priv->kms->dsi[msm_dsi->id] =3D msm_dsi; + priv->kms->dsi[msm_dsi->id] =3D &msm_dsi->display; =20 return 0; } @@ -319,8 +319,3 @@ static const struct msm_display_funcs msm_dsi_display_f= uncs =3D { .needs_encoder =3D msm_dsi_needs_encoder, }; =20 -struct msm_display *msm_dsi_get_display(struct msm_dsi *msm_dsi) -{ - return msm_dsi ? &msm_dsi->display : NULL; -} - diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.c b/drivers/gpu/drm/msm/hdmi/hdm= i.c index 0327098287d1..1d5a4b63f3c8 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi.c +++ b/drivers/gpu/drm/msm/hdmi/hdmi.c @@ -276,11 +276,6 @@ static const struct msm_display_funcs msm_hdmi_display= _funcs =3D { .needs_encoder =3D msm_hdmi_needs_encoder, }; =20 -struct msm_display *msm_hdmi_get_display(struct hdmi *hdmi) -{ - return hdmi ? &hdmi->display : NULL; -} - /* * The hdmi device: */ @@ -315,7 +310,7 @@ static int msm_hdmi_bind(struct device *dev, struct dev= ice *master, void *data) if (err) return err; hdmi->display.funcs =3D &msm_hdmi_display_funcs; - priv->kms->hdmi =3D hdmi; + priv->kms->hdmi =3D &hdmi->display; =20 return 0; } diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h index 378d2cc80b66..3d9ae49cba49 100644 --- a/drivers/gpu/drm/msm/msm_drv.h +++ b/drivers/gpu/drm/msm/msm_drv.h @@ -324,14 +324,9 @@ struct msm_display { =20 struct hdmi; #ifdef CONFIG_DRM_MSM_HDMI -struct msm_display *msm_hdmi_get_display(struct hdmi *hdmi); void __init msm_hdmi_register(void); void __exit msm_hdmi_unregister(void); #else -static inline struct msm_display *msm_hdmi_get_display(struct hdmi *hdmi) -{ - return NULL; -} static inline void __init msm_hdmi_register(void) {} static inline void __exit msm_hdmi_unregister(void) {} #endif @@ -342,7 +337,6 @@ int dsi_dev_attach(struct platform_device *pdev); void dsi_dev_detach(struct platform_device *pdev); void __init msm_dsi_register(void); void __exit msm_dsi_unregister(void); -struct msm_display *msm_dsi_get_display(struct msm_dsi *msm_dsi); #else static inline void __init msm_dsi_register(void) { @@ -350,17 +344,12 @@ static inline void __init msm_dsi_register(void) static inline void __exit msm_dsi_unregister(void) { } -static inline struct msm_display *msm_dsi_get_display(struct msm_dsi *msm_= dsi) -{ - return NULL; -} #endif =20 struct msm_dp; #ifdef CONFIG_DRM_MSM_DP int __init msm_dp_register(void); void __exit msm_dp_unregister(void); -struct msm_display *msm_dp_get_display(struct msm_dp *dp_display); =20 #else static inline int __init msm_dp_register(void) @@ -370,10 +359,6 @@ static inline int __init msm_dp_register(void) static inline void __exit msm_dp_unregister(void) { } -static inline struct msm_display *msm_dp_get_display(struct msm_dp *dp_dis= play) -{ - return NULL; -} =20 #endif =20 diff --git a/drivers/gpu/drm/msm/msm_kms.c b/drivers/gpu/drm/msm/msm_kms.c index 3f855f9b3d06..1a081e15a0a8 100644 --- a/drivers/gpu/drm/msm/msm_kms.c +++ b/drivers/gpu/drm/msm/msm_kms.c @@ -286,21 +286,20 @@ static int msm_kms_init_connectors(struct drm_device = *ddev) int i, ret; =20 for (i =3D 0; i < ARRAY_SIZE(kms->dsi); i++) { - ret =3D msm_display_modeset_init(msm_dsi_get_display(kms->dsi[i]), - ddev, kms->dsi_encoder[i]); + ret =3D msm_display_modeset_init(kms->dsi[i], ddev, + kms->dsi_encoder[i]); if (ret) goto fail; } =20 for (i =3D 0; i < ARRAY_SIZE(kms->dp); i++) { - ret =3D msm_display_modeset_init(msm_dp_get_display(kms->dp[i]), - ddev, kms->dp_encoder[i]); + ret =3D msm_display_modeset_init(kms->dp[i], ddev, + kms->dp_encoder[i]); if (ret) goto fail; } =20 - ret =3D msm_display_modeset_init(msm_hdmi_get_display(kms->hdmi), - ddev, kms->hdmi_encoder); + ret =3D msm_display_modeset_init(kms->hdmi, ddev, kms->hdmi_encoder); if (ret) goto fail; =20 diff --git a/drivers/gpu/drm/msm/msm_kms.h b/drivers/gpu/drm/msm/msm_kms.h index 06646091604a..cbb9c9dcc193 100644 --- a/drivers/gpu/drm/msm/msm_kms.h +++ b/drivers/gpu/drm/msm/msm_kms.h @@ -139,13 +139,13 @@ struct msm_kms { const struct msm_kms_funcs *funcs; struct drm_device *dev; =20 - struct hdmi *hdmi; + struct msm_display *hdmi; struct drm_encoder *hdmi_encoder; =20 - struct msm_dsi *dsi[MSM_DSI_CONTROLLER_COUNT]; + struct msm_display *dsi[MSM_DSI_CONTROLLER_COUNT]; struct drm_encoder *dsi_encoder[MSM_DSI_CONTROLLER_COUNT]; =20 - struct msm_dp *dp[MSM_DP_CONTROLLER_COUNT]; + struct msm_display *dp[MSM_DP_CONTROLLER_COUNT]; struct drm_encoder *dp_encoder[MSM_DP_CONTROLLER_COUNT]; =20 /* irq number to be passed on to msm_irq_install */ --=20 2.47.3 From nobody Fri Jul 24 23:30:38 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 610A23BE645 for ; Wed, 22 Jul 2026 06:37:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702236; cv=none; b=YzIIxoA1nKjdyOXsyhYTUQctmBJdl6xN7mCdMmupPj+ulzkbR7Ba++IYqHsMfqayBvD4M4YPDnEyk6tRy0ZocDuNJgAchLnRkyJFLmXRxQv2tol7pILAucnuVz5sGlE5AgP8gvrFSAgudqCxvroKih7ju1sHnbRqquV6Rlp+4dY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702236; c=relaxed/simple; bh=p0Rd9oPmiONIcDwy0yPI6eTa7uZg5IuJSk3yNdX0Wak=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rDbthLCHBypGJhbdC8H+ShN9TcB/zLrmu7KnjGG6DyJAq532M7ZSrAe2Y3Izw/9hiJGdeJD3iSH8T14PQZsH8Bvy9GaDzpo7m8pA3aXp8BXUB/Et91NN4NrJbHFLcH/WZ8Vauan14Z6oTZNl4ePAYfQ93+T3v+XaKusxVy8Juic= 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=bYz0/G7/; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=aBAsvbAw; arc=none smtp.client-ip=205.220.168.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="bYz0/G7/"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="aBAsvbAw" Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66M53ZtH3662151 for ; Wed, 22 Jul 2026 06:37:14 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= Ts/aaAIVOgMyHZh7xcpfl75wOlTuht4I4M1cpLCbVwE=; b=bYz0/G7/w56STUJO C5Ky2xIZQWeU82AwCeSAlquc8GJzLZiKOELUc1He3QVtaFQxSkjpDxAPToKbrw13 h5jeraXiuP5M52MeOddO0WVpOqsSFV4ctx0v1XIj5RbAZ5YJNdQYS5u3GIivJwyb 2eGEVQPEgqVD3Pz02Y6WN3xhN1px+QarVBBHEM89k+c/rojDe81EVqDrvxPv7nb/ vCg1CBEGQ4GpMv4Pp4dmkQQixrwVo9rQzUx8vQxcH1H2pjlaYeOJscZbNgLUVL+m Oc284ExT3xd2phfkkEeIHMMKIuMdENTH0hBQoTm8jIQSNeLa4EDYQfcVu8carV2c uZIX/g== Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fjd5e2jqe-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 22 Jul 2026 06:37:14 +0000 (GMT) Received: by mail-qt1-f197.google.com with SMTP id d75a77b69052e-51c1b4d961dso102805931cf.1 for ; Tue, 21 Jul 2026 23:37:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784702233; x=1785307033; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Ts/aaAIVOgMyHZh7xcpfl75wOlTuht4I4M1cpLCbVwE=; b=aBAsvbAwT93a7skKiL+7XgbDbdPdBKu5jGwcr5UnGI2g6SXpLAFNko7yTU1l+eoBKs ZxMs2MoWAQIaNZkGeNB2tTHrLxrmmjtvM41Dt7wG39vGmVkdDF6Dc7nY4xsL+LxZHO0x KUaBuBqQqbwadwSACJsKAoJWmTzWS1yC3OnFJrrM2vu2fo01RhhdLKCkUUpWYZJ5O0Fy fzwZDvVNni8UN2XtdZeak5Y9YXrI0nTMNAAYS+wxUOYHSZkKJMSfPmqzIlSl8WOTqSdJ fe2I6YTRM5fmARaqvrYCm0XLGJCAsusfj8crK4seXeNrdIW28GSHAMDeLI3jAQvdJaHc ZOGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784702233; x=1785307033; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Ts/aaAIVOgMyHZh7xcpfl75wOlTuht4I4M1cpLCbVwE=; b=LH2dZv8jbEBivebW+tQo5EIJFdKda/zkNwELwvyKuYa3nOcIfsu0XoJ4XntPPwiHKC MwjRpFQfKczdPjYbQCxkWgtHoYXqmqhnQXUJPbd/Numr1oW8w9OTJ4JeEz58G0vZPN2d VfMBJuYZeYMuYq1z7cCcX9ZwBYuAo3gfxBzDVF2gdKYcvX2cWeJW0SfjZNSLEVS/7ziR QqDdAJN/JlFH7TTaSZe8Hj9WVepUJSoAbPXtB9Oq1nXO8musEXVK6Szv/77a5ECYToY9 pR9gS+wqBTsrf5hjQfJ1PicKtQod/Zbr/yBiocchlsD6D+IO/nGvKC87Ojv9E9D08x0D iNRA== X-Forwarded-Encrypted: i=1; AHgh+Rr1B2cKRTs5uPUUJgFDx6l869tR50vSlO8y/kFSXWBcRMBrI/gjdQS8dmrOYHR/Oz4yfTRwwiA4xf5zQDE=@vger.kernel.org X-Gm-Message-State: AOJu0YxsjDBXJbUl2hl9n77aURT8iUXrP1g5PFpdX/iuT+Se1UBPMc2W dI4u6QNZOLR3/zpxFo+Vd/9fwPXaur7/fsnmN4ELFb8ZCzYkE7i4NteGQlKSpXSGHXacAUDaYTX 4tJa5VJh5+oj3RlW0wRlbN5vMPWere7wBslSkSWt1K21en/BaC+KV5XSNWL9kLOFCAPE= X-Gm-Gg: AR+sD13tMg47Rwp6WnHSZmCUCXCp6vIxh+UwhaKSQOSN+nExeYDp/LVbiR8TtBllFI6 pubPfxJ8jooRIm/2ye9fAct+L98GL3vDXJR9s8PLpdRZ7pLqa59fwQEGKOASBwQ9fcN+HUr0rJF Dp9UqQ4hHUKEtG6n6ehv04Uk2SeWABX8zZbeU88YbcSaPnObyCAjTeBV+lmFofvj8zRfBNqYIEq QMnbUPhIoNn/LC6gNDJMHKj1b+U3BHjos3AetlKALtCWp17IIT5r9qW6txyQV88ohqjlF12JX2H VWwZqd9oqKZxJwyBxwGvydOOmB6G6ttSx3dZBPd+aYbktmJfP2pC4pamSt/rVdk3O9eezFqguYR a/JprfYg1+d3McgtCgfP7EcLo1t6+1HYXEheIhSFjUf6HYBKd6qBo1NIkjgnJKx/078vAkUf5h7 BFFLfcEUb8x42GBg== X-Received: by 2002:ac8:598a:0:b0:517:91e5:1086 with SMTP id d75a77b69052e-527a961c7ffmr29048661cf.38.1784702233457; Tue, 21 Jul 2026 23:37:13 -0700 (PDT) X-Received: by 2002:ac8:598a:0:b0:517:91e5:1086 with SMTP id d75a77b69052e-527a961c7ffmr29048311cf.38.1784702232777; Tue, 21 Jul 2026 23:37:12 -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 2adb3069b0e04-5b2a9b8c6f6sm309696e87.4.2026.07.21.23.37.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 23:37:10 -0700 (PDT) From: Dmitry Baryshkov Date: Wed, 22 Jul 2026 09:36:30 +0300 Subject: [PATCH 15/24] drm/msm/dp: do not reject wide-bus modes while a YUV420 mode is active 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: <20260722-drm-msm-display-interface-v1-15-368c10fe62fd@oss.qualcomm.com> References: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> In-Reply-To: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1946; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=p0Rd9oPmiONIcDwy0yPI6eTa7uZg5IuJSk3yNdX0Wak=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqYGTo7I5ZjesJCBg3IFjmsDzx71PdD/aI0HSsQ aGpMsdSYMWJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCamBk6AAKCRCLPIo+Aiko 1fQbB/4nTv3dHJr5ET9DfzmacacMg6Lx5fk0mMMtffHkL8JP45XJYKWl+Rm3zUPCmhEpI3M3kuH v1iiYEs92BjV3qIR2LQPiPyFG0OGHs12OUzdyblcKRynzx98lxFORbs0aQRrhtWd+1MJwfT3fqV feM85ZV2U40B1hziTqzjEsM5PQi0rUfJ+DXvNICxrGcKUdK6kFFKTF2c690sXq9Ve+nU9R1GrFU VEqPwamOB8U+r6fl4kay7wZ78ENgvXXYT+jMVbQ4UliP5bM1phX3LxTKGsJJBOPvm2n2YrGDLzF Cw6rj1aQg6ivTcKes/E6iWRJbRn5XC1grg30hvGwav2J5RuS X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-GUID: I5D5q06asa5KbzkN194A6ZkRjA4Q2y8j X-Authority-Analysis: v=2.4 cv=CbE4Irrl c=1 sm=1 tr=0 ts=6a60651a cx=c_pps a=EVbN6Ke/fEF3bsl7X48z0g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=EUspDBNiAAAA:8 a=Y4CFgLxAi_mMOGnJ0dIA:9 a=QEXdDO2ut3YA:10 a=a_PwQJl-kcHnX1M80qC6:22 X-Proofpoint-ORIG-GUID: I5D5q06asa5KbzkN194A6ZkRjA4Q2y8j X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfXz/A5SS0Hh1nc nmvxibBtoUPCaivw7In44vqF54JaZ6k//+XfMfpcnK3Z2vsqrRsc2OYLPPnL4ubKUNM7APKlzj+ m44XOFrvBWA3XC5U/Mu5bc3zJe6tm9i59EMpPhwIzD28JflpNQsbJ9D67VrD7Hu+OMUENRYCjSv D0eTNt2yeAzP+E9+L6NqeRU+0sdq2IcjPIghmAuaCowseRy15vGn2T0KOYvS2mQIP4YPnEGf8CY 4YB/R60qduE799NnnWoqGKzo+8zfFVE4qG9HpDzE8IiszJzV4pD4s7FBMpXfHWkShMEiLrZaYO9 9xvjionF1liTJLbcjqLGg8QDJD05dzu6oluLTxgNZvtoIbSMXMNXNLcSOAk1oJSuufdZAEtsGuq 5AOxlTJCv9KRAqZg9pOsqm4tD623w7un8Rrh6DnkV9hsLJfuwVwYfAAYrozGIIFgaVANFxRj/pH X0KzV+C7xhhZDZNELzw== X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfXx15bclntjOk5 umvWT8K3fO6v6RfDmXmz+gZBLfX1FaD4fjxVqaZ+g/rBQnIlngUG81e+hYm9iCEwq5k2fN4hotK lScGPdXdUO/qS9+ZYu3UnYYtIKG6ZQ8= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-22_02,2026-07-21_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 adultscore=0 suspectscore=0 clxscore=1015 spamscore=0 malwarescore=0 bulkscore=0 impostorscore=0 lowpriorityscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607220060 msm_dp_bridge_mode_valid() halves the candidate mode's pixel clock when the sink either uses YUV 420 output or drives the wide bus, so that modes relying on those to stay under DP_MAX_PIXEL_CLK_KHZ are accepted. The wide bus part is queried through msm_dp_wide_bus_available(), which returns false whenever the currently committed mode uses YUV 420 output: it inspects the stored msm_dp_mode.out_fmt_is_yuv_420 of the active mode, not the mode being validated. Consequently, while a YUV 420 mode is active, an RGB mode that needs the wide bus to fit under DP_MAX_PIXEL_CLK_KHZ has its pixel clock left un-halved and is wrongly rejected as MODE_CLOCK_HIGH. The candidate mode's YUV 420 status is already evaluated as is_yuv_420, and the wide bus is disabled precisely for YUV 420 output, so halving the pixel clock for either case is equivalent to halving it when the candidate is YUV 420 or the controller supports the wide bus. Test wide_bus_supported directly, so the decision no longer depends on the format of the active mode. Fixes: df9cf852ca30 ("drm/msm/dp: account for widebus and yuv420 during mod= e validation") Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/dp/dp_display.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index 1baeb9401cfa..bd1354f2c15d 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -722,7 +722,7 @@ enum drm_mode_status msm_dp_bridge_mode_valid(struct dr= m_bridge *bridge, if (is_yuv_420 && !msm_dp_display->panel->vsc_sdp_supported) return MODE_NO_420; =20 - if (is_yuv_420 || msm_dp_wide_bus_available(dp)) + if (is_yuv_420 || msm_dp_display->wide_bus_supported) mode_pclk_khz /=3D 2; =20 if (mode_pclk_khz > DP_MAX_PIXEL_CLK_KHZ) --=20 2.47.3 From nobody Fri Jul 24 23:30:38 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 655B73F5BDE for ; Wed, 22 Jul 2026 06:37:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702241; cv=none; b=Zmp13FeMPYwWDk7LU8fQirJTjF+7hQNVH0+i3qnAfTYeReDnOZcem7xp97yg74BvM9tB3v0OdxNAr4pjLbAzdyaiDdgJPOchUezxPUHZnkM+R1vTZBQT7DTq7h2+SW08rHwfyfxqF9VzY+lcWLtvB/J3C/Rn5YelJ6NAs7kdEQA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702241; c=relaxed/simple; bh=diWNTbMiX3Q6h2vK0nQNDlVkK/Hi2tSo6wV5owE3Hyo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YWR0BNZ52f+VvjKkmd6hi83eZlc7LYKuKtlxpPAQuc3riOU4E8Zl3OHuFnBS0Nj6tIbqzi1uexkIVv26Pe/8O0wy/m1Sf/Yf6REAwQnaGletG0AkKzk7FpdQ12akhOBrVjlLfXoN80pN7LWkpHFeqYcga4Z+8I1T69+qBwDGzco= 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=Z600wpQr; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=ODQjIKwj; arc=none smtp.client-ip=205.220.168.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="Z600wpQr"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="ODQjIKwj" 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 66M53j7A4169092 for ; Wed, 22 Jul 2026 06:37:18 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= /N2h2fNm8ptXyOm9YpJtPlGRvCQAMisqL9rrCQy59TI=; b=Z600wpQr42PqCRaK R5PYakpOn2H7heJPepSj2P1XrX767kHw2/APlfzlpvOT18ox6/s69pxbdDpgzEAM 43u/ZWkSXGE4fWhD7u72sTMl+U3fB4l6ouwpX16SeA7NHA600QXSkK4Hbvvu96BS 56MJr8Ot9izmBR4JA/O/Ms9MBhFyR1bdMhDcuRIoc5c/USs0e5cOw6VAzaLuAta7 UIDVF5LQslOEkLwTnUwC+tjXXfnLO0EEsEebhG4gH2NNhLUimT/Z7LjZN5ffHa8W 4KcwpD0EmgJEmBUfQqaAP4wNdXa7yGj1M7JnOR7KiuQ1zkXUMTpDCRRF0sGHD4Z1 YHOA2A== Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fj6r3mpk7-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 22 Jul 2026 06:37:18 +0000 (GMT) Received: by mail-qt1-f197.google.com with SMTP id d75a77b69052e-5174a236220so223769831cf.3 for ; Tue, 21 Jul 2026 23:37:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784702238; x=1785307038; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=/N2h2fNm8ptXyOm9YpJtPlGRvCQAMisqL9rrCQy59TI=; b=ODQjIKwjAodx3gdKzHtPJtP/EvZ2KK/lJzmLdYfTD7KYpMk/QYRTOGZzacgsDs70NU UoQlTnB503w7nGDNBsCIVsS9mC4bqetempZAb4i7Ry9MZ6DaeI2Pp3IEweMuY+6qP3tN +ZFjiHVVqF0FggWDPXtjGR33QORrqPtkI6tOfxY6QyA7jN3mwlhKYUdJc26oKt60uE6U 253VzY+6BS0OLJsqbaP4Nmx5uQMw6Jd5i/rAB2SeAnb7JTXmROGMzFZRAJraK+T/MM21 cdi8SpvsnIEZqu9HfNx/Rk+wPrPKU80GY9z62GVr/u6koSeA80zwsuuLhgB5a2c2+ZWf NYdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784702238; x=1785307038; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=/N2h2fNm8ptXyOm9YpJtPlGRvCQAMisqL9rrCQy59TI=; b=dKFg595P1ve77nsSov3uQ0iyKoCI85VFbTyoe/r/fiMENZQc7Ot8BvjTtnbQfIMUqq 4saUxgmptkMBS+GsQGNTarmwbeswYcQpAKXtiqBfkjlu4zYTbg46BdkDHtPna54Sob4y WVuWqLSTOJksJ4xmmA+qy1zMCw0AvOLO6Adb0Of9wdbH1nqYSN5SUSY6B/F21d4Tm+Fw YU3aEGc8Ddcnaf5oqZ6RqTanWlhCnySpjGayWMrV7u/MIBVeiXM5jyWFQNrYtgMPo+Zo 0O5lpB7byKHhdnS4lpNalUMvBZdPoJ7aMRw02iU6FvLUkNwN3jzz8oa59Tl3CSqBZgap yFHw== X-Forwarded-Encrypted: i=1; AHgh+Ro0rvGM0YcQgFICbypzgd2TU0xRi0jtDv3hyddTSyObXaGFaheNJcI1mFDZQkj8RONKTSLfk4K7L23Ov3w=@vger.kernel.org X-Gm-Message-State: AOJu0YyccgPDRPi06ckhKFSm4/9xu4YkeouND45JFHcttbXQW7IBj0RJ dUyG6mcIYQNlvdhYNrwU/lp5qCh0Q7wh4CpEw05xOJcmkJLAzV0rmBC14G9m4eNDfX2j214RsJJ Yw5NXR6eLtj3YKiwSDaIb4frJfy8nGUbD0QwjSDvaIVsRubB/6mBkM6orHt+JIHnuc/Y= X-Gm-Gg: AR+sD133M8AQQERHCrBmLnt5HqfWGXMU15Qt5lS0CNq9z6AQpbHnu44LBb51uYELJAb mfjmdqzTXixCCFvL17Iw1p6WQiYV7t6iWk06qUu59P1U0DDBCDW6qXeZ1/pYhz2dbmyCi+7cK/R oCNv/Bko/L/pynyvCM14ohh7UOEEonVrUDZO5FJxe/uKItEXRrRs/rAKrI0PGEAKWTKM2p4v7gw NqlQ1EWTfgPt78MGRzFog5NdR5cZj9MVeBe5TbFK8ZemeKig5llTyULwspGlgvM3o4qk5nEFqk/ SwxlXxZrCgUvilqtRxkuA/u2XxL9e1tVzH3wC4dN1rUi9uPJHCKe1Ny4y4Im+Q7BXPNRVtC1zZu pJW6APUNVDGATnMDG9PrqAKR9EAKB4MpXvmfGEcb1PRVA/ksgt6lpC83RgGAtk3Tki0fAchwUKw DpoieQBwOXY05luA== X-Received: by 2002:ac8:7fd5:0:b0:51c:7b13:62f3 with SMTP id d75a77b69052e-5213e67ff0bmr204841421cf.73.1784702237324; Tue, 21 Jul 2026 23:37:17 -0700 (PDT) X-Received: by 2002:ac8:7fd5:0:b0:51c:7b13:62f3 with SMTP id d75a77b69052e-5213e67ff0bmr204841141cf.73.1784702236771; Tue, 21 Jul 2026 23:37:16 -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 2adb3069b0e04-5b2a9b8c6f6sm309696e87.4.2026.07.21.23.37.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 23:37:14 -0700 (PDT) From: Dmitry Baryshkov Date: Wed, 22 Jul 2026 09:36:31 +0300 Subject: [PATCH 16/24] drm/msm/dp: remove cached drm_edid from panel 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: <20260722-drm-msm-display-interface-v1-16-368c10fe62fd@oss.qualcomm.com> References: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> In-Reply-To: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yongxing Mou X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=9357; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=tau2awtWuAhs2tDJVOVXS8J6tZ80ehQO2Hh63gIguw0=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqYGToa8nXbs1RicH6gBraYnP9JzFOBMrRiwAON Mqvh71MJ/6JATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCamBk6AAKCRCLPIo+Aiko 1bb4B/9qpoCq1AiOg5pzEiaXhfFa6eogR32uUrVitujIIG3Ogd4BhYdJC6jzRnhJuOurjUbIDHd GqNOWwWsvDqUgluPij04jh3/uSGqZf1z8iHXwMFkDeurfScOH0fKGCNnwbG9k6x3YGn0MpbVvOI XcDuuG2FSJK4XGuhJwk+xyYWT2+TTHngLI+xq0OukFkdiw2QS8mFng0QQSI/gMVO7lChJD6ZucI XYaR+Og3idnNgE4i4Y4KGm3T9pOSI3B/1wj8N1tE8lklTvv4Vh8jV7VVrAoqIjO9e5pN4UZKvu/ DRMnnajjYtmmFdUBxfPIXnZgNoomrht60t1FsNnemRjhEJ7p X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX+VzVzwY3DAAd 9PtEoaOAMBTwWRejX7A8LNVTjXU2Xu9wrDIMAzjeLbRy9+a89KIgeofFDNhSGUF7cX4CtHmDk6g mBMZ/3MLt7Mia9QYxlN9MxwoZXY2zSOy0orK6Yb5H2ClwGRzQSub7C2nV2vOedZTYVHshfQ7Zf8 IAo7aZ3CWMtjzWRq+CNfcWDcW0tGlRdyPxbwPvE50o+dN8nlxXqeaLnJUCWiP+/naIxYKw2v2IN 39r6cFRGnq3Ife3Q6Tuyln6/9D78XscSmwNyN7AiB6H6l1XHxd7mPGWMkhiL/+Cmkitwf8tseuc g4fydIwf79eb0c0YiHcPgOnJn9JNoRU85kMETjLiaWt+9+xi2kPOSvYkJxjK9OyOEuCkwlRN3S/ iuxIZlexw2I7oThOEZbb3yTCfARU6t3h4KpllQhxc7jEXxEysLmqDX5i1FujWf9SkO1Ghx7+ZtO PDp8P/rOrU3OXhNsZjw== X-Proofpoint-ORIG-GUID: pxJkGXtgIVJVaTTiMgEOx4B6fGkA33mQ X-Proofpoint-GUID: pxJkGXtgIVJVaTTiMgEOx4B6fGkA33mQ X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX8UW4SybHS688 NWfqRpdvNIR24I19GS6c2VTPz3nBBpbQhtJDQINLotcRHWGLLxAxWsg36KbOBikbrfgWtJnvSXg P4tzgzTgZoL4JcPydN2shJR5EP3y39o= X-Authority-Analysis: v=2.4 cv=SIRykuvH c=1 sm=1 tr=0 ts=6a60651e cx=c_pps a=EVbN6Ke/fEF3bsl7X48z0g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=afWckrBw7P4RIPHO5CIA:9 a=QEXdDO2ut3YA:10 a=a_PwQJl-kcHnX1M80qC6:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-22_02,2026-07-21_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 spamscore=0 phishscore=0 clxscore=1015 suspectscore=0 adultscore=0 impostorscore=0 lowpriorityscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607220060 From: Yongxing Mou The cached drm_edid seems unnecessary here. Use the drm_edid pointer directly in the plug stage instead of caching it. Remove the cached drm_edid and the corresponding oneliner to simplify the code. Signed-off-by: Yongxing Mou Reviewed-by: Dmitry Baryshkov Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/dp/dp_display.c | 28 +++++++++++------- drivers/gpu/drm/msm/dp/dp_panel.c | 59 ++++-----------------------------= ---- drivers/gpu/drm/msm/dp/dp_panel.h | 13 +++----- 3 files changed, 27 insertions(+), 73 deletions(-) diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index bd1354f2c15d..cd4923d1a17e 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -272,6 +272,7 @@ static int msm_dp_display_process_hpd_high(struct msm_d= p_display_private *dp) const struct drm_display_info *info =3D &connector->display_info; int rc =3D 0; u8 dpcd[DP_RECEIVER_CAP_SIZE]; + const struct drm_edid *drm_edid =3D NULL; =20 rc =3D drm_dp_read_dpcd_caps(dp->aux, dpcd); if (rc) @@ -279,10 +280,20 @@ static int msm_dp_display_process_hpd_high(struct msm= _dp_display_private *dp) =20 dp->link->lttpr_count =3D msm_dp_display_lttpr_init(dp, dpcd); =20 - rc =3D msm_dp_panel_read_sink_caps(dp->panel, connector); + rc =3D msm_dp_panel_read_link_caps(dp->panel, connector); if (rc) goto end; =20 + drm_edid =3D drm_edid_read_ddc(connector, &dp->aux->ddc); + drm_edid_connector_update(connector, drm_edid); + + if (!drm_edid) { + DRM_ERROR("panel edid read failed\n"); + /* check edid read fail is due to unplug */ + if (!msm_dp_aux_is_link_connected(dp->aux)) + return -ETIMEDOUT; + } + msm_dp_link_process_request(dp->link); =20 if (!dp->msm_dp_display.is_edp) @@ -294,7 +305,7 @@ static int msm_dp_display_process_hpd_high(struct msm_d= p_display_private *dp) dp->msm_dp_display.psr_supported =3D dp->panel->psr_cap.version && psr_en= abled; =20 dp->audio_supported =3D info->has_audio; - msm_dp_panel_handle_sink_request(dp->panel); + msm_dp_panel_handle_sink_request(dp->panel, drm_edid); =20 /* * set sink to normal operation mode -- D0 @@ -305,6 +316,7 @@ static int msm_dp_display_process_hpd_high(struct msm_d= p_display_private *dp) msm_dp_link_reset_phy_params_vx_px(dp->link); =20 end: + drm_edid_free(drm_edid); return rc; } =20 @@ -456,7 +468,7 @@ static int msm_dp_hpd_unplug_handle(struct msm_dp_displ= ay_private *dp) =20 /* Don't forget modes for eDP */ if (!dp->msm_dp_display.is_edp) - msm_dp_panel_unplugged(dp->panel, dp->msm_dp_display.connector); + drm_edid_connector_update(dp->msm_dp_display.connector, NULL); =20 /* triggered by irq_hdp with sink_count =3D 0 */ if (dp->link->sink_count =3D=3D 0) @@ -518,7 +530,6 @@ static int msm_dp_irq_hpd_handle(struct msm_dp_display_= private *dp) static void msm_dp_display_deinit_sub_modules(struct msm_dp_display_privat= e *dp) { msm_dp_audio_put(dp->audio); - msm_dp_panel_put(dp->panel); msm_dp_aux_put(dp->aux); } =20 @@ -569,7 +580,7 @@ static int msm_dp_init_sub_modules(struct msm_dp_displa= y_private *dp) rc =3D PTR_ERR(dp->ctrl); DRM_ERROR("failed to initialize ctrl, rc =3D %d\n", rc); dp->ctrl =3D NULL; - goto error_ctrl; + goto error_link; } =20 dp->audio =3D msm_dp_audio_get(dp->msm_dp_display.pdev, dp->link_base); @@ -577,13 +588,11 @@ static int msm_dp_init_sub_modules(struct msm_dp_disp= lay_private *dp) rc =3D PTR_ERR(dp->audio); pr_err("failed to initialize audio, rc =3D %d\n", rc); dp->audio =3D NULL; - goto error_ctrl; + goto error_link; } =20 return rc; =20 -error_ctrl: - msm_dp_panel_put(dp->panel); error_link: msm_dp_aux_put(dp->aux); error: @@ -755,8 +764,7 @@ int msm_dp_display_get_modes(struct msm_dp *dp) =20 msm_dp_display =3D container_of(dp, struct msm_dp_display_private, msm_dp= _display); =20 - return msm_dp_panel_get_modes(msm_dp_display->panel, - dp->connector); + return drm_edid_connector_add_modes(msm_dp_display->panel->connector); } =20 bool msm_dp_display_check_video_test(struct msm_dp *dp) diff --git a/drivers/gpu/drm/msm/dp/dp_panel.c b/drivers/gpu/drm/msm/dp/dp_= panel.c index 5b4954e7cb74..bde4a772d22c 100644 --- a/drivers/gpu/drm/msm/dp/dp_panel.c +++ b/drivers/gpu/drm/msm/dp/dp_panel.c @@ -232,8 +232,8 @@ static u32 msm_dp_panel_get_supported_bpp(struct msm_dp= _panel *msm_dp_panel, return min_supported_bpp; } =20 -int msm_dp_panel_read_sink_caps(struct msm_dp_panel *msm_dp_panel, - struct drm_connector *connector) +int msm_dp_panel_read_link_caps(struct msm_dp_panel *msm_dp_panel, + struct drm_connector *connector) { int rc, bw_code; int count; @@ -271,36 +271,9 @@ int msm_dp_panel_read_sink_caps(struct msm_dp_panel *m= sm_dp_panel, =20 rc =3D drm_dp_read_downstream_info(panel->aux, msm_dp_panel->dpcd, msm_dp_panel->downstream_ports); - if (rc) - return rc; - - drm_edid_free(msm_dp_panel->drm_edid); - - msm_dp_panel->drm_edid =3D drm_edid_read_ddc(connector, &panel->aux->ddc); - - drm_edid_connector_update(connector, msm_dp_panel->drm_edid); - - if (!msm_dp_panel->drm_edid) { - DRM_ERROR("panel edid read failed\n"); - /* check edid read fail is due to unplug */ - if (!msm_dp_aux_is_link_connected(panel->aux)) { - rc =3D -ETIMEDOUT; - goto end; - } - } - -end: return rc; } =20 -void msm_dp_panel_unplugged(struct msm_dp_panel *msm_dp_panel, - struct drm_connector *connector) -{ - drm_edid_connector_update(connector, NULL); - drm_edid_free(msm_dp_panel->drm_edid); - msm_dp_panel->drm_edid =3D NULL; -} - u32 msm_dp_panel_get_mode_bpp(struct msm_dp_panel *msm_dp_panel, u32 mode_edid_bpp, u32 mode_pclk_khz) { @@ -324,22 +297,6 @@ u32 msm_dp_panel_get_mode_bpp(struct msm_dp_panel *msm= _dp_panel, return bpp; } =20 -int msm_dp_panel_get_modes(struct msm_dp_panel *msm_dp_panel, - struct drm_connector *connector) -{ - if (!msm_dp_panel) { - DRM_ERROR("invalid input\n"); - return -EINVAL; - } - - if (msm_dp_panel->drm_edid) { - drm_edid_connector_update(connector, msm_dp_panel->drm_edid); - return drm_edid_connector_add_modes(connector); - } - - return 0; -} - static u8 msm_dp_panel_get_edid_checksum(const struct edid *edid) { edid +=3D edid->extensions; @@ -347,7 +304,8 @@ static u8 msm_dp_panel_get_edid_checksum(const struct e= did *edid) return edid->checksum; } =20 -void msm_dp_panel_handle_sink_request(struct msm_dp_panel *msm_dp_panel) +void msm_dp_panel_handle_sink_request(struct msm_dp_panel *msm_dp_panel, + const struct drm_edid *drm_edid) { struct msm_dp_panel_private *panel; =20 @@ -360,7 +318,7 @@ void msm_dp_panel_handle_sink_request(struct msm_dp_pan= el *msm_dp_panel) =20 if (panel->link->sink_request & DP_TEST_LINK_EDID_READ) { /* FIXME: get rid of drm_edid_raw() */ - const struct edid *edid =3D drm_edid_raw(msm_dp_panel->drm_edid); + const struct edid *edid =3D drm_edid_raw(drm_edid); u8 checksum; =20 if (edid) @@ -757,10 +715,3 @@ struct msm_dp_panel *msm_dp_panel_get(struct device *d= ev, struct drm_dp_aux *aux return msm_dp_panel; } =20 -void msm_dp_panel_put(struct msm_dp_panel *msm_dp_panel) -{ - if (!msm_dp_panel) - return; - - drm_edid_free(msm_dp_panel->drm_edid); -} diff --git a/drivers/gpu/drm/msm/dp/dp_panel.h b/drivers/gpu/drm/msm/dp/dp_= panel.h index 9173e90a5053..53b7b4463551 100644 --- a/drivers/gpu/drm/msm/dp/dp_panel.h +++ b/drivers/gpu/drm/msm/dp/dp_panel.h @@ -33,7 +33,6 @@ struct msm_dp_panel { u8 downstream_ports[DP_MAX_DOWNSTREAM_PORTS]; =20 struct msm_dp_link_info link_info; - const struct drm_edid *drm_edid; struct drm_connector *connector; struct msm_dp_display_mode msm_dp_mode; struct msm_dp_panel_psr psr_cap; @@ -47,15 +46,12 @@ struct msm_dp_panel { int msm_dp_panel_init_panel_info(struct msm_dp_panel *msm_dp_panel); int msm_dp_panel_deinit(struct msm_dp_panel *msm_dp_panel); int msm_dp_panel_timing_cfg(struct msm_dp_panel *msm_dp_panel, bool wide_b= us_en); -int msm_dp_panel_read_sink_caps(struct msm_dp_panel *msm_dp_panel, - struct drm_connector *connector); -void msm_dp_panel_unplugged(struct msm_dp_panel *msm_dp_panel, - struct drm_connector *connector); +int msm_dp_panel_read_link_caps(struct msm_dp_panel *msm_dp_panel, + struct drm_connector *connector); u32 msm_dp_panel_get_mode_bpp(struct msm_dp_panel *msm_dp_panel, u32 mode_= max_bpp, u32 mode_pclk_khz); -int msm_dp_panel_get_modes(struct msm_dp_panel *msm_dp_panel, - struct drm_connector *connector); -void msm_dp_panel_handle_sink_request(struct msm_dp_panel *msm_dp_panel); +void msm_dp_panel_handle_sink_request(struct msm_dp_panel *msm_dp_panel, + const struct drm_edid *drm_edid); void msm_dp_panel_tpg_config(struct msm_dp_panel *msm_dp_panel, bool enabl= e); =20 void msm_dp_panel_clear_dsc_dto(struct msm_dp_panel *msm_dp_panel); @@ -94,5 +90,4 @@ struct msm_dp_panel *msm_dp_panel_get(struct device *dev,= struct drm_dp_aux *aux struct msm_dp_link *link, void __iomem *link_base, void __iomem *p0_base); -void msm_dp_panel_put(struct msm_dp_panel *msm_dp_panel); #endif /* _DP_PANEL_H_ */ --=20 2.47.3 From nobody Fri Jul 24 23:30:38 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 302753F5BE4 for ; Wed, 22 Jul 2026 06:37:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702244; cv=none; b=HlXrJ9TeU4q8AAPMNyn4CjoVxXwTDjDT4mWycot/pLLqTzpukIdBd1VXqnuQkXHmqPmODS/DNWe7L9vY7xi0pi5gULSFo3cD5+agYQAsCc3Jr25RN7nEnLrRq191/5SyzpFc1uWTwiqWuHAn9HyLnTya9pD6llp2bY5AznKz7eM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702244; c=relaxed/simple; bh=Tu4mGwXUl1elJyKbUhUAUxBsnJp9meQaUahl6UOBN7g=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tXWt8sV6sx7WA/so/wvYblvDKWYJkQGU+6OJ9PFRVBwE6K+Qct1p0PaCCweepZn4NnzcgOzUfnMDCrRY/L3hw8190c8Vn0EETVxX6oN33M6zKLSP99fqHBUDz4zdADUhmlhry1j1eXhj2ZO+bEbIQXo/x07RRaYoLUq545pOcNM= 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=ZWOmbVAD; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=fgKOF+TD; arc=none smtp.client-ip=205.220.168.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="ZWOmbVAD"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="fgKOF+TD" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66M53bCQ3767556 for ; Wed, 22 Jul 2026 06:37:21 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= DofyXbQYtrjVU+qJqRCV8rPF5+c7acyIUz9ezHCKjkA=; b=ZWOmbVAD6mpQc/l+ NJgXePlnHEBOL34rBICW8e6sxhvYajc+3gNJjVw3CERSzuPEK7ZAf0kwWBs/YQjD IkthNIilExQoPBVKsv6gkhhT/H9iHnYb5Z/UJFe3k7MVHwoiCCuZke2rhO639TYi 7u4U/DsFCu1418XuXYVKwrVcs+650Vmw7oWj1VgQ37ntLb0BFNqq7B7zIpSHjwTQ tflK9EDkLvefnLlsa/HbhXQIk9ZDTrgtbuZhZr4PuiStMNqmaN6M9d162qpW7Sqt 6KKkk+OvJGK9vWw0MN8bXQZinJBa8AgOaG1vvHo0lpAo1/v/XENXnaXNjZTgY2Dh dfL0lA== 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 4fjnu4rn9j-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 22 Jul 2026 06:37:21 +0000 (GMT) Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-51c01ff996dso99011401cf.2 for ; Tue, 21 Jul 2026 23:37:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784702240; x=1785307040; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=DofyXbQYtrjVU+qJqRCV8rPF5+c7acyIUz9ezHCKjkA=; b=fgKOF+TDWl7yW90FXDhGeBun2S0Kn+b9AS6V2OgFoXl+hojEsm/iLp5q6cxZk2g3eq t5UnrnyuiH4FmG7rqkFlO9mprvup9pB852wl0/gZRERkl+ulg6gQP2EB17YFBEAUtOFe JQmN126aLjCYSB0C21p1AN4mXpGPkZQaUDcJcNU+qEUzHQc2IhMHy98JP1IoD3wZ/tyQ Zj3Uj8Ddwoy8UE42F7cZ3s45QZK2jskAFQxS2xND9VFwzBxko0MX+BmlKg4AuZ9/JrHV /cDkhjx5mlGAKOFLAzrQtrZ0hsX2f71eL3ZJcccH3/c2tl4rbURnUMcLi8MVsI31Uxxx 3F1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784702240; x=1785307040; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=DofyXbQYtrjVU+qJqRCV8rPF5+c7acyIUz9ezHCKjkA=; b=nQ8yozJeV7uh9b15m3/XAX2yx7UA5nHWZVxgRnjailOQ6SYDistLulvYVbHsVbStdP 27V/I42qGvoV7Hs3nXcuPSQBBeSJWrQADeQrQ1e8DpLk+4qC0UVFqlwIhjC4KeNrr8U/ oFdgB+2rtwDaqAfwIyHXqRImO3oZuEBqXEBNHdz1BXWyNpXZN0ektuBbGua+Z5uNq38u LtY8C6id45YsPPJ4VlWGbW26s1QliV0c15zeG3jxNgBf1uySpDYdWiZol/ZSiYMANm7H 63GeFD524yvZAFGWihTcn5Vze4xa/26qLDeDXCabKSX0CgUktdqrEb1OTZBV0BElOOqX zIVA== X-Forwarded-Encrypted: i=1; AHgh+RrTwf10n/iN+So4g1rh6zX4y0T/2jKuPmjPanZ29iNc7YaSvdrP6ZmjfsBKFdutP1QMZ25Cj5CKtY3Rnnw=@vger.kernel.org X-Gm-Message-State: AOJu0Yx4+Db8xtixHerGcYO2p3uWuThonIFYWK6hI+bjLk5d9UGCPqYO LgF9E6CwmaZHhat728UbxxcRlBlaZUNOKL8Mf0iW8JFp+JpsHX1hyZJGUI3fPnoff8JkoF9lRi4 qApc1XIt3+4FEM4ZkfSKoywjG2ND8FosRgp3OpQyWvN3On7+oYuoi3iFxVf7BlrPnJ7U= X-Gm-Gg: AR+sD13Z4zQ2XCWcmoCvw6XCtR/Ef04hNG5izJzxVLUhHCfkI2SNJImIyluw0R+LmEr 46vZKGK7pEiniP6MVZs/rFxA8MkSLQbtvylVQ203FPMHTrFkwGmDQndXCyh0KUpzaJ+TdJSM/cG XJg/4OuPdsTvJa2LG9tvQb/9So2CLD9u6Kc8ov/cSd/3K4sdvRT3c7JELsOyRLGXmYX1h890riU aNzYE0dPMndfglCfmkkNNvcQaxN5IX6vqXg8abYCBDHqhX1eZEECE6Pfe60JFPb6zb0nFxrkhBN ob6/0SlNsIqOS6FnW8iExtztHm/MLS3DdUH+pbWblvVcJUGlex7VNrY7PjSwuJ/kIuuFSJwVsit I1PocM0vtgNrIaeFlGjBlV3TW/lRozClLn4ZQpp8Pp6aofziBxDhVkbMeWyO/1hky1JbzsO1evl b5bFebRrE+gjVhKw== X-Received: by 2002:a05:622a:3cb:b0:51b:f217:539f with SMTP id d75a77b69052e-5213c10a2d6mr207439031cf.17.1784702240147; Tue, 21 Jul 2026 23:37:20 -0700 (PDT) X-Received: by 2002:a05:622a:3cb:b0:51b:f217:539f with SMTP id d75a77b69052e-5213c10a2d6mr207438631cf.17.1784702239653; Tue, 21 Jul 2026 23:37:19 -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 2adb3069b0e04-5b2a9b8c6f6sm309696e87.4.2026.07.21.23.37.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 23:37:18 -0700 (PDT) From: Dmitry Baryshkov Date: Wed, 22 Jul 2026 09:36:32 +0300 Subject: [PATCH 17/24] drm/msm/dp: drop deprecated .mode_set() and use .atomic_pre_enable 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: <20260722-drm-msm-display-interface-v1-17-368c10fe62fd@oss.qualcomm.com> References: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> In-Reply-To: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Yongxing Mou , Abhinav Kumar X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=10356; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=fIeYRc8ZE0MBCpxiJUV+tJkR7IAyEtybOanxyXalYmU=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqYGTo4IiPQWb132G5kSJWclcsaV+HaF+BJtTlD uN3m5UgxBGJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCamBk6AAKCRCLPIo+Aiko 1fweB/9Prxxx/sdsHxCoetb3J9MkBstmDkil9HuQJqbXkqRMAnWvyBErEsCH2TuKKMlrLlHVAFU 7WOcrUv0WgIVlgxZkngEHpeTFSL1CSbJPI9aLbWssQdi6RIBKIQ8e56FUFHAIYbrwmCQpMgpwlV J8jRXIcukR/IHmUezTyYsD1qu3pgH/O6dtYrBnNSNhLbbcD9pzkFH/LL8QEdyiruBGryiBytAM4 Qo705fgOhXav2w7JGt6h0W4l8roDyexjL1UmKzNn5vVCRogNcXnop/af4brWWcruv8QICozIpSx RKrgBMOIvuJYCy+JpzUvkJqldZHOUIk1X/OUZPt9aeIAOSzI X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-GUID: cpzHcTCkf6B_ZdOh1c5qnMIigz1iObrf X-Authority-Analysis: v=2.4 cv=KLhqylFo c=1 sm=1 tr=0 ts=6a606521 cx=c_pps a=JbAStetqSzwMeJznSMzCyw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=COk6AnOGAAAA:8 a=HUDQmCXQRbm1X60NTYYA:9 a=QEXdDO2ut3YA:10 a=uxP6HrT_eTzRwkO_Te1X:22 a=TjNXssC_j7lpFel5tvFf:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfXwy+CRTSqYbwR JRU5iYxQufC9oDpGJ0n/mUlGxRuKwSRudR2SAVVfjW0fI4VQQPX7Sl7FaU/bm9vJ9EuCwUcCiX7 Nz8tGPJa3SIi+GdAAnUjeelvaDrr3KmN0HYMUZBHJoAdLWj5BiXwyJSEsDktMq21iShJmAM9mIw +XHBuubmXOrnS0ng2AFw9EBFGCu3Q4Je78sf+TrJnMdtKcNZ6ts12X0Yzv+gb5N7F2LSx1v5YsN DDhBkYb904sjMrRnrVUPuy0/go9+GiYNIHgBGCR2XgALw0stkOvZPrsXRkclbztIRnWYPpneyC/ INEOnVeeu2h1gw29oieFVWVLrvvl8zj4aMKt6MRfptdvAmSVnBU8THZy3LC4m60sTTeyyMywV8s ZafX3AFcp5cQE4udqwRasclcJoCGtnd8W+ICPfR06tuH7Ns9yfK1+ZGYHTQviCwlfi5MxJC0pTJ vBLTMoJUJYkb+tQOYTA== X-Proofpoint-ORIG-GUID: cpzHcTCkf6B_ZdOh1c5qnMIigz1iObrf X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX8eoXreLhxyBF d2oCDoprvBjJQzx22q+pqYAySMD5asEiuijgEZBHFVk/VhSKXkd55Xa8NxXyl8KSiO8eu2F+xlp drL55wB9a1mGh3joeXspoevcybJx/y4= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-22_02,2026-07-21_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 spamscore=0 clxscore=1015 impostorscore=0 lowpriorityscore=0 priorityscore=1501 malwarescore=0 phishscore=0 adultscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607220060 From: Yongxing Mou The bridge .mode_set() callback is deprecated. Remove it and move the mode setup logic to .atomic_pre_enable(), where the adjusted_mode is available from the atomic CRTC state. .atomic_pre_enable() is used rather than .atomic_enable() because the DPU encoder's .atomic_enable() reads the output mode's YUV420 / wide bus state through the msm_display callbacks, and it runs after all bridges' .atomic_pre_enable() but before their .atomic_enable(). Programming the mode from the DP bridge's .atomic_enable() would leave the encoder reading the previously committed mode's state. Drop msm_dp_mode from msm_dp_display_private and store the mode directly in the panel, as it was only used as a temporary cache. Signed-off-by: Abhinav Kumar Signed-off-by: Yongxing Mou Reviewed-by: Dmitry Baryshkov Assisted-by: Claude:claude-opus-4-8 [DB: moved to atomic_pre_enable] Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/dp/dp_display.c | 103 ++++++++++++++++----------------= ---- drivers/gpu/drm/msm/dp/dp_drm.c | 4 +- drivers/gpu/drm/msm/dp/dp_drm.h | 5 +- 3 files changed, 51 insertions(+), 61 deletions(-) diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index cd4923d1a17e..7f55cace596f 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -63,7 +63,6 @@ struct msm_dp_display_private { struct msm_dp_panel *panel; struct msm_dp_ctrl *ctrl; =20 - struct msm_dp_display_mode msm_dp_mode; struct msm_dp msm_dp_display; =20 /* wait for audio signaling */ @@ -600,16 +599,33 @@ static int msm_dp_init_sub_modules(struct msm_dp_disp= lay_private *dp) } =20 static int msm_dp_display_set_mode(struct msm_dp *msm_dp_display, - struct msm_dp_display_mode *mode) + const struct drm_display_mode *adjusted_mode, + struct msm_dp_panel *msm_dp_panel) { struct msm_dp_display_private *dp; + u32 bpp; =20 dp =3D container_of(msm_dp_display, struct msm_dp_display_private, msm_dp= _display); =20 - drm_mode_copy(&dp->panel->msm_dp_mode.drm_mode, &mode->drm_mode); - dp->panel->msm_dp_mode.bpp =3D mode->bpp; - dp->panel->msm_dp_mode.out_fmt_is_yuv_420 =3D mode->out_fmt_is_yuv_420; - msm_dp_panel_init_panel_info(dp->panel); + drm_mode_copy(&msm_dp_panel->msm_dp_mode.drm_mode, adjusted_mode); + if (msm_dp_display_check_video_test(msm_dp_display)) + bpp =3D msm_dp_display_get_test_bpp(msm_dp_display); + else + bpp =3D msm_dp_panel->connector->display_info.bpc * 3; + + msm_dp_panel->msm_dp_mode.bpp =3D bpp ? bpp : 24; /* Default bpp */ + msm_dp_panel->msm_dp_mode.v_active_low =3D + !!(adjusted_mode->flags & DRM_MODE_FLAG_NVSYNC); + msm_dp_panel->msm_dp_mode.h_active_low =3D + !!(adjusted_mode->flags & DRM_MODE_FLAG_NHSYNC); + msm_dp_panel->msm_dp_mode.out_fmt_is_yuv_420 =3D + drm_mode_is_420_only(&msm_dp_panel->connector->display_info, adjusted_mo= de) && + msm_dp_panel->vsc_sdp_supported; + msm_dp_panel_init_panel_info(msm_dp_panel); + + /* populate wide_bus_support to different layers */ + dp->ctrl->wide_bus_en =3D + msm_dp_panel->msm_dp_mode.out_fmt_is_yuv_420 ? false : dp->wide_bus_supp= orted; return 0; } =20 @@ -1310,7 +1326,7 @@ bool msm_dp_wide_bus_available(const struct msm_dp *m= sm_dp_display) =20 dp =3D container_of(msm_dp_display, struct msm_dp_display_private, msm_dp= _display); =20 - if (dp->msm_dp_mode.out_fmt_is_yuv_420) + if (dp->panel->msm_dp_mode.out_fmt_is_yuv_420) return false; =20 return dp->wide_bus_supported; @@ -1414,6 +1430,30 @@ static const struct msm_display_funcs msm_dp_display= _funcs =3D { .needs_encoder =3D msm_dp_display_needs_encoder, }; =20 +void msm_dp_bridge_atomic_pre_enable(struct drm_bridge *drm_bridge, + struct drm_atomic_commit *state) +{ + struct msm_dp_bridge *msm_dp_bridge =3D to_dp_bridge(drm_bridge); + struct msm_dp *dp =3D msm_dp_bridge->msm_dp_display; + struct msm_dp_display_private *msm_dp_display; + struct drm_crtc *crtc; + struct drm_crtc_state *crtc_state; + + msm_dp_display =3D container_of(dp, struct msm_dp_display_private, msm_dp= _display); + + crtc =3D drm_atomic_get_new_crtc_for_encoder(state, drm_bridge->encoder); + if (!crtc) + return; + crtc_state =3D drm_atomic_get_new_crtc_state(state, crtc); + + /* + * The DPU encoder's .atomic_enable() reads the mode's YUV420 / wide bus + * state and runs before the bridge's .atomic_enable(), so the mode must + * be programmed here, in .atomic_pre_enable(). + */ + msm_dp_display_set_mode(dp, &crtc_state->adjusted_mode, msm_dp_display->p= anel); +} + void msm_dp_bridge_atomic_enable(struct drm_bridge *drm_bridge, struct drm_atomic_commit *state) { @@ -1424,10 +1464,6 @@ void msm_dp_bridge_atomic_enable(struct drm_bridge *= drm_bridge, bool force_link_train =3D false; =20 msm_dp_display =3D container_of(dp, struct msm_dp_display_private, msm_dp= _display); - if (!msm_dp_display->msm_dp_mode.drm_mode.clock) { - DRM_ERROR("invalid params\n"); - return; - } =20 if (dp->is_edp) msm_dp_hpd_plug_handle(msm_dp_display); @@ -1440,12 +1476,6 @@ void msm_dp_bridge_atomic_enable(struct drm_bridge *= drm_bridge, if (msm_dp_display->link->sink_count =3D=3D 0) return; =20 - rc =3D msm_dp_display_set_mode(dp, &msm_dp_display->msm_dp_mode); - if (rc) { - DRM_ERROR("Failed to perform a mode set, rc=3D%d\n", rc); - return; - } - if (!dp->power_on) { msm_dp_display_host_phy_init(msm_dp_display); force_link_train =3D true; @@ -1500,45 +1530,6 @@ void msm_dp_bridge_atomic_post_disable(struct drm_br= idge *drm_bridge, pm_runtime_put_sync(&dp->pdev->dev); } =20 -void msm_dp_bridge_mode_set(struct drm_bridge *drm_bridge, - const struct drm_display_mode *mode, - const struct drm_display_mode *adjusted_mode) -{ - struct msm_dp_bridge *msm_dp_bridge =3D to_dp_bridge(drm_bridge); - struct msm_dp *dp =3D msm_dp_bridge->msm_dp_display; - struct msm_dp_display_private *msm_dp_display; - struct msm_dp_panel *msm_dp_panel; - - msm_dp_display =3D container_of(dp, struct msm_dp_display_private, msm_dp= _display); - msm_dp_panel =3D msm_dp_display->panel; - - memset(&msm_dp_display->msm_dp_mode, 0x0, sizeof(struct msm_dp_display_mo= de)); - - if (msm_dp_display_check_video_test(dp)) - msm_dp_display->msm_dp_mode.bpp =3D msm_dp_display_get_test_bpp(dp); - else /* Default num_components per pixel =3D 3 */ - msm_dp_display->msm_dp_mode.bpp =3D dp->connector->display_info.bpc * 3; - - if (!msm_dp_display->msm_dp_mode.bpp) - msm_dp_display->msm_dp_mode.bpp =3D 24; /* Default bpp */ - - drm_mode_copy(&msm_dp_display->msm_dp_mode.drm_mode, adjusted_mode); - - msm_dp_display->msm_dp_mode.v_active_low =3D - !!(msm_dp_display->msm_dp_mode.drm_mode.flags & DRM_MODE_FLAG_NVSYNC); - - msm_dp_display->msm_dp_mode.h_active_low =3D - !!(msm_dp_display->msm_dp_mode.drm_mode.flags & DRM_MODE_FLAG_NHSYNC); - - msm_dp_display->msm_dp_mode.out_fmt_is_yuv_420 =3D - drm_mode_is_420_only(&dp->connector->display_info, adjusted_mode) && - msm_dp_panel->vsc_sdp_supported; - - /* populate wide_bus_support to different layers */ - msm_dp_display->ctrl->wide_bus_en =3D - msm_dp_display->msm_dp_mode.out_fmt_is_yuv_420 ? false : msm_dp_display-= >wide_bus_supported; -} - void msm_dp_bridge_hpd_enable(struct drm_bridge *bridge) { struct msm_dp_bridge *msm_dp_bridge =3D to_dp_bridge(bridge); diff --git a/drivers/gpu/drm/msm/dp/dp_drm.c b/drivers/gpu/drm/msm/dp/dp_dr= m.c index 4f615b45fff7..da005babe411 100644 --- a/drivers/gpu/drm/msm/dp/dp_drm.c +++ b/drivers/gpu/drm/msm/dp/dp_drm.c @@ -53,10 +53,10 @@ static const struct drm_bridge_funcs msm_dp_bridge_ops = =3D { .atomic_duplicate_state =3D drm_atomic_helper_bridge_duplicate_state, .atomic_destroy_state =3D drm_atomic_helper_bridge_destroy_state, .atomic_create_state =3D drm_atomic_helper_bridge_create_state, + .atomic_pre_enable =3D msm_dp_bridge_atomic_pre_enable, .atomic_enable =3D msm_dp_bridge_atomic_enable, .atomic_disable =3D msm_dp_bridge_atomic_disable, .atomic_post_disable =3D msm_dp_bridge_atomic_post_disable, - .mode_set =3D msm_dp_bridge_mode_set, .mode_valid =3D msm_dp_bridge_mode_valid, .get_modes =3D msm_dp_bridge_get_modes, .detect =3D msm_dp_bridge_detect, @@ -230,10 +230,10 @@ static void msm_edp_bridge_debugfs_init(struct drm_br= idge *bridge, struct dentry } =20 static const struct drm_bridge_funcs msm_edp_bridge_ops =3D { + .atomic_pre_enable =3D msm_dp_bridge_atomic_pre_enable, .atomic_enable =3D msm_edp_bridge_atomic_enable, .atomic_disable =3D msm_edp_bridge_atomic_disable, .atomic_post_disable =3D msm_edp_bridge_atomic_post_disable, - .mode_set =3D msm_dp_bridge_mode_set, .mode_valid =3D msm_edp_bridge_mode_valid, .atomic_create_state =3D drm_atomic_helper_bridge_create_state, .atomic_duplicate_state =3D drm_atomic_helper_bridge_duplicate_state, diff --git a/drivers/gpu/drm/msm/dp/dp_drm.h b/drivers/gpu/drm/msm/dp/dp_dr= m.h index 3b046822f05e..4c6b14dd52ac 100644 --- a/drivers/gpu/drm/msm/dp/dp_drm.h +++ b/drivers/gpu/drm/msm/dp/dp_drm.h @@ -26,6 +26,8 @@ int msm_dp_bridge_init(struct msm_dp *msm_dp_display, str= uct drm_device *dev, =20 enum drm_connector_status msm_dp_bridge_detect(struct drm_bridge *bridge, struct drm_connector *connector); +void msm_dp_bridge_atomic_pre_enable(struct drm_bridge *drm_bridge, + struct drm_atomic_commit *state); void msm_dp_bridge_atomic_enable(struct drm_bridge *drm_bridge, struct drm_atomic_commit *state); void msm_dp_bridge_atomic_disable(struct drm_bridge *drm_bridge, @@ -35,9 +37,6 @@ void msm_dp_bridge_atomic_post_disable(struct drm_bridge = *drm_bridge, enum drm_mode_status msm_dp_bridge_mode_valid(struct drm_bridge *bridge, const struct drm_display_info *info, const struct drm_display_mode *mode); -void msm_dp_bridge_mode_set(struct drm_bridge *drm_bridge, - const struct drm_display_mode *mode, - const struct drm_display_mode *adjusted_mode); void msm_dp_bridge_hpd_enable(struct drm_bridge *bridge); void msm_dp_bridge_hpd_disable(struct drm_bridge *bridge); void msm_dp_bridge_hpd_notify(struct drm_bridge *bridge, --=20 2.47.3 From nobody Fri Jul 24 23:30:38 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 AEF193B8405 for ; Wed, 22 Jul 2026 06:37:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702247; cv=none; b=tKAXzIYZ37oa34IQlgEE1k5IdFgB/kpv8GhiYRc9nANXA5aoDdPlrxFWWeoWO+wdVvdEtWIroUHeZ/H5uOq+CWqNBqKrlRjKhrD/fH2D/RqpldTWFq1ROcSOON9ejypNvl9sUNW2OqmqPC+1J+NwsXZ8Bq65xtxIAG9TgIK3py4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702247; c=relaxed/simple; bh=O3Jqaz4ugrsLczAy6mpnpHdHHgthAqZTa8e2rdFVpUc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jfkl9VEn0zPIYZ6RTHaT2bDK5DhzgSRRIWoJ72QySDXHe75MmTaE8+hPwcAj3sJNlJGxhnnn5BrvlGyLY3mn4r3hqb4MO5ldd2s8DawoZo4ji4qojCnUABpiyuGmWXrEhMtF0ft8fXdLSmaT3SDpLVEp1Hix15KoRbgo40NHmRI= 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=An4vEwxh; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=GOGLigpj; arc=none smtp.client-ip=205.220.168.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="An4vEwxh"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="GOGLigpj" Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66M53lWC4027336 for ; Wed, 22 Jul 2026 06:37:24 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= Bo/4C79iwt7zABGRuOK3HQrfFNywcLsmPwQZeiLMY64=; b=An4vEwxhrYwDGuLb /exn5a+Eoqi6Bnyz0UeSdpNXpw6XzQtLSAB6qDUAL/lgeQiAVnBzSPYlcmdrHwx5 ezQnefIVOc2bT+WaOnkbLOKoSem45vQtJH0yEbDzuJYKS+cgnc3RsSLI2CJZR9U3 AVZhBawIbSerx5STPgzFVV+hgA50B0pQnLF9DyYK9jIK+pNwIij+QzJSr59R3VmZ Nhh5rCZPwRockr3erHjMXkBEjKn7IYLh+9PtLBhIeNJ7M7eXuEGou48xLjICwsxN V4qOxxWaWSoDDVpFouUOS6ib6R5v6CTftokN9/8oVOcUZDYtC2rLALn0FfQNzK7n a4qxeQ== 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 4fj9bsbvmu-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 22 Jul 2026 06:37:23 +0000 (GMT) Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-51c1d137a68so333061801cf.3 for ; Tue, 21 Jul 2026 23:37:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784702243; x=1785307043; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Bo/4C79iwt7zABGRuOK3HQrfFNywcLsmPwQZeiLMY64=; b=GOGLigpjdCLJ0+9RtkWvMgkYuwkjjU3VGuirL6rKB5ur0ADbddX30ukuHEnROY+P2L QS/tENpXmQZyMq3ZcI+ZXVtv8A6v+hiZQM57BQcepLHLSvqAzKEF7/NA8rX6bzBsB3KU FcHLf1HY2LYClH0YwE2JtPgdeGyuwEpEcv5Rn6Wg0uWK5DfmZ7mqxKB/xiTGMRU1oaTF UvscQgfKvZeXfvSJWDEhuORjoFg8vqCo6zMOzmTDg42rl1727cGCbUR4PneT8+hJjfhK Zle2t6ie9M7afXn14xTnIAf8DZh1HkHNFbCndyZ0Wccuma2eVrbGeJcom3IBNVGukXtt OVnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784702243; x=1785307043; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Bo/4C79iwt7zABGRuOK3HQrfFNywcLsmPwQZeiLMY64=; b=a73PA60UVeAcrYD6FfEexh57l1ROzeFn8SdwjlT80KGXOBG7FU3hUAfeHmfQxc2kSO lZMTW6T0YdGbR+lt9VCYzj8z3Q+236Iqsbb0f6H+nKso5fp9oUjw9acrpUBVg7VoNE3I YJ8ZVjbJ5lFkX775+DkxVxaVh9qubp87Ro/JNLUNEOwxYrxHJIFb/bwJdpQwCphWKG81 BmNRb4L95heiOB2ztS9FtDKHP4vDtVPuRkDIyZuPWWggxRGvTZgWJ6P9N138awnbFWzg FSTxIkB6zqY73OdktprEZOyQLvlqFy1mKe1yP57iy8LaP1SRLzyvr1PxqkvU8dW44OH0 HmfA== X-Forwarded-Encrypted: i=1; AHgh+RorA7SHj0RABpgbZDVbgx/sIqYIwCPGUZj4mHepvQycXbTgN5rbqSGGFrssyKmvmkwOsmxdRJ3babXlgLk=@vger.kernel.org X-Gm-Message-State: AOJu0Yz3bvvW6TYbwlc4whiKIdjE3BxZIiDJcRrWu+IllE7kzmJU1qau 4HjO9am8Lzx3MFmN/tlbyGHMGGDOI3E9tH8LYJZ+RpBoeOStaCmK/hKv8f2yqlS1FbWwROboDJE oettJJlgxfSz7R9oos770jyoHTQ+QUIm8pNj8/WqidCPFMB5oS2vFI6Ssf7Ea8IjG8Tc= X-Gm-Gg: AR+sD10jVfW6v7CdXOfMd5sr67I3U3vu7UnvL9NN8TmWvdtdpUnx2nLDpq/SI1rTxsW SMJtxpAvtrZ292ygMYnE4xwwL96sTQ6e5LdKWUZRnw2LDWgAfttjK6Mj3z3ac0dHRtnIc1dxnsg ebZasatOwqQpgKaZaJQE9PIyf6IST5ZAQs7sjo+L4K9IaD2r4RGI/RMIoDphsgNNeOh+pRaowL2 T20SJhjEJeJSYGAgBM9jFcE+A0hvwjXJNja9cKOBdQvfof/W53bnndsvu7U3dIUL+MdK3pzS1W+ D9SYBnzpapIMJhgsyHWIaRZc0iFXfqBVKU7crDeGl6zVXCejuIoQQr7HdYow+L9WjnNS70mTOqT vgCuL+AdTIBq3PqfDX2ZqQ2464TdTTwfr0pd2jfYzLAv+YvexFm0L7+nzX7GAO5rVkLALA69HJY 1rPxgfUIZmzQl1EA== X-Received: by 2002:a05:622a:11c8:b0:51a:8eca:78e3 with SMTP id d75a77b69052e-5213c8e2f60mr208067461cf.5.1784702242984; Tue, 21 Jul 2026 23:37:22 -0700 (PDT) X-Received: by 2002:a05:622a:11c8:b0:51a:8eca:78e3 with SMTP id d75a77b69052e-5213c8e2f60mr208067151cf.5.1784702242555; Tue, 21 Jul 2026 23:37:22 -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 2adb3069b0e04-5b2a9b8c6f6sm309696e87.4.2026.07.21.23.37.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 23:37:20 -0700 (PDT) From: Dmitry Baryshkov Date: Wed, 22 Jul 2026 09:36:33 +0300 Subject: [PATCH 18/24] drm/msm/hdmi: cache is_hdmi instead of storing the connector 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: <20260722-drm-msm-display-interface-v1-18-368c10fe62fd@oss.qualcomm.com> References: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> In-Reply-To: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6460; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=O3Jqaz4ugrsLczAy6mpnpHdHHgthAqZTa8e2rdFVpUc=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqYGTpaoDgCLAerwkVcOKkcxoGFQZ8MMbf5o7F5 ZtyF9U/ICSJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCamBk6QAKCRCLPIo+Aiko 1UI/CACEZ5rknFHrCvnMjYTa7ok4aeGn/cXLG2wgZpQmRB8Yj1/3aW2WQadMC7ebQe7jfrrco6k oAUlQ2i1iWLhGorgh3zrPX+sMVSlneW3vYRTX05i74TcgA6OP0AnXMitIlkf7BvniOwgue18dqU aObJUsb4awKi+riGMhBy/6QExHXz8G9MpL6gx6knUIHxPVzBUTVJ3Vq4vzXc4G8qNZ4eeZCa0+v xrGGFqVDT8x9edTKcDDvvRDUyl0sPJyltyXHSFgvrsHjzvNor7c9w5UJKLjFJjAPjR8uDgDIYjy +rZQkRGAhaV0t4XAoSTq4nZRmL9DAYnomcWPvSZ1rI4YiNkw X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-ORIG-GUID: GqR2L35MYpsdapE9irZqjmkcvVlv5-za X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX2rnxlmadMi9Z NNS3KDmwg9cvivfQknGMhVabCgCIqJDhY5t0XqED1krLN+6hJGCSHmaZd9+220je5mT8vCxmhc7 jA2ewLhNVV3rQDBWAhkfVY6hwlntHCQ7AYyPR9jPQpv3MFaMuUFRTVgSkfK4Dm+wjUb9Fl8sRro 3GPjV6lmdUCnbAoU4XG3gcbKgmZLavQ72JZapHLGrd/xXgGlkgTZrYGTg35Dl8JxsCXFUDnZyO5 h4KUsAieqW9DsosnqKfo7m0ifIys09JrVnWViEwaI7oGteC4y3U34Axzbhfkp/RtzOxPRAVg1LL /tKbyRODy8syWfTI+/r/ZDqS4u/DAXeLJmyAMzekkXJNHzpblmm23sQGIX0XXZcpApe1pSmIGCB 4cIwxH/gJjLBLbwsL6lkw1eZV3M4GjJzmoZ3RzSPyRm/5pea7oMxCjFEI7XDriFSgq/V94Je8GU MHGjbVA5bgk4qttPZ+Q== X-Proofpoint-GUID: GqR2L35MYpsdapE9irZqjmkcvVlv5-za X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfXxUb0JnmRa6pv LHDq8UrcEOmXLhSWDatvT6SS4O+gJNcDieG9jtSm4+hHYwC8gUB8GHGwvkvvxUJmcvsNXjKfn1O ZpQPLcFOP/UXFBQhXWkyagfloWEECrA= X-Authority-Analysis: v=2.4 cv=QK1YgALL c=1 sm=1 tr=0 ts=6a606524 cx=c_pps a=JbAStetqSzwMeJznSMzCyw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8 a=ahIHk9JMi1UzJgPfqiEA:9 a=QEXdDO2ut3YA:10 a=uxP6HrT_eTzRwkO_Te1X:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-22_02,2026-07-21_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 spamscore=0 phishscore=0 impostorscore=0 bulkscore=0 suspectscore=0 clxscore=1015 adultscore=0 lowpriorityscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607220060 The HDMI driver stored the drm_connector in struct hdmi solely so that a handful of call sites could consult connector->display_info.is_hdmi, and so that the hotplug work could hand a connector to drm_bridge_detect(). Several of those call sites run outside of an atomic commit (the HPD enable/disable paths in msm_hdmi_set_mode(), and the audio update path), so they have no drm_atomic_state to derive the connector from and thus relied on the stored pointer. The only information actually consumed is the is_hdmi boolean. Cache it in struct hdmi and refresh it from a new .hpd_notify bridge callback: drm_bridge_connector_detect() updates the connector's EDID (and hence display_info.is_hdmi) via drm_atomic_helper_connector_hdmi_hotplug() before invoking .hpd_notify, so the cached value is always up to date. With that, the stored connector becomes local to msm_hdmi_modeset_init(): the connector object is owned by the DRM core after creation, so there is no need to keep a driver-side reference. The hotplug work now calls msm_hdmi_bridge_detect() directly, which ignores its connector argument anyway. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/hdmi/hdmi.c | 17 ++++++++--------- drivers/gpu/drm/msm/hdmi/hdmi.h | 4 +++- drivers/gpu/drm/msm/hdmi/hdmi_audio.c | 2 +- drivers/gpu/drm/msm/hdmi/hdmi_bridge.c | 16 ++++++++++++++-- 4 files changed, 26 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.c b/drivers/gpu/drm/msm/hdmi/hdm= i.c index 1d5a4b63f3c8..62961dddd8f5 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi.c +++ b/drivers/gpu/drm/msm/hdmi/hdmi.c @@ -27,7 +27,7 @@ void msm_hdmi_set_mode(struct hdmi *hdmi, bool power_on) spin_lock_irqsave(&hdmi->reg_lock, flags); if (power_on) { ctrl |=3D HDMI_CTRL_ENABLE; - if (!hdmi->connector->display_info.is_hdmi) { + if (!hdmi->is_hdmi) { ctrl |=3D HDMI_CTRL_HDMI; hdmi_write(hdmi, REG_HDMI_CTRL, ctrl); ctrl &=3D ~HDMI_CTRL_HDMI; @@ -164,6 +164,7 @@ static int msm_hdmi_modeset_init(struct msm_display *di= splay, struct drm_device *dev, struct drm_encoder *encoder) { struct hdmi *hdmi =3D container_of(display, struct hdmi, display); + struct drm_connector *connector =3D NULL; int ret; =20 hdmi->dev =3D dev; @@ -184,11 +185,11 @@ static int msm_hdmi_modeset_init(struct msm_display *= display, } } =20 - hdmi->connector =3D drm_bridge_connector_init(hdmi->dev, encoder); - if (IS_ERR(hdmi->connector)) { - ret =3D PTR_ERR(hdmi->connector); + connector =3D drm_bridge_connector_init(hdmi->dev, encoder); + if (IS_ERR(connector)) { + ret =3D PTR_ERR(connector); DRM_DEV_ERROR(dev->dev, "failed to create HDMI connector: %d\n", ret); - hdmi->connector =3D NULL; + connector =3D NULL; goto fail; } =20 @@ -204,10 +205,8 @@ static int msm_hdmi_modeset_init(struct msm_display *d= isplay, return 0; =20 fail: - if (hdmi->connector) { - hdmi->connector->funcs->destroy(hdmi->connector); - hdmi->connector =3D NULL; - } + if (connector) + connector->funcs->destroy(connector); =20 return ret; } diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.h b/drivers/gpu/drm/msm/hdmi/hdm= i.h index 869f55d4704a..d4adaa6ccdd5 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi.h +++ b/drivers/gpu/drm/msm/hdmi/hdmi.h @@ -47,6 +47,9 @@ struct hdmi { struct mutex state_mutex; /* protects two booleans */ unsigned long pixclock; =20 + /* cached from the connector's EDID, updated on hotplug */ + bool is_hdmi; + void __iomem *mmio; phys_addr_t mmio_size; void __iomem *qfprom_mmio; @@ -62,7 +65,6 @@ struct hdmi { struct device *phy_dev; =20 struct i2c_adapter *i2c; - struct drm_connector *connector; struct drm_bridge *bridge; =20 struct drm_bridge *next_bridge; diff --git a/drivers/gpu/drm/msm/hdmi/hdmi_audio.c b/drivers/gpu/drm/msm/hd= mi/hdmi_audio.c index 249c167ab04d..ce1864f3f659 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi_audio.c +++ b/drivers/gpu/drm/msm/hdmi/hdmi_audio.c @@ -19,7 +19,7 @@ int msm_hdmi_audio_update(struct hdmi *hdmi) bool enabled =3D audio->enabled; u32 acr_pkt_ctrl, vbi_pkt_ctrl, aud_pkt_ctrl, audio_config; =20 - if (!hdmi->connector->display_info.is_hdmi) + if (!hdmi->is_hdmi) return -EINVAL; =20 DBG("audio: enabled=3D%d, channels=3D%d, rate=3D%d", diff --git a/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c b/drivers/gpu/drm/msm/h= dmi/hdmi_bridge.c index 7abb9243dba5..84a423af73e9 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c +++ b/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c @@ -345,7 +345,7 @@ static void msm_hdmi_bridge_atomic_post_disable(struct = drm_bridge *bridge, if (hdmi->power_on) { power_off(bridge); hdmi->power_on =3D false; - if (hdmi->connector->display_info.is_hdmi) + if (hdmi->is_hdmi) msm_hdmi_audio_update(hdmi); msm_hdmi_phy_resource_disable(phy); } @@ -452,6 +452,17 @@ static enum drm_mode_status msm_hdmi_bridge_tmds_char_= rate_valid(const struct dr return 0; } =20 +static void msm_hdmi_bridge_hpd_notify(struct drm_bridge *bridge, + struct drm_connector *connector, + enum drm_connector_status status) +{ + struct hdmi_bridge *hdmi_bridge =3D to_hdmi_bridge(bridge); + struct hdmi *hdmi =3D hdmi_bridge->hdmi; + + /* called after the EDID update, so display_info is up to date */ + hdmi->is_hdmi =3D connector->display_info.is_hdmi; +} + static const struct drm_bridge_funcs msm_hdmi_bridge_funcs =3D { .atomic_duplicate_state =3D drm_atomic_helper_bridge_duplicate_state, .atomic_destroy_state =3D drm_atomic_helper_bridge_destroy_state, @@ -460,6 +471,7 @@ static const struct drm_bridge_funcs msm_hdmi_bridge_fu= ncs =3D { .atomic_post_disable =3D msm_hdmi_bridge_atomic_post_disable, .edid_read =3D msm_hdmi_bridge_edid_read, .detect =3D msm_hdmi_bridge_detect, + .hpd_notify =3D msm_hdmi_bridge_hpd_notify, .hpd_enable =3D msm_hdmi_hpd_enable, .hpd_disable =3D msm_hdmi_hpd_disable, .hdmi_tmds_char_rate_valid =3D msm_hdmi_bridge_tmds_char_rate_valid, @@ -482,7 +494,7 @@ msm_hdmi_hotplug_work(struct work_struct *work) container_of(work, struct hdmi_bridge, hpd_work); struct drm_bridge *bridge =3D &hdmi_bridge->base; =20 - drm_bridge_hpd_notify(bridge, drm_bridge_detect(bridge, hdmi_bridge->hdmi= ->connector)); + drm_bridge_hpd_notify(bridge, msm_hdmi_bridge_detect(bridge, NULL)); } =20 /* initialize bridge */ --=20 2.47.3 From nobody Fri Jul 24 23:30:38 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 F39633DA5AE for ; Wed, 22 Jul 2026 06:37:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702249; cv=none; b=cEjQJelYpYJ3isi2Nuq2DWq0vi62Sj6G8W/aYTeZiXkuh1BNsOeljjGulHzsBxpfpCtTCy+Okt5XJ9voYMej41YVMX2PgZ4fnKZZh3PIobLQpYqnTL+OwocgfIELz8uMjRx/cUB6Ywykh93TxyKcivXXKf7cXaU9/bgzj3zD0aU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702249; c=relaxed/simple; bh=vrk0zAkx3XteBl/zMHSAsYalFx0A87dpjiTf4rSceZk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DMv7uhxkyU6NzWzIrb8Lp+iCYfSoytXAQuTsYh3Y8WJqYdgpbwm3ZQTPIwQD6q8pJbs7+OpataWXJXZjpBZw8Mjg2rn6B0Hi4KSaLfccbYBHWHQrqcCfSchPz4srpYVoFbqKgy69PZ6CD22q7RZqdLF2Q+0r7ElTVx9ej2yeSUU= 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=BMVVYsR3; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=h57sR5I/; arc=none smtp.client-ip=205.220.168.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="BMVVYsR3"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="h57sR5I/" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66M53bCR3767556 for ; Wed, 22 Jul 2026 06:37:27 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= aQWkOjb7s1/Nv6UGotHwKuaoEbTsQknHkswMzc3hyws=; b=BMVVYsR3DuBHH0Q1 hiqS08YCfOqcHDBjxhsSJrxH5PYamaxjoBGu5de0zleuTdvJMmwljvcNRD632yBM 1jkRCVwq00B4CG97JgOq4vc6AKYOpGY7EH9Ayvd2yfcVipy/2YEkR91ZEpKZwX7/ 1+JhiMKxn8l0kGE6UTeOF6U5LMKud/pQwRfjpAo6EvHimDkvFfjUMpD1p4k7Hjgj E3wWqgj4W7qKbwhsj8vNZAM+8OWovqC+oorm2E0e9VTRFIjVFEHc+LmPk44U28wZ C8LTPoKjvB8/cqzJl32CepnViUofalE1V9rvJIOcLgigH8WA6SLKpPkzxEyk52TP ijZkAg== 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 4fjnu4rnab-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 22 Jul 2026 06:37:27 +0000 (GMT) Received: by mail-qt1-f199.google.com with SMTP id d75a77b69052e-51c0e702df8so181841681cf.2 for ; Tue, 21 Jul 2026 23:37:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784702246; x=1785307046; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=aQWkOjb7s1/Nv6UGotHwKuaoEbTsQknHkswMzc3hyws=; b=h57sR5I/zM3rPOhMHeY5SJNTSKoxVoxV2fsi/R1u8fqFbn8alfw53iCuNh9+MFYvFE xQSKPO8P4YRrIKguyLe1y4Fz44WKzebFxjRjLAjX5OIVcNpE7khrbTeTL1d+g3rxrWy4 T4yaLIXwS60par05HGJfnTyAIGpWLOrYK5ycnYVkx3BvW9VasApEXJu+FWH07FmCWeMN lyseWKOefg2vGjq640UFZoUvNV8a9dJjmR0ZH5sVwsdsRu17PSEDlzasvFSl8lFJSHOK Zi3nLbEXMqiCrmMd6ZUydQFxKn1bY9heqzmUVKM3j7CoG3AjPMa6t0sSbFlwyXwiMwqN brKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784702246; x=1785307046; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=aQWkOjb7s1/Nv6UGotHwKuaoEbTsQknHkswMzc3hyws=; b=cD1DZCSRVByvpHWod5K92w5leu9uB0nm4UZYr0uB6WZ40UwfPK5kfwRVb1PldGCgfq hCAyaNO1+d4WGyrErepsBKJvMyVwqAdv7HcTmpNE8V4IWxNbZoxMmb8dr/0ERkVROT6B z22Ym5vxpOfVLT8zkjeBPw/DXPhB0iirKjSNakSS8bINbdHfbYWEUNq8Phaf4MT4p1D+ Q9Z1l93wgRPhXaOXnQSLQbRCJf6Jd3O4BE9/Fvsk63Vxw0aZ4np/FLswK5HoUUXBeIjn JAfOnS+THv1gAnDD+sWfxCa8H5t77iclq14WKRd0LU25Ve8YzaN52m+AVe2SKOpvg6SW Y1sw== X-Forwarded-Encrypted: i=1; AHgh+RoS/KRiTycZI6v44SLdkHSyfcD4XMBmsEZvo15siLBAQSRYCU85DsTAM6UfPVCAhKhgXH/W2QchGFQKIC0=@vger.kernel.org X-Gm-Message-State: AOJu0YyyWuGf4115Lnt9k4lEJurC3nOCCNXkhdv1Kml20aQDiHW4IxcK EAsR/Tza+HWeDk/LGc1usAWCBWGAV6Ugp63oxNVn0deG7Kq9WvPAWKZ2WP7SAh6vQDaXuqI5D3r NknGR2pt2HjJVizLBpCsxj6Mysj/DM7pDwJYkgQmfy4inBLotvT3k+T7Zf8+ysf3h4Q4= X-Gm-Gg: AR+sD12D70NKtwac4RGbPqVVKj57SqLCXvFFQhijL0hIakq6795XEHNaWvmLhh/DnH/ u31aJB+IUNNzYoddKisGyEm+V8JHRn69Opc+9AZ+hBN4KI16xBjR6d4WXIDQRlULCSeom1TvN0e 2/jhTkrYjq2cp1zArhCoPCNcg4KUbsvKZpQVdpVikvo0p+pjuCNrk+WhMIka9snP46nbNwC7JsR hbqlyr7FhgmIfzeaGg6Z7fjaArIwvCeNwHkwayTIntjQSWfCT5j2pvbLIMUzaF54ZbzJF9vjF9G mp6Pnxo5QUDuo1cM9FT5dcO3X6ZTSJm2+d3E2vROjf2/afGjEvUcOq7Hp+bulrt0W+G0l9NPu/W EB2wM5QFMkZGHG6sOcqsKyZFlkbO2KI/8tMQaUJGIhAO87rnMvvrpEhQ7dMm9J78mOYyWINwrhe yE0AETtqIpGYU0Dg== X-Received: by 2002:a05:622a:4111:b0:51c:257c:8164 with SMTP id d75a77b69052e-5213c5f3e47mr203448131cf.25.1784702245885; Tue, 21 Jul 2026 23:37:25 -0700 (PDT) X-Received: by 2002:a05:622a:4111:b0:51c:257c:8164 with SMTP id d75a77b69052e-5213c5f3e47mr203447931cf.25.1784702245372; Tue, 21 Jul 2026 23:37:25 -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 2adb3069b0e04-5b2a9b8c6f6sm309696e87.4.2026.07.21.23.37.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 23:37:23 -0700 (PDT) From: Dmitry Baryshkov Date: Wed, 22 Jul 2026 09:36:34 +0300 Subject: [PATCH 19/24] drm/msm/dp: drop redundant panel->connector 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: <20260722-drm-msm-display-interface-v1-19-368c10fe62fd@oss.qualcomm.com> References: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> In-Reply-To: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=8683; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=vrk0zAkx3XteBl/zMHSAsYalFx0A87dpjiTf4rSceZk=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqYGTpwZg19pnYNYwwmnZyD1Iob53kPueOk/9S7 uTOir7FvBCJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCamBk6QAKCRCLPIo+Aiko 1RCxB/0TJAx9rW7Zo9Jif7MP7sO3ErixKjMLFJOIMSqd4qeLuC8qaWCWIYEB++ScRJK/GMGWyvL WpJDEmQN87EgZEYdLlCY9WdkWskvFO16fdNDhLZi0Mu+LsKdHaVfLVV9LHDYFEAYMpGQQLwaVi/ uYwbEbe7G3WZeyxBS8eEDIu/eb6inaDxpmbVqzSR/Hh9CUXnZ0ogFEO9/eb4xS85IRnDbrqeOgO 8XbKPkEeX9xlQVRC7lW1Cr9JZLdUetjYfmBtyoy8dO2DsUlPVckwaRvedkb94aUBsahuFLkiRad jLRlABsrcKywTcvp4wCEhv7ro5fkwf0DEqnNK7ixylMgiFit X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-GUID: vrO3G8AdMIRjU5wa4LaYifl4hWn08fxF X-Authority-Analysis: v=2.4 cv=KLhqylFo c=1 sm=1 tr=0 ts=6a606527 cx=c_pps a=WeENfcodrlLV9YRTxbY/uA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=zDF9bxl-6Y4pHeVFKNQA:9 a=QEXdDO2ut3YA:10 a=kacYvNCVWA4VmyqE58fU:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX07y32ltLiTHe JzzaK+1WN/p6+6pvFfp9R8yG9yXBgQ9NK6i19p5p1ZOhofNhwwWFrcomEvVjqCIoSSUtaoimudQ pazS+JY/SDNZ4OBzvcTC2MaZNBPQtKi5Eq8cQpI0CSlFIfirsH7dOHiHECDMM/0U1/aremkTG3u Y+6LeAWwmyobO3sP5GJo2tn4ALRWACqJzUFkKc0VqI3JcSs/dK5/4AALJwxmdKrUBEH9Q8XFi/p OcRYL87oadMHxpEJSQkLfIshAIlpdY+IuwDeBoK3n94fSiIoBdKaQpiUAIZHmaTgohyeIX4ovyx KO39ga4h/lXDor/U37Nj3PqqCxc4Th3DfWgBjK/EmZoiCpHTkEYyidAYprv1yHQ+a2s6vy1cZqs 8C05J9PNCkz+oLtJWViYSvqjpoYUqllR2BW9SfW58y5wERkeM9BTLq9/yojxrJ8k2KMlMaXmhgm rvtLImlOeN3/wPAQi3A== X-Proofpoint-ORIG-GUID: vrO3G8AdMIRjU5wa4LaYifl4hWn08fxF X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfXwbwUVDTSxrXz wiWU4Qb0MXxak9h2lQnZQVlJIvwafTG5a1PqGIbRU6pQXUTNo9jJ/E3Kd/nKkvtvvKMjkHxaCIi chzknQqic90a22SFyxilVll39zGHdYk= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-22_02,2026-07-21_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 spamscore=0 clxscore=1015 impostorscore=0 lowpriorityscore=0 priorityscore=1501 malwarescore=0 phishscore=0 adultscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607220060 struct msm_dp_panel kept its own copy of the drm_connector, a plain alias of msm_dp.connector assigned once in msm_dp_modeset_init(). It was only dereferenced in three places, each of which either already has a connector at hand or is reached from a caller that does: - msm_dp_display_set_mode() runs from the .atomic_enable bridge callback, which can fetch the connector from the atomic state; - msm_dp_display_get_modes() is called from the .get_modes bridge callback, which is passed the connector; - msm_dp_panel_handle_sink_request() is called from msm_dp_display_process_hpd_high(), which holds the connector. Pass the connector down to those functions and drop the duplicate field. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/dp/dp_display.c | 27 +++++++++++---------------- drivers/gpu/drm/msm/dp/dp_display.h | 3 ++- drivers/gpu/drm/msm/dp/dp_drm.c | 2 +- drivers/gpu/drm/msm/dp/dp_panel.c | 5 +++-- drivers/gpu/drm/msm/dp/dp_panel.h | 4 ++-- 5 files changed, 19 insertions(+), 22 deletions(-) diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index 7f55cace596f..461420a72820 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -304,7 +304,7 @@ static int msm_dp_display_process_hpd_high(struct msm_d= p_display_private *dp) dp->msm_dp_display.psr_supported =3D dp->panel->psr_cap.version && psr_en= abled; =20 dp->audio_supported =3D info->has_audio; - msm_dp_panel_handle_sink_request(dp->panel, drm_edid); + msm_dp_panel_handle_sink_request(dp->panel, drm_edid, connector); =20 /* * set sink to normal operation mode -- D0 @@ -600,7 +600,8 @@ static int msm_dp_init_sub_modules(struct msm_dp_displa= y_private *dp) =20 static int msm_dp_display_set_mode(struct msm_dp *msm_dp_display, const struct drm_display_mode *adjusted_mode, - struct msm_dp_panel *msm_dp_panel) + struct msm_dp_panel *msm_dp_panel, + struct drm_connector *connector) { struct msm_dp_display_private *dp; u32 bpp; @@ -611,7 +612,7 @@ static int msm_dp_display_set_mode(struct msm_dp *msm_d= p_display, if (msm_dp_display_check_video_test(msm_dp_display)) bpp =3D msm_dp_display_get_test_bpp(msm_dp_display); else - bpp =3D msm_dp_panel->connector->display_info.bpc * 3; + bpp =3D connector->display_info.bpc * 3; =20 msm_dp_panel->msm_dp_mode.bpp =3D bpp ? bpp : 24; /* Default bpp */ msm_dp_panel->msm_dp_mode.v_active_low =3D @@ -619,7 +620,7 @@ static int msm_dp_display_set_mode(struct msm_dp *msm_d= p_display, msm_dp_panel->msm_dp_mode.h_active_low =3D !!(adjusted_mode->flags & DRM_MODE_FLAG_NHSYNC); msm_dp_panel->msm_dp_mode.out_fmt_is_yuv_420 =3D - drm_mode_is_420_only(&msm_dp_panel->connector->display_info, adjusted_mo= de) && + drm_mode_is_420_only(&connector->display_info, adjusted_mode) && msm_dp_panel->vsc_sdp_supported; msm_dp_panel_init_panel_info(msm_dp_panel); =20 @@ -769,18 +770,14 @@ enum drm_mode_status msm_dp_bridge_mode_valid(struct = drm_bridge *bridge, return MODE_OK; } =20 -int msm_dp_display_get_modes(struct msm_dp *dp) +int msm_dp_display_get_modes(struct msm_dp *dp, struct drm_connector *conn= ector) { - struct msm_dp_display_private *msm_dp_display; - if (!dp) { DRM_ERROR("invalid params\n"); return 0; } =20 - msm_dp_display =3D container_of(dp, struct msm_dp_display_private, msm_dp= _display); - - return drm_edid_connector_add_modes(msm_dp_display->panel->connector); + return drm_edid_connector_add_modes(connector); } =20 bool msm_dp_display_check_video_test(struct msm_dp *dp) @@ -1350,13 +1347,10 @@ static int msm_dp_modeset_init(struct msm_display *= display, struct drm_device *dev, struct drm_encoder *encoder) { struct msm_dp *msm_dp_display =3D container_of(display, struct msm_dp, di= splay); - struct msm_dp_display_private *msm_dp_priv; int ret; =20 msm_dp_display->drm_dev =3D dev; =20 - msm_dp_priv =3D container_of(msm_dp_display, struct msm_dp_display_privat= e, msm_dp_display); - ret =3D msm_dp_bridge_init(msm_dp_display, dev, encoder); if (ret) { DRM_DEV_ERROR(dev->dev, @@ -1373,8 +1367,6 @@ static int msm_dp_modeset_init(struct msm_display *di= splay, return ret; } =20 - msm_dp_priv->panel->connector =3D msm_dp_display->connector; - return 0; } =20 @@ -1438,9 +1430,12 @@ void msm_dp_bridge_atomic_pre_enable(struct drm_brid= ge *drm_bridge, struct msm_dp_display_private *msm_dp_display; struct drm_crtc *crtc; struct drm_crtc_state *crtc_state; + struct drm_connector *connector; =20 msm_dp_display =3D container_of(dp, struct msm_dp_display_private, msm_dp= _display); =20 + connector =3D drm_atomic_get_new_connector_for_encoder(state, drm_bridge-= >encoder); + crtc =3D drm_atomic_get_new_crtc_for_encoder(state, drm_bridge->encoder); if (!crtc) return; @@ -1451,7 +1446,7 @@ void msm_dp_bridge_atomic_pre_enable(struct drm_bridg= e *drm_bridge, * state and runs before the bridge's .atomic_enable(), so the mode must * be programmed here, in .atomic_pre_enable(). */ - msm_dp_display_set_mode(dp, &crtc_state->adjusted_mode, msm_dp_display->p= anel); + msm_dp_display_set_mode(dp, &crtc_state->adjusted_mode, msm_dp_display->p= anel, connector); } =20 void msm_dp_bridge_atomic_enable(struct drm_bridge *drm_bridge, diff --git a/drivers/gpu/drm/msm/dp/dp_display.h b/drivers/gpu/drm/msm/dp/d= p_display.h index 8c34a473c7db..f1523dbe33d5 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.h +++ b/drivers/gpu/drm/msm/dp/dp_display.h @@ -28,7 +28,8 @@ struct msm_dp { bool psr_supported; }; =20 -int msm_dp_display_get_modes(struct msm_dp *msm_dp_display); +int msm_dp_display_get_modes(struct msm_dp *msm_dp_display, + struct drm_connector *connector); bool msm_dp_display_check_video_test(struct msm_dp *msm_dp_display); int msm_dp_display_get_test_bpp(struct msm_dp *msm_dp_display); void msm_dp_display_signal_audio_start(struct msm_dp *msm_dp_display); diff --git a/drivers/gpu/drm/msm/dp/dp_drm.c b/drivers/gpu/drm/msm/dp/dp_dr= m.c index da005babe411..8dbe7d682ddf 100644 --- a/drivers/gpu/drm/msm/dp/dp_drm.c +++ b/drivers/gpu/drm/msm/dp/dp_drm.c @@ -32,7 +32,7 @@ static int msm_dp_bridge_get_modes(struct drm_bridge *bri= dge, struct drm_connect dp =3D to_dp_bridge(bridge)->msm_dp_display; =20 /* pluggable case assumes EDID is read when HPD */ - rc =3D msm_dp_display_get_modes(dp); + rc =3D msm_dp_display_get_modes(dp, connector); if (rc <=3D 0) { DRM_ERROR("failed to get DP sink modes, rc=3D%d\n", rc); return rc; diff --git a/drivers/gpu/drm/msm/dp/dp_panel.c b/drivers/gpu/drm/msm/dp/dp_= panel.c index bde4a772d22c..30a44e7e8e62 100644 --- a/drivers/gpu/drm/msm/dp/dp_panel.c +++ b/drivers/gpu/drm/msm/dp/dp_panel.c @@ -305,7 +305,8 @@ static u8 msm_dp_panel_get_edid_checksum(const struct e= did *edid) } =20 void msm_dp_panel_handle_sink_request(struct msm_dp_panel *msm_dp_panel, - const struct drm_edid *drm_edid) + const struct drm_edid *drm_edid, + struct drm_connector *connector) { struct msm_dp_panel_private *panel; =20 @@ -324,7 +325,7 @@ void msm_dp_panel_handle_sink_request(struct msm_dp_pan= el *msm_dp_panel, if (edid) checksum =3D msm_dp_panel_get_edid_checksum(edid); else - checksum =3D msm_dp_panel->connector->real_edid_checksum; + checksum =3D connector->real_edid_checksum; =20 msm_dp_link_send_edid_checksum(panel->link, checksum); msm_dp_link_send_test_response(panel->link); diff --git a/drivers/gpu/drm/msm/dp/dp_panel.h b/drivers/gpu/drm/msm/dp/dp_= panel.h index 53b7b4463551..f73e11e57ced 100644 --- a/drivers/gpu/drm/msm/dp/dp_panel.h +++ b/drivers/gpu/drm/msm/dp/dp_panel.h @@ -33,7 +33,6 @@ struct msm_dp_panel { u8 downstream_ports[DP_MAX_DOWNSTREAM_PORTS]; =20 struct msm_dp_link_info link_info; - struct drm_connector *connector; struct msm_dp_display_mode msm_dp_mode; struct msm_dp_panel_psr psr_cap; bool video_test; @@ -51,7 +50,8 @@ int msm_dp_panel_read_link_caps(struct msm_dp_panel *msm_= dp_panel, u32 msm_dp_panel_get_mode_bpp(struct msm_dp_panel *msm_dp_panel, u32 mode_= max_bpp, u32 mode_pclk_khz); void msm_dp_panel_handle_sink_request(struct msm_dp_panel *msm_dp_panel, - const struct drm_edid *drm_edid); + const struct drm_edid *drm_edid, + struct drm_connector *connector); void msm_dp_panel_tpg_config(struct msm_dp_panel *msm_dp_panel, bool enabl= e); =20 void msm_dp_panel_clear_dsc_dto(struct msm_dp_panel *msm_dp_panel); --=20 2.47.3 From nobody Fri Jul 24 23:30:38 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 473EE3DB33D for ; Wed, 22 Jul 2026 06:37:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702251; cv=none; b=YVW01HBpRCNMB6PZLHPv+YEUBp8U0XpEfUWaHNS+9iLso8dpNOs19H06qsXSD0PiTshax6GA9bi48vK2MhGCgCrYxQPjPYVDkY6emMjoSjmYuEKa3yAvErhwaSdsHwqCi3VMf90yyhZlBr3Uz+82bpJh787ajffQQLUweBZHpgU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702251; c=relaxed/simple; bh=ru2Wb6WusJrEqzG9fcYZvfqNT3ibrquiqxYIOULpW3A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ONCsJmQL/5AMa2zhRvfYu1NmvnCxZlZlQb5cXqB5KhZZ87+ykoLiUPhQo3cETeeKcF7qdkRaTJhPM85jU4/yU2kENNU4DzmIV51UPLn7WTvo+19m8Il5vDTMlLiHRdn7U9/TtY0UqEKuJzWp9Fq6qRFVDHpn2FsQhnK5x450P44= 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=SvqVDo1k; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=GGlZaI0I; arc=none smtp.client-ip=205.220.168.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="SvqVDo1k"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="GGlZaI0I" Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66M623D3984644 for ; Wed, 22 Jul 2026 06:37:29 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= RkBsQAWB9soKsoLrvCV1NtPiFvCgA8F8m7591cr4bVk=; b=SvqVDo1k0aC+hWx9 mj7liaY+to0Mp4vspuNWeID2pX5m8amrD0BHR+vXtYZdiA59nhYIvL9vnqIIl/B7 wl8J+UuEecS3loZwwve7Qp0/1QzndntHHVt5jkU2LKd+QK2WGKkciwaCoAVPb5Ui LUsN1nHx/03t7+7hAbYCLvQafn+tp4rZxDZebgfK/N7Zk1lARSqBxNVZTO3vfoCh 5vqqxnkQ6D6NXdagserTw7egeNoBdZT/5xG/zOdkFDnZhaao6DdHf31XuRe/JFJZ R4ZGMzyKIlRgjJ5TsC7ACYsviix0cBXgHMTmon6vN1GeKyUQ7PDCpbRQ6uAMxWIO qaXI5g== Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fjr8384b1-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 22 Jul 2026 06:37:29 +0000 (GMT) Received: by mail-qt1-f197.google.com with SMTP id d75a77b69052e-51c21c01cf3so193872761cf.2 for ; Tue, 21 Jul 2026 23:37:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784702248; x=1785307048; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=RkBsQAWB9soKsoLrvCV1NtPiFvCgA8F8m7591cr4bVk=; b=GGlZaI0IhXlq5ce2ItTB60SBnN0e2EPXyXexEzKassmJNj4R2gG/eRVXLCWI1DRWST cFvKTgnsPMMIT4iqNlQy8rNPwnFP6uNz/+axinx8frzpCSiJwXUOjmS4PMcX09V/xokc KHaLgzPdTLaZOoO3z6a4ml2kVmYX4vw8WGFifRhkxLyoLKRsRH/MIJz5t9LkU9VOE4ti xUi9puOCXJNfTmO6uoVxwejDx6iBvV+N+8SDqKieasssOEtsEJgkCgxd/fTM4whoLD3m wZm8jok3KYAD9r5ssLqNXnpd2YbztPay2htKlF1+Lb4Qmaj2rV2U0CF/iWajKNhILaWQ Fgzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784702248; x=1785307048; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=RkBsQAWB9soKsoLrvCV1NtPiFvCgA8F8m7591cr4bVk=; b=px/FfwwWWZfTSA3je46u7eS6mOkQ3ZPQv4G7mW6IgS+Gt3ul9AxpxdUwozHUSkLmKO +OfLzdU4y2r9MjKUg4dT5AJ6eOEE3TeVVWTe3cObX2gADMJkVUqY34unw+CG/m31vfUr CILiycg+Oh76aANvknsAvWTkF7WEG7rZfaO4olJHoRRhIk++nvORnoM+K8adN6mQrVSs kJe/6a9SKdPbTgTuG/vJgehL2/Fnzv2VyIku1qkYkhSEG8bVtGZLVeSiYcQsFPduQ4mr EuiuvjaAgFDtKxbnHXRM35Bu7JyxRauFuBPyU6qeXPfpiJ8on2H4ad7SpjwrJfYksBZ6 TPag== X-Forwarded-Encrypted: i=1; AHgh+RoUqdc0KcxCGby87fLIhu8Qzi8F0JeMLdEejgHHIYLF4wFOnOrnORULua9cNCNaQL9FhgcyxV9zAhAZWrU=@vger.kernel.org X-Gm-Message-State: AOJu0Yxof1vl/07/nJb/a9pSYAt5vwLYV2YpHtSxBJuHdNMBlGPO+oA9 2DGHznChQPOtMVdaplik4aNrVneoFnrWvi0ChnyGvophUxjIIo+9Q8/qHgopzXWlfDQSkwTCvUW 4/dEZCRWqR0jKyGqzKmyZZeyrlXVOFcsvZ7sPQ1uspna2mp+TeijynR9XstPbwy65G+8= X-Gm-Gg: AR+sD11RT5PSqCj5Iv/iO5G6ZhvPN/eLM2Uj0+IVN3cA6004ujOq8Dl3qqutzYKhmRF 1Guq1z2K6A63D/ycYDmYBqU01OmCfr7LCC12Lcm2dze0hxqNtMGzxD5IpGpF0vx1KxCn45G06KL qtmwAjJit+jkcrtmp7XpWWZ5M67xuIQMcJS3+OFNtFA8mErwQdrtEa4ZhcuMJwtjiGM8PxU/f4J /RvDkK88k2cz7k1cDBBQWB41CxnZw98KiCqZKzXX9cZF78oj5O4HDwZRvzbvvnmBv8kuKXkrdvs YNZSBNv5QrFzacLa26y9LLwvTKBwwWqnmNhC//flmnIXG9ff5oa0jI4eLcv56HakrCzbUXOfpIO 8nhU0lzQyv04oCNG+cYUecog2pF7lCrhc5VeUxzXNLNXcVhPI75LBZ001I0YU87Tx18hP8onQnn VKbOyzkCwDKOSFuw== X-Received: by 2002:ac8:5a86:0:b0:51a:329:e802 with SMTP id d75a77b69052e-5213f66c60amr209095011cf.41.1784702248631; Tue, 21 Jul 2026 23:37:28 -0700 (PDT) X-Received: by 2002:ac8:5a86:0:b0:51a:329:e802 with SMTP id d75a77b69052e-5213f66c60amr209094831cf.41.1784702248174; Tue, 21 Jul 2026 23:37: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 2adb3069b0e04-5b2a9b8c6f6sm309696e87.4.2026.07.21.23.37.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 23:37:27 -0700 (PDT) From: Dmitry Baryshkov Date: Wed, 22 Jul 2026 09:36:35 +0300 Subject: [PATCH 20/24] drm/msm/dp: use drm_display_info in mode_valid callbacks 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: <20260722-drm-msm-display-interface-v1-20-368c10fe62fd@oss.qualcomm.com> References: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> In-Reply-To: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2317; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=ru2Wb6WusJrEqzG9fcYZvfqNT3ibrquiqxYIOULpW3A=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqYGTpm9cXV4806bVBAhjFnRwAnQLIwryFRMcY/ YP0nY0FHzGJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCamBk6QAKCRCLPIo+Aiko 1TzoCAClTRqjxWI6IzRO/17UiIDa4gaX3f+NszHxiYQEom48W2TfKB8mGh9fsRKRnstpmfgPPzO fH6WvlGb2eutiVuEOieqlgFatmgNuZPmCuoZdnrFXKQYXeh7IUvQiuwvF9ZanX862b9NojoXefo EZ7mXokIAdN/tyI6s1EVEBjr3NhsGPq+/K6sWvlWhFEb+qcLvKumZJOqyD/8it5jnP6NxeUpKGq HvVbWWv0GY2cb2nQBlqUfsZObXK6e+8nkrsVXHNAJLWADwOMuU449p1JRPfQO4kz+DXrKrcf+bt YLqojqDPX7hIT/gx/7HcbnLPzWOlzQJhZsKnYJAF/Fe/pW4d X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-ORIG-GUID: K9EqynhLVvjC3WfoETWm91OSXUe8JNi8 X-Authority-Analysis: v=2.4 cv=VfrH+lp9 c=1 sm=1 tr=0 ts=6a606529 cx=c_pps a=EVbN6Ke/fEF3bsl7X48z0g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=EUspDBNiAAAA:8 a=oESPpdQVtlo-kY4fL14A:9 a=QEXdDO2ut3YA:10 a=a_PwQJl-kcHnX1M80qC6:22 X-Proofpoint-GUID: K9EqynhLVvjC3WfoETWm91OSXUe8JNi8 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfXwtB87M0rj34x pPkldfgGZbU+jBdI0OOe5H0FFxwYCzFxuXHxBQQrj1tRCtjxjJGU6wq2S4SeLgqb8sjd2jZTO0r BnHGbRMQFaar0gRDURvl9vE5KjKsDLSoQLjCZijyFyFfh/G4MmrRVgj/8+M81Cz41fbtS+CTzSE McLU6Fmif/4NajHhWhouqUEnJfYhW161wsBqK1i/FRAVuzWyzYBR6IxPxVioEgW4XtsFJxIbk3D zuD1T7GfXBayGN2YJOkNqf8ejViHsk5a4JCuQg/cqkCi9x5gEeoiTN4y9OV0P/lEt47tWf3X97J +DQm47awbJji8V5tqizNMl+R3kE+vboKE8Tu8N9rBfuPOy27vnyCvvO3AwriyBXvpbXHM1TGBi2 gSD2WZgjBsGVYMbWEBoUuz1D+DTohJyJUcWzL7nym1/w5Cl6indu1ZIITWsvFGECW9hN5+5zXzc 48+0CnowGajtk74ROKA== X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX6IActjr7GZCd YNUB8GzNBbESCGRZSdWLMzczY1JocELqVfItdm8MTQUiSACgWXmIEFufpB93N24CFtl9jrzQl82 OBktc71zrZzEJWjP4ljs9NOK64+bMCY= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-22_02,2026-07-21_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 suspectscore=0 malwarescore=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 spamscore=0 bulkscore=0 impostorscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607220060 The .mode_valid bridge callback is passed the sink's drm_display_info directly, so msm_dp_bridge_mode_valid() and msm_edp_bridge_mode_valid() have no need to reach into the stored connector for it. Use the supplied info pointer and drop the now-pointless !dp->connector guard. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/dp/dp_display.c | 6 +++--- drivers/gpu/drm/msm/dp/dp_drm.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index 461420a72820..3397a3a47ef3 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -731,7 +731,7 @@ enum drm_mode_status msm_dp_bridge_mode_valid(struct dr= m_bridge *bridge, =20 dp =3D to_dp_bridge(bridge)->msm_dp_display; =20 - if (!dp || !mode_pclk_khz || !dp->connector) { + if (!dp || !mode_pclk_khz) { DRM_ERROR("invalid params\n"); return -EINVAL; } @@ -739,7 +739,7 @@ enum drm_mode_status msm_dp_bridge_mode_valid(struct dr= m_bridge *bridge, msm_dp_display =3D container_of(dp, struct msm_dp_display_private, msm_dp= _display); link_info =3D &msm_dp_display->panel->link_info; =20 - is_yuv_420 =3D drm_mode_is_420_only(&dp->connector->display_info, mode); + is_yuv_420 =3D drm_mode_is_420_only(info, mode); =20 /* * YUV 420 is carried over DP by signalling the colorimetry through a @@ -754,7 +754,7 @@ enum drm_mode_status msm_dp_bridge_mode_valid(struct dr= m_bridge *bridge, if (mode_pclk_khz > DP_MAX_PIXEL_CLK_KHZ) return MODE_CLOCK_HIGH; =20 - mode_bpp =3D dp->connector->display_info.bpc * num_components; + mode_bpp =3D info->bpc * num_components; if (!mode_bpp) mode_bpp =3D default_bpp; =20 diff --git a/drivers/gpu/drm/msm/dp/dp_drm.c b/drivers/gpu/drm/msm/dp/dp_dr= m.c index 8dbe7d682ddf..6b55753da0f7 100644 --- a/drivers/gpu/drm/msm/dp/dp_drm.c +++ b/drivers/gpu/drm/msm/dp/dp_drm.c @@ -203,7 +203,7 @@ static enum drm_mode_status msm_edp_bridge_mode_valid(s= truct drm_bridge *bridge, =20 dp =3D to_dp_bridge(bridge)->msm_dp_display; =20 - if (!dp || !mode_pclk_khz || !dp->connector) { + if (!dp || !mode_pclk_khz) { DRM_ERROR("invalid params\n"); return -EINVAL; } --=20 2.47.3 From nobody Fri Jul 24 23:30:38 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 8A8E3403144 for ; Wed, 22 Jul 2026 06:37:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702256; cv=none; b=RLsvwaJLOGsf4wNMD5wZukYSD6z8x9qRdCzhL+5e15AnP4gfrn+Ad/Kir45WK0rAPpTBGAkz4nza11QzyOk/a+3z2XoaAhj8CdrgRgKSwV1orT2t90krCT4tdXEUtmIMbr5hwVRDnhet36zE63S6msHEX8JFCk/YK7iHU5qLKR8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702256; c=relaxed/simple; bh=9/2o8KpXC7EG+vRWo0L9iXCJX0grbq1xFrlQ8yvb2cc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PXIPnluvl/ELCLYnfPg+CIrbAJm7TBKL9B/oPCLrpPtsdVZRVYQ+ASZMcKpGdWQYkXDFYDt/JUdmx3bZzBprnThhHmbahaE/WpuImbmO+Aoz3eL2vT4i76/g0nSe7bNwHjpLhix9Zn4y1ulqeGw5WPuSsD4+mUkFVFqBpw9fikw= 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=GXm1Yfcs; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=NmrWeSlx; arc=none smtp.client-ip=205.220.168.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="GXm1Yfcs"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="NmrWeSlx" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66M53idY3473730 for ; Wed, 22 Jul 2026 06:37:34 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= s5GcuVSqx3TARTmxR3YrApkKUxojUC5YenbypcGMgm8=; b=GXm1YfcsRmTqE3rC aILbKPzSetOC6pvsAzmynIuuXw9OlyqPoIOUf9dtoEDfi+aHt9vp+3e+VFmpTHc/ mUgiRBgCLqQIJugiJfALEhZ6P2QbzadQ8ZWU1szkp3Zxss1QM92X3PHwsJrQ3vNr v8zQzcdUyWvDiIDQA8WyOjM9t5YO5wUFL2WMtjqzUFXN/vjC9q+S9eHhUJU5fRO6 XIOK0eUrEbVLj+tjA8aMqaKNLhvreclevqL50D8Azh5f0fSMCZDi2P9DUkZvyVCs r6/TBFMlKANjoSPuoKB3m+7Ek76CiUFXPK0TUcjMogXJAfXd7yZpdnch1X+zuj+q NATlhg== 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 4fjd6ftmdt-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 22 Jul 2026 06:37:33 +0000 (GMT) Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-51c1b4d961dso102809011cf.1 for ; Tue, 21 Jul 2026 23:37:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784702253; x=1785307053; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=s5GcuVSqx3TARTmxR3YrApkKUxojUC5YenbypcGMgm8=; b=NmrWeSlx+YgClf48aOKxHCBIs2fEuLtGkgbiKRTLWYSW5yV0QTFSe+M/J+9EyiQPb9 rUwsdxDmDzlht5aRZM4xwcg7EWeMurQcmiRC/kEFT+g17707znnao3Ydi0+ja/VZT2IB LHlSwPINETw4AGkqa3OQQHlKI+grDz2iZkBuygczGRXMO+pAwgRFfPsYRxAadW0+jUrs wUspXCgMn+L+MOCCjXODVTPA3iwgNdS3vekIqJZ+In2cGdtj86+Wu/VvNvJ88WhwcR1Z D2Pw6hwoZBhMvPbQt8kFT9toj7TjSZFQJC7EUT5HcEMU681fNgMLkDV4amwHw1oaaCy4 X8bA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784702253; x=1785307053; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=s5GcuVSqx3TARTmxR3YrApkKUxojUC5YenbypcGMgm8=; b=ZOyqrlpqtJ5tq16E69zzQawT2UDJ9Njd0ELsH4UoaQSu1bCAFOwN9gva5PmKOhoAOj 9//ebZfcTka1w3PX1rjZDuEB8YGchr2frfOXPa0tJk+R2fK5ivpWCOMIB+WB9H3wlR7K TdVE0rixoU3LvUILBm2ZsVS9a9qSgo87uXjfDlBqJdu1LRhe0rqDFxnAmLKDhgju76K9 Yv3Tl4oTmA/xA7Z0sXW75+LAEKpt2CJIxm86u3CuANasC5K3/jBBnf51xBF3OL9fnbXf E3y2Icm82yZofq1fXZKvH8tuxPhyB6uw6qsjlDXPmYcLC3dKwZm2CL3dnAw/tz8TY60p T1Ug== X-Forwarded-Encrypted: i=1; AHgh+Ro3EIE4a8fJRUPB8Gq3rN2zVXH5lBRatQ4X6OwJ+DhGCOMmr/asVuk9zWdzu7eerHr0aWtnbP1aPtOE0c0=@vger.kernel.org X-Gm-Message-State: AOJu0YxYiRroF4MqBi6W5abj20jysyosb8Y5S8UXLP31khWdMPOWull7 MSq6MeafTwr973B5Knn9nbBYB8bvtQumb9H0YNOWuH+1IlR3kvtHWLEVZcvNnMoYu4eyZxqNM6m 8H8El4oHFpOX6fdLSFI6VRXvOEhWDUvh5959EYZCn4VI9bAs2Xnl5drDbeDp8YrwE9Jg= X-Gm-Gg: AR+sD13Y042FpfAW7PpeRfYU1/idSe/y9nBug+UgzEizFnn0Hr7LSHqmZFms1JUDbyA G5Xy3/vg5iQhXjzWlEf37aeiRm9fkJyu4QLq0b+QBF0qsPRTtJLqYrvi9NZ8o2nNagnh1UGLbIN eDpM4yONlPSeaYGi5yUwa44Shnvk1gDsd/05ZuvrJn7DYXv1Tj1RBbGvazExrf6FOJjkkUOyisW qsQdo00cX4/qG1jtNJbGegTFzQt6bQdsZEl+IYePySooNKohDYVOkydRkDfg4tva1eSDbe3QeSM a0z5s+I2MK7l5/dfqYcnEjJnY/P16g/uaXRxBwNbMWYgxJ2IAa0/noeYiJ6EeNqZGyW6cJ5lMmU 6/B7hMzMDJm6fNwyyhOKCnEpw3ZYLlVxtWZjRnO0RR8Wp0YNJLyAvJEflQoHYMgKSivW8Cbql+f b22DfVZhyjPI5hYA== X-Received: by 2002:a05:622a:296:b0:517:c582:9161 with SMTP id d75a77b69052e-527a5c0ed5dmr28362911cf.7.1784702252773; Tue, 21 Jul 2026 23:37:32 -0700 (PDT) X-Received: by 2002:a05:622a:296:b0:517:c582:9161 with SMTP id d75a77b69052e-527a5c0ed5dmr28362611cf.7.1784702252378; Tue, 21 Jul 2026 23:37:32 -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 2adb3069b0e04-5b2a9b8c6f6sm309696e87.4.2026.07.21.23.37.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 23:37:29 -0700 (PDT) From: Dmitry Baryshkov Date: Wed, 22 Jul 2026 09:36:36 +0300 Subject: [PATCH 21/24] drm/msm/dp: guard subconnector setup on the connector type 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: <20260722-drm-msm-display-interface-v1-21-368c10fe62fd@oss.qualcomm.com> References: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> In-Reply-To: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2550; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=9/2o8KpXC7EG+vRWo0L9iXCJX0grbq1xFrlQ8yvb2cc=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqYGTpUgbAG+XcsMyqOlI37kJQzxzDNWXSDTLYv bxCpiezV66JATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCamBk6QAKCRCLPIo+Aiko 1QGGB/4w8HILPKpUQzeABwsNjmmVWbOg15aj3qwewGrfqofbXm0E2tKb3tVKsOCsG7v+DaBSTgz E35dLqPkiEAHhK/4mg4X3P2vxPpAloYItnJ7ecrofE133fJzft1hvxWP+MhKnwfrHo96ByF0Sbq LX2vsVRgNPrxG4tNvuIS6gp3tSzucv1orqKL8aPj6tSbCi4rT7pmqpyBATpDaGIRvRaUy1OuSEW NbPya+Cy7ssB9EJ5/VIXExfrLYOngNVhroCV0L3WU+QVDPVBUaK8t13XbRLr/ZpEZoJ86xcAsYn eaWfhzSh59icozOG5smoZvcMA4NAb1WsenQvJcawclpIt8JI X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-GUID: 0opECfATbjqlqU2PBpEJ9HumX05CohMX X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX0IMPoEdYqdas ziE0l+0iRKWyXSyHJBggaito19qDPAn+bk9F1sgf4eit6UvUbM1YrIuP5CgdS6+v3DQtOX3O2g6 Pk4EHUlPH3WuvVgt5QReFR3admnvgdgdE3TKvcGEM7HJMfbp98W8NbgDTi140aGBMVOogrzXLXa mPcTdBJXrk7wlt0JqFkyi9e19pBX+oQcIXPHo1K7YM5AMgY94SaBEf9grghXtLOQEpB1iZ6yU1G MqDDV9CgENQxKwHXS4x98nNYaFMdSFgQm70u/LWR8U4jQyuitPlioCD0lheNWukSo2MBGG0Ae1/ 0s49uFRwaD5q5pqUud33GvtGFU/gMclCi3tJ/s6qwmR6NXjl8gbENDWFO8KRVdFo8zTHr8XiRNP 6qovwPA2MjLTA2l6WtH5Pt5cyWRONp+txb7WYdWX5qQSDRv9E7g+WpqXrFsRA6K0hYCMxhH3lBs IOcHtQwKxYdlh+dfKDA== X-Authority-Analysis: v=2.4 cv=e/o2j6p/ c=1 sm=1 tr=0 ts=6a60652d cx=c_pps a=JbAStetqSzwMeJznSMzCyw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=EUspDBNiAAAA:8 a=m6zLIIb-bBn14vORhpcA:9 a=QEXdDO2ut3YA:10 a=uxP6HrT_eTzRwkO_Te1X:22 X-Proofpoint-ORIG-GUID: 0opECfATbjqlqU2PBpEJ9HumX05CohMX X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX7OTFQOWoIr0x sLwcPk6vx3CiYl6Zmn2Oc9iC3DZwE7ITmTlYk3Fcm2Wy+XHyjzL3x/CWDcOQVwDiC5j8vjd7u8O 9N+mQzPIvxQ8sc7HQgvWvGkb13J9iaw= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-22_02,2026-07-21_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 suspectscore=0 spamscore=0 bulkscore=0 priorityscore=1501 impostorscore=0 lowpriorityscore=0 phishscore=0 clxscore=1015 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607220060 The DP subconnector property only applies to full DisplayPort outputs. This was expressed as "!is_edp", which infers the property's applicability indirectly from the port flavour rather than from the connector it is attached to. Besides eDP, that is also wrong for an HDMI output driven by the DP controller through a DP-to-HDMI bridge: such a sink is not eDP either, so it would be handed a DP subconnector property it should never get. Key the DP subconnector calls off the connector type directly (DRM_MODE_CONNECTOR_DisplayPort) instead. This ties the decision to the object the property lives on and correctly covers both cases, skipping eDP as well as HDMI (via a DP-to-HDMI bridge) outputs. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/dp/dp_display.c | 4 ++-- drivers/gpu/drm/msm/dp/dp_drm.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index 3397a3a47ef3..4f6da636f7c6 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -295,7 +295,7 @@ static int msm_dp_display_process_hpd_high(struct msm_d= p_display_private *dp) =20 msm_dp_link_process_request(dp->link); =20 - if (!dp->msm_dp_display.is_edp) + if (connector->connector_type =3D=3D DRM_MODE_CONNECTOR_DisplayPort) drm_dp_set_subconnector_property(connector, connector_status_connected, dp->panel->dpcd, @@ -477,7 +477,7 @@ static int msm_dp_hpd_unplug_handle(struct msm_dp_displ= ay_private *dp) * We don't need separate work for disconnect as * connect/attention interrupts are disabled */ - if (!dp->msm_dp_display.is_edp) + if (dp->msm_dp_display.connector->connector_type =3D=3D DRM_MODE_CONNECTO= R_DisplayPort) drm_dp_set_subconnector_property(dp->msm_dp_display.connector, connector_status_disconnected, dp->panel->dpcd, diff --git a/drivers/gpu/drm/msm/dp/dp_drm.c b/drivers/gpu/drm/msm/dp/dp_dr= m.c index 6b55753da0f7..00653b0364dc 100644 --- a/drivers/gpu/drm/msm/dp/dp_drm.c +++ b/drivers/gpu/drm/msm/dp/dp_drm.c @@ -323,7 +323,7 @@ struct drm_connector *msm_dp_drm_connector_init(struct = msm_dp *msm_dp_display, if (IS_ERR(connector)) return connector; =20 - if (!msm_dp_display->is_edp) + if (connector->connector_type =3D=3D DRM_MODE_CONNECTOR_DisplayPort) drm_connector_attach_dp_subconnector_property(connector); =20 return connector; --=20 2.47.3 From nobody Fri Jul 24 23:30:38 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 31DF8404BC7 for ; Wed, 22 Jul 2026 06:37:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702259; cv=none; b=pBhDYhalapH/VmH9q6oKQwqAPKqoKhA+l4T1xBsmKlClesLK2AQkA5h4Q6rNmTkoE4DbNxEm+z6smsT1DG13gatpUCos/3vuUDzOcxRX1FblKmhyIugjmsgjBg5vcdInOhrYtmPFcNA8BTFcXtmxcI2GmV/NAJvfiL9m/rQnXHc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702259; c=relaxed/simple; bh=4DQ+lOA4heDv16vW0D7GnzkPlJPQ4WBc9Cgaiq6YU8A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LK07KjQFDB95N4BVWgNXOaYH6ZXHt40tWsNHtTLSezRGp1TQV9opqDfqg77u5hLrWnqfbbE0vRGi4HHGJGeaDLbP39QMP05anBovZAqu7vA0+CsoLBxhHdVY7kP2zX6m36h0eenIBrRg/Cutkb6J4bFXcQJvzINfafUWCsaNw/E= 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=NDwMdLfb; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=f4I8QzH3; arc=none smtp.client-ip=205.220.168.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="NDwMdLfb"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="f4I8QzH3" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66M54J4O3769548 for ; Wed, 22 Jul 2026 06:37:37 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= HuTHf7DomnxmyAExRr8cqK/t+KfaKhs7NDehApDC6xM=; b=NDwMdLfbIkuUR8NY YGReKEO4pd1aFg4ji/06nfPg5rwsZaVp38ZFVGkfrIZjVoOEwnG3DcZyylGKfwsl eMIos9RvQD7MXxr+VomicoVcDRcbFyz21uAOXG4C5VleC3gcsDsoPMmOlPOh62hz TOW14ZEYYxJvwi+wqhedQfd5Z1cBBrVEnk7VD/jbQRQVZbr2LnKcMSur/GUAVVNd 14Rp7xGTUuUAIM1UjjYz/Q7sx7FfTJRdY0jew9G9L4cYYM/rZpMRVzGg05mfhGu8 EyLM1WZlX0uz8PaG0DbTEOHYFxOQ3ffXfHsddmVtfeT8wBa9JQDhsjQeb0xZtqxs QBoVuQ== Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fjnu4rnbh-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 22 Jul 2026 06:37:36 +0000 (GMT) Received: by mail-qt1-f197.google.com with SMTP id d75a77b69052e-52827090cc5so4706051cf.0 for ; Tue, 21 Jul 2026 23:37:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784702256; x=1785307056; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=HuTHf7DomnxmyAExRr8cqK/t+KfaKhs7NDehApDC6xM=; b=f4I8QzH3PWLrf3k9w3f9U1hOBOTMUIpPb8hwYcrE9Yu9+py75Z3pX3u3AcDQiCezcI ZjdMex0Kp2AOJov+gyemu4BnZpuJQ0FGoyZ4W6EkXdAUUBMZBM5Vq/OGb7iuD9TNA9KD luYDQgC+H8/4WwC869Cwh7TUc1wyyK8BFlG00FVVpUhnUNxMhkrByHcn4L99gdmufHzg E9nH5nLLQhpXBHy/JdGfbmyombtQqnQ+QiCxRNnydkq/AJfK8tR1XgCmalw4aUC4DzV1 u0RauvBjJu0eaMbMIQBRZp0H+5ME6zgpR+e6451+EZnP9IaxsOLo/BJYS5pkWup5U9bz DuYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784702256; x=1785307056; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=HuTHf7DomnxmyAExRr8cqK/t+KfaKhs7NDehApDC6xM=; b=VHo69o9qfIXgw+IeaLcgA1gQuS6c3MVVvcLXYrtCp5TQjw26+ACltiJtE/y049sw+x KpC0HAMVrXGGfqF1nE8hwtOSaeKMP6djQlbd4R+OQY/ZxNXPXHHgAOvZEg3D6r0dJInW dqLnyUELKw3cEFjKbQkAOY8RfkuLC6WW8kPG9JksTGlCT/ac7gqhS8ddJZdPE3tNKxkE ISwEvnJG5se5vo1ktqs9V5fd5YSLAYH7vvOWscLg2pHm8HjHhapuH/W1rfSf7GRh1Meq uPmOlMWrhnpmO+tDjRn/tUYIie3+lsholLfUu1m6jo310mngKFgp1mpoj50ijjfSd/Nu jWIw== X-Forwarded-Encrypted: i=1; AHgh+RqAjjOSgeGxec4Kh4CasOorrptjTxvQbs69hfsb0bap91FUBsHl1W9kvCKaFacUjf04fFID9bNz9k2f82Y=@vger.kernel.org X-Gm-Message-State: AOJu0YzgzcSdLvlmZ1ASb3HTI9cvmI3JB8uHrcL8GJKGTQFgIKrgolNn GWH6XlWHoPwXACqDc8MJedaHLkniJnaZr1XaevU5U7V7HaidKq+gZz59Kr7zu7qexi1VJlxGcCk ZlPCFIJQuoIMZZzXlzwO/DRYHIQ6s2ig7v5zGqPM+D5b0kz771V+eE9lpUwZlmFRMUpc= X-Gm-Gg: AR+sD13nfJwSSI76i8ksIGQnNOHZk36TVVVJGqiMtlFKnGiDKL2oFBYaR3BQBUJQe9F OP3SH+igZ7NctJ6nMz79bZwXvM/ArLQv/tOzewKpkcS/jFsA3niYnXNOOWa6QSmmGb4J4aIDkxC p4OeoaNwbjxuylQoicqcF7TipgaJ1xlmsjxRvo13bxM0aHEHzDiqiI3TDffbX3NSg+ThqV4Xtid toc2N5CDPzm1wwYsrDiDdskdr8SVHi5yjLqKJ42JcgCVmsb8YYuftkIDOxvusKq5YZWO+ILJsZ7 5tURQZW/vAFeFMOxRU6aVi2YjUg9Pj0BZ4QLWuyWiB1P4geuJXHHQgiRvSZKXSVQQmpkbAXQvfJ j/2Gaf48i+oHRoMnDA7oYK0BiWmUGgmS3AiU73gPS75HIvhJTWhqxyFSkLWFQWVm6Al7l0AZkLy eBvr+lbQOSCVhZDg== X-Received: by 2002:ac8:5a48:0:b0:51b:fe30:b8d5 with SMTP id d75a77b69052e-527a8a4d134mr26736951cf.29.1784702255872; Tue, 21 Jul 2026 23:37:35 -0700 (PDT) X-Received: by 2002:ac8:5a48:0:b0:51b:fe30:b8d5 with SMTP id d75a77b69052e-527a8a4d134mr26736751cf.29.1784702255379; Tue, 21 Jul 2026 23:37:35 -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 2adb3069b0e04-5b2a9b8c6f6sm309696e87.4.2026.07.21.23.37.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 23:37:34 -0700 (PDT) From: Dmitry Baryshkov Date: Wed, 22 Jul 2026 09:36:37 +0300 Subject: [PATCH 22/24] drm/msm/dp: stop storing the connector in struct msm_dp 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: <20260722-drm-msm-display-interface-v1-22-368c10fe62fd@oss.qualcomm.com> References: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> In-Reply-To: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=13595; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=4DQ+lOA4heDv16vW0D7GnzkPlJPQ4WBc9Cgaiq6YU8A=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqYGTpe1tl9LAYAHn9BQxGCC9zj6NtvemDcrpAm /gk44xsM0CJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCamBk6QAKCRCLPIo+Aiko 1dS2B/44xAvMauZtbuskbxSHEvfPTLbq+Cnb10iufjr1MKytVxUY1h4S7mSgtvzM9cqmZGi8UpZ jBPd0cG5dU/zX+rGg3Dn0uwJ89V9hc10p88pJvctAtyvGz2UjkQkZ4vX+JjhULF4+DSokoZPcAj UQbHgpzO3/hRUNZ3B0E3L0CgoCfY42wfTE2WOMpHe+y19WtRzCOEvDWtmTYfLzAzP/CQGj/hUDY q30g35YXhS/qYJwARjdnp84BV12OL9Nrl7Wiah9VUBdyLY2pvJ3xOoBt7CiZOcr3HPorHKbMc2+ rG9ObS0mPRbi5OmQtyqtE05XkQfIaEDpw+8JTcksWDgtgXrH X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-GUID: Zr7dlJ-DRAT9X1L2CxfgVDKnsotPQ6vW X-Authority-Analysis: v=2.4 cv=KLhqylFo c=1 sm=1 tr=0 ts=6a606531 cx=c_pps a=EVbN6Ke/fEF3bsl7X48z0g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=u0TMEBJnNnsXvnSYAqwA:9 a=QEXdDO2ut3YA:10 a=a_PwQJl-kcHnX1M80qC6:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX6Vddp4MJqyKN WJvPUpYDCb5UnPOKp6LOaBzK6eGd1htai3Cg2tE56EuKY0R7KIjrNYPFbG0Fmg0jSGGjUwkxM9f 3GPLEvsGTIHm+OyoDW4K4C6lgMPvU68I3hvrWCidgm7OgG4po/3m4jxUsRlzjwg8KlIuRQwbPLO sPr3KBFOosuBrpY5MU0b32wl8VleiImhW3PKl2r5/mDKcqntT6F5naDYFR6WXBgRK26JyH82FAU r9e4c0D2l4VKuno7tZNr+yTC8SEBehlAEfJZpx7rRAKKZCCWald2aNgUmhQylP+KwZUn0vv7N5F UNSmm8T1L17vvJRexIfQZ7uWp6LipXmR3vFDess7yaQ0Ry13AcT+wfOmqUhhLQT9tKO96nju+Qp nmy5Ys5v//TQKLDltfkPdlYNcTf70rGhZRmys75rXO2BNQzDIlUZZyzCYsaydlWEe8vd8lOX/6+ ukgfgO3LKiv29q/337g== X-Proofpoint-ORIG-GUID: Zr7dlJ-DRAT9X1L2CxfgVDKnsotPQ6vW X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX5IOv9tGaoih7 OQRmhE81JbRDXk7DTgdskXMUCYuxnJfV72lFZiuOg79HZbWvxM2wj1Kn1DwT0AnH2uXq5KG5V8B nx6zL21lIG30rqj0lGH4vjY6H7KiA84= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-22_02,2026-07-21_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 spamscore=0 clxscore=1015 impostorscore=0 lowpriorityscore=0 priorityscore=1501 malwarescore=0 phishscore=0 adultscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607220060 struct msm_dp cached the drm_connector so that the asynchronous HPD handlers, the YUV-420 query and debugfs could reach it. Keeping this pointer means any common code that creates the connector has to hand it back to the DP sub-block, and it couples the sub-block to a connector it does not own. Every consumer can instead obtain the connector from a context that already has it: - the HPD handler chain (plug/unplug/irq -> process_hpd_high, handle_plugged_change) is only ever entered from the bridge .hpd_notify callback and the atomic enable/post_disable callbacks, all of which carry (or can derive from the atomic state) the connector; thread it through; - the .is_yuv_mode op is called from the DPU encoder, which already fetches the connector from the atomic state - pass it in; - .needs_periph_flush is evaluated at flush time, after ->mode_set() has cached the result in msm_dp_mode.out_fmt_is_yuv_420, so read the cached flag rather than the live connector; - debugfs only needs a connector to report status, so look it up from the sub-block's encoder. With that, drop the stored connector. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/dp/dp_display.c | 108 ++++++++++++++++++++++++--------= ---- drivers/gpu/drm/msm/dp/dp_display.h | 1 - 2 files changed, 74 insertions(+), 35 deletions(-) diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index 4f6da636f7c6..44503789d454 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -265,9 +265,9 @@ static int msm_dp_display_lttpr_init(struct msm_dp_disp= lay_private *dp, u8 *dpcd return lttpr_count; } =20 -static int msm_dp_display_process_hpd_high(struct msm_dp_display_private *= dp) +static int msm_dp_display_process_hpd_high(struct msm_dp_display_private *= dp, + struct drm_connector *connector) { - struct drm_connector *connector =3D dp->msm_dp_display.connector; const struct drm_display_info *info =3D &connector->display_info; int rc =3D 0; u8 dpcd[DP_RECEIVER_CAP_SIZE]; @@ -403,7 +403,8 @@ static int msm_dp_display_handle_irq_hpd(struct msm_dp_= display_private *dp) return 0; } =20 -static int msm_dp_hpd_plug_handle(struct msm_dp_display_private *dp) +static int msm_dp_hpd_plug_handle(struct msm_dp_display_private *dp, + struct drm_connector *connector) { int ret; struct platform_device *pdev =3D dp->msm_dp_display.pdev; @@ -424,7 +425,7 @@ static int msm_dp_hpd_plug_handle(struct msm_dp_display= _private *dp) =20 msm_dp_display_host_phy_init(dp); =20 - ret =3D msm_dp_display_process_hpd_high(dp); + ret =3D msm_dp_display_process_hpd_high(dp, connector); =20 drm_dbg_dp(dp->drm_dev, "After, type=3D%d sink_count=3D%d\n", dp->msm_dp_display.connector_type, @@ -436,7 +437,7 @@ static int msm_dp_hpd_plug_handle(struct msm_dp_display= _private *dp) }; =20 static void msm_dp_display_handle_plugged_change(struct msm_dp *msm_dp_dis= play, - bool plugged) + struct drm_connector *connector, bool plugged) { struct msm_dp_display_private *dp; =20 @@ -445,11 +446,11 @@ static void msm_dp_display_handle_plugged_change(stru= ct msm_dp *msm_dp_display, =20 /* notify audio subsystem only if sink supports audio */ if (dp->audio_supported) - drm_connector_hdmi_audio_plugged_notify(msm_dp_display->connector, - plugged); + drm_connector_hdmi_audio_plugged_notify(connector, plugged); } =20 -static int msm_dp_hpd_unplug_handle(struct msm_dp_display_private *dp) +static int msm_dp_hpd_unplug_handle(struct msm_dp_display_private *dp, + struct drm_connector *connector) { struct platform_device *pdev =3D dp->msm_dp_display.pdev; =20 @@ -467,7 +468,7 @@ static int msm_dp_hpd_unplug_handle(struct msm_dp_displ= ay_private *dp) =20 /* Don't forget modes for eDP */ if (!dp->msm_dp_display.is_edp) - drm_edid_connector_update(dp->msm_dp_display.connector, NULL); + drm_edid_connector_update(connector, NULL); =20 /* triggered by irq_hdp with sink_count =3D 0 */ if (dp->link->sink_count =3D=3D 0) @@ -477,14 +478,14 @@ static int msm_dp_hpd_unplug_handle(struct msm_dp_dis= play_private *dp) * We don't need separate work for disconnect as * connect/attention interrupts are disabled */ - if (dp->msm_dp_display.connector->connector_type =3D=3D DRM_MODE_CONNECTO= R_DisplayPort) - drm_dp_set_subconnector_property(dp->msm_dp_display.connector, + if (connector->connector_type =3D=3D DRM_MODE_CONNECTOR_DisplayPort) + drm_dp_set_subconnector_property(connector, connector_status_disconnected, dp->panel->dpcd, dp->panel->downstream_ports); =20 /* signal the disconnect event early to ensure proper teardown */ - msm_dp_display_handle_plugged_change(&dp->msm_dp_display, false); + msm_dp_display_handle_plugged_change(&dp->msm_dp_display, connector, fals= e); =20 drm_dbg_dp(dp->drm_dev, "After, type=3D%d, sink_count=3D%d\n", dp->msm_dp_display.connector_type, @@ -498,7 +499,8 @@ static int msm_dp_hpd_unplug_handle(struct msm_dp_displ= ay_private *dp) return 0; } =20 -static int msm_dp_irq_hpd_handle(struct msm_dp_display_private *dp) +static int msm_dp_irq_hpd_handle(struct msm_dp_display_private *dp, + struct drm_connector *connector) { u32 sink_request; int rc =3D 0; @@ -514,7 +516,7 @@ static int msm_dp_irq_hpd_handle(struct msm_dp_display_= private *dp) sink_request =3D dp->link->sink_request; drm_dbg_dp(dp->drm_dev, "sink_request=3D%d\n", sink_request); if (sink_request & DS_PORT_STATUS_CHANGED) - rc =3D msm_dp_display_process_hpd_high(dp); + rc =3D msm_dp_display_process_hpd_high(dp, connector); else rc =3D msm_dp_display_handle_irq_hpd(dp); } @@ -648,7 +650,8 @@ static int msm_dp_display_enable(struct msm_dp_display_= private *dp, bool force_l return rc; } =20 -static int msm_dp_display_post_enable(struct msm_dp *msm_dp_display) +static int msm_dp_display_post_enable(struct msm_dp *msm_dp_display, + struct drm_connector *connector) { struct msm_dp_display_private *dp; u32 rate; @@ -663,7 +666,7 @@ static int msm_dp_display_post_enable(struct msm_dp *ms= m_dp_display) } =20 /* signal the connect event late to synchronize video and display */ - msm_dp_display_handle_plugged_change(msm_dp_display, true); + msm_dp_display_handle_plugged_change(msm_dp_display, connector, true); =20 if (msm_dp_display->psr_supported) msm_dp_ctrl_config_psr(dp->ctrl); @@ -671,7 +674,8 @@ static int msm_dp_display_post_enable(struct msm_dp *ms= m_dp_display) return 0; } =20 -static int msm_dp_display_disable(struct msm_dp_display_private *dp) +static int msm_dp_display_disable(struct msm_dp_display_private *dp, + struct drm_connector *connector) { struct msm_dp *msm_dp_display =3D &dp->msm_dp_display; =20 @@ -681,7 +685,7 @@ static int msm_dp_display_disable(struct msm_dp_display= _private *dp) /* wait only if audio was enabled */ if (msm_dp_display->audio_enabled) { /* signal the disconnect event */ - msm_dp_display_handle_plugged_change(msm_dp_display, false); + msm_dp_display_handle_plugged_change(msm_dp_display, connector, false); if (!wait_for_completion_timeout(&dp->audio_comp, HZ * 5)) DRM_ERROR("audio comp timeout\n"); @@ -1314,7 +1318,15 @@ void __exit msm_dp_unregister(void) static bool msm_dp_needs_periph_flush(const struct msm_dp *msm_dp_display, const struct drm_display_mode *mode) { - return drm_mode_is_420_only(&msm_dp_display->connector->display_info, mod= e); + struct msm_dp_display_private *dp =3D container_of(msm_dp_display, + struct msm_dp_display_private, msm_dp_display); + + /* + * The YUV-420 output format is determined during ->mode_set(), which + * has already run by the time this is queried at flush time; use the + * cached value so no connector lookup is needed here. + */ + return dp->panel->msm_dp_mode.out_fmt_is_yuv_420; } =20 bool msm_dp_wide_bus_available(const struct msm_dp *msm_dp_display) @@ -1329,6 +1341,25 @@ bool msm_dp_wide_bus_available(const struct msm_dp *= msm_dp_display) return dp->wide_bus_supported; } =20 +static struct drm_connector * +msm_dp_display_get_connector(struct msm_dp *msm_dp_display) +{ + struct drm_encoder *encoder =3D msm_dp_display->bridge->encoder; + struct drm_connector_list_iter conn_iter; + struct drm_connector *connector, *found =3D NULL; + + drm_connector_list_iter_begin(msm_dp_display->drm_dev, &conn_iter); + drm_for_each_connector_iter(connector, &conn_iter) { + if (drm_connector_has_possible_encoder(connector, encoder)) { + found =3D connector; + break; + } + } + drm_connector_list_iter_end(&conn_iter); + + return found; +} + void msm_dp_display_debugfs_init(struct msm_dp *msm_dp_display, struct den= try *root, bool is_edp) { struct msm_dp_display_private *dp; @@ -1338,7 +1369,9 @@ void msm_dp_display_debugfs_init(struct msm_dp *msm_d= p_display, struct dentry *r dp =3D container_of(msm_dp_display, struct msm_dp_display_private, msm_dp= _display); dev =3D &dp->msm_dp_display.pdev->dev; =20 - rc =3D msm_dp_debug_init(dev, dp->panel, dp->link, dp->msm_dp_display.con= nector, root, is_edp); + rc =3D msm_dp_debug_init(dev, dp->panel, dp->link, + msm_dp_display_get_connector(msm_dp_display), + root, is_edp); if (rc) DRM_ERROR("failed to initialize debug, rc =3D %d\n", rc); } @@ -1347,6 +1380,7 @@ static int msm_dp_modeset_init(struct msm_display *di= splay, struct drm_device *dev, struct drm_encoder *encoder) { struct msm_dp *msm_dp_display =3D container_of(display, struct msm_dp, di= splay); + struct drm_connector *connector; int ret; =20 msm_dp_display->drm_dev =3D dev; @@ -1358,12 +1392,11 @@ static int msm_dp_modeset_init(struct msm_display *= display, return ret; } =20 - msm_dp_display->connector =3D msm_dp_drm_connector_init(msm_dp_display, e= ncoder); - if (IS_ERR(msm_dp_display->connector)) { - ret =3D PTR_ERR(msm_dp_display->connector); + connector =3D msm_dp_drm_connector_init(msm_dp_display, encoder); + if (IS_ERR(connector)) { + ret =3D PTR_ERR(connector); DRM_DEV_ERROR(dev->dev, "failed to create dp connector: %d\n", ret); - msm_dp_display->connector =3D NULL; return ret; } =20 @@ -1454,14 +1487,17 @@ void msm_dp_bridge_atomic_enable(struct drm_bridge = *drm_bridge, { struct msm_dp_bridge *msm_dp_bridge =3D to_dp_bridge(drm_bridge); struct msm_dp *dp =3D msm_dp_bridge->msm_dp_display; + struct drm_connector *connector; int rc =3D 0; struct msm_dp_display_private *msm_dp_display; bool force_link_train =3D false; =20 msm_dp_display =3D container_of(dp, struct msm_dp_display_private, msm_dp= _display); =20 + connector =3D drm_atomic_get_new_connector_for_encoder(state, drm_bridge-= >encoder); + if (dp->is_edp) - msm_dp_hpd_plug_handle(msm_dp_display); + msm_dp_hpd_plug_handle(msm_dp_display, connector); =20 if (pm_runtime_resume_and_get(&dp->pdev->dev)) { DRM_ERROR("failed to pm_runtime_resume\n"); @@ -1485,10 +1521,10 @@ void msm_dp_bridge_atomic_enable(struct drm_bridge = *drm_bridge, =20 msm_dp_display_enable(msm_dp_display, force_link_train); =20 - rc =3D msm_dp_display_post_enable(dp); + rc =3D msm_dp_display_post_enable(dp, connector); if (rc) { DRM_ERROR("DP display post enable failed, rc=3D%d\n", rc); - msm_dp_display_disable(msm_dp_display); + msm_dp_display_disable(msm_dp_display, connector); } =20 drm_dbg_dp(dp->drm_dev, "type=3D%d Done\n", dp->connector_type); @@ -1512,13 +1548,17 @@ void msm_dp_bridge_atomic_post_disable(struct drm_b= ridge *drm_bridge, struct msm_dp_bridge *msm_dp_bridge =3D to_dp_bridge(drm_bridge); struct msm_dp *dp =3D msm_dp_bridge->msm_dp_display; struct msm_dp_display_private *msm_dp_display; + struct drm_connector *connector; =20 msm_dp_display =3D container_of(dp, struct msm_dp_display_private, msm_dp= _display); =20 + connector =3D drm_atomic_get_old_connector_for_encoder(state, + drm_bridge->encoder); + if (dp->is_edp) - msm_dp_hpd_unplug_handle(msm_dp_display); + msm_dp_hpd_unplug_handle(msm_dp_display, connector); =20 - msm_dp_display_disable(msm_dp_display); + msm_dp_display_disable(msm_dp_display, connector); =20 drm_dbg_dp(dp->drm_dev, "type=3D%d Done\n", dp->connector_type); =20 @@ -1581,15 +1621,15 @@ void msm_dp_bridge_hpd_notify(struct drm_bridge *br= idge, =20 if (status =3D=3D connector_status_connected) { if (hpd_link_status =3D=3D ISR_HPD_REPLUG_COUNT) { - msm_dp_hpd_unplug_handle(dp); - msm_dp_hpd_plug_handle(dp); + msm_dp_hpd_unplug_handle(dp, connector); + msm_dp_hpd_plug_handle(dp, connector); } else if (hpd_link_status =3D=3D ISR_IRQ_HPD_PULSE_COUNT) { - msm_dp_irq_hpd_handle(dp); + msm_dp_irq_hpd_handle(dp, connector); } else { - msm_dp_hpd_plug_handle(dp); + msm_dp_hpd_plug_handle(dp, connector); } } else { - msm_dp_hpd_unplug_handle(dp); + msm_dp_hpd_unplug_handle(dp, connector); } =20 pm_runtime_put_sync(&msm_dp_display->pdev->dev); diff --git a/drivers/gpu/drm/msm/dp/dp_display.h b/drivers/gpu/drm/msm/dp/d= p_display.h index f1523dbe33d5..a93904ea33c7 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.h +++ b/drivers/gpu/drm/msm/dp/dp_display.h @@ -16,7 +16,6 @@ struct msm_dp { =20 struct drm_device *drm_dev; struct platform_device *pdev; - struct drm_connector *connector; struct drm_bridge *next_bridge; struct drm_bridge *bridge; bool audio_enabled; --=20 2.47.3 From nobody Fri Jul 24 23:30:38 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 A0D4F3E7BA9 for ; Wed, 22 Jul 2026 06:37:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702261; cv=none; b=tl25YBx4FJufl3csZgp+SWs+qi3eL5fqAbYdeIMMia9FpZIUk8z79CbTyv1YOTI4eBi18msId7L3ypeFhQ+Qzlw8gaLP4lQ6UHLAWGi4xbqybkDwhuEGRGwP2NVo2QkGzp4BFf+duvHavlqHSW+xmeqRwsZvXBOq8T4AsSTDr8Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702261; c=relaxed/simple; bh=Tme5+V8njkTEiDYfOB80xRBBVWt+hpUlceeAHfw1TcI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mmtwcKKoULRnKdkwlSXAV3srKEZRdSXUGBScX+gR851bp25DdW2Um7WI2wf4hOl7MLKjFLdvCc2OoPFL8/2HcX8fjckOnq5uXtsFhxmxIdsAB0PGi/obxjzW0Ulb/b8Jr7WKSemSwcXzCF/Cl9L0TpvHO+U9DaRua/J5LfF29jk= 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=m0ICkFax; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=W7bsw9HN; arc=none smtp.client-ip=205.220.168.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="m0ICkFax"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="W7bsw9HN" Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66M53fuA4027284 for ; Wed, 22 Jul 2026 06:37:39 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= HlaLffvRFgtDe04aRsNqDRbq77UC4UumkcOWgBKKBSQ=; b=m0ICkFax9rFp44St ZUEgJf5C9ZRA441Co9MMkqIRhMj8yRRX0X2JaXybZ8twOMuyuGnXtOhcW7w1Tr8k qJP80PWXbYmpK3uUYju3Sh1L+T/efRWmbRI7jxv8UeLGT1q0XqEU4kmYb8hyVnU6 dofwCvn5scvvenojwtsbZnn9mOCJLTCNai5OVlnWEySUAiCNR1kIDOMpawV+x65q +bQivuaifQk75fA6pdHCK2xfGDQA/mZFE2hHGlqIj1FgJ12b+fOnhZ+pK6ZXNMMj FUq4ECxypuCdmX1DX1yg3VkyZTw7tAMzPUpMvXAGJnLefjYdfLluLTTydIq6JrB0 ElqMeQ== 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 4fj9bsbvpf-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 22 Jul 2026 06:37:38 +0000 (GMT) Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-5174a236220so223773801cf.3 for ; Tue, 21 Jul 2026 23:37:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784702258; x=1785307058; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=HlaLffvRFgtDe04aRsNqDRbq77UC4UumkcOWgBKKBSQ=; b=W7bsw9HNqcIv3R+fWsuCUXiHZ67C5ovsA88rr0tKd8s/zSIwYoSntbH+Uue02WTxpM 0fmQWamiTV2k4mQ9doYXZJ4EH2IK+LkVkTWHuNw8uPKihrtXUayzn8GoAF56HTQBuG5Q x46ezEmqUZ49pA8QoS0Ze6MTFISdvNrSsTrWdvc95NgCjEKzcGjAbXixEuRWNePLtNvD PN+yBN3uqnK1ADbG/u2uqO9xq75w11qjFs3RiW8nbBiWUQRFlMwMVA2KQU20trjWtQCT prtaJWSxvGu3GMqnWeoDm9oLwcH61/iT3+ZICOj7sbaG2CmLPvaYRGJBC8g4YmRbhha5 gczQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784702258; x=1785307058; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=HlaLffvRFgtDe04aRsNqDRbq77UC4UumkcOWgBKKBSQ=; b=IYb0lj/szihoagJIz8KPY5uD8P6nHv9zVJkxB/KfpuWiaOFb+u/CUlHTby7ThuRMek O5CeSo3xgSlhb6zH6e6sfg8irsLaCFJIyJBakKwrJRwEZaadlmoWc2XuTqr2N4o/fysL yU6ufEbSyIhph4sS/zuUwtaXNzqX5MAo9xxQ6BXKqoVclhYqTpf0AtL15w6uESht/fqh h39Wrubd8Agm/fUOLN/DVN8crsDMVWc4yDRgTCvdWrVrGiNLPBz9Mutt9BBynSrvPze2 bgj7zz+VjLbQHO9KXzk5L7bw43XGgFAgD6CATTmCPokV+sVeETOFuqVWvPHBAi7QZLqR CGHw== X-Forwarded-Encrypted: i=1; AHgh+RpG8ecKuNhEsLhIdvyAfx6eVl7dvDf1wltdjy/61TQGDqpz/5NxnIr0gn/DfiTg1jEE9FU2zoCJ51KNKTk=@vger.kernel.org X-Gm-Message-State: AOJu0YynL6MuUXUBWAAR0Bi24B/daPDS3KmoEWiUnIjwm25FxetPXnYb KiHuARsa3C46+YMcP6PQEdAvQEYfGIvGIZaSZdaG6JrRG1nWr3mmbFvInTneiiQ5UUIY8/+wbdO VS7qjMPRRwx45TAyzJW+gBYI1gOJeY2hG8UZgxaku4xdUyhtos9S/FbNAVQYgmyw6ZzY= X-Gm-Gg: AR+sD11XPU/20JR6Y5owU/F3F2sxyqvEwnsAwooSCLqMFNYfEF3iNdYJKd3ekuVP2sA 0lqODLBv8v1DdaZmKF5xYc9AG70RR1kbDkEszI27jGXeLBjjk6mOZhsfeYo1OXA1RIBj2vg3Unc WOhCk3Di9PucLANCJ9ucvgYS+JMN+iCRYjnJwwVWt4EC8GDWpfxlC4UgZYnTWqmo9k1LG22peaq H4ptnMHDq4Qd3woDCiBAqLBgblUG6D9J1Ak7vE8L8/Ap5hgoU7dOmiTTGMu99E18BnNlyfGPElM sMWah8I4RcWVpxeXu0/usTtB889zk7o2+nosx8IpkbzibI6+zV9/sX1D1y0E63CV7A+cPVvUybK tiipHq/5kR7Ph+C2/+eFSCuWsd6wz6hVEUc2JwBXTPc4d+pjRvwd7XPLACU0QigIlXXvtPhRzpB bV9+/X8RXeMpPXiA== X-Received: by 2002:a05:622a:94:b0:51c:7b13:62fb with SMTP id d75a77b69052e-5213ec7a596mr202119101cf.81.1784702257659; Tue, 21 Jul 2026 23:37:37 -0700 (PDT) X-Received: by 2002:a05:622a:94:b0:51c:7b13:62fb with SMTP id d75a77b69052e-5213ec7a596mr202118901cf.81.1784702257186; Tue, 21 Jul 2026 23:37:37 -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 2adb3069b0e04-5b2a9b8c6f6sm309696e87.4.2026.07.21.23.37.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 23:37:35 -0700 (PDT) From: Dmitry Baryshkov Date: Wed, 22 Jul 2026 09:36:38 +0300 Subject: [PATCH 23/24] drm/msm: create the bridge connectors from common code 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: <20260722-drm-msm-display-interface-v1-23-368c10fe62fd@oss.qualcomm.com> References: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> In-Reply-To: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=13003; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=Tme5+V8njkTEiDYfOB80xRBBVWt+hpUlceeAHfw1TcI=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqYGTptSUJH8vJOao3qk/dnomQ0VkPClVNcZJMt gFNlJvPwf+JATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCamBk6QAKCRCLPIo+Aiko 1dLEB/kBC7xFBaSeFSz10X4A6Ooz6YG4omMwsxe8wCQLJOiGapcvBnV1qaT6AMMcglErsmlmwAZ Vw+r3YdTeLpWzECeIWshW3C8WbPrZzaAg83/wmqiconMxjGBSSmoWzJ1vq7yfvJOEUPQb7AkCfv GWUoXTB3M7TIOzypa5XnmjwVA+dOMT30rpsEcrOGTskbSOu6Nu5pbvR4xz9kTyGFCj3AQgAdX1Q BFPJuszGdvl1y/C79Wh2tF1IRNjnqyYtawYHPMvVUUMT9NrYchHs9UqxCzImpDepx9U5/J8gXw4 gDJ/EpdIreLC6fXSyo8ht7RFovrOKxu3vN8B9VfjMaQbjUUf X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-ORIG-GUID: JeKjFbDsWXNHj2-Jra8gVVMju65GoriF X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfXxE0D5Z68VIkT l5paUpL/0NB2cQEWbMadnK+LoXQWvDzHM2ncaM59Yk6LbhQetlfwxM54uRr2bCRuXGcmxEEhhL1 SyLnypUCm8X3TPQWwsA2O3QY1sFRjBHPlhCmKBIdVWMnlz/m1Eyt64LqsMiyDqLcojRGDE3oQ/d I5xYCn3ZUzpt5S5W7v/wes2/iFeLrJw/sgnIxyiMtOS6oN1FcCmC/owNZa/wp/Se0s4mGRyPV5u 7DXlsPNWLJiF8aztvXuGD78vQJSM7f1XxHQ/AYbbqqgDsg/XROXpp6aLGGixw0TJZgm9A3DJGjO kbBc5/jipvXJ0zox7CG5vYjTqPND+H+x3buQvSz5DaI4UyAVbqtWzczZrsSOG7qoN4zvE0L9yjr XJEiT/VkhA0GeetZ2iNBSnPw6dJKpHFLItLFWIK7nVNFF15MQtYDA0k91bgP5P86lPT8izyPwU2 ArNH3p4hjY8YJTm4JEQ== X-Proofpoint-GUID: JeKjFbDsWXNHj2-Jra8gVVMju65GoriF X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX+L0yR7qBvS+m sH7HJqHs/6ViLxG6bV9NFOhOZ2r+h3ZZKNOQ2rUjDUYyHwnHRtR4baeFDt1YdRJEkX33qsidFsy AIUKHHHBmBFE3pDLnrbdiw4BhR4FFZA= X-Authority-Analysis: v=2.4 cv=QK1YgALL c=1 sm=1 tr=0 ts=6a606532 cx=c_pps a=JbAStetqSzwMeJznSMzCyw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8 a=FlskwPPIur0Mnapaa8AA:9 a=QEXdDO2ut3YA:10 a=uxP6HrT_eTzRwkO_Te1X:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-22_02,2026-07-21_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 spamscore=0 phishscore=0 impostorscore=0 bulkscore=0 suspectscore=0 clxscore=1015 adultscore=0 lowpriorityscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607220060 Each display sub-block (DSI, DP, HDMI) and the MDP4 LVDS path open-coded the same drm_bridge_connector_init() call in its own modeset path, scattering connector creation across the backends and duplicating the boilerplate. Now that every sub-block attaches its bridge chain to the encoder created by the backend, and no sub-block keeps its own reference to the resulting connector, the connectors can be built entirely from common code. Have each ->modeset_init() only set up the bridge chain, and add a new msm_kms_init_connectors() that walks every encoder once the bridges are in place and creates a bridge connector for each. Encoders without a bridge chain - such as the virtual writeback encoder, which brings its own drm_writeback_connector - are skipped. The only sub-block specific step left is attaching the DP subconnector property, which is keyed off the connector type and so is applied generically in the loop; no per-sub-block callback is needed. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c | 8 ------ drivers/gpu/drm/msm/dp/dp_display.c | 9 ------ drivers/gpu/drm/msm/dp/dp_drm.c | 17 ----------- drivers/gpu/drm/msm/dp/dp_drm.h | 2 -- drivers/gpu/drm/msm/dsi/dsi.c | 6 ++-- drivers/gpu/drm/msm/dsi/dsi.h | 4 +-- drivers/gpu/drm/msm/dsi/dsi_manager.c | 13 ++------- drivers/gpu/drm/msm/hdmi/hdmi.c | 22 ++------------- drivers/gpu/drm/msm/msm_kms.c | 48 ++++++++++++++++++++++++++++= ---- 9 files changed, 52 insertions(+), 77 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c b/drivers/gpu/drm/msm= /disp/mdp4/mdp4_kms.c index cd566a287f6f..93f1f0e81ac4 100644 --- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c +++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c @@ -7,7 +7,6 @@ #include =20 #include -#include #include =20 #include "msm_drv.h" @@ -191,7 +190,6 @@ static int mdp4_modeset_init_intf(struct mdp4_kms *mdp4= _kms, struct drm_device *dev =3D mdp4_kms->dev; struct msm_drm_private *priv =3D dev->dev_private; struct drm_encoder *encoder; - struct drm_connector *connector; struct drm_bridge *next_bridge; int dsi_id; int ret; @@ -226,12 +224,6 @@ static int mdp4_modeset_init_intf(struct mdp4_kms *mdp= 4_kms, return ret; } =20 - connector =3D drm_bridge_connector_init(dev, encoder); - if (IS_ERR(connector)) { - DRM_DEV_ERROR(dev->dev, "failed to initialize LVDS connector\n"); - return PTR_ERR(connector); - } - break; case DRM_MODE_ENCODER_TMDS: encoder =3D mdp4_dtv_encoder_init(dev); diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index 44503789d454..c03878183b9a 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -1380,7 +1380,6 @@ static int msm_dp_modeset_init(struct msm_display *di= splay, struct drm_device *dev, struct drm_encoder *encoder) { struct msm_dp *msm_dp_display =3D container_of(display, struct msm_dp, di= splay); - struct drm_connector *connector; int ret; =20 msm_dp_display->drm_dev =3D dev; @@ -1392,14 +1391,6 @@ static int msm_dp_modeset_init(struct msm_display *d= isplay, return ret; } =20 - connector =3D msm_dp_drm_connector_init(msm_dp_display, encoder); - if (IS_ERR(connector)) { - ret =3D PTR_ERR(connector); - DRM_DEV_ERROR(dev->dev, - "failed to create dp connector: %d\n", ret); - return ret; - } - return 0; } =20 diff --git a/drivers/gpu/drm/msm/dp/dp_drm.c b/drivers/gpu/drm/msm/dp/dp_dr= m.c index 00653b0364dc..01f8320f9c32 100644 --- a/drivers/gpu/drm/msm/dp/dp_drm.c +++ b/drivers/gpu/drm/msm/dp/dp_drm.c @@ -7,7 +7,6 @@ #include #include #include -#include #include =20 #include "msm_drv.h" @@ -312,19 +311,3 @@ int msm_dp_bridge_init(struct msm_dp *msm_dp_display, = struct drm_device *dev, =20 return 0; } - -/* connector initialization */ -struct drm_connector *msm_dp_drm_connector_init(struct msm_dp *msm_dp_disp= lay, - struct drm_encoder *encoder) -{ - struct drm_connector *connector =3D NULL; - - connector =3D drm_bridge_connector_init(msm_dp_display->drm_dev, encoder); - if (IS_ERR(connector)) - return connector; - - if (connector->connector_type =3D=3D DRM_MODE_CONNECTOR_DisplayPort) - drm_connector_attach_dp_subconnector_property(connector); - - return connector; -} diff --git a/drivers/gpu/drm/msm/dp/dp_drm.h b/drivers/gpu/drm/msm/dp/dp_dr= m.h index 4c6b14dd52ac..4d642de4a50b 100644 --- a/drivers/gpu/drm/msm/dp/dp_drm.h +++ b/drivers/gpu/drm/msm/dp/dp_drm.h @@ -19,8 +19,6 @@ struct msm_dp_bridge { =20 #define to_dp_bridge(x) container_of((x), struct msm_dp_bridge, bridge) =20 -struct drm_connector *msm_dp_drm_connector_init(struct msm_dp *msm_dp_disp= lay, - struct drm_encoder *encoder); int msm_dp_bridge_init(struct msm_dp *msm_dp_display, struct drm_device *d= ev, struct drm_encoder *encoder); =20 diff --git a/drivers/gpu/drm/msm/dsi/dsi.c b/drivers/gpu/drm/msm/dsi/dsi.c index 3bcea5f5b5a3..19a3ff0d27ba 100644 --- a/drivers/gpu/drm/msm/dsi/dsi.c +++ b/drivers/gpu/drm/msm/dsi/dsi.c @@ -283,15 +283,15 @@ static int msm_dsi_modeset_init(struct msm_display *d= isplay, !msm_dsi_is_master_dsi(msm_dsi)) { /* * Do not return an eror here, - * Just skip creating encoder/connector for the slave-DSI. + * Just skip creating the bridge for the slave-DSI. */ return 0; } =20 - ret =3D msm_dsi_manager_connector_init(msm_dsi, encoder); + ret =3D msm_dsi_manager_bridge_init(msm_dsi, encoder); if (ret) { DRM_DEV_ERROR(dev->dev, - "failed to create dsi connector: %d\n", ret); + "failed to create dsi bridge: %d\n", ret); return ret; } =20 diff --git a/drivers/gpu/drm/msm/dsi/dsi.h b/drivers/gpu/drm/msm/dsi/dsi.h index d594a7399f54..87a7be955c5f 100644 --- a/drivers/gpu/drm/msm/dsi/dsi.h +++ b/drivers/gpu/drm/msm/dsi/dsi.h @@ -52,8 +52,8 @@ struct msm_dsi { /* dsi manager */ bool msm_dsi_is_bonded_dsi(struct msm_dsi *msm_dsi); bool msm_dsi_is_master_dsi(struct msm_dsi *msm_dsi); -int msm_dsi_manager_connector_init(struct msm_dsi *msm_dsi, - struct drm_encoder *encoder); +int msm_dsi_manager_bridge_init(struct msm_dsi *msm_dsi, + struct drm_encoder *encoder); int msm_dsi_manager_cmd_xfer(int id, const struct mipi_dsi_msg *msg); bool msm_dsi_manager_cmd_xfer_trigger(int id, u32 dma_base, u32 len); int msm_dsi_manager_register(struct msm_dsi *msm_dsi); diff --git a/drivers/gpu/drm/msm/dsi/dsi_manager.c b/drivers/gpu/drm/msm/ds= i/dsi_manager.c index 2a5326f1fa8b..9edace2b396d 100644 --- a/drivers/gpu/drm/msm/dsi/dsi_manager.c +++ b/drivers/gpu/drm/msm/dsi/dsi_manager.c @@ -3,7 +3,6 @@ * Copyright (c) 2015, The Linux Foundation. All rights reserved. */ =20 -#include "drm/drm_bridge_connector.h" =20 #include "msm_kms.h" #include "dsi.h" @@ -458,13 +457,11 @@ static const struct drm_bridge_funcs dsi_mgr_bridge_f= uncs =3D { }; =20 /* initialize bridge */ -int msm_dsi_manager_connector_init(struct msm_dsi *msm_dsi, - struct drm_encoder *encoder) +int msm_dsi_manager_bridge_init(struct msm_dsi *msm_dsi, + struct drm_encoder *encoder) { - struct drm_device *dev =3D msm_dsi->dev; struct drm_bridge *bridge; struct dsi_bridge *dsi_bridge; - struct drm_connector *connector; int ret; =20 dsi_bridge =3D devm_drm_bridge_alloc(msm_dsi->dev->dev, struct dsi_bridge= , base, @@ -484,12 +481,6 @@ int msm_dsi_manager_connector_init(struct msm_dsi *msm= _dsi, if (ret) return ret; =20 - connector =3D drm_bridge_connector_init(dev, encoder); - if (IS_ERR(connector)) { - DRM_ERROR("Unable to create bridge connector\n"); - return PTR_ERR(connector); - } - return 0; } =20 diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.c b/drivers/gpu/drm/msm/hdmi/hdm= i.c index 62961dddd8f5..33474e90af53 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi.c +++ b/drivers/gpu/drm/msm/hdmi/hdmi.c @@ -11,7 +11,6 @@ #include #include =20 -#include #include #include =20 @@ -164,7 +163,6 @@ static int msm_hdmi_modeset_init(struct msm_display *di= splay, struct drm_device *dev, struct drm_encoder *encoder) { struct hdmi *hdmi =3D container_of(display, struct hdmi, display); - struct drm_connector *connector =3D NULL; int ret; =20 hdmi->dev =3D dev; @@ -173,7 +171,7 @@ static int msm_hdmi_modeset_init(struct msm_display *di= splay, ret =3D msm_hdmi_bridge_init(hdmi); if (ret) { DRM_DEV_ERROR(dev->dev, "failed to create HDMI bridge: %d\n", ret); - goto fail; + return ret; } =20 if (hdmi->next_bridge) { @@ -181,34 +179,20 @@ static int msm_hdmi_modeset_init(struct msm_display *= display, DRM_BRIDGE_ATTACH_NO_CONNECTOR); if (ret) { DRM_DEV_ERROR(dev->dev, "failed to attach next HDMI bridge: %d\n", ret); - goto fail; + return ret; } } =20 - connector =3D drm_bridge_connector_init(hdmi->dev, encoder); - if (IS_ERR(connector)) { - ret =3D PTR_ERR(connector); - DRM_DEV_ERROR(dev->dev, "failed to create HDMI connector: %d\n", ret); - connector =3D NULL; - goto fail; - } - ret =3D devm_request_irq(dev->dev, hdmi->irq, msm_hdmi_irq, IRQF_TRIGGER_HIGH, "hdmi_isr", hdmi); if (ret < 0) { DRM_DEV_ERROR(dev->dev, "failed to request IRQ%u: %d\n", hdmi->irq, ret); - goto fail; + return ret; } =20 return 0; - -fail: - if (connector) - connector->funcs->destroy(connector); - - return ret; } =20 static void msm_hdmi_snapshot(struct msm_display *display, diff --git a/drivers/gpu/drm/msm/msm_kms.c b/drivers/gpu/drm/msm/msm_kms.c index 1a081e15a0a8..71af3780b7b1 100644 --- a/drivers/gpu/drm/msm/msm_kms.c +++ b/drivers/gpu/drm/msm/msm_kms.c @@ -10,7 +10,10 @@ #include #include =20 +#include +#include #include +#include #include #include #include @@ -271,15 +274,15 @@ static int msm_display_modeset_init(struct msm_displa= y *display, } =20 /* - * Set up the bridges and connectors for the display sub-blocks, dispatchi= ng - * through the common display interface using the encoders the backend cre= ated - * in ->kms_init(). + * Set up the bridge chains for the display sub-blocks, dispatching throug= h the + * common display interface using the encoders the backend created in + * ->kms_init(). * - * The slave link of a bonded DSI pair shares its master's encoder and cre= ates - * no connector of its own; its ->modeset_init() handles that internally, = so it + * The slave link of a bonded DSI pair shares its master's encoder and set= s up + * no bridge of its own; its ->modeset_init() handles that internally, so = it * needs no special-casing here. */ -static int msm_kms_init_connectors(struct drm_device *ddev) +static int msm_kms_modeset_init(struct drm_device *ddev) { struct msm_drm_private *priv =3D ddev->dev_private; struct msm_kms *kms =3D priv->kms; @@ -310,6 +313,35 @@ static int msm_kms_init_connectors(struct drm_device *= ddev) return ret; } =20 +/* Build a bridge connector for each encoder. */ +static int msm_kms_init_connectors(struct drm_device *ddev) +{ + struct drm_encoder *encoder; + + drm_for_each_encoder(encoder, ddev) { + struct drm_connector *connector; + int ret; + + /* the virtual writeback encoder brings its own connector */ + if (encoder->encoder_type =3D=3D DRM_MODE_ENCODER_VIRTUAL) + continue; + + connector =3D drm_bridge_connector_init(ddev, encoder); + if (IS_ERR(connector)) { + DRM_DEV_ERROR(ddev->dev, + "failed to init connector for %s: %ld\n", + encoder->name, PTR_ERR(connector)); + return PTR_ERR(connector); + } + + /* The DP subconnector property applies to DisplayPort only. */ + if (connector->connector_type =3D=3D DRM_MODE_CONNECTOR_DisplayPort) + drm_connector_attach_dp_subconnector_property(connector); + } + + return 0; +} + int msm_drm_kms_init(struct device *dev, const struct drm_driver *drv) { struct msm_drm_private *priv =3D dev_get_drvdata(dev); @@ -353,6 +385,10 @@ int msm_drm_kms_init(struct device *dev, const struct = drm_driver *drv) * ->hw_init(); now set up the bridges and connectors for them from * common code. */ + ret =3D msm_kms_modeset_init(ddev); + if (ret) + goto err_msm_uninit; + ret =3D msm_kms_init_connectors(ddev); if (ret) goto err_msm_uninit; --=20 2.47.3 From nobody Fri Jul 24 23:30:38 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 9DEBD40B0EC for ; Wed, 22 Jul 2026 06:37:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702263; cv=none; b=SsA+36gqp7CLRWmdGTpHddUj5aRAvOqWCY9k710CJPSV1kR6VGFVMzVpZIzuz7eEzGJegF3Ei0pyDWfyrinG3qEKBOV9ugkmmboyZ+y+i9RhI2ChNuCj5V8cdAvLrrAaWiL5y1q0oMDciDK5FehHrj3N4PgxdP6dg2ynQo8FRGk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784702263; c=relaxed/simple; bh=oODRCXTyFFCwRZ0Sv7FS2y/hkfGA+35WKYSGZcOEml0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Ql7RUwLnFjnUbLrxr26L/jC5UQM9L9BZ7bnbs1UgPN46o+HoVtw+bmdRHdnMJuLH6kro+u3Qy/mbreQhPvpbTYdkJE2Bk9mGYMStbWjfZeEgouuTzp8i9LcE+pATkznG2gD5zmYWJhts3KsAFQNtXoaI7LOeD3LXZr3Cce6/O5k= 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=T2jdroEs; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=S4AT3sJA; arc=none smtp.client-ip=205.220.168.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="T2jdroEs"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="S4AT3sJA" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 66M54CRa3474518 for ; Wed, 22 Jul 2026 06:37:41 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= XnRrKHywGDxOUzWeTEWzWWRjTrZo78jT5PLWnVtgFyM=; b=T2jdroEsepbJfOw/ xp6sT6YcsThvbp/BgihiRth+xsuYICbmhr63PpyVhG/9I1c1zmD6pBbP+2WqvEgL akfHuShxAAJ/4Tigbpg+FGqGAdW/6wVc11REJde2D5u7AivZenjssjxQqqd91W2w EFWSBQm7kHexNOaq9VaZW8T/gGqCKv8e7xUNbh//WACaTBXYFAxYu9kWISY+en15 wAsPC8Kg8zqAW8rovtiLnSltuWx9Cit/oO1ueoOPvdOLocbNve35iX9VyfrVZoRP E4p4lcN7u4PLh0gluG8J6L5pyqsYQzsYmc47t5wjI1YvCoYJ/amLokgUxSnZSDQI jBA8pg== Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4fjd6ftmeh-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 22 Jul 2026 06:37:40 +0000 (GMT) Received: by mail-qt1-f197.google.com with SMTP id d75a77b69052e-520a00c7a03so154725791cf.1 for ; Tue, 21 Jul 2026 23:37:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1784702260; x=1785307060; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=XnRrKHywGDxOUzWeTEWzWWRjTrZo78jT5PLWnVtgFyM=; b=S4AT3sJAcSHs4IvlwBOoEHBh4fV4dzKrmbGfn0DV9E+mJ8WpCSZlqXLM6LK1RVEVDM JBzn6YHrVk8g0OEbk2LYdGTUAG2JDIDLi287shf3iKSOVsJITapukr4wVBANdJEhhygi FJhgfatqL6tYHj7//sNsZ6xXHjJ+MycmB13ebOhAUMQCfV5DYW1VASXCIzQUXsVWbjGF NffyfrbMe+LgaBA96Tt+rlTLOwUf/o2f5EhNS80SP43Cyzv+Zxn+olaSeShhc6WyvTb4 EARXqOH8xw5YQ8ouK0SDVlksIu5y+S6DrCJY6ORBsxVrxJ2Chzvx8jQW2QbIXZasUZ7e QFvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784702260; x=1785307060; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=XnRrKHywGDxOUzWeTEWzWWRjTrZo78jT5PLWnVtgFyM=; b=MdxXlWter7oGRFsUy9vhKWXIgnB2t3QitnjIjNMPMb2zB7/ruAc91/87Ybo2c3JWWj eAFvaIUaKb+Ug6FGvdwL1QcOettmaanO2jaLLmBQlkbF0LGny7xgCIbBeDxgne3p+/sR A4q7OyWrKo/I1wQp/kQ2tudibiiEaIRj1SLytozAaS5o5Le38Qyn+LRttXfl4x1xn5hk nqTHBCqsUF3XjK04BVHrrdSjUWxQwdVyvF0yOA7RYPcnXN3j9m/MuFjKTdZfY0VhdHUE cMKDomVKzrf5DMlgf1V8QQaDvBaStpWRJA2gq8A/ZB5OK0fmi/S/jAQKHTX0xU6wmiww L5/g== X-Forwarded-Encrypted: i=1; AHgh+Rrr4qkcMLnMm7x8lldY7uWKgBANcZaEIjl0PmfO6cfD7VF0Rrz/eExP0caE5S9+cjchK8AoagkRUDFs4oI=@vger.kernel.org X-Gm-Message-State: AOJu0YzE4V4LfGjTUbRlPuBKanuXGu1BnYvZeAkrVhTkVj8XRdwx105a ZJuUGDFONVyXHj6uGDQFqm2M2UNx5xTYranv9PJ298/Z4qCW9gfOUPM4sVENUIcMukt/hPt+M7c Z31u56d3+Ea+MSzuetoj1F9AUlAED+a+A08/ovh+1ny6+womzy5UXtAFJRpe3VPZIPp9aUmSGml U= X-Gm-Gg: AR+sD12H2DFGJ13gqfKPpjwNvUW7USPRjWnJ6e1SMZFQHNCXE/vjQkUxH4fQ6It/mk5 k8dRfAg5/177l/6y+TDji4wYXxZFE0PhRkKrfAShZ1GN7nYZ6hXojdYqt9G3eAvO8+42K04gN8/ abbLnA8rHTQdLDLM1M4VoE8wmEXLenn0CyLNG0N+2PIvi9tInL9QpP4eAG+BtNTKCKoontO9UTa BBPlVZlgc6WgOE7DGn/x3+lUbrHqRrznKq1K8gIIoC9uyOA7wZMyxyGEo4QDe7Txco34nyeJyUO FtcinHmQAwcbbVNQ3r06XOuV7a0dzuoSMf/7oRwu3U3Aeoe/HbPvizmBripI+UfyctKKFJdTogM FkNbx0ZurYdpiy4pl9rptqUufiPjmMhPs1C3JQ3YVuy6t9SMpn46bvSb/IS8ZpW5j1NtNctS4Gv aV5fO/njzXCerimQ== X-Received: by 2002:a05:622a:4108:b0:51b:fa52:807b with SMTP id d75a77b69052e-5213e77dc72mr218367331cf.47.1784702259618; Tue, 21 Jul 2026 23:37:39 -0700 (PDT) X-Received: by 2002:a05:622a:4108:b0:51b:fa52:807b with SMTP id d75a77b69052e-5213e77dc72mr218366961cf.47.1784702259068; Tue, 21 Jul 2026 23:37:39 -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 2adb3069b0e04-5b2a9b8c6f6sm309696e87.4.2026.07.21.23.37.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 23:37:37 -0700 (PDT) From: Dmitry Baryshkov Date: Wed, 22 Jul 2026 09:36:39 +0300 Subject: [PATCH 24/24] drm/bridge-connector: attach the DP subconnector 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: <20260722-drm-msm-display-interface-v1-24-368c10fe62fd@oss.qualcomm.com> References: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> In-Reply-To: <20260722-drm-msm-display-interface-v1-0-368c10fe62fd@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2406; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=oODRCXTyFFCwRZ0Sv7FS2y/hkfGA+35WKYSGZcOEml0=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqYGTq0i//7pQq5pWgVJJSpoN7VfhV6Bjv6skYl NtppAvB7VCJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCamBk6gAKCRCLPIo+Aiko 1VmsCACifTf6rchkhuEjQrSuhh1LqItb5kRl4fyZdnHEsMSloGVzlQYWwHNMev4dNiVo8g5oFjh IrGWNPyfQOZRFchjDhqhkJZ85oMoSnP4JPdjSFZ/5qDZkjZE00xZtUOrsG5fjJTnlSc+6mC2qH0 9GF3NvkhY9NPZ/Dskc8WQXKdeBgdakU00j5+PvKx1yeYRGjMRKXZotxhK7LIHGUCkBQATaBgmRm zmAtrdw6SX7iimV2sLl15TnjwUgP3/kpt6DFTdAdZF0tvULaGjlHsRcPDZSoSjNfDxLzVzczr7P y8mM1KPwa7BnoCnQKkncZ228nEC0Y0Jh6QRGh4rRzGKph1aP X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-GUID: D-Bp7bEOW212bEHhLHQy4GPXzUhiGUML X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX0wqZvM93c85k auaRJg3VgGBc5+vhwIxUykycCGDz9lOhj3ZyqsnjCFtgNtS0cFaIJmNmECc4VBvD4ubinvtxVAs zmFM8ACsX6Zq/HHMdV/93GU1JJwvsSyVP/AGqBYE3Z5gLfZ7h2HTnYZ8gYtYUXf+PHE1qoResuZ +oiv8gPb986kDYuFwDANV7WtLeAD8Ry4G66vjrSd7+FiVeTdUQQDWHrh6gL5T4M8X1jj2xuJP9D 1dhzLMj4UeKnE9M7UjDuI99Zrd9vboorrb+V+OPt2TulT73Sn5CFlXbh7gmVjIMRIJmQOTitBiU 3zq70KmpFWvKjGC+uZpRDALkPFTuwt7fhCG8tuqJmd+pH79ECwRmoKxqhITK9KbkXv5KkG4zIL9 N5OUxH/JD3FlrgPPRS9b9/z4tqWbIhCTTZYWyTP3Ez7vHc/Mt29l7BIqSGVzMQTvhvC2QxBxsM+ rvtuZdiuUxN2KszSfyw== X-Authority-Analysis: v=2.4 cv=e/o2j6p/ c=1 sm=1 tr=0 ts=6a606534 cx=c_pps a=EVbN6Ke/fEF3bsl7X48z0g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=EUspDBNiAAAA:8 a=3i-1COqLn-c5cVpzcnsA:9 a=QEXdDO2ut3YA:10 a=a_PwQJl-kcHnX1M80qC6:22 X-Proofpoint-ORIG-GUID: D-Bp7bEOW212bEHhLHQy4GPXzUhiGUML X-Proofpoint-Spam-Info: AW1haW4tMjYwNzIyMDA2MCBTYWx0ZWRfX+/6ldjno/m3o 0m9z//wxEK4NmuNZhbP+RPYZF3E2TtWufiC2kekYvUVcTykPp4HeuCQJt8ZqWGDJW5WB7IA+WDd tGNgnzYkqOHf7N391eiSY04H3wnYIBA= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-22_02,2026-07-21_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 suspectscore=0 spamscore=0 bulkscore=0 priorityscore=1501 impostorscore=0 lowpriorityscore=0 phishscore=0 clxscore=1015 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607220060 DisplayPort connectors can expose the subconnector property, describing the attached dongle. While i915 and amdgpu drivers already provide this property, bridge-based DisplayPort connectors don't expose it. Attach the DP subconnector property from drm_bridge_connector_init() whenever the resolved connector type is DisplayPort, and drop the open-coded attachment from the msm code, pushing other DP drivers towards adding support for the property. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/display/drm_bridge_connector.c | 4 ++++ drivers/gpu/drm/msm/msm_kms.c | 5 ----- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/display/drm_bridge_connector.c b/drivers/gpu/d= rm/display/drm_bridge_connector.c index 8b54069fa53a..f83d5f52ab14 100644 --- a/drivers/gpu/drm/display/drm_bridge_connector.c +++ b/drivers/gpu/drm/display/drm_bridge_connector.c @@ -1089,6 +1089,10 @@ struct drm_connector *drm_bridge_connector_init(stru= ct drm_device *drm, IS_ENABLED(CONFIG_DRM_DISPLAY_HDCP_HELPER)) drm_connector_attach_content_protection_property(connector, true); =20 + /* The DP subconnector property applies to DisplayPort only. */ + if (connector_type =3D=3D DRM_MODE_CONNECTOR_DisplayPort) + drm_connector_attach_dp_subconnector_property(connector); + ret =3D drm_connector_attach_encoder(connector, encoder); if (ret) return ERR_PTR(ret); diff --git a/drivers/gpu/drm/msm/msm_kms.c b/drivers/gpu/drm/msm/msm_kms.c index 71af3780b7b1..cf602be09ff8 100644 --- a/drivers/gpu/drm/msm/msm_kms.c +++ b/drivers/gpu/drm/msm/msm_kms.c @@ -320,7 +320,6 @@ static int msm_kms_init_connectors(struct drm_device *d= dev) =20 drm_for_each_encoder(encoder, ddev) { struct drm_connector *connector; - int ret; =20 /* the virtual writeback encoder brings its own connector */ if (encoder->encoder_type =3D=3D DRM_MODE_ENCODER_VIRTUAL) @@ -333,10 +332,6 @@ static int msm_kms_init_connectors(struct drm_device *= ddev) encoder->name, PTR_ERR(connector)); return PTR_ERR(connector); } - - /* The DP subconnector property applies to DisplayPort only. */ - if (connector->connector_type =3D=3D DRM_MODE_CONNECTOR_DisplayPort) - drm_connector_attach_dp_subconnector_property(connector); } =20 return 0; --=20 2.47.3