From nobody Sun May 24 18:41:55 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 4A92F3911BC for ; Sun, 24 May 2026 10:33:40 +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=1779618821; cv=none; b=ZYr9mPMN0VciSesAS/GeEXrsjvbsYSdwdmVYhINj7U7m6p9r7xNKzIW7gvojxmlCQGZiOtJRue4OweuocpnOlVDSx8hOrVD3PDxQJ4ko2SvkAcwNzNMIVXAtE2j1hdOq/GzOBzcmCViKmcq69Z+Z3hoWw1QIjQq3LNsbZqInt4E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779618821; c=relaxed/simple; bh=sfsH6WnpUJEILc0y0cE4aFl7E8LK8Bn4UgByAfKVRH0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=oy46VUpy3lYnajbqaE6Bfgwkgbl0jZLTIXHD440binj95aIQIt0CcoGp4FWGoEEwz+7zRkwbbyGmgKKQVuw8/ptA5g1FPagmHsKAifQ+fpuAUFNccsZVM7M5SLZUaKxvREeoVFOG8YODn5bb00BUe/hNjEfdpbYPntDGSyXLsDM= 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=JQLe+uDX; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=DIb4DhHU; 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="JQLe+uDX"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="DIb4DhHU" 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 64NMxW4u3141540 for ; Sun, 24 May 2026 10:33: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= rUWlPZ/QEyxKEroL54OXFIzBc1cA35ddV/uy1RfQebI=; b=JQLe+uDX+o8oT808 aOOY0B74sM++WMNBVSGHIzyayEwjWyr2pFUfDuxdMChnBa4pRHCcNPAeKyGraQmQ w982WA7Oh+fmry5Cdu58uPxJSYscyjWgksr/aip0WMfunlqNTeGADMs1IR7MgE2C ByaNzOp/G52hLJaOymrQDoOscKDdzjlAyts4lQyLRAsfUvRXmLK9OGdkJLdzUvm9 bP7mfUuL9Lm0PTW4Z46DaM7E/VPGvrtYogteaOOz+u2jIuE3AweGSjrGqrraYrFu p5y80LzAWNKvIexgh5nnL8s0VTwwK59CFVgGkF3zEMMtdcYpMIuVLcmaWRU6ZYAI Agvmng== Received: from mail-ua1-f71.google.com (mail-ua1-f71.google.com [209.85.222.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4eb4asty64-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sun, 24 May 2026 10:33:39 +0000 (GMT) Received: by mail-ua1-f71.google.com with SMTP id a1e0cc1a2514c-95cf2f6a8d6so12717663241.1 for ; Sun, 24 May 2026 03:33:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1779618818; x=1780223618; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=rUWlPZ/QEyxKEroL54OXFIzBc1cA35ddV/uy1RfQebI=; b=DIb4DhHUjWuR0KaQ5CxPfltIJRmJTInb0+XnZibBxZdQsllj3LxIbl3LN5ZlLAxvXB qIRS/ccsY5dz4KXVlB7ltPt+O0Ftz4U8YTr5bP/ibb+EKFB2I/OimFbiAWU+yryHJiiI nvY+nKfKmI+vhRNBHDyDbsFPFCNGmw186iKKU5epC7/0rpsRkHQxZePJgOuAbmdXnAw6 nRgtbOXYLx8q+2qZnLjYuO1xklq1vWJ6UkdhHkvov+le/UFQAuQz1kve8QCKvvhxtqSL 5xhWu/fb98JgJ6rHHumf9dkSmxuFmMdqWhUIU88fPgXWZ2JWhL2MtuygqIQypBI55yMr VEfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779618818; x=1780223618; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=rUWlPZ/QEyxKEroL54OXFIzBc1cA35ddV/uy1RfQebI=; b=E//ih8b1LaBorm7tDXpGyfeQKjrKPc41PmGuhW4YfpWe2nO5UBggqRQ/xhoJM5e3/R bgtB5dOZ7jAIdqC/NKmLc7QXlgNzHl+nF/mXQ2ImlLw+RAbNn6os6FrNL5jrvsAYSHKC 3PiavygXKcplSG47R5II75U0MvVmMRNOhcHLWWKW+hNsLXk0UIXlh0nheOkHqI4IBbF7 8o8YgJafeaiGpU/Rl94LlpVGxQ6uif9DgfbchdzlC1DL1IR+KGkBziuSrSXxA3sBMf+K kkqsgXKqf7lalJ0UAQ54lC2j6GvxZfnHx4XsO2aFhynFOZ40r5EXS6cs3C+4wXcLv+Fz EDRA== X-Forwarded-Encrypted: i=1; AFNElJ85yb+3KE0t7aiZLSoa4CEazxOMi+RDCA6tKKCqD0u+kLzmttu59ea8SeTc56As6TZjqnJcHARuqXQ31V4=@vger.kernel.org X-Gm-Message-State: AOJu0YyF0/BbxQTvp0y2zEizAoyKKxFKOpjBYnhxWUYAqSvRt/61CSNf HmOh23xDf1GIm1e5CdULWI8e0oUav3nF47vYlFbULXZUvjwzT76XZvAumdrNgA64L9HJUrYL23Y r8OXfDc4D4HZVXLvkGvddGmWE15d9HgEh/76mxhmbFKCLMYrRTrza33yXdglgiwfoNUY= X-Gm-Gg: Acq92OEGey43xuRJBcFf08welUpZbL+UptV2P3xxiBkrSwap982xwvb6waCmDdoYuzd UtwGfsuQWGcp6msWR4eitzOL06sO2jz9PsYlqWjbby7EvNhEmxXyyUs5o5++9DpT6KWDoHRrnQk OrqqY5AHMRbBLtxTu6LIBgju2baaakg9Jgnp/Ch/wBGKLuEAl16rtStK/HT0vU5iW8WDhpv1CaU hVd9zSUtie4wVsYVOkSB+PzNc6CiOM/gLIhRj0gJCG8cPxQYgHwuyxOKF+wkjn3G7pg2f/V166z RIX/d1I1uFdPH/KW4bya8zBzNPvjtD6Zt9VPc+fJVRtgaKOp65ZZonHZpTnxO0+nyUGg+zUHPxg vRE6aFflA1CrmxiIngj/nXJyVxWCw8K3HQp/QPRATwfrSg6C4xtPLmVm2jYtPPTzllMmulBh63c tu7+Dx7OaLrlp6FXa6P3a+Xix8GDAybjneUQE= X-Received: by 2002:a05:6102:2c8b:b0:632:b111:965a with SMTP id ada2fe7eead31-673cbd0ce4fmr876998137.11.1779618818672; Sun, 24 May 2026 03:33:38 -0700 (PDT) X-Received: by 2002:a05:6102:2c8b:b0:632:b111:965a with SMTP id ada2fe7eead31-673cbd0ce4fmr876982137.11.1779618818286; Sun, 24 May 2026 03:33:38 -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-5aa32cba880sm1816148e87.32.2026.05.24.03.33.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 May 2026 03:33:35 -0700 (PDT) From: Dmitry Baryshkov Date: Sun, 24 May 2026 13:33:29 +0300 Subject: [PATCH v6 01/10] drm/msm/dp: fix HPD state status bit shift value 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: <20260524-hpd-refactor-v6-1-cf3ab488dd7b@oss.qualcomm.com> References: <20260524-hpd-refactor-v6-0-cf3ab488dd7b@oss.qualcomm.com> In-Reply-To: <20260524-hpd-refactor-v6-0-cf3ab488dd7b@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Kuogee Hsieh , Yongxing Mou Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Jessica Zhang , Konrad Dybcio , Val Packett X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1430; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=Jy2G9A2/jlpjEPih2lVO1QErbvDF3fvHdd/w5FC34jU=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqEtP8wFGMU4tIiJ5/Lc3BYbRwQXr4awMypM566 5fMSLf/kW2JATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCahLT/AAKCRCLPIo+Aiko 1RQUCACTjry843wsUM10VlJdaBz7l2Aq5aCNjGVjkkCwvBKif5qljEfaH810d/wq5qPcT8+9AqW oA8UbPEFB9SO2qpTeosO1ce1Kjg0m1UxlVyyTrTiYPvq3nyj4C5lYyeXV9v366kDZ0iRq/pScL5 sYJSBeZazUEQck1OCm1IrnCoKki79G3UUmhLdS5udCY4T+SGXa2LfqfZGLRdznh3cfRCxC9E4SM 8n1MB+dE81a/QdW/UTf7HeJBBb/mC9ujC3duz+JuYwUDay6oUOiY0gKagTnpDoeHAjgBS+Fl3Jy yJ6+OX5Lpjg2c/ANchHTMoJpW3kxcjiKAWEIYixqVNdEHtxG X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTI0MDEwNyBTYWx0ZWRfX3I1uvakvtQYU WrxFk6/c+ufjnC+iWoawyoOXVqR90l60QIAKnHALATelEGo1y6jjU+HhPDWfKOpecqUpd72z0uW WV9h1gGrWnOzzUgoR2D3p/FfB6AZcpFndL19E0SYMvB2CxXE0VCI3PrBDBz4BxDLQ9WNKC3Y8nb oKZMS+JiBFOFShQeDnuV9if2B5FOc8gcqOi3Nq4XEnh9N5lm2Vl5FYUAM19hSsUdgEYcK7uGhuJ El7yGelOA37XpQvPRCG11Z7734L9GsKWK9OSlZh7/PnLOLVIsbzatWxHEXO2WLaRS52fPkgMiKZ VX2XzLDkr+cpiAlB0K2qdfDR2TLYOWkf+RBOkrRNnKQfR5JNG6JObwN+j6Loz5nJYIdbqKpG13G UfUeOF4kTG4+KeV1qQ1HDWAAobSRtTWDWKpGwJahQmvK9WaKzLSDPP7eAD9u5WfHzT62H1tNPCs RjC++Jjzd0IdxlkhQzw== X-Proofpoint-ORIG-GUID: D9sTfGMIeARQfVeJU65IvWcBt32YuwqP X-Proofpoint-GUID: D9sTfGMIeARQfVeJU65IvWcBt32YuwqP X-Authority-Analysis: v=2.4 cv=c6ebhx9l c=1 sm=1 tr=0 ts=6a12d403 cx=c_pps a=KB4UBwrhAZV1kjiGHFQexw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=EUspDBNiAAAA:8 a=IBRk8GtBIsankUNt0b0A:9 a=QEXdDO2ut3YA:10 a=o1xkdb1NAhiiM49bd1HK:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-24_03,2026-05-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 spamscore=0 malwarescore=0 adultscore=0 suspectscore=0 lowpriorityscore=0 clxscore=1015 impostorscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605240107 From: Jessica Zhang The HPD state status is the 3 most significant bits, not 4 bits of the HPD_INT_STATUS register. Fix the bit shift macro so that the correct bits are returned in msm_dp_aux_is_link_connected(). Fixes: 19e52bcb27c2 ("drm/msm/dp: return correct connection status after su= spend") Signed-off-by: Jessica Zhang Reviewed-by: Konrad Dybcio Tested-by: Val Packett # x1e80100-dell-latitude-7455 Tested-by: Yongxing Mou # Hamoa IOT EVK, QC= S8300 Ride Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/dp/dp_reg.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/msm/dp/dp_reg.h b/drivers/gpu/drm/msm/dp/dp_re= g.h index 7c44d4e2cf13..3689642b7fc0 100644 --- a/drivers/gpu/drm/msm/dp/dp_reg.h +++ b/drivers/gpu/drm/msm/dp/dp_reg.h @@ -68,8 +68,8 @@ #define DP_DP_IRQ_HPD_INT_ACK (0x00000002) #define DP_DP_HPD_REPLUG_INT_ACK (0x00000004) #define DP_DP_HPD_UNPLUG_INT_ACK (0x00000008) -#define DP_DP_HPD_STATE_STATUS_BITS_MASK (0x0000000F) -#define DP_DP_HPD_STATE_STATUS_BITS_SHIFT (0x1C) +#define DP_DP_HPD_STATE_STATUS_BITS_MASK (0x00000007) +#define DP_DP_HPD_STATE_STATUS_BITS_SHIFT (0x1D) =20 #define REG_DP_DP_HPD_INT_MASK (0x0000000C) #define DP_DP_HPD_PLUG_INT_MASK (0x00000001) --=20 2.47.3 From nobody Sun May 24 18:41:55 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 33C6A39183B for ; Sun, 24 May 2026 10:33:43 +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=1779618824; cv=none; b=KmWFKfvawkkoggWjNIE8vgYYbePnh4sm3UHjS3YvUT3+h8aMzkBoPJ3IxE41hF5U3NrH1MkywMTXR0IWPKDNmoqmDLbeMoHDwP9YZYkcKECHXE0ZEroBJIBjR8hnjYx2VUqkKQb/n5suYqqd4PyzUghvMVoP3NHMR/Cj5w0M+O8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779618824; c=relaxed/simple; bh=a1msQBKlYK8Fg6QQ4+aBnX8lUx244ZTssTQXW+xoUjk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=C8lnCKGGtb8Qcl6tr78fl35J0mi/3jKvdf2vSGz4jwkU1CrxD448CD1blYtVLekG0hJXXN0Ds+H3aufowKDWZ0lxis8C9o2HxnytAd41++RcNhMT9dq8uWKYPAmpY8O97VuUqUK3emKAq5nUxzBgSjEvK8Rqih1XZRrpl5TMX9M= 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=Waa6ssRi; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=ktNjSgnm; 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="Waa6ssRi"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="ktNjSgnm" 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 64O4Jswx2812390 for ; Sun, 24 May 2026 10:33:42 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= iyv9syfthQXpoKYKQYEjdlG8jJw3/TSDQ0p9GxKw8Tg=; b=Waa6ssRifQJMB6u/ akF5iunjLiwwFmxG2WIqS2dIhibph3JuvWbry7GAhI73MM8KfNk63eOd+tAqdXam zl4AEBg3wX40zXKPchf2n4y4JcY7t9PjpOpWc9NqqBYHZhwO5zCz/9x535CY0rsK jAmUODGAsCg3/cZ7KUaPc5Tgc1nnKsJ0zpTI7Bmm9OhD05EJFhrA+bwWmMCZ6VFg EmdsQW4DD6XZgKv635WFkUdLtmPT/UAEkGVP0vm2RqORXDb5swQpmobAZbczfTsx 2idn+m37Fjkc1lEawq5+B33OLfJWu2PfEnMn0eUBPw6gBGAmd5A1D5Hp9k4xBorG hfiyVQ== Received: from mail-vk1-f198.google.com (mail-vk1-f198.google.com [209.85.221.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4eb4f3axk9-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sun, 24 May 2026 10:33:42 +0000 (GMT) Received: by mail-vk1-f198.google.com with SMTP id 71dfb90a1353d-56f6ef62af1so21029189e0c.1 for ; Sun, 24 May 2026 03:33:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1779618821; x=1780223621; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=iyv9syfthQXpoKYKQYEjdlG8jJw3/TSDQ0p9GxKw8Tg=; b=ktNjSgnmh6lw5NalsCXs8KEyzwRhtc+dueN/83UZ4wFGvRgSsoLfVs+JvQrigfO14G 2mUOdEirDVh+yTBlxv/Pwcknq7lSrilQSHCzj2wWnaFsWvANHYLtPskl0MqyAK0SD4vV fZDFDYy2FDdlS5QvpEd1jB4t4m4yemg6lbfNKyqhbL9z+GL7awYM/7RvlWg78ucfFlkh 2X5MK1WO6FFAmcpDR4aX1EPJdsJlbGOSkth/IZp8q6L2i7LsmDdCg5QxOkjqojWXjHCp HdmSd831Iso3Ed7WNAOrti07oebfbpivrdDiFWO0sRStjhi4yfLGNkOsHdjr525fQWEW ykCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779618821; x=1780223621; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=iyv9syfthQXpoKYKQYEjdlG8jJw3/TSDQ0p9GxKw8Tg=; b=D5n0ZVTmp39vKEEgKTT4kAZmhGwE8vHcgnO9/udTGVNLO/3x9SWoerB1EUuDklkZPd 2KOqxjWRmmgtNRyFw9khERZ7jNNKhnda/5Y7hKW6pQcFC2iJXtY3IH5pLKN9DYPAFLKt ReGRYuBmJsFvUlloXUaXLdFSlbY5P9hBR4CNGgLc/WOQfKMp25DnUnj3lmGgfqn69yKs hH0M0HvXHo3o8jxObi5jEGE9B1tbwgQQYQl2H83HWFz0RCGGcCENHsTYsCxK0luS5kVI d2O99vQFm7DAazlvvVdcERt40oDGd+cdis1HP7XuWG1QiAJhGvd6ihVkPmUSclY8iyml AjiA== X-Forwarded-Encrypted: i=1; AFNElJ9TWfvYgijdk8bHY3hgCFnjAr7wzKxSNAlAaOtB7RkQXGB3QXDA4WlwAkyZs35srrcQfQsv21xCHWgr50g=@vger.kernel.org X-Gm-Message-State: AOJu0YzoPUeY8SHSv+2764JNCc4Y1wKi7WKqVmYE8LJBf+yhl+ZdJinL m+xTb0DKstmpN+X1feCD5880kBQz2r7A2D4CRT69wTVCZGYxoIVtJa+9gvCIEUuujGEeAl9cprB HbWiQoL9ZSK5/bgGmsttTglm9NVhxSAyNpj9iKe4GtvVfF66aYcQWuDCePkaFD7Vdni0= X-Gm-Gg: Acq92OHjzjzPXlN+mbjkE6QoILfuD5SByPIFVSnd8380yVWCRYpEtTNkg5KvFLYip6X Dgkz2sNz3DTAQ8QsBmgaE1tymY2jlHOdpckyrkhXaEELDsySlPbhP5Tcn+YmxV7ix48ILsXH703 616omSplJMTqanaHjiJY8Oy0367BwII+Y8eCXJKCzFi3IMbZ7DwwZxaIxzUF0aRdjdMof8gcwh5 Ij1KF3tB1obwf/xLegWD8TxnNKbxz1Zprz4rT1MC+/yUtSFoHrp0Ggwl/eUU6QbgVhHcgwQe79T Sci9DDdni+8bDOjo/m/HwWjNoTZzb/DnFgGtWb8/awiHLiXhl8w5/cfUwiuEmLzdqadU78plswB ZFUQasvQcp4GWmtpQ2M5NmW8e03CX00VoeC0hq8rw7BNbuqEgAkcXPvKtFNX3Y5rVX6rE1ylBOj 2+keLsfCJcqHYXGey1+e2JN5Y23gh9sFWNaAc= X-Received: by 2002:a05:6122:1310:b0:56b:1eb:d396 with SMTP id 71dfb90a1353d-58664ddc313mr5496538e0c.14.1779618821376; Sun, 24 May 2026 03:33:41 -0700 (PDT) X-Received: by 2002:a05:6122:1310:b0:56b:1eb:d396 with SMTP id 71dfb90a1353d-58664ddc313mr5496527e0c.14.1779618820941; Sun, 24 May 2026 03:33:40 -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-5aa32cba880sm1816148e87.32.2026.05.24.03.33.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 May 2026 03:33:38 -0700 (PDT) From: Dmitry Baryshkov Date: Sun, 24 May 2026 13:33:30 +0300 Subject: [PATCH v6 02/10] drm/msm/dp: Fix the ISR_* enum values 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: <20260524-hpd-refactor-v6-2-cf3ab488dd7b@oss.qualcomm.com> References: <20260524-hpd-refactor-v6-0-cf3ab488dd7b@oss.qualcomm.com> In-Reply-To: <20260524-hpd-refactor-v6-0-cf3ab488dd7b@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Kuogee Hsieh , Yongxing Mou Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Jessica Zhang , Konrad Dybcio , Val Packett X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1314; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=M0xFObuyqZgBlqNrkdp3PVX6fNui+g+cwQXG8fz/uhs=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqEtP8qvFgjuBpy2TdYOyhSO2wLOR65eGv95Da8 AIL9bX3hXqJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCahLT/AAKCRCLPIo+Aiko 1SqiB/990K2kPsax9ea0OrmCVcDsuamPI+mrHcpsT1rLpmgDpHrzNb65CoGdS6CLHZ7RJKWoUHm wpRbX2/iT7SQMAtdBwVeqNrwYh1hKUaILucW64mONupci45Qc7LGyV2tgLbq3spRpHI6ykE3jwo 9zT5DO6I8IFFXOVLra/uNe8tgSC2ZI9DnTYWuqfVeecbqBP9+Al+ieDo4RlBtLbMzvreZ1KsWXH /AKAvxrOLLLhnbjYNgmd9groKwDruSIkT+NyGrcDBvbQpvI47Fos6Wlv2zW3J3CLRDQPRF9BkaM J6ggWq344csTY6gYKOjN571jk4q4M27cVX1Vk00aQG/5R5EZ X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-ORIG-GUID: 6KtalOz71g1NYyHDC9tfBAKz0YkdJYhC X-Authority-Analysis: v=2.4 cv=WvYb99fv c=1 sm=1 tr=0 ts=6a12d406 cx=c_pps a=1Os3MKEOqt8YzSjcPV0cFA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8 a=aneus3DpQx8xEqIVSrsA:9 a=QEXdDO2ut3YA:10 a=hhpmQAJR8DioWGSBphRh:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTI0MDEwNyBTYWx0ZWRfX5ppCXbrGLig2 iJzDhTN0nCgyl+DLgF3R5uAy2ZUWm13G4DIB94IkAgpGqj3IH3roWj9qwbj3eKV2FPm8SXJih35 vV9mjU+QQRgfAcF8OvGhjMpU3HEtBnZsFZZPh2REHsXaJl5Gdp6GjvrFlsVjV48ml+qeqnSC4P1 XdXaRRpOIA42gURO7DxxebMnwoVnmxfcPwH2EOwF52hxrROfTu+zkmKxrs68pYO7+IiIR0vw0Pv kaNGgWl2GV2XuymHiHgL2QB85kd1c8svL9OFOALHF+bO8aP5T8sz+FOBccxIZ7709dYuy/6vcxO TI8jKEZ5mTPBWBgzllmCYiGZuHuu/h+1lmmawPHhMPc0HXhj4SVZr8dzWsQAs+14MXg+fKAhkzt T/g2VVbI5824LBjsA5aMKJnNIWXwg74SkE4qrcPjpOtajkTVpbPKsUelZD7N/N+EsG0b3TRYDhX 5aYLBV2NFRnDTeCmR1Q== X-Proofpoint-GUID: 6KtalOz71g1NYyHDC9tfBAKz0YkdJYhC X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-24_03,2026-05-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 priorityscore=1501 lowpriorityscore=0 spamscore=0 clxscore=1015 phishscore=0 adultscore=0 suspectscore=0 impostorscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605240107 From: Jessica Zhang The ISR_HPD_* enum should represent values that can be read from the REG_DP_DP_HPD_INT_STATUS register. Swap ISR_HPD_IO_GLITCH_COUNT and ISR_HPD_REPLUG_COUNT to map them correctly to register values. While we are at it, correct the spelling for ISR_HPD_REPLUG_COUNT. Fixes: 8ede2ecc3e5e ("drm/msm/dp: Add DP compliance tests on Snapdragon Chi= psets") Signed-off-by: Jessica Zhang Reviewed-by: Konrad Dybcio Tested-by: Val Packett # x1e80100-dell-latitude-7455 Tested-by: Yongxing Mou # Hamoa IOT EVK, QC= S8300 Ride Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/dp/dp_display.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index 1b3cbf4016ef..1dd168acbbc3 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -38,9 +38,9 @@ enum { ISR_DISCONNECTED, ISR_CONNECT_PENDING, ISR_CONNECTED, - ISR_HPD_REPLUG_COUNT, + ISR_HPD_IO_GLITCH_COUNT, ISR_IRQ_HPD_PULSE_COUNT, - ISR_HPD_LO_GLITH_COUNT, + ISR_HPD_REPLUG_COUNT, }; =20 /* event thread connection state */ --=20 2.47.3 From nobody Sun May 24 18:41:55 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 26BA038F658 for ; Sun, 24 May 2026 10:33: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=1779618827; cv=none; b=pbcmU2Vy7Ghf3T8y9Nn62ticAKE07ngRVFOQxxY5lrXm3XW6scYge5JYwu3p4gZFHREo6BUMJQgxMOQfnauEVfhblLTZ//JOajq0IzkT8nHTzDK6m1h8whoAZewnRVGDlOHvA1NGJMQlxrWCUxRHLALHeMtdus5UGMjoHbNSMvM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779618827; c=relaxed/simple; bh=VlJ+1/FBc9duVlUYHWO2wc4pbzUsDLnVU4RINA0C4eE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WLaOwzfl++bjVlYWHKZjP3wZ3+XGIchkwMZE1qos6oi7ES8vGVpxyGY88LfkNxs66tX0L1ggk/CS5zzzh8p11tzqmBPOpFu4MXJ5hzk3Jd4PDyOuxFpM4bOtfhdM2ut9obK96r2XpJJ/I/rNL5XA/Ac0n7jSR8Q10i3S8t3QyWE= 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=CBi4Y3T/; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=SdMIwsuc; 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="CBi4Y3T/"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="SdMIwsuc" 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 64O4mwkI3791749 for ; Sun, 24 May 2026 10:33: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= jWB2ji/NIriYCqvzWJu07blT4Tg15A2umoRQFrcHfrg=; b=CBi4Y3T/NLLQTavM fTGD0lZf9binU8TuKK1jQOH049BfyDqPnYsasX08KQlZQrk8GSLYgfd6KDU1SAwi DQ6c/wnYkl9RZcYBw5IWt0iAU/d8DvovB2BkLJbsYFVM5yimdwaV6a+PdIO7S4Ay 0N5zu5nG6/xnND72zcjeGJfQ2CO0qN7P1eaKhG9CLGe6TmgyTr0nT0t87kSdyjpj jNdvt8zl88becJJHV4st77qyPmbBtPzwU8qdEHR759vxRzrUsFO90WAb6WXhjm+R GtVBwYhFNwCgrWlmkcnQl4365/OVLVS9mqLstnQTaSB21bfrXhQbWKA+x0rhKNFH FuBLgQ== Received: from mail-vs1-f70.google.com (mail-vs1-f70.google.com [209.85.217.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4eb88w2esw-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sun, 24 May 2026 10:33:45 +0000 (GMT) Received: by mail-vs1-f70.google.com with SMTP id ada2fe7eead31-63136c0b6fbso13673516137.1 for ; Sun, 24 May 2026 03:33:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1779618824; x=1780223624; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=jWB2ji/NIriYCqvzWJu07blT4Tg15A2umoRQFrcHfrg=; b=SdMIwsucK6h4QUq5SNm5X8ycb4/ta/e8l5xIGYlKYfXV0YgKtSorUcZOhohnZbVjxJ cCJosnPEd5L51HG8aqKGrY9NHHnpPdlyCEeD/ISvO1izKw+ANwyDKCiTgVMPFKAVXyxU j9qoq5jxaYkO1amISxXvPN0pgXtcRQOynPyPu35/i/prk7tkWVhHjLYwhC6hZBOUX47a bxsLlX8jHOBth2KtFGWECjemPQ3sveXV4w6g2GCWAadGEG2obxr59Gr61Ewikl3FOW2D vob8VQJHETB+UnXoqw6TRGBikRcL7xM0pdH5rCiyT/RQu/adiAzvC9jm7rEzXJwNrg7F EiLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779618824; x=1780223624; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=jWB2ji/NIriYCqvzWJu07blT4Tg15A2umoRQFrcHfrg=; b=o0MFslVoXpvKmwUNQ2CCwBGY/ntNjTQddDCC7vgiVwh5jUZIW0YpUnSiAH+HG1T3gy t89PZt3x403UeVAy6HcGbNjajUk6a6EODdkJHhSxsr1uhmAXOA9iBsXHQfXtsDM51fZ6 vfRKHBbs2oyoq2QsC2diztfXh7MtfOG0In6hc0IzlqsjKaCLfSa3yGQ6Bs8Kn3MyV4pE erH8s1Uv1BVrGI+GFxnDDFraXOesPm5h6mW569iapCozMGyLKDpPNeJMDeK6sumWWJ34 evnCJJilj2bQnRB/0DsYUiqYF0KaItX4Uj60CeE8fm30Wj7xHKja1CMFKPDfkKXqMHiH b8aw== X-Forwarded-Encrypted: i=1; AFNElJ/GMeCa0O+TntmBHjXBTrip6DuOd9Y0fsI3TWuK3QT6Awf9+b7bhaUDCdtoxrKlVTS1H0VEBnhEI+IYELU=@vger.kernel.org X-Gm-Message-State: AOJu0YztZhZ872wD9L5UNuo8Zo2IvvyQLxJXkySj4H7CclDrDe0JtRyA cbnnBHz5WzigKbn/5HDZbMjHtaeYK06DhR/DTHf6j6txOwcz3aw6bFFCnNSl4Dz2+gYjlsEGzoy 7HWJnSqdz8XOGD/lhruGRURQK1SK0NbQ2Erl5040vLm8sl5/3/5veIm+5Oo4hhDN2uf4= X-Gm-Gg: Acq92OGGfJ12+nMcFEThLXaXv9K/rL1yCMZkmSynO5aspeiEz01ZUmlByqvZgB2uShq OsGfXZ3AWheKGT8wutWE5zikcgT45h5LnB4dEkrd9kekAVlDhvNsiQpVcGprafS3MMANIJ5pCW2 YtLlNU8qnHYaLCuiqS0WGjGNS1ufXP06SmfrdM47kT7iAza/7lW1c8XSqc6UREbU9h3qX7uHMPK gCkD+bm7XMcGkpuBeB7zc6RNeodSU+uNr4UADLKm5Z94SQPGYy/LZk17y/bDOMf3SHWSIVaqIIE rixZsW3qfdVAT2SX6aD6VIKQyn430S0FqpdajsKAYzuKGgb8SE0u0ZpYgzUEtO58b6NcVdwkujL lRS2QX4MJOgcI9qN5FljL7Y0kojcaWV1VKqIxh/oXTfyFJA+q1H62oMVS0MliFE50mZ+fJE8bxl /tSsySTkcv0xtRY5laxYxKhRG52ynrPbd85Wg= X-Received: by 2002:a05:6102:17c2:b0:633:f7ab:6bd5 with SMTP id ada2fe7eead31-673ce1a740dmr599303137.18.1779618824188; Sun, 24 May 2026 03:33:44 -0700 (PDT) X-Received: by 2002:a05:6102:17c2:b0:633:f7ab:6bd5 with SMTP id ada2fe7eead31-673ce1a740dmr599285137.18.1779618823652; Sun, 24 May 2026 03:33: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-5aa32cba880sm1816148e87.32.2026.05.24.03.33.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 May 2026 03:33:41 -0700 (PDT) From: Dmitry Baryshkov Date: Sun, 24 May 2026 13:33:31 +0300 Subject: [PATCH v6 03/10] drm/msm/dp: Read DPCD and sink count in bridge detect() 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: <20260524-hpd-refactor-v6-3-cf3ab488dd7b@oss.qualcomm.com> References: <20260524-hpd-refactor-v6-0-cf3ab488dd7b@oss.qualcomm.com> In-Reply-To: <20260524-hpd-refactor-v6-0-cf3ab488dd7b@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Kuogee Hsieh , Yongxing Mou Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Jessica Zhang , Val Packett X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4687; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=LfFUlOISMVD+0rSYX6TFT5QzTXuP4QCzs8WLa+Upwss=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqEtP8b1jf8vWsVak8pEAzirBQ6nFhtNhTuagcJ 2cmHoxsOKWJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCahLT/AAKCRCLPIo+Aiko 1TUrCACeoH68ha64/v9DyUk/onMpYPA0TMR46wrUUHV0iskEalybwo/KUI4o8EEmULyjEx4Arwg AUIFJ3s9eTW2BCsaIy25dhLt0H4iGLqiVLZGLEuvPqVG+vxgZu1/EOt/xF/cpN5D1xEBV5ca18K MePZgpqOEqJ6xN+TRzzbam6U23BqvFfTM/KHytunDZRQ1mCHIhxl8Ev2y4ZmcY9h2zpXjLlyPe4 W53JiCw6/Ukwr/uB8Mvu0hDKjOACbqmj5pREIy69UdNqhwNzdUJIgsSSV+42zrwv4+Fs89/2Kj0 a/5YqNwiwJJZ4TJ5sydzkaiVl1kRtbXKCXa3UbxvJddTyiZU X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Authority-Analysis: v=2.4 cv=S/jpBosP c=1 sm=1 tr=0 ts=6a12d409 cx=c_pps a=N1BjEkVkxJi3uNfLdpvX3g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=EUspDBNiAAAA:8 a=jcEwYMPARZwhhGfK5pwA:9 a=QEXdDO2ut3YA:10 a=crWF4MFLhNY0qMRaF8an:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTI0MDEwNyBTYWx0ZWRfX/jy5kwTwtS8f uHSdcl5aOgc5vTAays7XyoMm0xa7w54xdR380nX/uqOVQtR92vFXSb+94TTgmtXwAB4mZVAJgry nUyb1WfZbnq6HHInE4xYJFjU8JY9xrDDyuOAZW7yprK9CuAksuvchMRmd4aIYurLx2djmFdIYvR XhLAoRPkvg2zrfGZsyNsigypj1sNHVBAm+ILWKFzAOcqTI+O0eE3eGP22m4Y2HafG7BgKUt8rXh hkE426XGgGu0jJnmiJF8mzbI2cPGxhNvn6f4m40yj02Mh1jroOQu86GqgNwjy+3wyE0gyYa2AqM w3SkJN8qS/MBYR3neKOyiLoSzBVtQJcQEBRwASehnNaSh/761AlLmmhiSgFNtXD1jvuJCvUcNJY zRgL1Asu+3EoUDXgRAC3DniZyhSdn9hl8nTdj/bo/Dz4paV9n8N3eSl9off2cywYz+FUuFHGeqV We1knubWjKlANt6wIhg== X-Proofpoint-ORIG-GUID: xMJ9Fj5ngT1qgi2wR_JUAS5hJIdVb7HP X-Proofpoint-GUID: xMJ9Fj5ngT1qgi2wR_JUAS5hJIdVb7HP X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-24_03,2026-05-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 lowpriorityscore=0 malwarescore=0 clxscore=1015 priorityscore=1501 impostorscore=0 adultscore=0 phishscore=0 spamscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605240107 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 Tested-by: Val Packett # x1e80100-dell-latitude-7455 Tested-by: Yongxing Mou # Hamoa IOT EVK, QC= S8300 Ride Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/dp/dp_display.c | 63 +++++++++++++++++++++++++++++++++= ++++ drivers/gpu/drm/msm/dp/dp_drm.c | 20 ------------ drivers/gpu/drm/msm/dp/dp_drm.h | 2 ++ 3 files changed, 65 insertions(+), 20 deletions(-) diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index 1dd168acbbc3..97c4752005c0 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -1152,6 +1152,69 @@ static int msm_dp_hpd_event_thread_start(struct msm_= dp_display_private *msm_dp_p return 0; } =20 +/** + * msm_dp_bridge_detect - callback to determine if connector is connected + * + * @bridge: Pointer to drm bridge structure + * @connector: Pointer to drm connector structure + * + * Returns: where there is a display connected to the DPTX (returning + * disconnected for branch devices without DP Sinks being connected). + */ +enum drm_connector_status msm_dp_bridge_detect(struct drm_bridge *bridge, + struct drm_connector *connector) +{ + struct msm_dp_bridge *msm_dp_bridge =3D to_dp_bridge(bridge); + struct msm_dp *dp =3D msm_dp_bridge->msm_dp_display; + int status =3D connector_status_disconnected; + struct msm_dp_display_private *priv; + u8 dpcd[DP_RECEIVER_CAP_SIZE]; + struct drm_dp_desc desc; + int ret; + + dp =3D to_dp_bridge(bridge)->msm_dp_display; + + priv =3D 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 =3D 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 =3D msm_dp_aux_is_link_connected(priv->aux); + if (dp->internal_hpd && !ret) + goto end; + + ret =3D drm_dp_read_dpcd_caps(priv->aux, dpcd); + if (ret) + goto end; + + ret =3D drm_dp_read_desc(priv->aux, &desc, drm_dp_is_branch(dpcd)); + if (ret) + goto end; + + status =3D connector_status_connected; + if (drm_dp_read_sink_count_cap(connector, dpcd, &desc)) { + int sink_count =3D drm_dp_read_sink_count(priv->aux); + + drm_dbg_dp(dp->drm_dev, "sink_count =3D %d\n", sink_count); + + if (sink_count <=3D 0) + status =3D 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 =3D dev_id; diff --git a/drivers/gpu/drm/msm/dp/dp_drm.c b/drivers/gpu/drm/msm/dp/dp_dr= m.c index 349175457566..991a3ca1e6bd 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" =20 -/** - * 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 *conn= ector) -{ - struct msm_dp *dp; - - dp =3D to_dp_bridge(bridge)->msm_dp_display; - - drm_dbg_dp(dp->drm_dev, "link_ready =3D %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_dr= m.h index ec76448e71ae..041aa026ae2e 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, str= uct drm_device *dev, struct drm_encoder *encoder, bool yuv_supported); =20 +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_commit *state); void msm_dp_bridge_atomic_disable(struct drm_bridge *drm_bridge, --=20 2.47.3 From nobody Sun May 24 18:41:55 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 3C5C53911B8 for ; Sun, 24 May 2026 10:33:47 +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=1779618828; cv=none; b=hNSiv76leHfXScOClFubAi8AiJ4HFmpXVjn5leVd/q57lunIWfG0K9n7kPkoR4EJvOHrnixwcgaIoS4w/++oqmMXSD5KyA/8jmqIXVkagrHKbjsOBPFX2zy8p5V3ichZVa/owV7KfD9+25tD5ZGuYpM5058t5rVcp2s91MGCBSE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779618828; c=relaxed/simple; bh=T2TnNl5IXG3x/8HSEi/dmYszlfNUS/MS6JJyv3KPSVY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZL2UNhc82EzQbZNK0gNJHliBJqV6SUiQ3Tg3gRkz5w97vXBhIcdFi3bVUiSA4ZFUIVC8uKDNzRoCXTu6cXpO9PxtJyg+Ngca7o1S+KJ4+r+2xlZYjp1gQErQ5usZAUoTrkRYlNEMczE17zJRDDX8nCZA6VhCMXv0bbBxwuJilU4= 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=fJ/aG0dP; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=AD69QcvZ; 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="fJ/aG0dP"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="AD69QcvZ" 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 64O38gcZ555501 for ; Sun, 24 May 2026 10:33:46 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= LIovE62RVN0QdCt+WmtKx5cgzNYUayKB/BcGmgYe/jI=; b=fJ/aG0dPyN9+sj7z MtpM7c9O10QAoRoZ7Cn3mNYqauiDf2UFakFqaG9+VgsarR0E5ylYtd9oy/DCjOFx C8dA8RdQaAgGUHeKcmW4UWt1pmDxlMDz2qqck0qqCGx0bX7zPoG7EUi4A0IhR1IC aIKJhRLdxka8ctCVfgIx90m7ikY9hfvLNyxtHmqd61PiG31JYp7E0k7HXdpgzNI7 5VpKLFtcFnZViAe40G2/hWF8EBncRt2rAFyXRnkoJK79UsWQtiwSqqUS1HVEjgxQ 06W+XWQIDMjxnTciIAupYdM5MPI1XummovTNoGxjrvQa8rTov17oWLPrvS9l1X/X iCkoGQ== Received: from mail-vk1-f197.google.com (mail-vk1-f197.google.com [209.85.221.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4eb50ftup5-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sun, 24 May 2026 10:33:46 +0000 (GMT) Received: by mail-vk1-f197.google.com with SMTP id 71dfb90a1353d-575597e1259so6833737e0c.1 for ; Sun, 24 May 2026 03:33:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1779618825; x=1780223625; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=LIovE62RVN0QdCt+WmtKx5cgzNYUayKB/BcGmgYe/jI=; b=AD69QcvZY2R2wjoyG1i26lgeUTd8FHYqVSgbxWEkJ0FoJCKbbe8LZYpmoZNuy98J4v anXQsjNeVWFg57be/iBdG0JyFtO+u53KLvCp+GU2Tt4GH7pLkqx8k6P0CQFrT4Lb83j8 fRQCowP6SEUpAd0l3sw5eh9pchnbMxIP7C2vbpez1yJxgs2MBOmVB7LptZn3rNaGoL5v 8xG87oRrifcx1USrbIWw8quewzJTuRmnXdoGqNTa6TE7HdUSKM6Hg9PwbyBlmO1e7IXE ni7ryDDfYvOrBdUB5ALoneH0Rga5pEBxg2M0AxgCkzjnAzZgqb3znJFImvdw7+cb7OPO BrvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779618825; x=1780223625; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=LIovE62RVN0QdCt+WmtKx5cgzNYUayKB/BcGmgYe/jI=; b=Apy425cQv25ayCjVzQ1AE4v4SSo2PEUPesXtjMoeQOmt06PGViZk4JxxUPSmOHNbu9 8U/ugedJ8EWLzbia44id7ZhOHoXyQ2ym1NrYhtDEHUZJ82MxSWnNWtAT0OIggWXkkzQu YisYYjjAzKJagCeLUw2pqiZUH+UR2H2OBUQBl6g/JuwXT9vS4wlpeZBteZEKrEY8NCVM 6U6WMKD/AshBWQTf0FEIHAMqeXH9vf/PUOjXwYTcOo/zG7HgBYdLTt9+WKQSLWek2TrK ghUlXFb+i1uyaLxEp3KVtH/0auo7sXcKEUWkfrTDv/6Bv3IXVP1QMPJu8IWilIGKUxs7 ktbQ== X-Forwarded-Encrypted: i=1; AFNElJ+Zw2HxWiuVLKVfr8Z7aYQ1D47dDDIl1IegB11FHyB2Tu2Pkr3Qjhtnon8/g9jZ7I/r8e9YRL9e9iJB/nY=@vger.kernel.org X-Gm-Message-State: AOJu0YxK6GRd63DLFLPS1DVIUNExbjAlMxBxQrZZmJqwvaiHZ+28jBR7 wzqfhl0mP5+DyCWPibjJQUztBayDOf7wxEqKyTEgYhsVwPmF/l/B8PcFZ/jQb12THmsRPBfTNKm BXKzTyCH1c3YVwB2lq10bUiiJ4fTds75O2Ms40YNUMx9V7aJg9dTBQmKxHiXVz/tg46c= X-Gm-Gg: Acq92OH4HCGsYhEZ8FNcb9lGEqnW3Q5ccOu7SLXCtKEs1/muipUAGcrUCZu9IMxe6YC PrbaaH4wzVVExpmmcDONRNdFo9a3llv5gA3zfQ0omu9anq/eixjBxBL8i9C8f4jXzjm+3GZZyWV Q7FWkbtcIhP+rZDlbcmtofndea0piHawe3Pwf9DywKHi2KQl1LKmehibi/NG6m0l1GdD+QKGTZN aPzxRNaXQVxMJoe5RJvfOHjGM2cgXS8M7PaEszStQVHg2nWKSlUtLj5aiHG659aTGf+FM53xdnb I0U5Dpfz+5aH/03TuKSHtYNZ/k1eYrIFzZknseQx3INTxUy9bN7Ys5TRuugtwKTnWHuqWESPj3m Xb1WgDa9QjJUrHEqx3maC0dRGsxEzkcy43MkyBV2o3O3PJj/1YLkWzNsVDRdYMXOp5hDYfRPBQW abYn8dtW10rIhR0SeMBiVddxkaIF2vmTT+ypg= X-Received: by 2002:a05:6102:3f86:b0:602:8c16:b24c with SMTP id ada2fe7eead31-67c7c0765aemr4823996137.19.1779618825590; Sun, 24 May 2026 03:33:45 -0700 (PDT) X-Received: by 2002:a05:6102:3f86:b0:602:8c16:b24c with SMTP id ada2fe7eead31-67c7c0765aemr4823988137.19.1779618825197; Sun, 24 May 2026 03:33:45 -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-5aa32cba880sm1816148e87.32.2026.05.24.03.33.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 May 2026 03:33:44 -0700 (PDT) From: Dmitry Baryshkov Date: Sun, 24 May 2026 13:33:32 +0300 Subject: [PATCH v6 04/10] drm/msm/dp: Move link training to atomic_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: <20260524-hpd-refactor-v6-4-cf3ab488dd7b@oss.qualcomm.com> References: <20260524-hpd-refactor-v6-0-cf3ab488dd7b@oss.qualcomm.com> In-Reply-To: <20260524-hpd-refactor-v6-0-cf3ab488dd7b@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Kuogee Hsieh , Yongxing Mou Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Jessica Zhang , Val Packett X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1737; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=kIfgr1TXlKJmMBrqjAe8XvEofIv6a7FFbjhSIdx8oFo=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqEtP8rFYr9RxFhNyHvTDkeW6A4+2lNu04yxSnK yFxC1+HFiuJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCahLT/AAKCRCLPIo+Aiko 1VN3B/sGoDcfMNPTG+CrZBca9Zt21qM3tfIB8ERORfHAdmuNpv4jUPqDFKCf51fceatoNyPbKyk ArSJAGtbi5d0L70U4B0BtowxEBvvVIQkPtXt9woUQO5hJwVYgXHMx1talX4TuH3rND658Ka7bq+ nAOcohmah1maXkO2khjmDP5F/SPgpeJ1j1k/tbSmWUT/ZERZ59VjMNzYj66CqiJp7i06V/tTI5V WAQCXYkfVxm8EGYIG40O711YRQXopeF/coJuzKnvAQ2kMqHBw4MrkjcD1Z1SjX/bTrlv9s14drI PweRo0priJUp1oXHmv30xxbeVNIErtwp5p8rQaSMYaAb1gCE X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTI0MDEwNyBTYWx0ZWRfXzueddkPuhhpV u+xQ/jwu2Z8+9LrOS85AV/QbP+XgwpshB1hAZojijGZDfRzbJMV5asg8lLASyd0zgvRzmP0EmeP 4aNhI1lyqSOpQq6jkBe2lAUAed+oamchgdD3sso6/CZZsG14VtQK2ORXNapv/bzlMe5x4P9JnqE IfWAH+9/jmbLaqbLacmdc4u8bw+9wCXm+tupPu6gC+GF0EwraE3viu7Z2cm7dp+8XSDgRCFt640 djI+M298tfI3yHgCiiR+JK+wgLorebuXE23ByrSerqUE9S2drIFbSHUv3CR28w2TatnKUq+0G0b wEoaLBxgCyqR7rnFrorGGxXthVYh56KNZc5ssSt58WfrQ+6iwGd6OrQs8kYZlLzVKQUgtlDqxkN RTz6idVtSVy5UrRo7eEB5W5OT9FKTuHJ3yiz7Ts/NLpvI0n3m0VCReHSCeYsQh+CcrkuzLFBiAo smAWbYd3m3U8aLvCHLg== X-Proofpoint-ORIG-GUID: dh9Ap4EIXS7_rM30-S5ct_vi62NRLgIp X-Authority-Analysis: v=2.4 cv=UdBhjqSN c=1 sm=1 tr=0 ts=6a12d40a cx=c_pps a=JIY1xp/sjQ9K5JH4t62bdg==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=IoBVowuyLm_M3JZO-XQA:9 a=QEXdDO2ut3YA:10 a=tNoRWFLymzeba-QzToBc:22 X-Proofpoint-GUID: dh9Ap4EIXS7_rM30-S5ct_vi62NRLgIp X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-24_03,2026-05-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 adultscore=0 suspectscore=0 clxscore=1015 impostorscore=0 priorityscore=1501 malwarescore=0 lowpriorityscore=0 phishscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605240107 From: Jessica Zhang Currently, the DP link training is being done during HPD. Move link training to atomic_enable() in accordance with the atomic_enable() documentation. Link disabling is already done in atomic_post_disable() (as part of the dp_ctrl_off_link_stream() helper). Signed-off-by: Jessica Zhang Tested-by: Val Packett # x1e80100-dell-latitude-7455 Tested-by: Yongxing Mou # Hamoa IOT EVK, QC= S8300 Ride Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/dp/dp_display.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index 97c4752005c0..036b4a5cece5 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -437,11 +437,6 @@ static int msm_dp_display_process_hpd_high(struct msm_= dp_display_private *dp) msm_dp_link_psm_config(dp->link, &dp->panel->link_info, false); =20 msm_dp_link_reset_phy_params_vx_px(dp->link); - rc =3D msm_dp_ctrl_on_link(dp->ctrl); - if (rc) { - DRM_ERROR("failed to complete DP link training\n"); - goto end; - } =20 msm_dp_add_event(dp, EV_USER_NOTIFICATION, true, 0); =20 @@ -1699,6 +1694,13 @@ void msm_dp_bridge_atomic_enable(struct drm_bridge *= drm_bridge, force_link_train =3D true; } =20 + rc =3D msm_dp_ctrl_on_link(msm_dp_display->ctrl); + if (rc) { + DRM_ERROR("Failed link training (rc=3D%d)\n", rc); + // TODO: schedule drm_connector_set_link_status_property() + return; + } + msm_dp_display_enable(msm_dp_display, force_link_train); =20 rc =3D msm_dp_display_post_enable(dp); --=20 2.47.3 From nobody Sun May 24 18:41:55 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 A19A32BE7BE for ; Sun, 24 May 2026 10:33: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=1779618831; cv=none; b=sAgYv/0EqVuDZTttVOTDJ7SDojKo9X6Yf/h317ni/BdqGDlCu5aTLB9QNKWBPQaRRZKLL6S0xBOqAZz2S8LAiQ99wcRcWS8+Rnac8/4MtIRH4OBpiKub2Ta9quzHUSMkzAUJvO28zjcY+MTcriNhhMfKxFR66rYPOOpYHI9bOBY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779618831; c=relaxed/simple; bh=+GaGtvCVi/jXs8Gnl6qiTts4wOcrwLXV7mGMw9P2xyI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CO8OPDI8MlvdMxjjvmeYq4CFr3QHxTtZ0SdXnuLVk1N4zYaeHtItJ7wbRt23jMnX3/CgjIraCwmUeSHK1q5M077sV8jgpnhdeFbFGcmeLvGHPVLPiSPZrHU2YMoKpbP6LFemmN5ANZnVrRGPn3rDmHZ7WZBaiwALI9HxuJrI+RM= 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=eRTO5095; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=b7MEiPUI; 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="eRTO5095"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="b7MEiPUI" 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 64O0jESH3505255 for ; Sun, 24 May 2026 10:33: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= l8o6cIS01j0pOwxkyeeRqH0JHndoNuqGw7yx7pJcTtI=; b=eRTO5095bF0iAnpM bWvKPvKLmFlRlAaIbQAKnfEb0o/PL6NH41Z/A/qNx62Zp541S49MY3e+QB2026M7 Sc4t7n0zoacI6CIZGzwpf8vcCUFPtYDG0tbTBn9a2b0r2iJIAHMcU2ZWnccF9Ru7 HGNS0XmHPGBB8RpmSkQOzEtiwbrDLwD/8dnh5MIScQmaRnUxXFndz+fBXiKyr6kP 9K0Tl8oIGya5WK6vBb6VlBT74Zsa5WzKog/q5CUz7zBFp3G5EXAFyt1xSX2jZUcm TgSopM9Earypu2386ZfSDnR7LD6RpMWWeZio2kb+a8ecU/XD6KV2xIFvOcd+jqcu +rtSyQ== Received: from mail-vk1-f200.google.com (mail-vk1-f200.google.com [209.85.221.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ebba0t696-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sun, 24 May 2026 10:33:48 +0000 (GMT) Received: by mail-vk1-f200.google.com with SMTP id 71dfb90a1353d-5751772dec6so17755801e0c.2 for ; Sun, 24 May 2026 03:33:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1779618828; x=1780223628; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=l8o6cIS01j0pOwxkyeeRqH0JHndoNuqGw7yx7pJcTtI=; b=b7MEiPUIwIegY6hooGfEdWOXcUx9W3QbTtpDVWZRCrzkvmrYt2QU2PfdJWIib1exVt WorjGbcGgUqC1/1uvhBp1ZRmRab5+6UDBrEWNoHDxf6Pd8KCoPPE5MpqFqJNS6zn99dO wqu38Etusi+8DjZN7RyaiJiH6xIOpj58Or7pZG8RZ1xO+69UbCjsdAaPxthnyk7+GlTl RE9hkzWNJh5UYAjVoUmo9TXC3nLAA60biDU8nzNk++yGjjxCpQcwatSybs8NLIopr0/7 Oa9iqKAbHGHGUrWNZfJwFqkTGCuprSEh2HgrkZ214VTbGXNtsasfTvr2O7jn7/BB2/He TNMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779618828; x=1780223628; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=l8o6cIS01j0pOwxkyeeRqH0JHndoNuqGw7yx7pJcTtI=; b=q22apHgSk3mfYnDWqMwIp15nKeUJjq4rG1Db4o7D+t97112eQbpLy/l+7+HyUhkSgE 9xjzO5G28nV/43wkYXN1Kr0GW9s38RftHW6EAjcOkCWBnTp453mcTD8sD6j78OiVFgfx 9b09ZA5VxAZlkwjcC62VO8rov5vsVnegqk2ijqUOyS8gH0uslE1qdi050vz8h7DDKew2 orA9QRV99kSVpB8UG7SpK0gENNVh9UKKJjyTCNtRNhugTWyekZqEj2WhiNCIObYEmEnM F2vgVx+Ffuy3OZLdg5Mrnk1+lml0wfX8t+q7SQxtnGfOP3RpigHa2I3YmXeTmMl7WFYI Pohw== X-Forwarded-Encrypted: i=1; AFNElJ/ZyArLxqti6Le/DXAbH0Zh41ATFXj6Ee6pCHVSkGxrbD6vnfdLai3DCeujjj95Uf82RpMmhqQnS9xMxfI=@vger.kernel.org X-Gm-Message-State: AOJu0YwK5VMhipwel9FuLolwPtjgZlaW41FX66/eQWoCZn0LwEOXlidk tP+kyVpgtDemift78ryyXgIXU5yOp/FHzIbwS192C4Mynfk+BGab7MLEUDlC9pgh6M6V4Rapfeb qC3IR5MhWeu+wC5N+Z87E23DJ1nnJkBXj20l42wOznHDI5+LhUPE5fXDEw3MbKG092SA= X-Gm-Gg: Acq92OETIwAJzkBJrOjfGtsIXlQGB/erZKM5aGhSoPx+iZagXqEV6eBAk/9n6Imd35R 2eQ2Vys5Zi3dAovImnx+Pt7Iv7f2QXUWaNnRD2KG3J5zqg3M3tYjrqHBuaILXkeaJia+N98vTW4 Ee4UvJxyVuIRxNvu5QZ8aSJL9DhBQ3Gk2yf3DOu9ZUMGuVzAy7hcDPXMF+HPYH+NmoS5ElqVNbt jOUNg2cRJPu1alt1bKVyLzN0URrPJTzwJxrDp0gO6DwP1avdqjJEPqNuLu3e6FVzA6Rb675wTWe oZ5iBnmf1b32wTi9unJ6FJZ9KVVzwCfdVdeqJqv/ZAp/yKYVt2MbUf6eQy5WCwGQz1bq6LFYQDW lZn2ns0JeDFdp+9PKJ1XfsPpkbsXxvJ39F4ANSzj8IACr3hVHN7ZPMQ623lhVC+jyLF5KCq4k8N Iwl3y+ofmJ3wVe7/zORECmkbAiztDeQ7FUj6c= X-Received: by 2002:a05:6122:3102:b0:56e:e9cf:7134 with SMTP id 71dfb90a1353d-5865ee6c055mr5365412e0c.3.1779618827846; Sun, 24 May 2026 03:33:47 -0700 (PDT) X-Received: by 2002:a05:6122:3102:b0:56e:e9cf:7134 with SMTP id 71dfb90a1353d-5865ee6c055mr5365392e0c.3.1779618827398; Sun, 24 May 2026 03:33: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-5aa32cba880sm1816148e87.32.2026.05.24.03.33.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 May 2026 03:33:45 -0700 (PDT) From: Dmitry Baryshkov Date: Sun, 24 May 2026 13:33:33 +0300 Subject: [PATCH v6 05/10] drm/msm/dp: Drop EV_USER_NOTIFICATION 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: <20260524-hpd-refactor-v6-5-cf3ab488dd7b@oss.qualcomm.com> References: <20260524-hpd-refactor-v6-0-cf3ab488dd7b@oss.qualcomm.com> In-Reply-To: <20260524-hpd-refactor-v6-0-cf3ab488dd7b@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Kuogee Hsieh , Yongxing Mou Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Jessica Zhang , Bjorn Andersson , Konrad Dybcio , Val Packett X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4470; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=7YL2ddERO+WKYrbTK+cxw/v4FUdiddSRzjsP3v7dOZY=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqEtP8GADJovtb7rXvgjO2Y/Y256UfXFTz5vVkj Y27da5YrWqJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCahLT/AAKCRCLPIo+Aiko 1WZjCACZl57V2MEbFbABu1TZ94QulG4M1cMv+VkqWhuzs7MQFLmzy166Yi+2PPo/Y5mQyyW7jmw SaaqWdfaqBDp3uI3JzpbYeWxH0J6ZAiXkQGJCfVKlKriHN5DJ3t32lYBEZmbLYy2sSwS+fAyOT6 Ki45bFDNvsTv4CNxJ/pAHoN0yeR9rmVbFztEPGTT1nWgS31TngmP49SAtj2A03OU6q1+rZ4Vqx0 sR9AaFNVgqyVkG8ellSQqmLVdEQY6A4X7LogzvFtRdBTOFxhGNnQ02VmbbcPK1B3wRDeu4yR2nB EUAhewevR+3uDLNdC6uC11jQi3HEmIgFL8CBSOm9IqJb0mVq X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-ORIG-GUID: Gk2D1p6HCsFFNij5PEyWqryUb0AwnPnB X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTI0MDEwNyBTYWx0ZWRfXxfdgpm4t1awZ QFV2UJnf6wsHScFSJ3zxzcuQK9dBxKTDhiuNNg1ngQAnn2YSux8udOde1rnrb6ZWB7gCRg5P2mS XKs402MnJFyRF81py9WLo+kKAwuwfjJj6po+mwE63rGadpuIJOznM+edkynqumY96/zZlAuCa3X os9VtVXHeg1n8MakWWlcMvAcALK82vg5qfD+dS/xH+YMwjQTELcb4Pkb4cxxN6VeIKYWZmQoNtM jXryU0VUBTFUxCiizvgP5QbOKXOpXaedGLReOv8qVS4+e8GZ2G48R8briSy/YuWyXkYngN1jvR8 fTaN9bb9xKDMMk0zkc7aUnc19q8tIBflgOnOGuh4otyD7for6ZLV1XLB5W/pvIqddMs/xDz0hAp FOs8cshaTjwGgGLJhW/fnB41w141RHx9FA7+vL9Xrdv9b1QVxuPpylXWotn68gh6quSXpFTYN6W la+jSi1eX+uzPrZXO/w== X-Proofpoint-GUID: Gk2D1p6HCsFFNij5PEyWqryUb0AwnPnB X-Authority-Analysis: v=2.4 cv=Xca5Co55 c=1 sm=1 tr=0 ts=6a12d40c cx=c_pps a=wuOIiItHwq1biOnFUQQHKA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=EUspDBNiAAAA:8 a=VwQbUJbxAAAA:8 a=gW5k9mFOS1cgrKxYKbgA:9 a=QEXdDO2ut3YA:10 a=XD7yVLdPMpWraOa8Un9W:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-24_03,2026-05-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 malwarescore=0 adultscore=0 priorityscore=1501 impostorscore=0 clxscore=1015 lowpriorityscore=0 bulkscore=0 phishscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605240107 From: Jessica Zhang Currently, we queue an event for signalling HPD connect/disconnect. This can mean a delay in plug/unplug handling and notifying DRM core when a hotplug happens. Drop EV_USER_NOTIFICATION and signal the IRQ event as part of hotplug handling. Signed-off-by: Jessica Zhang Reviewed-by: Bjorn Andersson Acked-by: Konrad Dybcio Reviewed-by: Konrad Dybcio Tested-by: Val Packett # x1e80100-dell-latitude-7455 Tested-by: Yongxing Mou # Hamoa IOT EVK, QC= S8300 Ride Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/dp/dp_display.c | 28 ++++++++-------------------- drivers/gpu/drm/msm/dp/dp_display.h | 1 + drivers/gpu/drm/msm/dp/dp_drm.c | 2 ++ 3 files changed, 11 insertions(+), 20 deletions(-) diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index 036b4a5cece5..6b76bff7c8d0 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -58,7 +58,6 @@ enum { EV_HPD_PLUG_INT, EV_IRQ_HPD_INT, EV_HPD_UNPLUG_INT, - EV_USER_NOTIFICATION, }; =20 #define EVENT_TIMEOUT (HZ/10) /* 100ms */ @@ -344,17 +343,6 @@ static const struct component_ops msm_dp_display_comp_= ops =3D { .unbind =3D msm_dp_display_unbind, }; =20 -static void msm_dp_display_send_hpd_event(struct msm_dp *msm_dp_display) -{ - struct msm_dp_display_private *dp; - struct drm_connector *connector; - - dp =3D container_of(msm_dp_display, struct msm_dp_display_private, msm_dp= _display); - - connector =3D dp->msm_dp_display.connector; - drm_helper_hpd_irq_event(connector->dev); -} - static int msm_dp_display_send_hpd_notification(struct msm_dp_display_priv= ate *dp, bool hpd) { @@ -378,7 +366,11 @@ static int msm_dp_display_send_hpd_notification(struct= msm_dp_display_private *d =20 drm_dbg_dp(dp->drm_dev, "type=3D%d hpd=3D%d\n", dp->msm_dp_display.connector_type, hpd); - msm_dp_display_send_hpd_event(&dp->msm_dp_display); + + drm_bridge_hpd_notify(dp->msm_dp_display.bridge, + hpd ? + connector_status_connected : + connector_status_disconnected); =20 return 0; } @@ -438,7 +430,7 @@ static int msm_dp_display_process_hpd_high(struct msm_d= p_display_private *dp) =20 msm_dp_link_reset_phy_params_vx_px(dp->link); =20 - msm_dp_add_event(dp, EV_USER_NOTIFICATION, true, 0); + msm_dp_display_send_hpd_notification(dp, true); =20 end: return rc; @@ -507,7 +499,7 @@ static int msm_dp_display_notify_disconnect(struct devi= ce *dev) { struct msm_dp_display_private *dp =3D dev_get_dp_display_private(dev); =20 - msm_dp_add_event(dp, EV_USER_NOTIFICATION, false, 0); + msm_dp_display_send_hpd_notification(dp, false); =20 return 0; } @@ -528,7 +520,7 @@ static int msm_dp_display_handle_port_status_changed(st= ruct msm_dp_display_priva drm_dbg_dp(dp->drm_dev, "sink count is zero, nothing to do\n"); if (dp->hpd_state !=3D ST_DISCONNECTED) { dp->hpd_state =3D ST_DISCONNECT_PENDING; - msm_dp_add_event(dp, EV_USER_NOTIFICATION, false, 0); + msm_dp_display_send_hpd_notification(dp, false); } } else { if (dp->hpd_state =3D=3D ST_DISCONNECTED) { @@ -1122,10 +1114,6 @@ static int hpd_event_thread(void *data) case EV_IRQ_HPD_INT: msm_dp_irq_hpd_handle(msm_dp_priv, todo->data); break; - case EV_USER_NOTIFICATION: - msm_dp_display_send_hpd_notification(msm_dp_priv, - todo->data); - break; default: break; } diff --git a/drivers/gpu/drm/msm/dp/dp_display.h b/drivers/gpu/drm/msm/dp/d= p_display.h index cc6e2cab36e9..60094061c102 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.h +++ b/drivers/gpu/drm/msm/dp/dp_display.h @@ -16,6 +16,7 @@ struct msm_dp { struct platform_device *pdev; struct drm_connector *connector; struct drm_bridge *next_bridge; + struct drm_bridge *bridge; bool link_ready; bool audio_enabled; bool power_on; diff --git a/drivers/gpu/drm/msm/dp/dp_drm.c b/drivers/gpu/drm/msm/dp/dp_dr= m.c index 991a3ca1e6bd..528c9a40477f 100644 --- a/drivers/gpu/drm/msm/dp/dp_drm.c +++ b/drivers/gpu/drm/msm/dp/dp_drm.c @@ -340,6 +340,8 @@ int msm_dp_bridge_init(struct msm_dp *msm_dp_display, s= truct drm_device *dev, } } =20 + msm_dp_display->bridge =3D bridge; + return 0; } =20 --=20 2.47.3 From nobody Sun May 24 18:41:55 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 3DA5B3002DD for ; Sun, 24 May 2026 10:33:51 +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=1779618834; cv=none; b=ZxTnfl7EwBP5pPStsuZ7n4fJtQORfya6hPo0p1Eaatsd53aTpS63ULH18b8gmp5Pp9iYgUAbtnuzjVKU7wsze/dOPSozlSunEC+j8r+GWxYiHJYCSV6Fs6m09QssjiqwQCi3H3GfeXU9PzCTj8C8DUGAzbPrIdJJfOlnJX2BKgE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779618834; c=relaxed/simple; bh=UWF62YF1njzFgAwLsWekOdUgSvI5h2lxGM5sba8sWQ0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SxRCZHVm6SRw31gILOiVMOGJ+ELZKXur5l7V8pfr3o6RBE1Z6Wf6a0ZSREjISR0QQgkeutj66rnZ1z/a3QztsQoH0UAWZole1UtYI0QRRTiI/ovKOJFxAh9gZb8dXODLSYuHHQtgZY94auHxsinFeIQNQnCb90YO8l6QYb2z7+w= 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=MxGRUePd; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=GQmkNjTE; 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="MxGRUePd"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="GQmkNjTE" 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 64O5bkhu2813823 for ; Sun, 24 May 2026 10:33:50 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= P5QWn9vGsj8eMKf1y+Px+TGh2HowGm6WIdOaf1OPM5U=; b=MxGRUePdzd0Vj21A GojBMkQx1JlmsLcL6k6YSjZgAD6aVLtqA7eKaHqc2hIoU+yNGszDr/e1B+AeFi+F u3XKNKQyR5qfJdnvofxiaNlvVAFcten/29uD52ZmsPxEC5nVmDerKe3qEZu5tb3V xp53lDixzkRUeMrOUd9TvCw7A9tv+rRLPyJLiXALUnQOOM/3zwR81Eo9VRifRPfn tyJnN92tUJu92Uitdc0jIKsB1KdVRhRVaT+nAw6IasqqbLPzOuB7YnOQRwYORZHq 3U5aVrpjvJIdA0wN6KllLd0pIM02uymPGRQ5XO6JAhmZiJG7R+YxrcnRxP+cu9MK GpF7+Q== Received: from mail-vs1-f71.google.com (mail-vs1-f71.google.com [209.85.217.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4eb5h9jt70-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sun, 24 May 2026 10:33:50 +0000 (GMT) Received: by mail-vs1-f71.google.com with SMTP id ada2fe7eead31-6312af106fcso16448033137.3 for ; Sun, 24 May 2026 03:33:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1779618829; x=1780223629; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=P5QWn9vGsj8eMKf1y+Px+TGh2HowGm6WIdOaf1OPM5U=; b=GQmkNjTEInEDeZ7p0Q+jfLtk7Qy3wl6aZAg1XVzrU5KuNiMYUo5wYZN8LrfFTUUWcT W6u8W5BzG89KP+tR8Q8jOHZQZ2OKcbDOYbiiFH28aRvIxSLiJ7fPs0U3RWASOP2zBxGg caHVpfnG+C2fzGYvjjTKCXNfeSs1bZLhR4jCGcZQuPPNjbWxbpQ370AwcIDwfHCqO8gS GpLzxxQbDiI0Ns4GnDxfsIOEwOUeCuDCd7pTQbxVAPH1Gu8j2RB7VDGvYjQWmFl7Htea kzoQeiQ5XOeKwRxMXVU7LXIrFOI1ZkUtiuE8w6T3lApQShWRh+qexWU9rYihZnlViZKk UeQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779618829; x=1780223629; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=P5QWn9vGsj8eMKf1y+Px+TGh2HowGm6WIdOaf1OPM5U=; b=UMWIsIt43fxYZIfQoNBPRO4tHUxYo+lHeMjNdNJe38LTfwivcnPo4eKBr0XBLnjXxZ 1nHHday0dbN4UNyW2gdmzOxU+6n6ku40cER78T95Xe+nRUhtNZW33SQ4IuCkxfnjmF8H UIjOFe55Rc2/MiBwFU6isGLmNg25auOZEa1JtHenWRDvWmHbUIAHyo6rjvzgjpwXgjIU aVTncdCjcFCE5xenX7PCDEZwhCFcHBQHzanXSDEOT6TXhFfH59Rj5eZTG2kA7r4jC63Q 58clW0oJZQ5Nl8OUfhRzhEtvjAV5VM5kv+Mmcs+Xqg8tiZmpcvRx1WOJhj9olgJVvphG 77Zg== X-Forwarded-Encrypted: i=1; AFNElJ8cyNej4Jk9DUcdAWod1QjsKsrmIecHbaFD9/iIfyX4vG6QQlFSepY2ueo8B9/hmlfq3RG1LwresIBPkm4=@vger.kernel.org X-Gm-Message-State: AOJu0Yyv4CCZ8IZpdL4x/BlRz6GziVEIWdqcWTM9kxUPwI7XEpZ7NV8x tIxG//kL7HlNFAaFPhLeeQYXDfkEHn3rTT2jbNX7+590ptw7ev6gKUK6PlzGih9MJTi5Tmh6ztW q3sLmXJpo+X5Q/yicsvte0HTUq0CArn02Tx3jkwq5F9mhoiGUHPI+Egt+qTaOtzAoxF9+kPaUB1 w= X-Gm-Gg: Acq92OGDrquVdgQeeruj3Wz0clD+pLRcz691K/aYR39d21qfRuz+4oqNloio/QBiuRN AH9JPY1yKdz5W8qWPXjurOCZVpS/IwV451wLqRfGXfBrXk85mqN80G2QoG8evl4BXczKoC8cnS0 lXZoQVPdFwyio57VnNqJjc4KQolYleVZA6GtKX0mA81kS/uyDwXW0ExBWW7IHjHDM9rzWH+O0vc ezV7c6mS5WpM6m4s+jP4pjj0dsOdl9CwgMy1oWmuAgjeAzpn1rjVsLNsOiDgSvmmVJbJT3yyhn5 aE5prN+r5IxDTM64xDS8Z0N0eLw/8tmfnJxdXGnJ/5HtggQeREevEINVptmb1Dn1qHS87u4R6bH RCjg9h8lv5Dk3hdDsvwnDT2hD15SAt9+/uZls2prBM5g25qVSEpBZFjAnrP7OwruyjKMmmYXAMT DdRIaG2Eh8EoFcMOJOBIhnHoXSewSOTEtzf2k= X-Received: by 2002:a05:6102:f93:b0:638:944a:49a3 with SMTP id ada2fe7eead31-67c7cee347amr5566662137.11.1779618829407; Sun, 24 May 2026 03:33:49 -0700 (PDT) X-Received: by 2002:a05:6102:f93:b0:638:944a:49a3 with SMTP id ada2fe7eead31-67c7cee347amr5566644137.11.1779618828973; Sun, 24 May 2026 03:33:48 -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-5aa32cba880sm1816148e87.32.2026.05.24.03.33.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 May 2026 03:33:47 -0700 (PDT) From: Dmitry Baryshkov Date: Sun, 24 May 2026 13:33:34 +0300 Subject: [PATCH v6 06/10] drm/msm/dp: drop event data 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: <20260524-hpd-refactor-v6-6-cf3ab488dd7b@oss.qualcomm.com> References: <20260524-hpd-refactor-v6-0-cf3ab488dd7b@oss.qualcomm.com> In-Reply-To: <20260524-hpd-refactor-v6-0-cf3ab488dd7b@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Kuogee Hsieh , Yongxing Mou Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Bjorn Andersson , Konrad Dybcio , Val Packett X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6182; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=UWF62YF1njzFgAwLsWekOdUgSvI5h2lxGM5sba8sWQ0=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqEtP92iDfdpDrcDYF4JAsZbS+8VsS8TZ5XUdyp 1eo8+oTo6WJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCahLT/QAKCRCLPIo+Aiko 1SyxCACu7tMV+veq6oNBmCEE7nWglKG+gLAjLevEMXxN1MdKV5Z424wgHVirQBLcDa9uwDcJWPa uc5CZfB7OJnFTN9tp6COJHi7p45JHc85UPB9HyEV+fUckl/c6YKlBVeBqg8YZyZhH6RCdpQZqoP Kg//v/s5kikFOe+xU6Pm8ISWlHAVxKMWsGEyKrOx2pYp907V6eMzRWfsSAHMjjQaS1XO9fgSs5x 1Kt20SxRvl8zifuGqQNn3gJQuMjmdDFZhMWulpNRUgbj6Nuk0Ts7B2+8j9ZJHNWQNsphTCTydf8 1IXWXuajlSDFtc/5gCvNZPudtCP49qF4aLPqSACP39cDoP81 X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-ORIG-GUID: Obb6ZCe1WeO2Tqu1fmnXA2TbDLBznPTS X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTI0MDEwNyBTYWx0ZWRfX3PuUPnwSnqmr HrOORLktSzcfSCmjjXTpzhAOcYbRa9U4+Kv7ZBnWvWkgre25u7grN7C72m41O6mlrgVOcj7x8VW eCTMMlpySsbHRn1nSdRDYOKkKNpFZfZMhbUnfLX5csmYM2nTVr1QHFvQlCE7nedPTYI50/Gw+vD 6OyBHGwP7UPkC7/sHZTJ9U4gGPmzUJYcQFudY9QE+ZfxFGlQFVdwTAh5/E9yiMY2cmJwyl4shhO lSZUu1GYXkw8uC9tzitWYdju+lpRoPAD1aUNlA8v8IZQu3VJE+ackz+WJgr+UHV9r5+kqkr0vIu 0D8pKXt1GH0Ef3xUNbZY+LkkBMZ+PwSfElPYwVHnBc8ERCV4QmVH59F8deuchPNexdvdZuWklW+ DcPSV0KfNyIxCuTmZmY31Nu0EXUNIFcwky8W+DGu2K6ECTBqtQMklaq9AMMRXNSywh34uK2Oh3E lV5rAvaQJVSd0H65C5w== X-Authority-Analysis: v=2.4 cv=H7jrBeYi c=1 sm=1 tr=0 ts=6a12d40e cx=c_pps a=P2rfLEam3zuxRRdjJWA2cw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=eCmuknkWlvIkWwm66DUA:9 a=QEXdDO2ut3YA:10 a=ODZdjJIeia2B_SHc_B0f:22 X-Proofpoint-GUID: Obb6ZCe1WeO2Tqu1fmnXA2TbDLBznPTS X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-24_03,2026-05-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 adultscore=0 suspectscore=0 clxscore=1015 bulkscore=0 impostorscore=0 spamscore=0 phishscore=0 priorityscore=1501 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605240107 With EV_USER_NOTIFICATION gone event's data is no longer useful. Drop it, removing also the argument from event handlers. Reviewed-by: Bjorn Andersson Reviewed-by: Konrad Dybcio Tested-by: Val Packett # x1e80100-dell-latitude-7455 Tested-by: Yongxing Mou # Hamoa IOT EVK, QC= S8300 Ride Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/dp/dp_display.c | 39 +++++++++++++++++----------------= ---- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index 6b76bff7c8d0..df79a6e84415 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -69,7 +69,6 @@ enum { =20 struct msm_dp_event { u32 event_id; - u32 data; u32 delay; }; =20 @@ -219,7 +218,7 @@ static struct msm_dp_display_private *dev_get_dp_displa= y_private(struct device * } =20 static int msm_dp_add_event(struct msm_dp_display_private *msm_dp_priv, u3= 2 event, - u32 data, u32 delay) + u32 delay) { unsigned long flag; struct msm_dp_event *todo; @@ -237,7 +236,6 @@ static int msm_dp_add_event(struct msm_dp_display_priva= te *msm_dp_priv, u32 even todo =3D &msm_dp_priv->event_list[msm_dp_priv->event_pndx++]; msm_dp_priv->event_pndx %=3D DP_EVENT_Q_MAX; todo->event_id =3D event; - todo->data =3D data; todo->delay =3D delay; wake_up(&msm_dp_priv->event_q); spin_unlock_irqrestore(&msm_dp_priv->event_lock, flag); @@ -577,7 +575,7 @@ static int msm_dp_display_usbpd_attention_cb(struct dev= ice *dev) return rc; } =20 -static int msm_dp_hpd_plug_handle(struct msm_dp_display_private *dp, u32 d= ata) +static int msm_dp_hpd_plug_handle(struct msm_dp_display_private *dp) { u32 state; int ret; @@ -603,7 +601,7 @@ static int msm_dp_hpd_plug_handle(struct msm_dp_display= _private *dp, u32 data) =20 if (state =3D=3D ST_DISCONNECT_PENDING) { /* wait until ST_DISCONNECTED */ - msm_dp_add_event(dp, EV_HPD_PLUG_INT, 0, 1); /* delay =3D 1 */ + msm_dp_add_event(dp, EV_HPD_PLUG_INT, 1); mutex_unlock(&dp->event_mutex); return 0; } @@ -645,7 +643,7 @@ static void msm_dp_display_handle_plugged_change(struct= msm_dp *msm_dp_display, plugged); } =20 -static int msm_dp_hpd_unplug_handle(struct msm_dp_display_private *dp, u32= data) +static int msm_dp_hpd_unplug_handle(struct msm_dp_display_private *dp) { u32 state; struct platform_device *pdev =3D dp->msm_dp_display.pdev; @@ -707,7 +705,7 @@ static int msm_dp_hpd_unplug_handle(struct msm_dp_displ= ay_private *dp, u32 data) return 0; } =20 -static int msm_dp_irq_hpd_handle(struct msm_dp_display_private *dp, u32 da= ta) +static int msm_dp_irq_hpd_handle(struct msm_dp_display_private *dp) { u32 state; =20 @@ -725,7 +723,7 @@ static int msm_dp_irq_hpd_handle(struct msm_dp_display_= private *dp, u32 data) =20 if (state =3D=3D ST_MAINLINK_READY || state =3D=3D ST_DISCONNECT_PENDING)= { /* wait until ST_CONNECTED */ - msm_dp_add_event(dp, EV_IRQ_HPD_INT, 0, 1); /* delay =3D 1 */ + msm_dp_add_event(dp, EV_IRQ_HPD_INT, 1); mutex_unlock(&dp->event_mutex); return 0; } @@ -1080,7 +1078,6 @@ static int hpd_event_thread(void *data) todo_next =3D &msm_dp_priv->event_list[msm_dp_priv->event_pndx++]; msm_dp_priv->event_pndx %=3D DP_EVENT_Q_MAX; todo_next->event_id =3D todo->event_id; - todo_next->data =3D todo->data; todo_next->delay =3D todo->delay - 1; =20 /* clean up older event */ @@ -1106,13 +1103,13 @@ static int hpd_event_thread(void *data) =20 switch (todo->event_id) { case EV_HPD_PLUG_INT: - msm_dp_hpd_plug_handle(msm_dp_priv, todo->data); + msm_dp_hpd_plug_handle(msm_dp_priv); break; case EV_HPD_UNPLUG_INT: - msm_dp_hpd_unplug_handle(msm_dp_priv, todo->data); + msm_dp_hpd_unplug_handle(msm_dp_priv); break; case EV_IRQ_HPD_INT: - msm_dp_irq_hpd_handle(msm_dp_priv, todo->data); + msm_dp_irq_hpd_handle(msm_dp_priv); break; default: break; @@ -1216,19 +1213,19 @@ static irqreturn_t msm_dp_display_irq_handler(int i= rq, void *dev_id) dp->msm_dp_display.connector_type, hpd_isr_status); /* hpd related interrupts */ if (hpd_isr_status & DP_DP_HPD_PLUG_INT_MASK) - msm_dp_add_event(dp, EV_HPD_PLUG_INT, 0, 0); + msm_dp_add_event(dp, EV_HPD_PLUG_INT, 0); =20 if (hpd_isr_status & DP_DP_IRQ_HPD_INT_MASK) { - msm_dp_add_event(dp, EV_IRQ_HPD_INT, 0, 0); + msm_dp_add_event(dp, EV_IRQ_HPD_INT, 0); } =20 if (hpd_isr_status & DP_DP_HPD_REPLUG_INT_MASK) { - msm_dp_add_event(dp, EV_HPD_UNPLUG_INT, 0, 0); - msm_dp_add_event(dp, EV_HPD_PLUG_INT, 0, 3); + msm_dp_add_event(dp, EV_HPD_UNPLUG_INT, 0); + msm_dp_add_event(dp, EV_HPD_PLUG_INT, 3); } =20 if (hpd_isr_status & DP_DP_HPD_UNPLUG_INT_MASK) - msm_dp_add_event(dp, EV_HPD_UNPLUG_INT, 0, 0); + msm_dp_add_event(dp, EV_HPD_UNPLUG_INT, 0); =20 ret =3D IRQ_HANDLED; } @@ -1653,7 +1650,7 @@ void msm_dp_bridge_atomic_enable(struct drm_bridge *d= rm_bridge, } =20 if (dp->is_edp) - msm_dp_hpd_plug_handle(msm_dp_display, 0); + msm_dp_hpd_plug_handle(msm_dp_display); =20 mutex_lock(&msm_dp_display->event_mutex); if (pm_runtime_resume_and_get(&dp->pdev->dev)) { @@ -1727,7 +1724,7 @@ void msm_dp_bridge_atomic_post_disable(struct drm_bri= dge *drm_bridge, msm_dp_display =3D container_of(dp, struct msm_dp_display_private, msm_dp= _display); =20 if (dp->is_edp) - msm_dp_hpd_unplug_handle(msm_dp_display, 0); + msm_dp_hpd_unplug_handle(msm_dp_display); =20 mutex_lock(&msm_dp_display->event_mutex); =20 @@ -1849,7 +1846,7 @@ void msm_dp_bridge_hpd_notify(struct drm_bridge *brid= ge, return; =20 if (!msm_dp_display->link_ready && status =3D=3D connector_status_connect= ed) - msm_dp_add_event(dp, EV_HPD_PLUG_INT, 0, 0); + msm_dp_add_event(dp, EV_HPD_PLUG_INT, 0); else if (msm_dp_display->link_ready && status =3D=3D connector_status_dis= connected) - msm_dp_add_event(dp, EV_HPD_UNPLUG_INT, 0, 0); + msm_dp_add_event(dp, EV_HPD_UNPLUG_INT, 0); } --=20 2.47.3 From nobody Sun May 24 18:41:55 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 6F13A2248A5 for ; Sun, 24 May 2026 10:33:53 +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=1779618836; cv=none; b=GOqXdFaysDTUO2rX4thZcOZxKQMsXT2W3mL7Gw7G496N1zjn0ju74l1vsLnCgIqvFWC1V3YJbP9QLdMqayr9+5zmEyqcJR0BZ2fCgI/fo7FNEXerQ+ABIsg+MO+VYzFwcfez862iD8vkDbyYt6bFKS7t7Zmrpom1guAU2rDn4uo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779618836; c=relaxed/simple; bh=QXl7os4P8l0szephuc6xICSvaXwhc9Yxcv9bq7R+X9o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NUNuYUgAbiVgbLTMWPWS1pgmE0iGbAWCUYWeYrt7Lp9mOc33R3NimxOx/oYjGo0KvQ8EREG6b3BsGkh6zzrK6J/yjY2KELfH2t9CseDwN+djUSC9HnSJ/CvdqzNU9GahwuUpzinvd6h/L79K6xGHF/5eLdlNxQL/+rgntDMVuZU= 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=IApgWDdP; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=OaoVYtHq; 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="IApgWDdP"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="OaoVYtHq" 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 64NNwRTX3212903 for ; Sun, 24 May 2026 10:33: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= 5j/4MH9S7nocefr9FpP2Mp3uT5VXukB1jx7JM6M11H8=; b=IApgWDdPl7oKw+F9 WGqEtMvAfHXLymJoy3uFYlhLzDnpl6zwx1aP1TK65Il06BM4orOIHaf5kNrpemuP FRbdS/EceNBLnr5aSsuuEGRV5vUdrw91enn9Gw2mxdcUtAh8Zxeo7ax5j/CKR4Se fZ4mnVwxy5WjoQNEXHv/Zrc7cequ94gtPsaTw0GgKItB5gIR7bZp36jpP4gW9h16 ZQTVKa38afB/qB3uEhTesO7Ekj9pv2WbmtLmV6lRzRz/m/1s1A0fOUFd9xtUfZOp Jyct/RPzSd/VxwSOBukZXcoiuSOD4bptGzfoiIh7DF7z57dlnBeV/VIKmM5Fc4C2 YEbV/A== Received: from mail-vk1-f198.google.com (mail-vk1-f198.google.com [209.85.221.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4eb88w2et8-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sun, 24 May 2026 10:33:52 +0000 (GMT) Received: by mail-vk1-f198.google.com with SMTP id 71dfb90a1353d-58700e12faeso3688103e0c.2 for ; Sun, 24 May 2026 03:33:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1779618831; x=1780223631; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=5j/4MH9S7nocefr9FpP2Mp3uT5VXukB1jx7JM6M11H8=; b=OaoVYtHqFmDE/lqefg6Ss4At1ZoA+ITVI9QktOYpAzUOsiscscyUKiZQR8a4JD8YDp BYOVvJb5tbdo6yrxmd1gEiA2sF/3Mbg+iqHyP7Stngdh8L0wmSoyJUUPh4eOgvzUwy19 k6KVwkiQsvQB0UEDVGKHAab3MKiL8XistSdqbt0lmuIgTsitFTVFTupkvSjp5T7Q3kiK NChaPoDgxSz7ZekeZWGDeta+O6gcG4X83f+R124I4lZQ5f3Xiu9af9wX+UazJe17XKNA aqOe7tat+FB7oV2K1U1gR7bMVZsba6RsKrju0wgOt0RP3NkDcQtEnod/Gi9vgB03q7m1 TO0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779618831; x=1780223631; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=5j/4MH9S7nocefr9FpP2Mp3uT5VXukB1jx7JM6M11H8=; b=ig8yU+QYLgFFBrViW0T1VussrW5qAL2EigwrPN69k5tfoUuvehtUY78/3ap5Gk1ekD vQAHFvrLoSGK+hjbjaAfhMkHuiakd67Zz8PR/DsWolEZOpf/nDENMJbCU0aaniGgMOjj mtSp0AC5dzf+bZqaneqVpiEUrzcB82Ma2t5zp+Iiy55ZxZceHrpFeZ4GmzJ3CnbQ8+8K Gd1Yb87ettPT5v38q/lzMCKs7SnFfPS/YGl71vwpwNhG80gJM9HNq4ViuW98ceK6YSOF gdATwCmPC1bPBYgB0zwc99YJQ/ilyf4Ql4KZkZrZKQoJXozbuXWNSMxfI4GUeR7aFt43 rO3w== X-Forwarded-Encrypted: i=1; AFNElJ94Ro0jiDiad4OdduimS7uF0N60FKEMqQ6Dq/OTsGTZ1ki3jym785G9aFf5/ENZXEABOb6Ti9LK0be5RWg=@vger.kernel.org X-Gm-Message-State: AOJu0YyGytd00ol68Kuim1HD8XZn0as9d40fXvVUynZvDKCMs9v9p9tI jcRjGuuY5BG5G3zqs+nn2R0YjcCwT/AWRyA3oc+zwSTfPWYzgKznZx7mp+0jo/PwjYm+Cefteme pbtWGGng7kSpnzTXNxfxtHf2Gw4SF9OTko3Q25HQzk28OH3FyhR3WM7K2xXTpFcx8llM= X-Gm-Gg: Acq92OFV8RkQPYiRSwMxH8xw87XNLd5PKcb5ERSOKFmwCBz0PPh4++ADCeKd+gecaCl JOcI3i4VnPQ45KX9N0cwpkPj5CasnK9i11hb8nAHqJ2TE8wmbsGwteMLWQwQIU1vC0EF+MW1s6I u8df5exM5Y0+b5jW4RzBNDVQXlrC6Y2vDejFrSgJEq6zuS568WuSspnKpbA6fs7Ngdwm/ZhNMxe SDSSHl5Szr/tTTclP2a2T5jFQ9i65SUJ5Rl1K2dyoLLkLIOJt/DpcismDf6YCTPGP5F1rInmV1N EPcrcSLVVuxrFrQnTdOJdJu1HTMg7rLUqO6gG4REfry4vhWgvZqbHjBUlmGCNo/faHN2On+JZcD a36VEi7lOSJk4rYCEpoRRv74VjaRocfkGf/+xsQhU8fWp7h7VD3v1IV/uY9tPx51WU+D6DoV3yH FtapYloM7uELGJlFZlIgYgJB4vxkS3+AqEDPw= X-Received: by 2002:a05:6122:e26d:b0:575:e5d7:6f1c with SMTP id 71dfb90a1353d-5865f625831mr5587351e0c.1.1779618831024; Sun, 24 May 2026 03:33:51 -0700 (PDT) X-Received: by 2002:a05:6122:e26d:b0:575:e5d7:6f1c with SMTP id 71dfb90a1353d-5865f625831mr5587340e0c.1.1779618830457; Sun, 24 May 2026 03:33: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-5aa32cba880sm1816148e87.32.2026.05.24.03.33.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 May 2026 03:33:49 -0700 (PDT) From: Dmitry Baryshkov Date: Sun, 24 May 2026 13:33:35 +0300 Subject: [PATCH v6 07/10] drm/msm/dp: rework HPD handling 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: <20260524-hpd-refactor-v6-7-cf3ab488dd7b@oss.qualcomm.com> References: <20260524-hpd-refactor-v6-0-cf3ab488dd7b@oss.qualcomm.com> In-Reply-To: <20260524-hpd-refactor-v6-0-cf3ab488dd7b@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Kuogee Hsieh , Yongxing Mou Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Jessica Zhang , Val Packett X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=31920; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=WTweGvI2v7VOyq74pDmwBqp/SwyubnmKzygWraz9ydQ=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqEtP9XIrMjcnMu/16E0MpoE16CWwmbf5NfaoKl DSS55t2WMWJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCahLT/QAKCRCLPIo+Aiko 1XLtB/9cw/gIq8he4ts3QosSJxLcEqbyNuVShAb4pfnh7Yt8qvggwLnE0zFKt8Zt9fsLg4XMaMf aITMkubL61BudHUvvs1ye4vu0VW2Pdf3lMKQCjsKMFxiWmcVmunGpyyUTBt0nJZS/y+/ki4wrW/ +BixlUGvKX9ntjymzeiHUfHtSQYrpwE42Tx8ha7EjydbBr4hrx1AB3PYGDAFAULuQYTRPuGXTk3 h8+vugZSPPzQPPdiKY/3rZSQ/iEYA6VaNOQvfWXEWvJKDuI/Ow3wu95ok3gwVcFk/xfIvIV8ni1 NRjbZiwh+Pc1w2wwuJC9ta4IHjTOEl9yWzrSosjXtP7ZDZXH X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Authority-Analysis: v=2.4 cv=S/jpBosP c=1 sm=1 tr=0 ts=6a12d410 cx=c_pps a=1Os3MKEOqt8YzSjcPV0cFA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=EUspDBNiAAAA:8 a=MLg0o6CLRq_mpizik64A:9 a=QEXdDO2ut3YA:10 a=hhpmQAJR8DioWGSBphRh:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTI0MDEwNyBTYWx0ZWRfX8XiEMrLAtw5l Mm2pt4yNIUSrbiftUDVNr26uuNEt/oSBBkq72PcVAgq3Efu5ehiv6/U1WL/aYagsE7Z8DCErlEg KXE7z2MnPl3LjzvPNKyGOWpV/MYKh9Aw/wcAyUbcXaiv+qFsMKL507TPua8M0GyttIPyCewigAs sr3ecEnXdCF6EX8hX+01hSdf6XeYOVShWX0lfWqnhHkEDgqhKtgnBkkO1Lv+ctqnE7gU5MhWzFF 2YQ9oZtGrv5lD1/jy+tJNwsmIKJ0ovXPKS1Rt3sCG9KjffQd3uKpi4e+7MKQxIMceG+r1VZZY0n Lg+kFOLBzRr4DP5gG7pv52BU/w/XrSwTO4cf97buqSAKnyfCqCKTnUQf34KluSR6fIEz4RPoksn BhOSDVgVVoyDkl4J1rc0y+7tyw22/3FSk06j8JpcwyBUcXWN9I/yAe/BzI5w3Ux9RxnMXckmzAG nu4HR3YyDLolERbklgw== X-Proofpoint-ORIG-GUID: fmu1laNPYuVwwMvqC4ZlgBTK1--MQi_b X-Proofpoint-GUID: fmu1laNPYuVwwMvqC4ZlgBTK1--MQi_b X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-24_03,2026-05-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 lowpriorityscore=0 malwarescore=0 clxscore=1015 priorityscore=1501 impostorscore=0 adultscore=0 phishscore=0 spamscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605240107 From: Jessica Zhang Handling of the HPD events in the MSM DP driver is plagued with lots of problems. It tries to work aside of the main DRM framework, handling the HPD signals on its own. There are two separate paths, one for the HPD signals coming from the DP HPD pin and another path for signals coming from outside (e.g. from the Type-C AltMode). It lies about the connected state, returning the link established state instead. It is not easy to understand or modify it. Having a separate event machine doesn't add extra clarity. Drop the whole event machine. When the DP receives a HPD event, send it to the DRM core. Then handle the events in the hpd_notify callback, unifying paths for HPD signals. Signed-off-by: Jessica Zhang Tested-by: Val Packett # x1e80100-dell-latitude-7455 Tested-by: Yongxing Mou # Hamoa IOT EVK, QC= S8300 Ride Co-developed-by: Dmitry Baryshkov Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/dp/dp_ctrl.c | 16 - drivers/gpu/drm/msm/dp/dp_ctrl.h | 1 - drivers/gpu/drm/msm/dp/dp_display.c | 601 ++++++++------------------------= ---- drivers/gpu/drm/msm/dp/dp_display.h | 1 - 4 files changed, 134 insertions(+), 485 deletions(-) diff --git a/drivers/gpu/drm/msm/dp/dp_ctrl.c b/drivers/gpu/drm/msm/dp/dp_c= trl.c index cba8a71a2561..86ef8c89ad44 100644 --- a/drivers/gpu/drm/msm/dp/dp_ctrl.c +++ b/drivers/gpu/drm/msm/dp/dp_ctrl.c @@ -2583,22 +2583,6 @@ void msm_dp_ctrl_off_link_stream(struct msm_dp_ctrl = *msm_dp_ctrl) phy_init(phy); } =20 -void msm_dp_ctrl_off_link(struct msm_dp_ctrl *msm_dp_ctrl) -{ - struct msm_dp_ctrl_private *ctrl; - struct phy *phy; - - ctrl =3D container_of(msm_dp_ctrl, struct msm_dp_ctrl_private, msm_dp_ctr= l); - phy =3D ctrl->phy; - - msm_dp_ctrl_mainlink_disable(ctrl); - - dev_pm_opp_set_rate(ctrl->dev, 0); - msm_dp_ctrl_link_clk_disable(&ctrl->msm_dp_ctrl); - - phy_power_off(phy); -} - void msm_dp_ctrl_off(struct msm_dp_ctrl *msm_dp_ctrl) { struct msm_dp_ctrl_private *ctrl; diff --git a/drivers/gpu/drm/msm/dp/dp_ctrl.h b/drivers/gpu/drm/msm/dp/dp_c= trl.h index 124b9b21bb7f..f68bee62713f 100644 --- a/drivers/gpu/drm/msm/dp/dp_ctrl.h +++ b/drivers/gpu/drm/msm/dp/dp_ctrl.h @@ -19,7 +19,6 @@ struct phy; int msm_dp_ctrl_on_link(struct msm_dp_ctrl *msm_dp_ctrl); int msm_dp_ctrl_on_stream(struct msm_dp_ctrl *msm_dp_ctrl, bool force_link= _train); void msm_dp_ctrl_off_link_stream(struct msm_dp_ctrl *msm_dp_ctrl); -void msm_dp_ctrl_off_link(struct msm_dp_ctrl *msm_dp_ctrl); void msm_dp_ctrl_off(struct msm_dp_ctrl *msm_dp_ctrl); void msm_dp_ctrl_push_idle(struct msm_dp_ctrl *msm_dp_ctrl); irqreturn_t msm_dp_ctrl_isr(struct msm_dp_ctrl *msm_dp_ctrl); diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index df79a6e84415..cdf8e618838a 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -43,35 +43,6 @@ enum { ISR_HPD_REPLUG_COUNT, }; =20 -/* event thread connection state */ -enum { - ST_DISCONNECTED, - ST_MAINLINK_READY, - ST_CONNECTED, - ST_DISCONNECT_PENDING, - ST_DISPLAY_OFF, -}; - -enum { - EV_NO_EVENT, - /* hpd events */ - EV_HPD_PLUG_INT, - EV_IRQ_HPD_INT, - EV_HPD_UNPLUG_INT, -}; - -#define EVENT_TIMEOUT (HZ/10) /* 100ms */ -#define DP_EVENT_Q_MAX 8 - -#define DP_TIMEOUT_NONE 0 - -#define WAIT_FOR_RESUME_TIMEOUT_JIFFIES (HZ / 2) - -struct msm_dp_event { - u32 event_id; - u32 delay; -}; - struct msm_dp_display_private { int irq; =20 @@ -95,15 +66,9 @@ struct msm_dp_display_private { /* wait for audio signaling */ struct completion audio_comp; =20 - /* event related only access by event thread */ - struct mutex event_mutex; - wait_queue_head_t event_q; - u32 hpd_state; - u32 event_pndx; - u32 event_gndx; - struct task_struct *ev_tsk; - struct msm_dp_event event_list[DP_EVENT_Q_MAX]; - spinlock_t event_lock; + /* HPD IRQ handling */ + spinlock_t irq_thread_lock; + u32 hpd_isr_status; =20 bool wide_bus_supported; =20 @@ -217,59 +182,6 @@ static struct msm_dp_display_private *dev_get_dp_displ= ay_private(struct device * return container_of(dp, struct msm_dp_display_private, msm_dp_display); } =20 -static int msm_dp_add_event(struct msm_dp_display_private *msm_dp_priv, u3= 2 event, - u32 delay) -{ - unsigned long flag; - struct msm_dp_event *todo; - int pndx; - - spin_lock_irqsave(&msm_dp_priv->event_lock, flag); - pndx =3D msm_dp_priv->event_pndx + 1; - pndx %=3D DP_EVENT_Q_MAX; - if (pndx =3D=3D msm_dp_priv->event_gndx) { - pr_err("event_q is full: pndx=3D%d gndx=3D%d\n", - msm_dp_priv->event_pndx, msm_dp_priv->event_gndx); - spin_unlock_irqrestore(&msm_dp_priv->event_lock, flag); - return -EPERM; - } - todo =3D &msm_dp_priv->event_list[msm_dp_priv->event_pndx++]; - msm_dp_priv->event_pndx %=3D DP_EVENT_Q_MAX; - todo->event_id =3D event; - todo->delay =3D delay; - wake_up(&msm_dp_priv->event_q); - spin_unlock_irqrestore(&msm_dp_priv->event_lock, flag); - - return 0; -} - -static int msm_dp_del_event(struct msm_dp_display_private *msm_dp_priv, u3= 2 event) -{ - unsigned long flag; - struct msm_dp_event *todo; - u32 gndx; - - spin_lock_irqsave(&msm_dp_priv->event_lock, flag); - if (msm_dp_priv->event_pndx =3D=3D msm_dp_priv->event_gndx) { - spin_unlock_irqrestore(&msm_dp_priv->event_lock, flag); - return -ENOENT; - } - - gndx =3D msm_dp_priv->event_gndx; - while (msm_dp_priv->event_pndx !=3D gndx) { - todo =3D &msm_dp_priv->event_list[gndx]; - if (todo->event_id =3D=3D event) { - todo->event_id =3D EV_NO_EVENT; /* deleted */ - todo->delay =3D 0; - } - gndx++; - gndx %=3D DP_EVENT_Q_MAX; - } - spin_unlock_irqrestore(&msm_dp_priv->event_lock, flag); - - return 0; -} - void msm_dp_display_signal_audio_start(struct msm_dp *msm_dp_display) { struct msm_dp_display_private *dp; @@ -288,8 +200,6 @@ void msm_dp_display_signal_audio_complete(struct msm_dp= *msm_dp_display) complete_all(&dp->audio_comp); } =20 -static int msm_dp_hpd_event_thread_start(struct msm_dp_display_private *ms= m_dp_priv); - static int msm_dp_display_bind(struct device *dev, struct device *master, void *data) { @@ -309,12 +219,6 @@ static int msm_dp_display_bind(struct device *dev, str= uct device *master, goto end; } =20 - rc =3D msm_dp_hpd_event_thread_start(dp); - if (rc) { - DRM_ERROR("Event thread create failed\n"); - goto end; - } - return 0; end: return rc; @@ -326,8 +230,6 @@ static void msm_dp_display_unbind(struct device *dev, s= truct device *master, struct msm_dp_display_private *dp =3D dev_get_dp_display_private(dev); struct msm_drm_private *priv =3D dev_get_drvdata(master); =20 - kthread_stop(dp->ev_tsk); - of_dp_aux_depopulate_bus(dp->aux); =20 msm_dp_aux_unregister(dp->aux); @@ -341,38 +243,6 @@ static const struct component_ops msm_dp_display_comp_= ops =3D { .unbind =3D msm_dp_display_unbind, }; =20 -static int msm_dp_display_send_hpd_notification(struct msm_dp_display_priv= ate *dp, - bool hpd) -{ - if ((hpd && dp->msm_dp_display.link_ready) || - (!hpd && !dp->msm_dp_display.link_ready)) { - drm_dbg_dp(dp->drm_dev, "HPD already %s\n", str_on_off(hpd)); - return 0; - } - - /* reset video pattern flag on disconnect */ - if (!hpd) { - dp->panel->video_test =3D false; - if (!dp->msm_dp_display.is_edp) - drm_dp_set_subconnector_property(dp->msm_dp_display.connector, - connector_status_disconnected, - dp->panel->dpcd, - dp->panel->downstream_ports); - } - - dp->msm_dp_display.link_ready =3D hpd; - - drm_dbg_dp(dp->drm_dev, "type=3D%d hpd=3D%d\n", - dp->msm_dp_display.connector_type, hpd); - - drm_bridge_hpd_notify(dp->msm_dp_display.bridge, - hpd ? - connector_status_connected : - connector_status_disconnected); - - return 0; -} - static int msm_dp_display_lttpr_init(struct msm_dp_display_private *dp, u8= *dpcd) { int rc, lttpr_count; @@ -415,6 +285,8 @@ static int msm_dp_display_process_hpd_high(struct msm_d= p_display_private *dp) dp->panel->dpcd, dp->panel->downstream_ports); =20 + dp->msm_dp_display.link_ready =3D true; + dp->msm_dp_display.psr_supported =3D dp->panel->psr_cap.version && psr_en= abled; =20 dp->audio_supported =3D info->has_audio; @@ -428,8 +300,6 @@ static int msm_dp_display_process_hpd_high(struct msm_d= p_display_private *dp) =20 msm_dp_link_reset_phy_params_vx_px(dp->link); =20 - msm_dp_display_send_hpd_notification(dp, true); - end: return rc; } @@ -484,24 +354,6 @@ static void msm_dp_display_host_deinit(struct msm_dp_d= isplay_private *dp) dp->core_initialized =3D false; } =20 -static int msm_dp_display_usbpd_configure_cb(struct device *dev) -{ - struct msm_dp_display_private *dp =3D dev_get_dp_display_private(dev); - - msm_dp_display_host_phy_init(dp); - - return msm_dp_display_process_hpd_high(dp); -} - -static int msm_dp_display_notify_disconnect(struct device *dev) -{ - struct msm_dp_display_private *dp =3D dev_get_dp_display_private(dev); - - msm_dp_display_send_hpd_notification(dp, false); - - return 0; -} - static void msm_dp_display_handle_video_request(struct msm_dp_display_priv= ate *dp) { if (dp->link->sink_request & DP_TEST_LINK_VIDEO_PATTERN) { @@ -510,34 +362,12 @@ static void msm_dp_display_handle_video_request(struc= t msm_dp_display_private *d } } =20 -static int msm_dp_display_handle_port_status_changed(struct msm_dp_display= _private *dp) -{ - int rc =3D 0; - - if (drm_dp_is_branch(dp->panel->dpcd) && dp->link->sink_count =3D=3D 0) { - drm_dbg_dp(dp->drm_dev, "sink count is zero, nothing to do\n"); - if (dp->hpd_state !=3D ST_DISCONNECTED) { - dp->hpd_state =3D ST_DISCONNECT_PENDING; - msm_dp_display_send_hpd_notification(dp, false); - } - } else { - if (dp->hpd_state =3D=3D ST_DISCONNECTED) { - dp->hpd_state =3D ST_MAINLINK_READY; - rc =3D msm_dp_display_process_hpd_high(dp); - if (rc) - dp->hpd_state =3D ST_DISCONNECTED; - } - } - - return rc; -} - static int msm_dp_display_handle_irq_hpd(struct msm_dp_display_private *dp) { u32 sink_request =3D dp->link->sink_request; =20 drm_dbg_dp(dp->drm_dev, "%d\n", sink_request); - if (dp->hpd_state =3D=3D ST_DISCONNECTED) { + if (!dp->msm_dp_display.link_ready) { if (sink_request & DP_LINK_STATUS_UPDATED) { drm_dbg_dp(dp->drm_dev, "Disconnected sink_request: %d\n", sink_request); @@ -554,76 +384,36 @@ static int msm_dp_display_handle_irq_hpd(struct msm_d= p_display_private *dp) return 0; } =20 -static int msm_dp_display_usbpd_attention_cb(struct device *dev) -{ - int rc =3D 0; - u32 sink_request; - struct msm_dp_display_private *dp =3D dev_get_dp_display_private(dev); - - /* check for any test request issued by sink */ - rc =3D msm_dp_link_process_request(dp->link); - if (!rc) { - sink_request =3D dp->link->sink_request; - drm_dbg_dp(dp->drm_dev, "hpd_state=3D%d sink_request=3D%d\n", - dp->hpd_state, sink_request); - if (sink_request & DS_PORT_STATUS_CHANGED) - rc =3D msm_dp_display_handle_port_status_changed(dp); - else - rc =3D msm_dp_display_handle_irq_hpd(dp); - } - - return rc; -} - static int msm_dp_hpd_plug_handle(struct msm_dp_display_private *dp) { - u32 state; int ret; struct platform_device *pdev =3D dp->msm_dp_display.pdev; =20 - msm_dp_aux_enable_xfers(dp->aux, true); - - mutex_lock(&dp->event_mutex); - - state =3D dp->hpd_state; - drm_dbg_dp(dp->drm_dev, "Before, type=3D%d hpd_state=3D%d\n", - dp->msm_dp_display.connector_type, state); - - if (state =3D=3D ST_DISPLAY_OFF) { - mutex_unlock(&dp->event_mutex); - return 0; - } - - if (state =3D=3D ST_MAINLINK_READY || state =3D=3D ST_CONNECTED) { - mutex_unlock(&dp->event_mutex); - return 0; - } + drm_dbg_dp(dp->drm_dev, "Before, type=3D%d\n", + dp->msm_dp_display.connector_type); =20 - if (state =3D=3D ST_DISCONNECT_PENDING) { - /* wait until ST_DISCONNECTED */ - msm_dp_add_event(dp, EV_HPD_PLUG_INT, 1); - mutex_unlock(&dp->event_mutex); + if (dp->msm_dp_display.link_ready) return 0; - } =20 ret =3D pm_runtime_resume_and_get(&pdev->dev); if (ret) { DRM_ERROR("failed to pm_runtime_resume\n"); - mutex_unlock(&dp->event_mutex); return ret; } =20 - ret =3D msm_dp_display_usbpd_configure_cb(&pdev->dev); + msm_dp_aux_enable_xfers(dp->aux, true); + + msm_dp_display_host_phy_init(dp); + + ret =3D msm_dp_display_process_hpd_high(dp); if (ret) { /* link train failed */ - dp->hpd_state =3D ST_DISCONNECTED; + dp->msm_dp_display.link_ready =3D false; + msm_dp_aux_enable_xfers(dp->aux, false); pm_runtime_put_sync(&pdev->dev); - } else { - dp->hpd_state =3D ST_MAINLINK_READY; } =20 - drm_dbg_dp(dp->drm_dev, "After, type=3D%d hpd_state=3D%d\n", - dp->msm_dp_display.connector_type, state); - mutex_unlock(&dp->event_mutex); + drm_dbg_dp(dp->drm_dev, "After, type=3D%d\n", + dp->msm_dp_display.connector_type); =20 /* uevent will complete connection part */ return 0; @@ -645,97 +435,69 @@ static void msm_dp_display_handle_plugged_change(stru= ct msm_dp *msm_dp_display, =20 static int msm_dp_hpd_unplug_handle(struct msm_dp_display_private *dp) { - u32 state; struct platform_device *pdev =3D dp->msm_dp_display.pdev; =20 - msm_dp_aux_enable_xfers(dp->aux, false); - - mutex_lock(&dp->event_mutex); - - state =3D dp->hpd_state; + dp->panel->video_test =3D false; =20 - drm_dbg_dp(dp->drm_dev, "Before, type=3D%d hpd_state=3D%d\n", - dp->msm_dp_display.connector_type, state); + msm_dp_aux_enable_xfers(dp->aux, false); =20 - /* unplugged, no more irq_hpd handle */ - msm_dp_del_event(dp, EV_IRQ_HPD_INT); + drm_dbg_dp(dp->drm_dev, "Before, type=3D%d\n", + dp->msm_dp_display.connector_type); =20 - if (state =3D=3D ST_DISCONNECTED) { - /* triggered by irq_hdp with sink_count =3D 0 */ - if (dp->link->sink_count =3D=3D 0) { - msm_dp_display_host_phy_exit(dp); - } - msm_dp_display_notify_disconnect(&dp->msm_dp_display.pdev->dev); - mutex_unlock(&dp->event_mutex); + if (!dp->msm_dp_display.link_ready) return 0; - } else if (state =3D=3D ST_DISCONNECT_PENDING) { - mutex_unlock(&dp->event_mutex); - return 0; - } else if (state =3D=3D ST_MAINLINK_READY) { - msm_dp_ctrl_off_link(dp->ctrl); + + /* triggered by irq_hdp with sink_count =3D 0 */ + if (dp->link->sink_count =3D=3D 0) msm_dp_display_host_phy_exit(dp); - dp->hpd_state =3D ST_DISCONNECTED; - msm_dp_display_notify_disconnect(&dp->msm_dp_display.pdev->dev); - pm_runtime_put_sync(&pdev->dev); - mutex_unlock(&dp->event_mutex); - return 0; - } =20 /* * We don't need separate work for disconnect as * connect/attention interrupts are disabled */ - msm_dp_display_notify_disconnect(&dp->msm_dp_display.pdev->dev); + if (!dp->msm_dp_display.is_edp) + drm_dp_set_subconnector_property(dp->msm_dp_display.connector, + connector_status_disconnected, + dp->panel->dpcd, + dp->panel->downstream_ports); =20 - if (state =3D=3D ST_DISPLAY_OFF) { - dp->hpd_state =3D ST_DISCONNECTED; - } else { - dp->hpd_state =3D ST_DISCONNECT_PENDING; - } + dp->msm_dp_display.link_ready =3D false; =20 /* signal the disconnect event early to ensure proper teardown */ msm_dp_display_handle_plugged_change(&dp->msm_dp_display, false); =20 - drm_dbg_dp(dp->drm_dev, "After, type=3D%d hpd_state=3D%d\n", - dp->msm_dp_display.connector_type, state); + drm_dbg_dp(dp->drm_dev, "After, type=3D%d\n", + dp->msm_dp_display.connector_type); =20 /* uevent will complete disconnection part */ pm_runtime_put_sync(&pdev->dev); - mutex_unlock(&dp->event_mutex); return 0; } =20 static int msm_dp_irq_hpd_handle(struct msm_dp_display_private *dp) { - u32 state; - - mutex_lock(&dp->event_mutex); + u32 sink_request; + int rc =3D 0; =20 /* irq_hpd can happen at either connected or disconnected state */ - state =3D dp->hpd_state; - drm_dbg_dp(dp->drm_dev, "Before, type=3D%d hpd_state=3D%d\n", - dp->msm_dp_display.connector_type, state); + drm_dbg_dp(dp->drm_dev, "Before, type=3D%d\n", + dp->msm_dp_display.connector_type); =20 - if (state =3D=3D ST_DISPLAY_OFF) { - mutex_unlock(&dp->event_mutex); - return 0; - } - - if (state =3D=3D ST_MAINLINK_READY || state =3D=3D ST_DISCONNECT_PENDING)= { - /* wait until ST_CONNECTED */ - msm_dp_add_event(dp, EV_IRQ_HPD_INT, 1); - mutex_unlock(&dp->event_mutex); - return 0; + /* check for any test request issued by sink */ + rc =3D msm_dp_link_process_request(dp->link); + if (!rc) { + 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); + else + rc =3D msm_dp_display_handle_irq_hpd(dp); } =20 - msm_dp_display_usbpd_attention_cb(&dp->msm_dp_display.pdev->dev); + drm_dbg_dp(dp->drm_dev, "After, type=3D%d\n", + dp->msm_dp_display.connector_type); =20 - drm_dbg_dp(dp->drm_dev, "After, type=3D%d hpd_state=3D%d\n", - dp->msm_dp_display.connector_type, state); - - mutex_unlock(&dp->event_mutex); - - return 0; + return rc; } =20 static void msm_dp_display_deinit_sub_modules(struct msm_dp_display_privat= e *dp) @@ -1011,12 +773,8 @@ void msm_dp_snapshot(struct msm_disp_state *disp_stat= e, struct msm_dp *dp) * power_on status before dumping DP registers to avoid crash due * to unclocked access */ - mutex_lock(&msm_dp_display->event_mutex); - - if (!dp->power_on) { - mutex_unlock(&msm_dp_display->event_mutex); + if (!dp->power_on) return; - } =20 msm_disp_snapshot_add_block(disp_state, msm_dp_display->ahb_len, msm_dp_display->ahb_base, "dp_ahb"); @@ -1026,8 +784,6 @@ void msm_dp_snapshot(struct msm_disp_state *disp_state= , struct msm_dp *dp) msm_dp_display->link_base, "dp_link"); msm_disp_snapshot_add_block(disp_state, msm_dp_display->p0_len, msm_dp_display->p0_base, "dp_p0"); - - mutex_unlock(&msm_dp_display->event_mutex); } =20 void msm_dp_display_set_psr(struct msm_dp *msm_dp_display, bool enter) @@ -1043,95 +799,6 @@ void msm_dp_display_set_psr(struct msm_dp *msm_dp_dis= play, bool enter) msm_dp_ctrl_set_psr(dp->ctrl, enter); } =20 -static int hpd_event_thread(void *data) -{ - struct msm_dp_display_private *msm_dp_priv; - unsigned long flag; - struct msm_dp_event *todo; - int timeout_mode =3D 0; - - msm_dp_priv =3D (struct msm_dp_display_private *)data; - - while (1) { - if (timeout_mode) { - wait_event_timeout(msm_dp_priv->event_q, - (msm_dp_priv->event_pndx =3D=3D msm_dp_priv->event_gndx) || - kthread_should_stop(), EVENT_TIMEOUT); - } else { - wait_event_interruptible(msm_dp_priv->event_q, - (msm_dp_priv->event_pndx !=3D msm_dp_priv->event_gndx) || - kthread_should_stop()); - } - - if (kthread_should_stop()) - break; - - spin_lock_irqsave(&msm_dp_priv->event_lock, flag); - todo =3D &msm_dp_priv->event_list[msm_dp_priv->event_gndx]; - if (todo->delay) { - struct msm_dp_event *todo_next; - - msm_dp_priv->event_gndx++; - msm_dp_priv->event_gndx %=3D DP_EVENT_Q_MAX; - - /* re enter delay event into q */ - todo_next =3D &msm_dp_priv->event_list[msm_dp_priv->event_pndx++]; - msm_dp_priv->event_pndx %=3D DP_EVENT_Q_MAX; - todo_next->event_id =3D todo->event_id; - todo_next->delay =3D todo->delay - 1; - - /* clean up older event */ - todo->event_id =3D EV_NO_EVENT; - todo->delay =3D 0; - - /* switch to timeout mode */ - timeout_mode =3D 1; - spin_unlock_irqrestore(&msm_dp_priv->event_lock, flag); - continue; - } - - /* timeout with no events in q */ - if (msm_dp_priv->event_pndx =3D=3D msm_dp_priv->event_gndx) { - spin_unlock_irqrestore(&msm_dp_priv->event_lock, flag); - continue; - } - - msm_dp_priv->event_gndx++; - msm_dp_priv->event_gndx %=3D DP_EVENT_Q_MAX; - timeout_mode =3D 0; - spin_unlock_irqrestore(&msm_dp_priv->event_lock, flag); - - switch (todo->event_id) { - case EV_HPD_PLUG_INT: - msm_dp_hpd_plug_handle(msm_dp_priv); - break; - case EV_HPD_UNPLUG_INT: - msm_dp_hpd_unplug_handle(msm_dp_priv); - break; - case EV_IRQ_HPD_INT: - msm_dp_irq_hpd_handle(msm_dp_priv); - break; - default: - break; - } - } - - return 0; -} - -static int msm_dp_hpd_event_thread_start(struct msm_dp_display_private *ms= m_dp_priv) -{ - /* set event q to empty */ - msm_dp_priv->event_gndx =3D 0; - msm_dp_priv->event_pndx =3D 0; - - msm_dp_priv->ev_tsk =3D kthread_run(hpd_event_thread, msm_dp_priv, "dp_hp= d_handler"); - if (IS_ERR(msm_dp_priv->ev_tsk)) - return PTR_ERR(msm_dp_priv->ev_tsk); - - return 0; -} - /** * msm_dp_bridge_detect - callback to determine if connector is connected * @@ -1159,26 +826,31 @@ enum drm_connector_status msm_dp_bridge_detect(struc= t drm_bridge *bridge, if (!dp->link_ready) return status; =20 - msm_dp_aux_enable_xfers(priv->aux, true); - ret =3D 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; } =20 + msm_dp_aux_enable_xfers(priv->aux, true); + ret =3D msm_dp_aux_is_link_connected(priv->aux); - if (dp->internal_hpd && !ret) + if (!ret) { + DRM_DEBUG_DP("aux not connected\n"); goto end; + } =20 ret =3D drm_dp_read_dpcd_caps(priv->aux, dpcd); - if (ret) + if (ret) { + DRM_DEBUG_DP("failed to read caps\n"); goto end; + } =20 ret =3D drm_dp_read_desc(priv->aux, &desc, drm_dp_is_branch(dpcd)); - if (ret) + if (ret) { + DRM_DEBUG_DP("failed to read desc\n"); goto end; + } =20 status =3D connector_status_connected; if (drm_dp_read_sink_count_cap(connector, dpcd, &desc)) { @@ -1198,36 +870,20 @@ enum drm_connector_status msm_dp_bridge_detect(struc= t drm_bridge *bridge, static irqreturn_t msm_dp_display_irq_handler(int irq, void *dev_id) { struct msm_dp_display_private *dp =3D dev_id; - irqreturn_t ret =3D IRQ_NONE; u32 hpd_isr_status; - - if (!dp) { - DRM_ERROR("invalid data\n"); - return IRQ_NONE; - } + unsigned long flags; + irqreturn_t ret =3D IRQ_HANDLED; =20 hpd_isr_status =3D msm_dp_aux_get_hpd_intr_status(dp->aux); =20 if (hpd_isr_status & 0x0F) { drm_dbg_dp(dp->drm_dev, "type=3D%d isr=3D0x%x\n", dp->msm_dp_display.connector_type, hpd_isr_status); - /* hpd related interrupts */ - if (hpd_isr_status & DP_DP_HPD_PLUG_INT_MASK) - msm_dp_add_event(dp, EV_HPD_PLUG_INT, 0); - - if (hpd_isr_status & DP_DP_IRQ_HPD_INT_MASK) { - msm_dp_add_event(dp, EV_IRQ_HPD_INT, 0); - } =20 - if (hpd_isr_status & DP_DP_HPD_REPLUG_INT_MASK) { - msm_dp_add_event(dp, EV_HPD_UNPLUG_INT, 0); - msm_dp_add_event(dp, EV_HPD_PLUG_INT, 3); - } - - if (hpd_isr_status & DP_DP_HPD_UNPLUG_INT_MASK) - msm_dp_add_event(dp, EV_HPD_UNPLUG_INT, 0); - - ret =3D IRQ_HANDLED; + spin_lock_irqsave(&dp->irq_thread_lock, flags); + dp->hpd_isr_status |=3D hpd_isr_status; + ret =3D IRQ_WAKE_THREAD; + spin_unlock_irqrestore(&dp->irq_thread_lock, flags); } =20 /* DP controller isr */ @@ -1236,6 +892,36 @@ static irqreturn_t msm_dp_display_irq_handler(int irq= , void *dev_id) return ret; } =20 +static irqreturn_t msm_dp_display_irq_thread(int irq, void *dev_id) +{ + struct msm_dp_display_private *dp =3D dev_id; + irqreturn_t ret =3D IRQ_NONE; + unsigned long flags; + u32 hpd_isr_status; + + spin_lock_irqsave(&dp->irq_thread_lock, flags); + hpd_isr_status =3D dp->hpd_isr_status; + dp->hpd_isr_status =3D 0; + spin_unlock_irqrestore(&dp->irq_thread_lock, flags); + + if (hpd_isr_status & DP_DP_HPD_UNPLUG_INT_MASK) + drm_bridge_hpd_notify(dp->msm_dp_display.bridge, + connector_status_disconnected); + + if (hpd_isr_status & DP_DP_HPD_PLUG_INT_MASK) + drm_bridge_hpd_notify(dp->msm_dp_display.bridge, + connector_status_connected); + + /* Send HPD as connected and distinguish it in the notifier */ + if (hpd_isr_status & DP_DP_IRQ_HPD_INT_MASK) + drm_bridge_hpd_notify(dp->msm_dp_display.bridge, + connector_status_connected); + + ret =3D IRQ_HANDLED; + + return ret; +} + static int msm_dp_display_request_irq(struct msm_dp_display_private *dp) { int rc =3D 0; @@ -1247,9 +933,13 @@ static int msm_dp_display_request_irq(struct msm_dp_d= isplay_private *dp) return dp->irq; } =20 - rc =3D devm_request_irq(&pdev->dev, dp->irq, msm_dp_display_irq_handler, - IRQF_TRIGGER_HIGH|IRQF_NO_AUTOEN, - "dp_display_isr", dp); + spin_lock_init(&dp->irq_thread_lock); + irq_set_status_flags(dp->irq, IRQ_NOAUTOEN); + rc =3D devm_request_threaded_irq(&pdev->dev, dp->irq, + msm_dp_display_irq_handler, + msm_dp_display_irq_thread, + IRQ_TYPE_LEVEL_HIGH, + "dp_display_isr", dp); =20 if (rc < 0) { DRM_ERROR("failed to request IRQ%u: %d\n", @@ -1429,6 +1119,7 @@ static int msm_dp_display_probe(struct platform_devic= e *pdev) dp->wide_bus_supported =3D desc->wide_bus_supported; dp->msm_dp_display.is_edp =3D (dp->msm_dp_display.connector_type =3D=3D DRM_MODE_CONNECTOR_eDP); + dp->hpd_isr_status =3D 0; =20 rc =3D msm_dp_display_get_io(dp); if (rc) @@ -1440,11 +1131,6 @@ static int msm_dp_display_probe(struct platform_devi= ce *pdev) return -EPROBE_DEFER; } =20 - /* setup event q */ - mutex_init(&dp->event_mutex); - init_waitqueue_head(&dp->event_q); - spin_lock_init(&dp->event_lock); - /* Store DP audio handle inside DP display */ dp->msm_dp_display.msm_dp_audio =3D dp->audio; =20 @@ -1640,7 +1326,6 @@ void msm_dp_bridge_atomic_enable(struct drm_bridge *d= rm_bridge, struct msm_dp *dp =3D msm_dp_bridge->msm_dp_display; int rc =3D 0; struct msm_dp_display_private *msm_dp_display; - u32 hpd_state; bool force_link_train =3D false; =20 msm_dp_display =3D container_of(dp, struct msm_dp_display_private, msm_dp= _display); @@ -1652,29 +1337,21 @@ void msm_dp_bridge_atomic_enable(struct drm_bridge = *drm_bridge, if (dp->is_edp) msm_dp_hpd_plug_handle(msm_dp_display); =20 - mutex_lock(&msm_dp_display->event_mutex); if (pm_runtime_resume_and_get(&dp->pdev->dev)) { DRM_ERROR("failed to pm_runtime_resume\n"); - mutex_unlock(&msm_dp_display->event_mutex); return; } =20 - hpd_state =3D msm_dp_display->hpd_state; - if (hpd_state !=3D ST_DISPLAY_OFF && hpd_state !=3D ST_MAINLINK_READY) { - mutex_unlock(&msm_dp_display->event_mutex); + 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); - mutex_unlock(&msm_dp_display->event_mutex); return; } =20 - hpd_state =3D msm_dp_display->hpd_state; - - if (hpd_state =3D=3D ST_DISPLAY_OFF) { + if (dp->link_ready && !dp->power_on) { msm_dp_display_host_phy_init(msm_dp_display); force_link_train =3D true; } @@ -1694,11 +1371,7 @@ void msm_dp_bridge_atomic_enable(struct drm_bridge *= drm_bridge, msm_dp_display_disable(msm_dp_display); } =20 - /* completed connection */ - msm_dp_display->hpd_state =3D ST_CONNECTED; - drm_dbg_dp(dp->drm_dev, "type=3D%d Done\n", dp->connector_type); - mutex_unlock(&msm_dp_display->event_mutex); } =20 void msm_dp_bridge_atomic_disable(struct drm_bridge *drm_bridge, @@ -1718,7 +1391,6 @@ void msm_dp_bridge_atomic_post_disable(struct drm_bri= dge *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; - u32 hpd_state; struct msm_dp_display_private *msm_dp_display; =20 msm_dp_display =3D container_of(dp, struct msm_dp_display_private, msm_dp= _display); @@ -1726,27 +1398,14 @@ void msm_dp_bridge_atomic_post_disable(struct drm_b= ridge *drm_bridge, if (dp->is_edp) msm_dp_hpd_unplug_handle(msm_dp_display); =20 - mutex_lock(&msm_dp_display->event_mutex); - - hpd_state =3D msm_dp_display->hpd_state; - if (hpd_state !=3D ST_DISCONNECT_PENDING && hpd_state !=3D ST_CONNECTED) - drm_dbg_dp(dp->drm_dev, "type=3D%d wrong hpd_state=3D%d\n", - dp->connector_type, hpd_state); + if (!dp->link_ready) + drm_dbg_dp(dp->drm_dev, "type=3D%d is disconnected\n", dp->connector_typ= e); =20 msm_dp_display_disable(msm_dp_display); =20 - hpd_state =3D msm_dp_display->hpd_state; - if (hpd_state =3D=3D ST_DISCONNECT_PENDING) { - /* completed disconnection */ - msm_dp_display->hpd_state =3D ST_DISCONNECTED; - } else { - msm_dp_display->hpd_state =3D ST_DISPLAY_OFF; - } - drm_dbg_dp(dp->drm_dev, "type=3D%d Done\n", dp->connector_type); =20 pm_runtime_put_sync(&dp->pdev->dev); - mutex_unlock(&msm_dp_display->event_mutex); } =20 void msm_dp_bridge_mode_set(struct drm_bridge *drm_bridge, @@ -1802,18 +1461,13 @@ void msm_dp_bridge_hpd_enable(struct drm_bridge *br= idge) * step-4: DP PHY is initialized at plugin handler before link training * */ - mutex_lock(&dp->event_mutex); if (pm_runtime_resume_and_get(&msm_dp_display->pdev->dev)) { DRM_ERROR("failed to resume power\n"); - mutex_unlock(&dp->event_mutex); return; } =20 msm_dp_aux_hpd_enable(dp->aux); msm_dp_aux_hpd_intr_enable(dp->aux); - - msm_dp_display->internal_hpd =3D true; - mutex_unlock(&dp->event_mutex); } =20 void msm_dp_bridge_hpd_disable(struct drm_bridge *bridge) @@ -1822,15 +1476,10 @@ void msm_dp_bridge_hpd_disable(struct drm_bridge *b= ridge) struct msm_dp *msm_dp_display =3D msm_dp_bridge->msm_dp_display; struct msm_dp_display_private *dp =3D container_of(msm_dp_display, struct= msm_dp_display_private, msm_dp_display); =20 - mutex_lock(&dp->event_mutex); - msm_dp_aux_hpd_intr_disable(dp->aux); msm_dp_aux_hpd_disable(dp->aux); =20 - msm_dp_display->internal_hpd =3D false; - pm_runtime_put_sync(&msm_dp_display->pdev->dev); - mutex_unlock(&dp->event_mutex); } =20 void msm_dp_bridge_hpd_notify(struct drm_bridge *bridge, @@ -1840,13 +1489,31 @@ void msm_dp_bridge_hpd_notify(struct drm_bridge *br= idge, struct msm_dp_bridge *msm_dp_bridge =3D to_dp_bridge(bridge); struct msm_dp *msm_dp_display =3D msm_dp_bridge->msm_dp_display; struct msm_dp_display_private *dp =3D container_of(msm_dp_display, struct= msm_dp_display_private, msm_dp_display); + u32 hpd_link_status =3D 0; =20 - /* Without next_bridge interrupts are handled by the DP core directly */ - if (msm_dp_display->internal_hpd) + if (pm_runtime_resume_and_get(&msm_dp_display->pdev->dev)) { + DRM_ERROR("failed to pm_runtime_resume\n"); return; + } + + hpd_link_status =3D msm_dp_aux_is_link_connected(dp->aux); =20 - if (!msm_dp_display->link_ready && status =3D=3D connector_status_connect= ed) - msm_dp_add_event(dp, EV_HPD_PLUG_INT, 0); - else if (msm_dp_display->link_ready && status =3D=3D connector_status_dis= connected) - msm_dp_add_event(dp, EV_HPD_UNPLUG_INT, 0); + drm_dbg_dp(dp->drm_dev, "type=3D%d link hpd_link_status=3D0x%x, link_read= y=3D%d, status=3D%d\n", + msm_dp_display->connector_type, hpd_link_status, + msm_dp_display->link_ready, status); + + 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); + } else if (hpd_link_status =3D=3D ISR_IRQ_HPD_PULSE_COUNT) { + msm_dp_irq_hpd_handle(dp); + } else { + msm_dp_hpd_plug_handle(dp); + } + } else { + msm_dp_hpd_unplug_handle(dp); + } + + 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 60094061c102..d2d3d61eb0b0 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.h +++ b/drivers/gpu/drm/msm/dp/dp_display.h @@ -22,7 +22,6 @@ struct msm_dp { bool power_on; unsigned int connector_type; bool is_edp; - bool internal_hpd; =20 struct msm_dp_audio *msm_dp_audio; bool psr_supported; --=20 2.47.3 From nobody Sun May 24 18:41:55 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 5C20427F4F5 for ; Sun, 24 May 2026 10:33:54 +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=1779618836; cv=none; b=RqOO2yPca4CW4+kncHlthstH6/aSkpO41YAreEC9hvPS4u1XUwf+Y+WAN1syuZdbyBPXHsa7+z4AfdeEQcGb/9JyUoKuNIbP+nPbVUYdwzDUn1lGtVfJUbVOQdoA/3y2MRWRPPQBE6f/ccNpRCV8oDriBADR+TxEGuku/pFXq9w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779618836; c=relaxed/simple; bh=4llMbrlgApFIlR+Hc0In89bnvKzWU3FERCtTV4y9HD8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mRaTsAVLTomKIGE1wXaS0160FwHabsTfpVxjxAs1WoR2L51y0zRGSuLtFJm54vvYMHe44Vu36g0DVy5sZiLLJjoN2lvzf6cWb+BN8P+VoHCeun8v4/47+uGiNfQ6IHXDAZsCL0z0SakH3S+1VdIPm6wUt1+E7hz1J27nRy9KKFg= 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=nJePeVtl; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=MSSQ/tid; 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="nJePeVtl"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="MSSQ/tid" 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 64NHIFDM1346800 for ; Sun, 24 May 2026 10:33:53 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= cDgNJal3WXOXjG3gtCnualVwCHXb/rJSUqjbf1sfrX8=; b=nJePeVtl5lp5EcK1 +l9jZFE8OE8tU0lteK2FfwEiFX03jNKPf0XKH9jWxDZwpYPO+FkujRR0oeAPlpcq yLV2Fzsa2f44bhPUqv9sG2eqH5+a9QJFRqBqWgd3aXHTghgrUsXOzVuwq2XWHQ/8 S/R5U96g4ogI/rHwYtdCNukOQReuoPHCxpcMTAQ7sq52B/fu6VDJxQaIU6Dq0ooA sBp/Qn9FkfTN1IHyiN7NwH7HLe8pvxkZAeFtMbshFmi+QObVV0tfmP7ZZ+i7syCY wl/TDqOeGcxdOUxmOs2Lzj878kVSRI7m5VHRCGm7RCdkoN7JGLVAZ4py1jJR8IOd SqtnMA== Received: from mail-ua1-f70.google.com (mail-ua1-f70.google.com [209.85.222.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4eb5h9jt77-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sun, 24 May 2026 10:33:53 +0000 (GMT) Received: by mail-ua1-f70.google.com with SMTP id a1e0cc1a2514c-95fd70270f7so13430751241.1 for ; Sun, 24 May 2026 03:33:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1779618832; x=1780223632; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=cDgNJal3WXOXjG3gtCnualVwCHXb/rJSUqjbf1sfrX8=; b=MSSQ/tidjcxLNlafoKKz1idF9s3AdrliwFc6mYdTIPfLAZBM+7s+bYgDn6E+yw5tfg Zyr1i2nHpHy4BDOkMSAibPvzMiPMCXofl4FqYArg8i0R2QUqvetHjEAVrEJq8s32rWST fgKIWqe5sbVw6aN25ADC5N1KTZ+P7b273uZFxehooRTa/NsMn8vM2ynstjXBhzw9zV1S +GvLC7TFmSZqejbCBteyUUosZ/LxlT+Va/+RqmyxvVk9KgYwGaLGJW84D2KksUyyIUlA rTcDh/SIulIYU0VF/uoWM1AKJuq1Mju5xGafB7cDA8rAqPdy/KKC/NsvoUbnuox29UI7 5vJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779618832; x=1780223632; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=cDgNJal3WXOXjG3gtCnualVwCHXb/rJSUqjbf1sfrX8=; b=JYk6SwXNpFljb+4WwSFW5Os0L4RTFsoKOFKldLWznwRdYIP7rqzSvuGj0+6iusMUUJ RzoxlOUehsm4W8o01nSDuB9S1cMJK2wdnE0U1jNKUh4by36Q50ZCcMqyhTiHebBwZ0mG 83djALTUR2pObtyZiS6jRRr4qBM30v7ISednHdDFjct9cZPRg1/qczY5fYyElYtx8XO7 ivGvhEQ2iUZZ99Me3oJ82DT59pMOfKNyzRpN5FFGLJev5ZfIq2ZYn/Mmn3La8P2Ukim3 xLL9IZ0W5kbDOhMBQsiwOIj1aTFi+t3GT+Glm93lVc6fdOAPsTU4V8PohMxoIMrxmDOG N7aA== X-Forwarded-Encrypted: i=1; AFNElJ/SWDgx54/yv9+07+Ykxuj8wlM8XrhqUmouwmbHRgiwi4JTO2Lr7xRWzcjpEsdGbRggzBk4WlIilM4y28k=@vger.kernel.org X-Gm-Message-State: AOJu0YzIY8cj4GuRciK9iP8R+s9YEvhsH7gXsKxsSEYYeyIz/ash2t5x DKcRB5A1tlYqunXN13nI6rl3C0/s5MUfvM//gsGSXKQXuHoHLQl4L4OLwuz7anfOlTRUsMlBq7g PpXgYoz9DwdPgsRM3L1mBFv45sDg0TY9nMsADdO5Kmes+AYukgLoGbPt7DGAbfoGftLw= X-Gm-Gg: Acq92OGTW2sywhxtrFaxOuBmCNovs2Wz4NEl6H+H4Xbz0kT3uZi9vh8GLZmO0TyGjG0 ltKEruYZHduHaZ/YmFXBfbNHc9ciX1oTlZy4O22g7wX82v5K76a/sy+VB+5j5y+VxM54NDZf+0L jQrOlLUI69M4qnwm8LK50xsWzJ0O2asUFS/ZBhmx/aCPm2cOw3P2RrSwqgEHeMOpYqrECCsGLxa hJEa4LML/tr1YP1CmyTQpkyqwCSY7XmlZz1ccbN214LZ80WKVYZXM9mvEW8l4i3vcd4ZuGftqjT mcAxTwD8Yn/3a3H3urhQ4ldI/ipAtPp/orPYPWXi+71ewMQskB3qabTO9/IRm5KhPn7DarDgruY KttshyqoLBBuMPlpjiQbYvHgBLgziQ6gj9b8UYqKxz7ywkdndzuwHhT0Zeqle+JdZfUAelTPlrY Roou40r3lbszGAyClgqXKl/hp1E51M/ukqyfc= X-Received: by 2002:a05:6102:2acf:b0:660:cba2:b6a5 with SMTP id ada2fe7eead31-67c7b9af5afmr5183802137.7.1779618832519; Sun, 24 May 2026 03:33:52 -0700 (PDT) X-Received: by 2002:a05:6102:2acf:b0:660:cba2:b6a5 with SMTP id ada2fe7eead31-67c7b9af5afmr5183797137.7.1779618832144; Sun, 24 May 2026 03:33:52 -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-5aa32cba880sm1816148e87.32.2026.05.24.03.33.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 May 2026 03:33:50 -0700 (PDT) From: Dmitry Baryshkov Date: Sun, 24 May 2026 13:33:36 +0300 Subject: [PATCH v6 08/10] drm/msm/dp: Add sink_count to debug logs 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: <20260524-hpd-refactor-v6-8-cf3ab488dd7b@oss.qualcomm.com> References: <20260524-hpd-refactor-v6-0-cf3ab488dd7b@oss.qualcomm.com> In-Reply-To: <20260524-hpd-refactor-v6-0-cf3ab488dd7b@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Kuogee Hsieh , Yongxing Mou Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Jessica Zhang , Val Packett X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3448; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=PPASzQobCBYdb9dmAmZWGNYYaeV5Anue8MN6gudi0n8=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqEtP9VIdNVQybDZfFejeH8aD/nykS731k0+PtY PPkI7hBIn2JATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCahLT/QAKCRCLPIo+Aiko 1W7LB/wJ0X1mFHNE5Aa8udZzN774lvkGCtFHmzn0/lqay1eqC807JcY8C5QC3erM1r/R6Rhft9G JZYBnGQ1IbI76o33dfqiVFzFuS1CyLO2+fAqSWruvyJP7nqK8PDIcEv4mkWAgTLIvTvxFBg2w5I 9eAYT5JtObbTkZnyFNC0PeI7ikPaKWDwWs2UcXyA5RjEd4xrgyyORG1A66FyVKZRJcksTUrhHid UqaQsfq0df2kodpQzB5ddzhnTs4ToMT0EPE2znSx5Db9CON2laJggzolSm2db1ZCxsBtSdfWAdf ThL6aihfKYqwe5Mf1WbI1FyPz9GoPyipL4BaFifbqu7niN4A X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-ORIG-GUID: hEDx1YO-tMpZb4sJJRwfsX7r1-dQX_Bp X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTI0MDEwNyBTYWx0ZWRfX/6NFfHeFmjKa SARk6TmzVtlJYu9xZS3XZyM8mTH60LfsQSNJ0zgvEYiYGYniGbPYq3v5efb/7XYJr6pkg6P005c kUy+VJPLzcPtGpmx+1TfOxW7jt+NEj4rDNyLNak7KDBDmpntgqNz6MvSwTBe3DyvUpDxKLGcN77 WswbfTjVENpeS9TS7ayZzLj16k0s4DpJQcbgfEFvNZZU09RDs6Xl6oscniOAbejN3XhSTP/vypE A3/WcZcFEJCLqulSJ4lh/1EhaeY+jWQsDqrpmJyz8bQDXms/+Hcy9HK2pL7nTTlJQokhzBL0DZT eqWQ2rufF7neZ+m5pO+oSpo2bEtMyMDEbQqKRFgoW03A+VVq8PLG0DweJI/S0ebZrS02mSzytIh URkKwUStRZOWdAPk+4d6jic97IHBNoH8vmK0BTDfCaw2M5ysx6jYl/lxG/QlRpx/jIyDf/oqz+r OJmiWqqSW1zdo2Kpm8w== X-Authority-Analysis: v=2.4 cv=H7jrBeYi c=1 sm=1 tr=0 ts=6a12d411 cx=c_pps a=R6oCqFB+Yf/t2GF8e0/dFg==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=EUspDBNiAAAA:8 a=D6o9UKO1UCu5gje6phcA:9 a=QEXdDO2ut3YA:10 a=TD8TdBvy0hsOASGTdmB-:22 X-Proofpoint-GUID: hEDx1YO-tMpZb4sJJRwfsX7r1-dQX_Bp X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-24_03,2026-05-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 adultscore=0 suspectscore=0 clxscore=1015 bulkscore=0 impostorscore=0 spamscore=0 phishscore=0 priorityscore=1501 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605240107 From: Jessica Zhang Add sink count to the debug logs for [un]plug and HPD IRQ handling. Signed-off-by: Jessica Zhang [DB: dropped link_ready handling] Tested-by: Val Packett # x1e80100-dell-latitude-7455 Tested-by: Yongxing Mou # Hamoa IOT EVK, QC= S8300 Ride Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/dp/dp_display.c | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index cdf8e618838a..fc41ac38556d 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -389,8 +389,9 @@ static int msm_dp_hpd_plug_handle(struct msm_dp_display= _private *dp) int ret; struct platform_device *pdev =3D dp->msm_dp_display.pdev; =20 - drm_dbg_dp(dp->drm_dev, "Before, type=3D%d\n", - dp->msm_dp_display.connector_type); + drm_dbg_dp(dp->drm_dev, "Before, type=3D%d sink_count=3D%d\n", + dp->msm_dp_display.connector_type, + dp->link->sink_count); =20 if (dp->msm_dp_display.link_ready) return 0; @@ -412,8 +413,9 @@ static int msm_dp_hpd_plug_handle(struct msm_dp_display= _private *dp) pm_runtime_put_sync(&pdev->dev); } =20 - drm_dbg_dp(dp->drm_dev, "After, type=3D%d\n", - dp->msm_dp_display.connector_type); + drm_dbg_dp(dp->drm_dev, "After, type=3D%d sink_count=3D%d\n", + dp->msm_dp_display.connector_type, + dp->link->sink_count); =20 /* uevent will complete connection part */ return 0; @@ -441,8 +443,9 @@ static int msm_dp_hpd_unplug_handle(struct msm_dp_displ= ay_private *dp) =20 msm_dp_aux_enable_xfers(dp->aux, false); =20 - drm_dbg_dp(dp->drm_dev, "Before, type=3D%d\n", - dp->msm_dp_display.connector_type); + drm_dbg_dp(dp->drm_dev, "Before, type=3D%d sink_count=3D%d\n", + dp->msm_dp_display.connector_type, + dp->link->sink_count); =20 if (!dp->msm_dp_display.link_ready) return 0; @@ -466,8 +469,9 @@ static int msm_dp_hpd_unplug_handle(struct msm_dp_displ= ay_private *dp) /* signal the disconnect event early to ensure proper teardown */ msm_dp_display_handle_plugged_change(&dp->msm_dp_display, false); =20 - drm_dbg_dp(dp->drm_dev, "After, type=3D%d\n", - dp->msm_dp_display.connector_type); + drm_dbg_dp(dp->drm_dev, "After, type=3D%d, sink_count=3D%d\n", + dp->msm_dp_display.connector_type, + dp->link->sink_count); =20 /* uevent will complete disconnection part */ pm_runtime_put_sync(&pdev->dev); @@ -480,8 +484,9 @@ static int msm_dp_irq_hpd_handle(struct msm_dp_display_= private *dp) int rc =3D 0; =20 /* irq_hpd can happen at either connected or disconnected state */ - drm_dbg_dp(dp->drm_dev, "Before, type=3D%d\n", - dp->msm_dp_display.connector_type); + drm_dbg_dp(dp->drm_dev, "Before, type=3D%d, sink_count=3D%d\n", + dp->msm_dp_display.connector_type, + dp->link->sink_count); =20 /* check for any test request issued by sink */ rc =3D msm_dp_link_process_request(dp->link); @@ -494,8 +499,9 @@ static int msm_dp_irq_hpd_handle(struct msm_dp_display_= private *dp) rc =3D msm_dp_display_handle_irq_hpd(dp); } =20 - drm_dbg_dp(dp->drm_dev, "After, type=3D%d\n", - dp->msm_dp_display.connector_type); + drm_dbg_dp(dp->drm_dev, "After, type=3D%d, sink_count=3D%d\n", + dp->msm_dp_display.connector_type, + dp->link->sink_count); =20 return rc; } --=20 2.47.3 From nobody Sun May 24 18:41:55 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 11B22391E64 for ; Sun, 24 May 2026 10:33:56 +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=1779618840; cv=none; b=jONmI19+Wh+2HBAh9Bi24TDcFQX38uXb5dGE4SHSISqQmnZP3qKqFAJJwelOig5gYzSgaLL0+58OTYSjGPiaY4jPhMNjpZhHx+0JNg3f/4x87nI5WRVpxToAvk1bXG5Wen4E7LPF8YPwOXg9DmlYMziwLI++RbvVvKd3YnE5mlk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779618840; c=relaxed/simple; bh=Ub7kHvaTdp6oYgxq2bkDcUbPSdDHAbn5Cl++E4B/7mw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tyVXIYc6hltP/Oja6oiddGmDzec8oDP6naJutuFiKK4aTwwicQox6O244Im3ZGLaj2wx8eZDzrJaWbQM4ISiRg1Su0pawfcfCUgddGWZ/AAjCv/O+nT/QZLUOqsAV0VifnBDxHAIHnzsA5ztbtFo5uLAaD9zf6p4WRPdI5qChtM= 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=VGMSB7ub; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=ji7gXF6O; 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="VGMSB7ub"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="ji7gXF6O" 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 64NMSYRl3233728 for ; Sun, 24 May 2026 10:33:55 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= TB7URF+14neWSZzv3TOvuIj1hBLgUA7+iXkCJmncifE=; b=VGMSB7ubvkAT2fFd qcG4OGDcNzPLyat9WBkR7/mX228M1pYuntxRAGrAJ02sVr0gVWg7pQeZnCcXIgNx 6JdB1AC+L/sLZt/L1YAz61ugZWYRTUOtrE8gvLSD2jTTgiHPIUVPFNyWCudKhdRI E5BsDuFayNMbFod85xoyAoXkT0SzzBBUZTn6QV0+u+3NCd7jRBLq+pS/tNWGAJqi 1kZ0fqVzbzWh/i5JEd/BTmgVQfqYWU1CmiV6lpYqmRkwM8iZkdd7ODE16zsXEZFp DI6tERRuj9+7/eytnz5lvxhp+6iRREySTVnla7p+BhwalpNl0Ao2sWb4JmIS3pub HJ5KhA== Received: from mail-ua1-f69.google.com (mail-ua1-f69.google.com [209.85.222.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ebba0t69q-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sun, 24 May 2026 10:33:55 +0000 (GMT) Received: by mail-ua1-f69.google.com with SMTP id a1e0cc1a2514c-9614c6ac238so1584224241.3 for ; Sun, 24 May 2026 03:33:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1779618834; x=1780223634; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=TB7URF+14neWSZzv3TOvuIj1hBLgUA7+iXkCJmncifE=; b=ji7gXF6OEidOOguMUejyIf0rq9kitpBQlxi5qg3PtsNjJZvNmqDRblqaDllt7pSzpt a+YfJN3IZ0GOJ4be7puHszL56mRYNLWyklCKHuK97t+pvALLyPzP5Wd70bLe/1fElnjT 2v3jt50G/YdUvucaDtsqdnrknIUtaaLp/9VV3Uz3UfaMwAwhXoVYZeCsqsihwA4MI7pO 8uocSU3T6A6O19vY9ccRWQtv9vva6ie2kmPZA8VD8pdus8DOZcjblyy719rOWE9Py1i4 40OjZkD6w9gZRVcCYysB25OKdGDcCx7V3TlWTUnmn0oW+xwkaaCVjzaOmrct5DZ4Q5uV 9qrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779618834; x=1780223634; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=TB7URF+14neWSZzv3TOvuIj1hBLgUA7+iXkCJmncifE=; b=QnTqxftX0YYHmKTk8paZz6bgyJV0Jl3qRgp2oxiW/uEQ3RidcuROvzxekaxNzhQ1c9 Xc0GAuc/i9SiatXRxLitTNFD9Jdboj44c7Mc0L3u6LoYNFtr9rQzJivU2mUE1uIZYfcI Wt9Zi7kbEQaJrkAwyRfoLgcxgBKUvPUvNcrPC3/NWWZGQ0LVuF6TZJPyokBgEv8r/uSD 2z2brdiQiSzYGh+8AQPM5ieRqifrjExORYzCg1KuSzxVFXKgxP0MsiH03BQeAKDBoNsd xIjpl6o+qYFdlPRDXFmnLIN0gLnnsWarWxJkF7g30a7w58Q/zddRSnr83emUGuE3WWvy Rx9Q== X-Forwarded-Encrypted: i=1; AFNElJ9vhF+BDyrJwCaJSkv35FsM2xB/1w4UTvhyGWyNgvQNYRCJvJTBjDZEzd7POt2VLTh88boHZWpSAStaDek=@vger.kernel.org X-Gm-Message-State: AOJu0Yz6D/tivoYgYZrf24VGoULrzvSU98iw9Ji2BzYwye39XimpQtBp /j4WpOjboUKbbfkBKhnTbAiwejbU6XE46P3rCrKs1S/nteBBt6ZRGXG5Hw/UBzwKT1pgB0AqUnz t/+tlrhqvItf6KPZLaM856GSa5ZlUKbbhh6O3zHsXoYF9hnCbDHn8y2gEMS3Z/88GDUU= X-Gm-Gg: Acq92OHHo2aVa/UBJUHpIDIfAPob9RZYQPtzKTikqSrWJ84FB3aU22HqiUSWRc7nChL LBzZx6pt1FU3fMhA7FnLTFmocsz+ITauxI0Shm12jjthC4butXLEmJY/FSTW5wglFKN+czYwPOd 0qUhGXBC7I2Xjgp5yWft5lUAsWaDV72OVlHkiOUvLQ8/Ak8Fph8z10upNyMCqSyTtO1rfj8pzv2 TKiewaDcbd/k6wv4MoZ0zHgVW+NzcQmpSlp1WbBL4QpAXgnyOurIJpaF1T7proDvuVNIW66ozsE VRjwQyJk8GMBF8r8vJrNtd+UKXwXJBbp2p4kdQoXZL3b5lF5dZjlOSYKUpl07jmZ0p6fZvmQAjw HrIv4OCDLBpGrI7XavsKBU/1j1khpcOV00wjm3tLftozMfqNlZkp4QYMsysQs3AarXF+2xJ4agD hntFYpeqtqjrKaK5BEf4sy4aFV1H1+jUONNAY= X-Received: by 2002:a05:6102:32d5:b0:65a:fee5:cf20 with SMTP id ada2fe7eead31-67c77a162ccmr5223994137.11.1779618834299; Sun, 24 May 2026 03:33:54 -0700 (PDT) X-Received: by 2002:a05:6102:32d5:b0:65a:fee5:cf20 with SMTP id ada2fe7eead31-67c77a162ccmr5223986137.11.1779618833880; Sun, 24 May 2026 03:33:53 -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-5aa32cba880sm1816148e87.32.2026.05.24.03.33.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 May 2026 03:33:52 -0700 (PDT) From: Dmitry Baryshkov Date: Sun, 24 May 2026 13:33:37 +0300 Subject: [PATCH v6 09/10] drm/msm/dp: turn link_ready into plugged 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: <20260524-hpd-refactor-v6-9-cf3ab488dd7b@oss.qualcomm.com> References: <20260524-hpd-refactor-v6-0-cf3ab488dd7b@oss.qualcomm.com> In-Reply-To: <20260524-hpd-refactor-v6-0-cf3ab488dd7b@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Kuogee Hsieh , Yongxing Mou Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Val Packett X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=11362; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=Ub7kHvaTdp6oYgxq2bkDcUbPSdDHAbn5Cl++E4B/7mw=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqEtP959XWR548FW1MS+zfNsWKUYY09py6AJtuP WjbMQyRhu2JATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCahLT/QAKCRCLPIo+Aiko 1REkB/97BLTx1u2rp376UdoaU8xUmMby1vC2cD0VjbzORIXMnLchVwWvaMwQZrlcFIpF44CLY8Y 6JNNB/E1VyvLf6e+n+3he9S/PeA5GX6bdPtFOcaAdP+CC5UPYbFTOp2qbvkCGTe3bcRTjBY/kJm IWiSrMvUNQhHce7mU1uk9AM2OOZ/NO2P76PeMPMBDBqMnbJeK3nziOKtWJjbE8drjxY41pfIPpA pUUmnaft6UCGk8tGzVpBoKsN6kkb8ZNMU1IS5Jvk/gHv0gZy61pa2vWzz/Y3yBZwHtLZlu8/4XX /XMHtQuEzvD7m+pT92SQtH0zcCnqQ4dP5i/imEQBzvOoU/Lo X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-ORIG-GUID: pufJXTY0f6xER013rd0-ee6h8_OWgmuu X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTI0MDEwNyBTYWx0ZWRfX4UVu8hpEWIaM JmbJg2wwqIr2yFd/ig1VcYcPMmGCBH3y76vG2ATY6+IWu7sI9Xkr+DJjJA4n1chDPMo8d3hInWL 9bNp2j0c98mLtXwuXXUp+n2k/5hkmpy5EIhFOfAE86kNLIP78ibGsniA1+DymVoWLmbsMV/eefv q0kRZDTRmQcpqFBTzE75zfdrIvbJFs1jzVn9mCGeFhHv/k0pnNBwYWJF4lqBP37LePDokbNKcPv aLlhA2J3M+N0/DWO9o1Hur1SN7/ksYRaWMxh8iUPgo9Pb7ob7c0+9ZKuwE+eF+7bTaCyx29EuFD xJ+AIEXpCUv6zuer7deYSGSZ+0STY5RfhOOKMqV0efTlOavJgDBJ42xCGitc3EzPs+jCINu4/I+ uyJQM1klXbkpWISe8l3fXzlOdqJ6U5cK+km+ymDu9uMl+YuvaJPuBZ8/owCywZfHcerFsS8CPsr lUQ7f3oIDm90UupgQ+Q== X-Proofpoint-GUID: pufJXTY0f6xER013rd0-ee6h8_OWgmuu X-Authority-Analysis: v=2.4 cv=Xca5Co55 c=1 sm=1 tr=0 ts=6a12d413 cx=c_pps a=UbhLPJ621ZpgOD2l3yZY1w==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=EUspDBNiAAAA:8 a=L2aY2k0-BtRO-WKZelwA:9 a=QEXdDO2ut3YA:10 a=TOPH6uDL9cOC6tEoww4z:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-24_03,2026-05-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 malwarescore=0 adultscore=0 priorityscore=1501 impostorscore=0 clxscore=1015 lowpriorityscore=0 bulkscore=0 phishscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605240107 Tracking when the DP link is ready isn't that useful from the driver point of view. It doesn't provide a direct information if the device should be suspended, etc. Replace it with the 'plugged' boolean, which is set when the driver knows that there is DPRX plugged. Tested-by: Val Packett # x1e80100-dell-latitude-7455 Tested-by: Yongxing Mou # Hamoa IOT EVK, QC= S8300 Ride Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/dp/dp_display.c | 93 ++++++++++++++++++++++-----------= ---- drivers/gpu/drm/msm/dp/dp_display.h | 1 - drivers/gpu/drm/msm/dp/dp_drm.c | 41 ++-------------- 3 files changed, 60 insertions(+), 75 deletions(-) diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index fc41ac38556d..5fa745b486f5 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -53,6 +53,9 @@ struct msm_dp_display_private { bool phy_initialized; bool audio_supported; =20 + struct mutex plugged_lock; + bool plugged; + struct drm_device *drm_dev; =20 struct drm_dp_aux *aux; @@ -285,8 +288,6 @@ static int msm_dp_display_process_hpd_high(struct msm_d= p_display_private *dp) dp->panel->dpcd, dp->panel->downstream_ports); =20 - dp->msm_dp_display.link_ready =3D true; - dp->msm_dp_display.psr_supported =3D dp->panel->psr_cap.version && psr_en= abled; =20 dp->audio_supported =3D info->has_audio; @@ -304,7 +305,16 @@ static int msm_dp_display_process_hpd_high(struct msm_= dp_display_private *dp) return rc; } =20 -static void msm_dp_display_host_phy_init(struct msm_dp_display_private *dp) +/** + * msm_dp_display_host_phy_init() - start up DP PHY + * @dp: main display data structure + * + * Prepare DP PHY for the AUX transactions to succeed. + * + * Returns: true if this call has initliazed the PHY and false if the PHY = has + * already been setup beforehand. + */ +static bool msm_dp_display_host_phy_init(struct msm_dp_display_private *dp) { drm_dbg_dp(dp->drm_dev, "type=3D%d core_init=3D%d phy_init=3D%d\n", dp->msm_dp_display.connector_type, dp->core_initialized, @@ -313,7 +323,10 @@ static void msm_dp_display_host_phy_init(struct msm_dp= _display_private *dp) if (!dp->phy_initialized) { msm_dp_ctrl_phy_init(dp->ctrl); dp->phy_initialized =3D true; + return true; } + + return false; } =20 static void msm_dp_display_host_phy_exit(struct msm_dp_display_private *dp) @@ -367,14 +380,6 @@ static int msm_dp_display_handle_irq_hpd(struct msm_dp= _display_private *dp) u32 sink_request =3D dp->link->sink_request; =20 drm_dbg_dp(dp->drm_dev, "%d\n", sink_request); - if (!dp->msm_dp_display.link_ready) { - if (sink_request & DP_LINK_STATUS_UPDATED) { - drm_dbg_dp(dp->drm_dev, "Disconnected sink_request: %d\n", - sink_request); - DRM_ERROR("Disconnected, no DP_LINK_STATUS_UPDATED\n"); - return -EINVAL; - } - } =20 msm_dp_ctrl_handle_sink_request(dp->ctrl); =20 @@ -393,8 +398,7 @@ static int msm_dp_hpd_plug_handle(struct msm_dp_display= _private *dp) dp->msm_dp_display.connector_type, dp->link->sink_count); =20 - if (dp->msm_dp_display.link_ready) - return 0; + guard(mutex)(&dp->plugged_lock); =20 ret =3D pm_runtime_resume_and_get(&pdev->dev); if (ret) { @@ -407,18 +411,14 @@ static int msm_dp_hpd_plug_handle(struct msm_dp_displ= ay_private *dp) msm_dp_display_host_phy_init(dp); =20 ret =3D msm_dp_display_process_hpd_high(dp); - if (ret) { /* link train failed */ - dp->msm_dp_display.link_ready =3D false; - msm_dp_aux_enable_xfers(dp->aux, false); - pm_runtime_put_sync(&pdev->dev); - } =20 drm_dbg_dp(dp->drm_dev, "After, type=3D%d sink_count=3D%d\n", dp->msm_dp_display.connector_type, dp->link->sink_count); =20 - /* uevent will complete connection part */ - return 0; + dp->plugged =3D true; + + return ret; }; =20 static void msm_dp_display_handle_plugged_change(struct msm_dp *msm_dp_dis= play, @@ -447,7 +447,8 @@ static int msm_dp_hpd_unplug_handle(struct msm_dp_displ= ay_private *dp) dp->msm_dp_display.connector_type, dp->link->sink_count); =20 - if (!dp->msm_dp_display.link_ready) + guard(mutex)(&dp->plugged_lock); + if (!dp->plugged) return 0; =20 /* triggered by irq_hdp with sink_count =3D 0 */ @@ -464,8 +465,6 @@ static int msm_dp_hpd_unplug_handle(struct msm_dp_displ= ay_private *dp) dp->panel->dpcd, dp->panel->downstream_ports); =20 - dp->msm_dp_display.link_ready =3D false; - /* signal the disconnect event early to ensure proper teardown */ msm_dp_display_handle_plugged_change(&dp->msm_dp_display, false); =20 @@ -473,8 +472,11 @@ static int msm_dp_hpd_unplug_handle(struct msm_dp_disp= lay_private *dp) dp->msm_dp_display.connector_type, dp->link->sink_count); =20 - /* uevent will complete disconnection part */ - pm_runtime_put_sync(&pdev->dev); + if (dp->plugged) { + pm_runtime_put_sync(&pdev->dev); + dp->plugged =3D false; + } + return 0; } =20 @@ -823,42 +825,49 @@ enum drm_connector_status msm_dp_bridge_detect(struct= drm_bridge *bridge, struct msm_dp_display_private *priv; u8 dpcd[DP_RECEIVER_CAP_SIZE]; struct drm_dp_desc desc; + bool phy_deinit; int ret; =20 dp =3D to_dp_bridge(bridge)->msm_dp_display; =20 priv =3D container_of(dp, struct msm_dp_display_private, msm_dp_display); =20 - if (!dp->link_ready) - return status; - + guard(mutex)(&priv->plugged_lock); ret =3D pm_runtime_resume_and_get(&dp->pdev->dev); if (ret) { DRM_ERROR("failed to pm_runtime_resume\n"); return status; } =20 + phy_deinit =3D msm_dp_display_host_phy_init(priv); + msm_dp_aux_enable_xfers(priv->aux, true); =20 ret =3D msm_dp_aux_is_link_connected(priv->aux); - if (!ret) { + DRM_DEBUG_DP("aux link status: %x\n", ret); + if (!priv->plugged && !ret) { DRM_DEBUG_DP("aux not connected\n"); + priv->plugged =3D false; goto end; } =20 ret =3D drm_dp_read_dpcd_caps(priv->aux, dpcd); if (ret) { DRM_DEBUG_DP("failed to read caps\n"); + priv->plugged =3D false; goto end; } =20 ret =3D drm_dp_read_desc(priv->aux, &desc, drm_dp_is_branch(dpcd)); if (ret) { DRM_DEBUG_DP("failed to read desc\n"); + priv->plugged =3D false; goto end; } =20 status =3D connector_status_connected; + priv->plugged =3D true; + if (drm_dp_read_sink_count_cap(connector, dpcd, &desc)) { int sink_count =3D drm_dp_read_sink_count(priv->aux); =20 @@ -869,7 +878,19 @@ enum drm_connector_status msm_dp_bridge_detect(struct = drm_bridge *bridge, } =20 end: - pm_runtime_put_sync(&dp->pdev->dev); + /* + * If we detected the DPRX, leave the controller on so that it doesn't + * loose the state. + */ + if (!priv->plugged) { + if (phy_deinit) { + msm_dp_aux_enable_xfers(priv->aux, false); + msm_dp_display_host_phy_exit(priv); + } + + pm_runtime_put_sync(&dp->pdev->dev); + } + return status; } =20 @@ -1127,6 +1148,8 @@ static int msm_dp_display_probe(struct platform_devic= e *pdev) (dp->msm_dp_display.connector_type =3D=3D DRM_MODE_CONNECTOR_eDP); dp->hpd_isr_status =3D 0; =20 + mutex_init(&dp->plugged_lock); + rc =3D msm_dp_display_get_io(dp); if (rc) return rc; @@ -1357,7 +1380,7 @@ void msm_dp_bridge_atomic_enable(struct drm_bridge *d= rm_bridge, return; } =20 - if (dp->link_ready && !dp->power_on) { + if (!dp->power_on) { msm_dp_display_host_phy_init(msm_dp_display); force_link_train =3D true; } @@ -1404,9 +1427,6 @@ void msm_dp_bridge_atomic_post_disable(struct drm_bri= dge *drm_bridge, if (dp->is_edp) msm_dp_hpd_unplug_handle(msm_dp_display); =20 - if (!dp->link_ready) - drm_dbg_dp(dp->drm_dev, "type=3D%d is disconnected\n", dp->connector_typ= e); - msm_dp_display_disable(msm_dp_display); =20 drm_dbg_dp(dp->drm_dev, "type=3D%d Done\n", dp->connector_type); @@ -1504,9 +1524,8 @@ void msm_dp_bridge_hpd_notify(struct drm_bridge *brid= ge, =20 hpd_link_status =3D msm_dp_aux_is_link_connected(dp->aux); =20 - drm_dbg_dp(dp->drm_dev, "type=3D%d link hpd_link_status=3D0x%x, link_read= y=3D%d, status=3D%d\n", - msm_dp_display->connector_type, hpd_link_status, - msm_dp_display->link_ready, status); + drm_dbg_dp(dp->drm_dev, "type=3D%d link hpd_link_status=3D0x%x, status=3D= %d\n", + msm_dp_display->connector_type, hpd_link_status, status); =20 if (status =3D=3D connector_status_connected) { if (hpd_link_status =3D=3D ISR_HPD_REPLUG_COUNT) { diff --git a/drivers/gpu/drm/msm/dp/dp_display.h b/drivers/gpu/drm/msm/dp/d= p_display.h index d2d3d61eb0b0..0b65e16c790d 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.h +++ b/drivers/gpu/drm/msm/dp/dp_display.h @@ -17,7 +17,6 @@ struct msm_dp { struct drm_connector *connector; struct drm_bridge *next_bridge; struct drm_bridge *bridge; - bool link_ready; bool audio_enabled; bool power_on; unsigned int connector_type; diff --git a/drivers/gpu/drm/msm/dp/dp_drm.c b/drivers/gpu/drm/msm/dp/dp_dr= m.c index 528c9a40477f..b659d22f5f28 100644 --- a/drivers/gpu/drm/msm/dp/dp_drm.c +++ b/drivers/gpu/drm/msm/dp/dp_drm.c @@ -15,36 +15,6 @@ #include "dp_audio.h" #include "dp_drm.h" =20 -static int msm_dp_bridge_atomic_check(struct drm_bridge *bridge, - struct drm_bridge_state *bridge_state, - struct drm_crtc_state *crtc_state, - struct drm_connector_state *conn_state) -{ - struct msm_dp *dp; - - dp =3D to_dp_bridge(bridge)->msm_dp_display; - - drm_dbg_dp(dp->drm_dev, "link_ready =3D %s\n", - str_true_false(dp->link_ready)); - - /* - * There is no protection in the DRM framework to check if the display - * pipeline has been already disabled before trying to disable it again. - * Hence if the sink is unplugged, the pipeline gets disabled, but the - * crtc->active is still true. Any attempt to set the mode or manually - * disable this encoder will result in the crash. - * - * TODO: add support for telling the DRM subsystem that the pipeline is - * disabled by the hardware and thus all access to it should be forbidden. - * After that this piece of code can be removed. - */ - if (bridge->ops & DRM_BRIDGE_OP_HPD) - return (dp->link_ready) ? 0 : -ENOTCONN; - - return 0; -} - - /** * msm_dp_bridge_get_modes - callback to add drm modes via drm_mode_probed= _add() * @bridge: Poiner to drm bridge @@ -62,12 +32,10 @@ static int msm_dp_bridge_get_modes(struct drm_bridge *b= ridge, struct drm_connect dp =3D to_dp_bridge(bridge)->msm_dp_display; =20 /* pluggable case assumes EDID is read when HPD */ - if (dp->link_ready) { - rc =3D msm_dp_display_get_modes(dp); - if (rc <=3D 0) { - DRM_ERROR("failed to get DP sink modes, rc=3D%d\n", rc); - return rc; - } + rc =3D msm_dp_display_get_modes(dp); + if (rc <=3D 0) { + DRM_ERROR("failed to get DP sink modes, rc=3D%d\n", rc); + return rc; } else { drm_dbg_dp(connector->dev, "No sink connected\n"); } @@ -92,7 +60,6 @@ static const struct drm_bridge_funcs msm_dp_bridge_ops = =3D { .mode_valid =3D msm_dp_bridge_mode_valid, .get_modes =3D msm_dp_bridge_get_modes, .detect =3D msm_dp_bridge_detect, - .atomic_check =3D msm_dp_bridge_atomic_check, .hpd_enable =3D msm_dp_bridge_hpd_enable, .hpd_disable =3D msm_dp_bridge_hpd_disable, .hpd_notify =3D msm_dp_bridge_hpd_notify, --=20 2.47.3 From nobody Sun May 24 18:41:55 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 B6FD4391E49 for ; Sun, 24 May 2026 10:33:57 +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=1779618842; cv=none; b=q0eoi2ob+zTm/SvsDF7qMbUT3Oq6Lt6GiEiIGgk2UghqXIfrW3u6RQuX/7J0N4I4EW4S6p/1mVbJTwdFSwGhnCqRd5FdaAcUlw3yZhN+2fAP38Zsbe/32nSgsVCCnYHjIoVpD568Q0ReMaiq7uiGbWj1dgELmWzYEDco54IP12o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779618842; c=relaxed/simple; bh=mGqmteM+m4hLI5Gvz9eQdzWvrlFnUpxrfaJFRPfDGQg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QxlOfenYKco/CJoNNjwryru8msUU7NQSyZ/q3ngQfS93lni1Dit42xxz3/sFEahTIsb86rvQT7mUrMgT9PBZ7/di2w+UMvh6RTrT8qxZXSbXTDAJPDxiNpPXTw1TVkWnIOEvcqvAMNrJM8QAdnJrN3N3Eo3bLK7O258umjlwFvk= 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=a6J9Lfg6; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=KlU2m/Ix; 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="a6J9Lfg6"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="KlU2m/Ix" 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 64O8kvMw1231122 for ; Sun, 24 May 2026 10:33:57 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= VVckI6rGuC7U14wE7wUxK06VoWfdQ0drTPZ1Rf+ykCc=; b=a6J9Lfg6epSPS2YA sxt7DnvJz3Xw0+U8r+kexsDc7509fFT4FLdRz1Cvnw/PD5HXTv0WL0G+IfmEkPf5 jJmwNppFZ2Cn/zyRD69WziEVEWasvE0jIBQFasjuRB5g5xpDUVLtpN0qjPbtMGo3 weEDFFeAhtNACGEytSIQUI+/FYeoJpsvAKUJQWNHb/c1oM7+FcFLgilFe3FxhZBR SGoVlcONPte+TcsfYKE1/KnHAmw1US+Qht4Cu7N+h2uA2PKSKeqXrlGOfMUNnZh6 DO5HJPWx7O6OJG93MbVbmQ/JyCUFxDdgVSY18oPnKKvet/F/Egi5ZjY3n22NSGlG ci6ycA== Received: from mail-vk1-f198.google.com (mail-vk1-f198.google.com [209.85.221.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4eb50ftupt-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sun, 24 May 2026 10:33:56 +0000 (GMT) Received: by mail-vk1-f198.google.com with SMTP id 71dfb90a1353d-56fab6d9242so19952248e0c.0 for ; Sun, 24 May 2026 03:33:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1779618836; x=1780223636; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=VVckI6rGuC7U14wE7wUxK06VoWfdQ0drTPZ1Rf+ykCc=; b=KlU2m/IxcALpsEOaGXfspI/5CLStr/+gV35yuwYZx6FcOKPMTchnsTVIPeb4JbLY3i N9nYBqfGlxVV+hE4w5JbWvmSFz/DzIimie53PxNkitBtc7BtviArFHr0sElECM/yqXTD 4KER3m+ykVmc6hB3Cbtr12GqfS0rfJD4X9a96L3OeyL+KH1izkqtUpPeNH1b1hbbWg5F eVP5q1goQf5AZ09Ei0r8VjjtRo4lIQq3gm3KJ9HvkezRX940SQn64moh1PnK4jutz7t/ KZj7ZTAQfMauzVgz2craePQb1sZ7GHKxG3mwx2oyvi5iyTVcIZWC8OA7uKgZffZwh/zR xFbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779618836; x=1780223636; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=VVckI6rGuC7U14wE7wUxK06VoWfdQ0drTPZ1Rf+ykCc=; b=FBMCja4aXjvKP4H0UcwFg5gnUqr94EkGRFXjG5zD5pL2+Rc071z7aSytUF0umkkbux r4jGz4abZJP70IgldMIUShR+KNh9n1e14UuZNzmiJIviEK+tQ4rbmI/gxm1ON7LhGJO3 JYY/OCVbAlVr3C13FxD040hY/4FswNWkA62aB5T9M45ijfWbKJWrafOzKmyYdSuGOfZN E9ES4Nkm3SPmX+Pg6vLDyDA4sIrBQ3JquOg4y/tH0R3eaXVTND+I1WJzRDnNWb207ZwT +Go/kHszmf3KV4lr6i2rrz9LGBC3l0WDl9oQxvqArkRERKnW1aaqxVCIuZiQ0Z6yCNdu kfPA== X-Forwarded-Encrypted: i=1; AFNElJ+TWbkqJcQxtCye8hwHErjrIS+RJ8hjk8XjzUQokQIQzaf3Q0SUTRbU1b6fFi4DqvdiH9G+B0uEEoTKf5M=@vger.kernel.org X-Gm-Message-State: AOJu0YwY/zmk4L06Fjm4qr6a4N7TtaSFckBuPWg4gZVD2lRTPiVS8bF5 gWO7z9F3Hi97L14FKXhIFKich0RfhmqSh7n84V/B6IusjPMrU/J8wg/3ujXXPDeCUyWgtXVOk01 8i+DrIbwMCYW06nVIeUA1Nw600GD8VrHjMDBSHvggyTfDC7pv2AJB9Vhzcchzg5Om0iY= X-Gm-Gg: Acq92OE5fxa3p6/mPxYz4O4QKuWwdMsgGMIMDUDnGrRT5x79WdvS6EUqB59cljycKu2 Fl5mKSoz0QW7hKV/oLD8VoS4dD+UemZoSP4+HNjIXUlkbI1ngRQWoINsi4wanNKfSpPtItU+QP5 sM2pwd+fpmaUCNZtQFv6vB+IwuF+BWxgeC5znoUitYcxId7VXMGen0nAs5+p/ZQjOnlJCXkG95x VYsuQPggwRZ+Fmn+g3lhQqi68bGy5DpPDm0gDSKfsR33UVPME78AGW4BML6jZ+XxnZqi1JxtK91 DsUWUStabcDlxqlNjPIWLU7HqU2Kp5b3wK40i4YXJQJqUHYmE+SApvo+HFcnUf3q9FYjcWJA0yf QBqCoxN2yYUAvyxTq150dtmbGyPKyUFYWKCSMJzqS2jpY8+BuIWCQfuz6oX1v9bCS+av9ZWEjNU FqbxV6EDtkMwdvTP/Eo7PoMtqiwnlhba9VzmjNcoNOBBrtrw== X-Received: by 2002:a05:6122:4896:b0:575:27de:3eab with SMTP id 71dfb90a1353d-5866347ff44mr6103384e0c.9.1779618835899; Sun, 24 May 2026 03:33:55 -0700 (PDT) X-Received: by 2002:a05:6122:4896:b0:575:27de:3eab with SMTP id 71dfb90a1353d-5866347ff44mr6103372e0c.9.1779618835536; Sun, 24 May 2026 03:33:55 -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-5aa32cba880sm1816148e87.32.2026.05.24.03.33.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 24 May 2026 03:33:54 -0700 (PDT) From: Dmitry Baryshkov Date: Sun, 24 May 2026 13:33:38 +0300 Subject: [PATCH v6 10/10] drm/msm/dp: clear EDID on display unplug 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: <20260524-hpd-refactor-v6-10-cf3ab488dd7b@oss.qualcomm.com> References: <20260524-hpd-refactor-v6-0-cf3ab488dd7b@oss.qualcomm.com> In-Reply-To: <20260524-hpd-refactor-v6-0-cf3ab488dd7b@oss.qualcomm.com> To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Kuogee Hsieh , Yongxing Mou Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Val Packett X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2721; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=mGqmteM+m4hLI5Gvz9eQdzWvrlFnUpxrfaJFRPfDGQg=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqEtP9ak9oVvpCmWFPCObKin3NC2NbwoC3Y5mtg 6N6KGWWN12JATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCahLT/QAKCRCLPIo+Aiko 1RM9CACMTtdXkwt6OJzCTlqYe1RL+OTe5uRHjgpBQmycP+rPLqWqYtsTTSK4B8OY77OuubDBgqr a0d+IV5yrsalCLmrldKu3wjux/l30cgyRTlsVm6PCOF3jvoLrybo6O9wrqgdOWXTJMG33xswszw Eyh7xoBqU+4eE2hpo5Pot7+WsjRS8csEk/peIuXH38g8f74BDEedB9Jua10U7YmB6vx21eAlC+k Gw96GUN6sm3wNEJI7gNnPGh7ccSBt/U+PGYaKefw7vDTmIsBaeV8aKFav6fHZ7S5QeuM+5mK70D p3cx341tChRRYCRYBGNSdrJiOlQFIet+OKXxjd/7N99LCCJL X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTI0MDEwNyBTYWx0ZWRfX5iyC4oTwi62a fNDYr9aYCUYiBAFDawEecdeuGPYtILzJ+7LfuWBBbPVQlZL5RngMbLp1zhw75uxLge9e0fPIYbk YcIrRxRWAZsaIprFlIn4groidMOzyEbT1mXTzZiGEhyejk3dXoaHsuBghSr6Of3Jr3k310PKhtm TAycqdQPq8oqcqm5a2vDP31nEi6CqipiZ8E9APqLbsh6Uqgm1dPVsKuGvS7+2OIMQR7qZD81+wY opWm7/vXdeT0bDo/G6Rjp5mD/v0zJP8GzFSyPeot9LsOPDyXQG7hiaX9LpERq7rWk3RkBG17bJ7 I+nsU/x8UbZlh3tsOM/5P+yCv5eKz9iqbrButCKaAt74yjXJJr9+TTLrjN14OeyiTXBrojOuxRE KgJ0lxIgNu5C8NN3aHaedhSFcGMiLYkRnhwV4Bv8Dve7j8FzyJNZ1X0uU4sHZRfp4o0mSg3Fp62 0k7o3bASdAuE687vgPw== X-Proofpoint-ORIG-GUID: cVYAIOPBig9QxA4h9sMw89nEcBF6vzgD X-Authority-Analysis: v=2.4 cv=UdBhjqSN c=1 sm=1 tr=0 ts=6a12d414 cx=c_pps a=1Os3MKEOqt8YzSjcPV0cFA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=NIqqIfc2bYnrFRhDr3kA:9 a=QEXdDO2ut3YA:10 a=hhpmQAJR8DioWGSBphRh:22 X-Proofpoint-GUID: cVYAIOPBig9QxA4h9sMw89nEcBF6vzgD X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-24_03,2026-05-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 adultscore=0 suspectscore=0 clxscore=1015 impostorscore=0 priorityscore=1501 malwarescore=0 lowpriorityscore=0 phishscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605240107 Currently the driver only updates the EDID when it detects a connected monitor, which results in the connector still listing outdated modes even after the display is unplugged. Set connector's EDID to NULL on unplug to clear the list of modes. Tested-by: Val Packett # x1e80100-dell-latitude-7455 Tested-by: Yongxing Mou # Hamoa IOT EVK, QC= S8300 Ride Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/dp/dp_display.c | 4 ++++ drivers/gpu/drm/msm/dp/dp_panel.c | 8 ++++++++ drivers/gpu/drm/msm/dp/dp_panel.h | 2 ++ 3 files changed, 14 insertions(+) diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index 5fa745b486f5..6800c628adb4 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -451,6 +451,10 @@ static int msm_dp_hpd_unplug_handle(struct msm_dp_disp= lay_private *dp) if (!dp->plugged) return 0; =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); + /* triggered by irq_hdp with sink_count =3D 0 */ if (dp->link->sink_count =3D=3D 0) msm_dp_display_host_phy_exit(dp); diff --git a/drivers/gpu/drm/msm/dp/dp_panel.c b/drivers/gpu/drm/msm/dp/dp_= panel.c index 891211b23202..6bb021820d7c 100644 --- a/drivers/gpu/drm/msm/dp/dp_panel.c +++ b/drivers/gpu/drm/msm/dp/dp_panel.c @@ -293,6 +293,14 @@ int msm_dp_panel_read_sink_caps(struct msm_dp_panel *m= sm_dp_panel, 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) { diff --git a/drivers/gpu/drm/msm/dp/dp_panel.h b/drivers/gpu/drm/msm/dp/dp_= panel.h index 177c1328fd99..9173e90a5053 100644 --- a/drivers/gpu/drm/msm/dp/dp_panel.h +++ b/drivers/gpu/drm/msm/dp/dp_panel.h @@ -49,6 +49,8 @@ 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); 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, --=20 2.47.3