From mboxrd@z Thu Jan 1 00:00:00 1970 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 0877730DEA6 for ; Mon, 2 Feb 2026 07:05: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=1770015911; cv=none; b=W0rHZndagS1ZAQzCh43KNghd1DyzYNyJ2Wq09rtUycMpBnCrz9zGT7to9J7aNh0hwGwfR8mfFaKxDB26MeZn3atzwriSHacgxdRywi/Dcywx7/fr6QiRI3PR/v4t8s1oJMLbob1tH5EqCec6ohdVj3bV9n32CpjZS/udk1xG/4c= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770015911; c=relaxed/simple; bh=3Vlh/wEMy9eDkqBMsg2jYYTeqLnwmRfyawhNhEpUUW0=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=EffUBuFLGGlCviv7Zym3nak10U1bIrdJ5lmwzN9cNnfhHNvl9GrZEimw6UpIA3gilASiuZ7iFNsdY/OH4tVLU1gEc6z5dNa8SU20KddEnSPtDMTUn/Dve/IFap40/SHi54+5gLizn294cTD/iCy2N8XnmIp32fzFoIODD5k6FaQ= 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=pMmRXDw2; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=C9GhC18D; 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="pMmRXDw2"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="C9GhC18D" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 611MPLtT1819670 for ; Mon, 2 Feb 2026 07:05:09 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= YhcjZlCEdnhukA6M7eYg9sdCZm9yQULKNjnZ4xyk89Y=; b=pMmRXDw2gXuuF2EZ QV+vjfNBpCK772+V5cH4ugHjTlDyP8g9bJ7KlA3wSTmxC5uV2Rc8Fvb/ZqoA4LL6 PXszstMnyBu/tca7M5P+kAFWZWp5AYe6+0RJdjZK7DOcmkvbXISRhureBzeAfXyO 0xJDgX3AuJPrZVK5gO9wtmgzu1fFDfySmm4DblS20HDHlEyW+XcRJ0nv1DWsNk0/ +pZgC1qTFE5pFOTb68SDj6jxex8XuP6mvVes3TDHGqepSRuMK/UFOt3T7355OY3f MiFsOKS9+526Sn+7aSgBg74U2S1UE7TmUCp+MeZINnYyVI8fZto+mxiXGwaLgT7i gVZWFg== Received: from mail-pj1-f70.google.com (mail-pj1-f70.google.com [209.85.216.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4c1avnmb8g-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 02 Feb 2026 07:05:08 +0000 (GMT) Received: by mail-pj1-f70.google.com with SMTP id 98e67ed59e1d1-35464d7c539so932973a91.0 for ; Sun, 01 Feb 2026 23:05:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1770015907; x=1770620707; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=YhcjZlCEdnhukA6M7eYg9sdCZm9yQULKNjnZ4xyk89Y=; b=C9GhC18D6ugYanCu8YcWHWQzeb0xx5WbQRdll+pNwu/vYDF4OFEY9YnN86M0VH8mpJ 4osQjWHHlrjh6Rll/d/pWNoPBa29vQoQLx+Yq6e+YGi/YkkIfAlPZuL8fFT0pYW3F/Sy dGd36SUUicqXWY2SF+aiNLGSL9hwtmqWDv5BZgsmEogKwWI03WAuj1ygGcwOTSBCTT+Q YyhLWVUHA5v8fxTsIQJoBxzeKjiJoLCHJQYyBnilXkngndsToD7c4hceddMVD9VMMB92 LrAtqwKtz2m0ymUqApgQcD0pST/mUIbi1vIaHyblcF4wXRVH+jQFsLijqG2LfuSj9mtf 593w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770015907; x=1770620707; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=YhcjZlCEdnhukA6M7eYg9sdCZm9yQULKNjnZ4xyk89Y=; b=b7hszZib2UYImR4lnscvuj0GDcBCkZgvrTSpTSoopjK4UyBcuY6Pxxp5xm6TUAh3br MNnVQFWziXyfQ+e6EyXAEtDf3SpKdmv2vTxFVpbRx8/lQJ4V4ehlzmPhDtIF25f6wabR Bs/PBgNToMMh6PaF6AIBN6hqRVRa8MSgEMyqIpT2wpLz2YX4zkLgYFQt4ix7eGAgYHub SVg6QZb5ZsGJ9HC8FayG7x/0j7sqEquXZoXteqJS9qICKxzAmE7w+oref3A7A0DStVkw v65AAzPoLB3UI8Jv7INQeZYztXiU9K3ZvClWrqLrkPk0dQpKKujj3lOGEXdJDVsY8opu 54pQ== X-Forwarded-Encrypted: i=1; AJvYcCVEutdAFK5OGDSqFXmAO4bTuSho3xuH20XgmAJHY08rMx/aWKh4bJGDTdcAhgSG1i1Rycwx+ZDZ0pTX38M=@vger.kernel.org X-Gm-Message-State: AOJu0YwzOahzMxFMvPFS05knwLl1NL8UzfRbhn2gnNMzBNVBxeMmSVxZ 3kCwWTvfiyD63nHgBrMpFk1yx85Qs6k6iPa2uxQUYug7z/1hR8xE040hQ9nSkaqPEOQuZaVZ/jN AZBnmpdCAK6Ef04miyuXheejYnjrj733kh8ReSYOOA+HbcD7C6tD+3dHRI67C8PaXt1w= X-Gm-Gg: AZuq6aKh4GdcEnD45VaNkU61VvmKXAYvoxQVGaaZ1K+5tKe9Pk3/jXEhFa/2eYnbYVu heoZ9qNfOKDCp+dJA6XNEEfhRlVN2ltRtnlTAsF1MsXWVcULr1sMxahCT0pjOhYmPYj4MpYItXl oA777NzFu6Z5Z/BJXUPK/oOnlkAoiftz+gIq1HTKr2yM3JOObWV6z8YRdkdwwcLNDmxnu3uiVUN rxQYl/zHxDnAlQ460NnIf62q+HuLF2nofVa22xmBYuMv0Si2qT5iI8K2K0WaSj9NBKwbu9/vRy4 hWGp3VIkYQHWWKRjQ+zELBd2UoPwYqp2SMl+XGDANP9VdHW0XnuFoeAsfz7cL3m9MjxmsqYyIrg B2mYth1jYGfi9LEfldOpRoWdcj/8gaIk79D46PsZzU0d9YeJGUVW4j37AUuJir5q+R5+6KbypxI csxHjVsw== X-Received: by 2002:a17:90b:2883:b0:32e:64ca:e84e with SMTP id 98e67ed59e1d1-3543b3253d9mr11688123a91.15.1770015907317; Sun, 01 Feb 2026 23:05:07 -0800 (PST) X-Received: by 2002:a17:90b:2883:b0:32e:64ca:e84e with SMTP id 98e67ed59e1d1-3543b3253d9mr11688082a91.15.1770015906802; Sun, 01 Feb 2026 23:05:06 -0800 (PST) Received: from [10.133.33.138] (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a88b4c4665sm136327385ad.64.2026.02.01.23.05.02 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 01 Feb 2026 23:05:06 -0800 (PST) Message-ID: <0fed5dd8-daa8-4956-9170-d824aaf416d6@oss.qualcomm.com> Date: Mon, 2 Feb 2026 15:04:59 +0800 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v3 3/8] drm/msm/dp: Read DPCD and sink count in bridge detect() To: Dmitry Baryshkov , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Kuogee Hsieh Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Jessica Zhang References: <20260115-hpd-refactor-v3-0-08e2f3bcd2e0@oss.qualcomm.com> <20260115-hpd-refactor-v3-3-08e2f3bcd2e0@oss.qualcomm.com> Content-Language: en-US From: Yongxing Mou In-Reply-To: <20260115-hpd-refactor-v3-3-08e2f3bcd2e0@oss.qualcomm.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Proofpoint-ORIG-GUID: WqPq1XMjqqAA6N0ZW0XLYynASlHjn2an X-Authority-Analysis: v=2.4 cv=bPMb4f+Z c=1 sm=1 tr=0 ts=69804ca4 cx=c_pps a=0uOsjrqzRL749jD1oC5vDA==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=TJdMcaj38x47FP8pHAkA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=mQ_c8vxmzFEMiUWkPHU9:22 X-Proofpoint-GUID: WqPq1XMjqqAA6N0ZW0XLYynASlHjn2an X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjAyMDA1OSBTYWx0ZWRfX1ImRZo94In9g jj5zaAwhmjCo2UbThD+Vn6KG1L7/SyGv/8i4e/sS5I6aAa00jng5P0wRezFbhx0hkcWT7dGO0XV 0bwSq1k/fCw0uaC4VeUM8tYAKW/4ugqrb0TDR+c2vQ95m2HnJJPvjELUVQOAW53obNl76eQM1Ce v/ZFRerNN85A0AoWPY6eDDLbqQR8kVjyozzcUqSzdlaBQl40i2WAfwOYivKw7ot/eugSMNeqjdI d6jyzzlRVVNIs//yKMaT2opo1AIDWY0tuTT4tzVMtdnHgJMC/f65Rfm0adoektcNlkkITk+5NAE 06NqVR4IG+UzsvGOUoeZHrfPGH6Ek5tSwxnSfPvIRfN+oYzo5pHFguvC3WCAn8UaY9W1MXIMTMz mmKEmKJ+FATcwmgkATDbE3XNxDg+boeIphEOF/PDBwAV5F1YISikua+z0hIRhNQGGDn02QYnicf 9zivE9GB1u7yju1rrSg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-02_02,2026-01-30_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 clxscore=1015 malwarescore=0 suspectscore=0 bulkscore=0 phishscore=0 priorityscore=1501 spamscore=0 lowpriorityscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602020059 On 1/15/2026 3:29 PM, Dmitry Baryshkov wrote: > From: Jessica Zhang > > Instead of relying on the link_ready flag to specify if DP is connected, > read the DPCD bits and get the sink count to accurately detect if DP is > connected. > > Signed-off-by: Jessica Zhang > Signed-off-by: Dmitry Baryshkov > --- > drivers/gpu/drm/msm/dp/dp_display.c | 60 +++++++++++++++++++++++++++++++++++++ > drivers/gpu/drm/msm/dp/dp_drm.c | 20 ------------- > drivers/gpu/drm/msm/dp/dp_drm.h | 2 ++ > 3 files changed, 62 insertions(+), 20 deletions(-) > > diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c > index 5997cd28ba11..a05144de3b93 100644 > --- a/drivers/gpu/drm/msm/dp/dp_display.c > +++ b/drivers/gpu/drm/msm/dp/dp_display.c > @@ -1151,6 +1151,66 @@ static int msm_dp_hpd_event_thread_start(struct msm_dp_display_private *msm_dp_p > return 0; > } > > +/** > + * msm_dp_bridge_detect - callback to determine if connector is connected > + * @bridge: Pointer to drm bridge structure > + * @connector: Pointer to drm connector structure > + * Returns: Bridge's 'is connected' status > + */ > +enum drm_connector_status msm_dp_bridge_detect(struct drm_bridge *bridge, > + struct drm_connector *connector) > +{ > + struct msm_dp_bridge *msm_dp_bridge = to_dp_bridge(bridge); > + struct msm_dp *dp = msm_dp_bridge->msm_dp_display; > + struct msm_dp_display_private *priv; > + int ret = 0; > + int status = connector_status_disconnected; > + u8 dpcd[DP_RECEIVER_CAP_SIZE]; > + struct drm_dp_desc desc; > + > + dp = to_dp_bridge(bridge)->msm_dp_display; > + > + priv = container_of(dp, struct msm_dp_display_private, msm_dp_display); > + > + if (!dp->link_ready) > + return status; > + > + msm_dp_aux_enable_xfers(priv->aux, true); > + > + ret = pm_runtime_resume_and_get(&dp->pdev->dev); > + if (ret) { > + DRM_ERROR("failed to pm_runtime_resume\n"); > + msm_dp_aux_enable_xfers(priv->aux, false); > + return status; > + } > + > + ret = msm_dp_aux_is_link_connected(priv->aux); > + if (dp->internal_hpd && !ret) > + goto end; > + > + ret = drm_dp_read_dpcd_caps(priv->aux, dpcd); > + if (ret) > + goto end; > + > + ret = drm_dp_read_desc(priv->aux, &desc, drm_dp_is_branch(dpcd)); > + if (ret) > + goto end; > + > + status = connector_status_connected; > + if (drm_dp_read_sink_count_cap(connector, dpcd, &desc)) { > + int sink_count = drm_dp_read_sink_count(priv->aux); > + > + drm_dbg_dp(dp->drm_dev, "sink_count = %d\n", sink_count); > + > + if (sink_count <= 0) > + status = connector_status_disconnected; > + } > + > +end: > + pm_runtime_put_sync(&dp->pdev->dev); > + return status; > +} > + > static irqreturn_t msm_dp_display_irq_handler(int irq, void *dev_id) > { > struct msm_dp_display_private *dp = dev_id; > diff --git a/drivers/gpu/drm/msm/dp/dp_drm.c b/drivers/gpu/drm/msm/dp/dp_drm.c > index fd6443d2b6ce..e4622c85fb66 100644 > --- a/drivers/gpu/drm/msm/dp/dp_drm.c > +++ b/drivers/gpu/drm/msm/dp/dp_drm.c > @@ -15,26 +15,6 @@ > #include "dp_audio.h" > #include "dp_drm.h" > > -/** > - * msm_dp_bridge_detect - callback to determine if connector is connected > - * @bridge: Pointer to drm bridge structure > - * @connector: Pointer to drm connector structure > - * Returns: Bridge's 'is connected' status > - */ > -static enum drm_connector_status > -msm_dp_bridge_detect(struct drm_bridge *bridge, struct drm_connector *connector) > -{ > - struct msm_dp *dp; > - > - dp = to_dp_bridge(bridge)->msm_dp_display; > - > - drm_dbg_dp(dp->drm_dev, "link_ready = %s\n", > - str_true_false(dp->link_ready)); > - > - return (dp->link_ready) ? connector_status_connected : > - connector_status_disconnected; > -} > - > static int msm_dp_bridge_atomic_check(struct drm_bridge *bridge, > struct drm_bridge_state *bridge_state, > struct drm_crtc_state *crtc_state, > diff --git a/drivers/gpu/drm/msm/dp/dp_drm.h b/drivers/gpu/drm/msm/dp/dp_drm.h > index 9eb3431dd93a..6c0426803d78 100644 > --- a/drivers/gpu/drm/msm/dp/dp_drm.h > +++ b/drivers/gpu/drm/msm/dp/dp_drm.h > @@ -25,6 +25,8 @@ int msm_dp_bridge_init(struct msm_dp *msm_dp_display, struct drm_device *dev, > struct drm_encoder *encoder, > bool yuv_supported); > > +enum drm_connector_status msm_dp_bridge_detect(struct drm_bridge *bridge, > + struct drm_connector *connector); > void msm_dp_bridge_atomic_enable(struct drm_bridge *drm_bridge, > struct drm_atomic_state *state); > void msm_dp_bridge_atomic_disable(struct drm_bridge *drm_bridge, > Hi, Dmitry, i want to ask a question about the .detect() here. https://lore.kernel.org/all/20250802-dp-conn-no-detect-v1-1-2748c2b946da@oss.qualcomm.com/ In this change, we moved the hpd-gpios detect logic into the MSM DP driver, but it seems like the current detect flow doesn’t really handle this setup. what i'm seeing is: 1.On platforms using hpd-gpios, booting the system with the DP cable already plugged in doesn’t work. The msm DP driver can’t detect when link_ready = false. 2.For hot‑plug cases, it looks like detection is still handled by display_connector_detect() instead of the MSM DP driver. Could you please comment about this? thanks..