From nobody Tue Apr 7 09:17:14 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 5B7A72517A5 for ; Sat, 14 Mar 2026 01:09:18 +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=1773450559; cv=none; b=e7zyabV0EVJ5HshpBcJgQmk6nGnPmEedmann3BJPoS1DV/hJ+ZHA2FqQu1TsUxD16II37MQsCZnjJSY6ECEtrdQwyabMA+ZtBMd77hWqmFY+Qq6B35H3imr12TnbW4uBC779LjQU6UlFX2uU1vXnL/5wuwqcKshGnz1x226IFOU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773450559; c=relaxed/simple; bh=pcaLSoRFt3SlaD+08joU4LXPTYdyqHPVDM41X2YrGtc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=AOfFpZlpY57jcnLnW63uHCGR4Frqt3HZ9cGVbjZAxM6xvJxgFGtvX8a5LIeAuFjGRE/X2VxtbHE/Pz7t4hiTTxb38c0a7WqNajQYdTBE+hverrQ99+wGF7P2lZpQkNOXwnT5n0+Q/EQLrS+esP97izvFZpkWfk/XZ3Hui+GoFZI= 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=i9PGtWcR; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=O//lm92J; 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="i9PGtWcR"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="O//lm92J" Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62E0Jhc12107938 for ; Sat, 14 Mar 2026 01:09:17 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= DeGmUPYleUd1gI+tkP9VMwvXNEE1375NE+M4CsEsAl8=; b=i9PGtWcRErUChHkS K78Zt3xE6VfqxWve6fHd1hfsYbBypv9VaqD0TCjZcjRyxXIRv8P64C0UZUx14uS9 Ne2qn3kPDq/jgCy3zifkQ9fJGUzuVyO8HPPKj4lHEh3S6BM+k45UQVP6I2qyrRQ6 Rfofig2yyMDP8UPWCTkDBBG9PSRnJyPmdBAR+1UXVes+PY0AaIyQpfqjeU5GZIlc inEtOWRzGbDLxsCQDvdjg5665zbIl0cJORG/NTiwwi55scmRaukZqVJbjldjwJ2R 9Wjs5FX/Mt5Q6dInFDzSuPIuZlxXqOqFUP6KdXvAbtl9GN/UFYBk9P4ifFqVncBM lUD0rw== Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cvw1p83kg-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sat, 14 Mar 2026 01:09:17 +0000 (GMT) Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-8cd781c0d90so2066185985a.1 for ; Fri, 13 Mar 2026 18:09:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773450557; x=1774055357; 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=DeGmUPYleUd1gI+tkP9VMwvXNEE1375NE+M4CsEsAl8=; b=O//lm92J2Fe/y92Ww/c13GDs/yeNBl2nGEczq6qGuDJOxVzWT/eMWiZ5Po36yS8JCe aS3kymqSRZy6HSLiu+OTX/fmDE285Mavu4jLzGBlHH97B/ZRe69AsBIrcKNP6kRq4CwC l0q2YnC+60CpBQ2EZ2jsQZqoDEK3VFum2ZMwDof7+osLBAbxOUsOTBQ/KNPX0Xn7bfn9 VZEq3DFDgdDmpX9V64rl8xq04iE6gwbd9bgAtiWgwp7g6ZG2SCNrH3TFFEkzR3A8QmB5 ixOxNCky5M9A6JsbARRTthjJ4nX6Ec3+htuUiH4/IOvNzf3UZ2oBFbK5hF6fM7grQmsn L+RQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773450557; x=1774055357; 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=DeGmUPYleUd1gI+tkP9VMwvXNEE1375NE+M4CsEsAl8=; b=saNDpPIi5/knkGYkfpEc8xlf44uRXBCtbpvrf4ju2G+sBAgKyq4BayqdWAwLBaC6+A mrN9eKPCtf9Q3T0612/4dG1nu1Nw5eMKHbQgdG7DKFFh4ByNTHlPNEpPlDjmKRMUuEqM CMGw0osJBvdz+DvKyKkXxaW5IT0buKsrolyIX5wo8K4uJj7x6dihm0K+NQylQGp/lexL t7mwlyAm+AkKgzS3ZWyMjyvIMBqR4ZzoIYNAHFaFtXoZtL2Esx44e/dawgeZSRB4b14u 9zXGkG/OPUh2JPS0LENmBSURX8eysbydgsAjFqbzFn3DE+7GhZvczsq1oNUDSVgwuIPX Bacw== X-Forwarded-Encrypted: i=1; AJvYcCXgxmYb+4pTL1rrOuTOXMZWp4almVFGnk0IWQfnYjbBG2w+yv+oDtfJKfpJMeHuAIkIA2+JMJNmxMjTwe0=@vger.kernel.org X-Gm-Message-State: AOJu0Yxmcz+LMq3Bkatb7W1nVTSmEdTJceNtKLTvydrOOPAE1KA3coXh WEBQD+hEaIIPBy0eJUJs3ccqPUuDyiy2zsBVCet1U6XX01euDbGOdfZhPwDCDND5vm+cFa662bu ESmo1yeTaVYBCfiKDejEEAeLsA3FiCvp2OaPcddATtSlq9DLMBfB/eERlupy3HUYC15o= X-Gm-Gg: ATEYQzx4ykWOrkXutF8xj7WA3QjGf3L+yFP3k7QqkiLLZEV+8bxCRggkGiTZn3aOmKt by2JNYjFyII0C7lRqjmdpHYY1a3bbJxx4dR4KdlAzSi3S5d5Bad0UwpdDetz1pdm2Fm1dMKRjor GHsue8sKLevfsmrjYD4/nsF7sX5K3KF5nXDjGYlCODLnb8ysAuWrAZQFjed8pHr3T6NU1w1umfH SDYiUxp4LB6y5KR+usFqXF3T1n1auLzwiShWL0rvbs2HkjP9AVT34V+YpNgQytzJFlNTHFOx68w BAEfS/TLD40RYg7ywDLF0QywU6lGkF0lW4wILn27hsd5hH03pT5nzQ4ih5jabLHH2yJAilhhbvb w8TFAzacATnE8xTcGKWlADrLp1hS0s6HyHB+i2qN13eJ2iupOOWiKvTg3eFySvh42iLUgiPYWOl McMAFEzvEL0ggLMvqUzcCVb/d5U0oD2IBryRg= X-Received: by 2002:a05:620a:4101:b0:8c7:e8c1:ea05 with SMTP id af79cd13be357-8cdaa77938bmr1061167885a.7.1773450556777; Fri, 13 Mar 2026 18:09:16 -0700 (PDT) X-Received: by 2002:a05:620a:4101:b0:8c7:e8c1:ea05 with SMTP id af79cd13be357-8cdaa77938bmr1061166785a.7.1773450556351; Fri, 13 Mar 2026 18:09:16 -0700 (PDT) Received: from umbar.lan (2001-14ba-a073-af00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a073:af00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a156366b22sm1806805e87.77.2026.03.13.18.09.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Mar 2026 18:09:14 -0700 (PDT) From: Dmitry Baryshkov Date: Sat, 14 Mar 2026 03:09:05 +0200 Subject: [PATCH v5 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: <20260314-hpd-refactor-v5-1-0c8450737d64@oss.qualcomm.com> References: <20260314-hpd-refactor-v5-0-0c8450737d64@oss.qualcomm.com> In-Reply-To: <20260314-hpd-refactor-v5-0-0c8450737d64@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 X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1209; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=hzwfWK5+EPLPBOMgkg/4Azem10iuzkilPWoxif3rO60=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBptLUy8W18Y1yfE5HK49Yw4+p+AVbfCcNE8CMe1 zRTg8C9khuJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCabS1MgAKCRCLPIo+Aiko 1duiCACQzw9dsW4ibwfY0VGKLAVvRpZSU1ckvWSmXXgpd38pxyDM4YkshNrmfTKz4BFaMh904Db ps8LI/7Dej/U68vZAajNnaZ6kkwV7IgYt2RBcCXOG/O1LahH99RMvIB3WkRgWnyeQakQi+oFpDi /vFskvbwcB0ESz5org/uNgFhedTvxIdaAwOh81xtI2mWdE+7RFIcttm5ip40KjvLev0/DMDmSUd qKAOEmJqQlvE9+etXHiktS8NYMkgBzleDLV92/4NdLQ/X3yW1eR1ehl1/AP1vO0313Qd4LareMT IjV1DiuH3rSKv3pPoLgsnEBZBsEAyqDjVY3EqPxaUXXQ+5w0 X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-GUID: hdU5PMgUreYJx7NCwSXrBLm-5pVt_e2B X-Proofpoint-ORIG-GUID: hdU5PMgUreYJx7NCwSXrBLm-5pVt_e2B X-Authority-Analysis: v=2.4 cv=auK/yCZV c=1 sm=1 tr=0 ts=69b4b53d cx=c_pps a=hnmNkyzTK/kJ09Xio7VxxA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=pGLkceISAAAA:8 a=EUspDBNiAAAA:8 a=IBRk8GtBIsankUNt0b0A:9 a=QEXdDO2ut3YA:10 a=PEH46H7Ffwr30OY-TuGO:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzE0MDAwNiBTYWx0ZWRfXziHpDOc1ue2W F8H6Bap4+K9o29MZGtI6Lu/XAyd+Ayc1eFJXAJXl6SUSO8Ol/8Nw6k+z6P2BKQre9Kk3RcDcoJ5 aGoYWlGQku5UzOFRwS6SCbP3Y90ehHX85Hqj4aqGZ8gl4DR4QVMEeEExKckRk+0jNHlCpa0w57B RC7BykSfSaq0zW2EAC5L8IlVvYTETWiTohK3eEzAOlUNLKnOLf/ZsoIjgqyMCb0NYt6UrV+bpek z8leFkBN9+wsgd9RJhq/UuQRxHj5uJSPyHpgRlIXaIP03lMYJ9F2wnZtcxPYpeXH2vejI4C7emx FxwFPQGv5eUf7T8xks0C28LXwx7qxXxrTBnQOXo5PDB+Ck2tX03YzGPuabsaR2Si+mLhjRdglEN KdroCnwU0AhMDjHS38NkzJVsGPSLVzH3OiWJFiyE06kBFw7mqPOyHynP30Eu3gROFuqy2PWs784 68tMgftZVuOHIAFJ+XQ== 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-03-13_05,2026-03-13_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 bulkscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 priorityscore=1501 suspectscore=0 adultscore=0 malwarescore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603140006 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 Signed-off-by: Dmitry Baryshkov Tested-by: Val Packett # x1e80100-dell-latitude-7455 Tested-by? --- 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 Tue Apr 7 09:17:14 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 502242550D5 for ; Sat, 14 Mar 2026 01:09:21 +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=1773450563; cv=none; b=YFwIZoRObzXUuPJrvC3bUztSIk37ffWaeaoR81TN+JUH/sYF8ITrZ8aWcgIhG6KETSLnsXU9WQcSLiBjCB/Y2YOMI5yHOFCtxCkwqPOKBhppYZSxZIfscUqdAp02Asgt/ASLPtKsQvikg6Fz16mOhgbm/jpp1lIb9ROrhGRG5zc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773450563; c=relaxed/simple; bh=eakQfjxoaFEzAgZTNF/SA8mAZboCLH9N80G+a7PTCxE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Um17mg8O5NW4tXP/nL1xiGfCRdhVPUWGQwIlc1vxaJUYgAOXPqE8OHjZdKY2oSKdmF8DjbpVGZErGowg9X9iXbYjInSoL4hVQwOGrF2mnSICx1dkUaa2wptlBR3SPaGJkHw6cCtdjhVMB4GqlkPY4zVjknmIFkeoFafvoN88H8o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=J+EiaUsb; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=NH+afQio; 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="J+EiaUsb"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="NH+afQio" 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 62DGkdV81500297 for ; Sat, 14 Mar 2026 01:09:20 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= FSS4Apq1RtX0e2b4UQIuC0SLm4KCkQ7NHbbPUFHwauU=; b=J+EiaUsbfX6EZPkI T4vJxXzK4XGT0gKuAL8NEGKsAQBAb5Y3vRrgqSe5UxzY6WoGiJOmiNxZA+7XO9c2 ZFOvJssMw3h2Mw26FA7fqHNLIQH62Kx40N0BW1S6GRffxr/u3Ho56I5X+OICWV0K 7sfjqU3Sv2c67KgHIFQi+b8G5tnxU35v7K1nNqbBXgIAoR4vczFTdi4jgM5U74D9 G1SiQWDK6Mpr6laM1Gp/yafUz5wp7OLHYN3xXeegF/RVLrLHw0uZTP8URUI+1x4q ruqT5zUkigl+ndxmd850vV07fRI4WirIbtKviKQfs7xuV++eN3OeTcqfzqr6mhzJ Bq0NCA== Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cvg0hjstm-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sat, 14 Mar 2026 01:09:20 +0000 (GMT) Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-50937c5b742so220127121cf.2 for ; Fri, 13 Mar 2026 18:09:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773450560; x=1774055360; 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=FSS4Apq1RtX0e2b4UQIuC0SLm4KCkQ7NHbbPUFHwauU=; b=NH+afQioELM5U0gE3QqtIBwddhslO8n+bKfa8MED8gcZzQKmKnGOF1FpNyIK4cxFTJ XlITTTr29AazE3TiwJHbht6cOWulakKHX987Qoiva4TqcLQn6Jc6A5WJ+ft9HzG95g9p nl2LCgAijmZmEjdx3Xbqp8SLSnW1Kl7mM5KzP4NuMOlusqFSlxcNyOpolrzzUv8Mzoq8 Rj7+Wsw5M26TEJfLWPGhs9S1fOJiAJvrq9cpdssGk5IB0RMfzgp2H+wDwCff+qp8BEbi M1LIQ1vZSzN4iUQOYY4GeUtUqh+9OAlJA1qamj72q5oShoUfkUBm/RDD7g75ZTBOi3tG BScg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773450560; x=1774055360; 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=FSS4Apq1RtX0e2b4UQIuC0SLm4KCkQ7NHbbPUFHwauU=; b=CxHotsKSmpNmZBaJ8e7JHfPOe/SjiXvsD3lKXbuGmtJkYvx1n7uhYYEJKiiBYi0OGG dylaR3vJOP3gfidomqGn3CYPNYN/XZtjCr2mdwWFw5DfT9hYas8wrPgSprLyUqDy4vJx 7IItMB4eI2gOkmc70F3gjOFzmpNcOyDYRN+eA7rzGEK9ldneIYcwpRZOI+pr5OksQprV 5wuvQfAYgDO6WTnU+VkirthvKlfxPmhAnCQjBFCTIbGSviRDxzMcM/LuBlsC+z8rQmNc 2JKvzQu6FuFSfk2CVoYVB6UAMm1sjHoX7emJCMvpvJZ5Z95ot/CvS0MD6EAoUmmMO9HR Rx3Q== X-Forwarded-Encrypted: i=1; AJvYcCWENae44jQNp090f5h/DocjSauEP219WhfnHgrGMBInkTgwVVkrEMvCd4HCiRjDplWjKJt3TKjdV8iGF2I=@vger.kernel.org X-Gm-Message-State: AOJu0YxZYFLK1ZPWJpGHuKGVYgnK/Xav3wY6YdbSVq7sQqlYzR9G8LHs bPNonW0PvGMn/Nw5D9IUYPmVmjhpcll5qeXAiMNHoh5sddLQrPJaB28KvSThd6/UNy7OLFaSsSI MCkTaeyGbz+/XfkqS/KGtOAEsRN9WtOPajeDLX+E5n9fwbSQ54rVvhEiR8pmE1wo2cQM= X-Gm-Gg: ATEYQzy9mYv0OpM+GZuFRLz4mnxVhs9VqaGFU4leDS+OSRQp1gG3QkS8keaP1doJOil 27UtzWuCFHbAlLwyoMcWAdiOafm0T8WQ2sHcec0bQSDuUcuI23SZBnP73DfadzpAkyTGHHIhy0g XygObZsVoCO4H3vFJp+2YAMiWZ2B+xk6W/WlzGnVFxE7f06v+i3e+jABjmXFnVUGOfnuxCAfyZ9 on6nSX0hNNr8G0XSSrR6hZ+UHMCgnBLtyjQFo8jaHKP9pbR1IhEXkaSCecqjkI88gLDOUbxpWV2 EcO/RAON1b3xawTtuIX+zZyfzrG69isDA7rDL1NFYRS/ESYFqGmUu6PHJTo5LUzdWs+MtRw+uK1 6KtiHLSdbU0paaGiU6ZXUAlMkp7Y0fkwmOIP59CXeMCJ6IkOq7ijxoPtzetInQgekVRIdxm+z3q OEdKili2AqM3h20yLiT+NaGX/+uLOS51iTKF8= X-Received: by 2002:ac8:7c4e:0:b0:508:ff31:47f1 with SMTP id d75a77b69052e-50957ea4b91mr74476851cf.50.1773450559580; Fri, 13 Mar 2026 18:09:19 -0700 (PDT) X-Received: by 2002:ac8:7c4e:0:b0:508:ff31:47f1 with SMTP id d75a77b69052e-50957ea4b91mr74476511cf.50.1773450559043; Fri, 13 Mar 2026 18:09:19 -0700 (PDT) Received: from umbar.lan (2001-14ba-a073-af00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a073:af00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a156366b22sm1806805e87.77.2026.03.13.18.09.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Mar 2026 18:09:18 -0700 (PDT) From: Dmitry Baryshkov Date: Sat, 14 Mar 2026 03:09:06 +0200 Subject: [PATCH v5 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: <20260314-hpd-refactor-v5-2-0c8450737d64@oss.qualcomm.com> References: <20260314-hpd-refactor-v5-0-0c8450737d64@oss.qualcomm.com> In-Reply-To: <20260314-hpd-refactor-v5-0-0c8450737d64@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 X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1093; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=Ww/3qknDh3ls3uKJd9KJ6MipP3FzUf7GXLi0EYvbbNM=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBptLUzpMT48Ul1fCy2axFvUY6so32R8/lXIrhK+ jiXWcynaeCJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCabS1MwAKCRCLPIo+Aiko 1VvKB/98dmFO4H+csqmM6Uvyh0/4Gwx4eTwsJ+9HO8uwCsOwxLyR+B/6DgT275/B5fMKUad6hAZ 5/whaKv1MgRYOZDPnEy43V0DhwOanfnjkEVUjKgcsZhPv8f4h2UsGpTH6nxhWxAik5EjpU2yv9g iE4E/1nGmLuOljEh+sSpBUL/BFQIoHolvVVepuWqbr+xjAF2DsFV8TcYd28IuAaNKI1VPyBeoQZ /EGA97xGYhTzHemOcmYzOiacD8ZkCXfh547h1IChZmQb36dETF74o6lhvonkQD4yd8zHi525957 N2xIjxL18NL5J6O9dWgr15pqdDYBeRIlW1WtG2yhOc4BiRsE X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Authority-Analysis: v=2.4 cv=T6eBjvKQ c=1 sm=1 tr=0 ts=69b4b540 cx=c_pps a=JbAStetqSzwMeJznSMzCyw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=pGLkceISAAAA:8 a=EUspDBNiAAAA:8 a=aneus3DpQx8xEqIVSrsA:9 a=QEXdDO2ut3YA:10 a=uxP6HrT_eTzRwkO_Te1X:22 X-Proofpoint-ORIG-GUID: h3uoSwSlVg-bwoeePYSJfamos_MzmvuL X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzE0MDAwNiBTYWx0ZWRfX08jqQ/QE7kKG 1FwO6/ZZ4RgnA3AI1XDJOuSAkNj90dCrbp/YBe7A2FxiTO3zlv0e3AYmJ7kJSNkTSfucTsHdj00 PELDPNrTBP/vNTPkOKgbUq2vPg3i+SWoZ7CF6Y6rbuRLL+ftxun7QBixJyjawboKTpWT0rtuxxA MfIfZOF6C9tLtSpugh78xqZK6vIZPIrx1KC9sqBli5WXlJbhAm6rDHBzGs55pU7o4jG46I5dWIG K0g6hzqaJuLM8x2FIxPxvI3d/mG647DBz8zNEIzm3yFTE4b7EiL0JOHPnvTPplFOe0SoOQ8T1eg chsY76DCA8dUNSigt9/4VDGssi8wUBmTyX00y7PPtos9TOCZ06SJkeXH/BLFJsbHbtQLTf5Z7JP ajzBRwTa5+fGuXwAmEw9C9K9kbasEW/HAo7nrvIfQGJrifgGwgl5nOIMMVNCczGWxmtdwLFNoh3 kCOcvWyAo5WxnnuCk3Q== X-Proofpoint-GUID: h3uoSwSlVg-bwoeePYSJfamos_MzmvuL 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-03-13_05,2026-03-13_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 spamscore=0 lowpriorityscore=0 malwarescore=0 adultscore=0 suspectscore=0 bulkscore=0 phishscore=0 impostorscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603140006 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 Signed-off-by: Dmitry Baryshkov Tested-by: Val Packett # x1e80100-dell-latitude-7455 Tested-by? --- 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 476848bf8cd1..5997cd28ba11 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 Tue Apr 7 09:17:14 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 2466026ED41 for ; Sat, 14 Mar 2026 01:09:24 +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=1773450566; cv=none; b=ffCRpXM6FSGhKhehijua5Em86m/DMtNJSDHqEelzK4DrDmW2hEx53rRRoWq9EExm+u4pTm7ssDTyqrRCN79ZOA1cAyDoelBEqsARYM6GrEjWnCDGtpNfsiut5igcdD+qOrNvY6fS4C2urOX2rJRxGrRx7w7DF4payJM5yyi+vR0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773450566; c=relaxed/simple; bh=LPHhajodLCFrdH7G7QitIxc+DezXxi+iOPyKRDEeXY0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QNWSu5HENmLzMz1+y8qciLd1T/kEnJZ9sx1q4MkyDFQumpnw3Ptf2rtdFANjA/AvlJJovfVgrlduqNxHEWmrB8d+ue7T1uYd/WAIaYnTgZZ/MB1z+goZumuaf4t7k2Gp4qFE7E7oP/Tl04J8ezzHyidZNAb3bwBSfGbCpfwVPGw= 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=IywVHW35; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=SLfjiD/H; 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="IywVHW35"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="SLfjiD/H" Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62DGHZrh481530 for ; Sat, 14 Mar 2026 01:09:24 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= pzVpX0vOq62SAEgnYrHTEusxqWZeEyyGEwRMXWbZKk0=; b=IywVHW35D64eBKqG BeOFZTrqkA5iVDTNsPer29OPudwL98ljqgD1eHAgkV9NbKltw36SGsQ3qK6QnlxG Hn1cM/F5e1tTwV0G4FB3h149z621eZ5dE536ngDc5GuXkSt1xpVRJDER2FKLPk5C tYpntrKrtFkI0uS6m5iwy08Efg3UCGabyhS2quixuKvUnQY8frSa1zLFazPNJCx0 Cj9PM7qNMbwF0/n9yVODjQOpTxtCno19EEn7ZXLS5tjIP7CHi+4NYXzHCE9y3TzL ueB7XjQk9bNI6NL1rotvjwB3+24vk1ib0brCAapv3woMJLDCkEUdEjaBbj/4HXQ8 j0bYVw== Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cvfh7txf2-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sat, 14 Mar 2026 01:09:23 +0000 (GMT) Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-8cd81ce6fdcso2485253285a.3 for ; Fri, 13 Mar 2026 18:09:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773450563; x=1774055363; 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=pzVpX0vOq62SAEgnYrHTEusxqWZeEyyGEwRMXWbZKk0=; b=SLfjiD/HxdLF4H+nkoSWJic16IUqn+4HEFZNYAf9L+Duc+JElfjc6aYQmJdRAuhwKq E7huWFHDfNgvJPJukfr3aRbcvYkSm8hCJWmscDqHeCuGAC/wSdNMOK030hMRwBBhoGXA siAm6StULztNxMdCIjCwbJaqOvnp5q1NTCxNWYr4sZOcrsK+9IaiavYYQ6qDiYpGdBU+ r9JwCk1JlBsb+tpZvrlPWlPdnGTuP2lorXuDx/E4J/HVarjBWKB87LgsD1DPWtb4xk2J m5t9ZOM8jUkNKJMb9bpV175XsoSrV+3ZETVZEbWCXn0yHx/p45dpl4U+94kxZZefnH1D 7jfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773450563; x=1774055363; 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=pzVpX0vOq62SAEgnYrHTEusxqWZeEyyGEwRMXWbZKk0=; b=CShIHC3QMpNNDJA3B1LgZMQn0F8dFrXfULPr20YlCag9gFnT1BD92qVRN7DnaORszY omoVSvkNvcqFkmQYHjnwCpqkNn9k6It07FFbBaBxbRSgNCD9Z5P6X9W4qoXYPhldi2R9 g1mjrgGhzDv2tiNkD+ho3NHNwsVfRyRvH6458GKlvx+N4cC8kyjauZmCFb4FDI6rEyuF K7Sb8rhhJdAHxrWjLuj6UGDdq0RDgAC0XMDPNVcIomL5M1YPRrSQHEcGI2U2Sm+PPA5z BlJK+MtNSxxR/wviFRS/sFvTmcOdblsSAVMwDO1ZRDWvWaXt0ZJoV23fSTLeqlW/T0s2 QhRA== X-Forwarded-Encrypted: i=1; AJvYcCWTgAwlKFzuWj+C1ImfrMrZv0WOO+dy52QJ8DZlaGP76WDCb/hCnidcNAsTGNZLZemYSFDm087iuSPBXeM=@vger.kernel.org X-Gm-Message-State: AOJu0YzzuRGSU00bCfcL3s5Lb8jn2JAECtbT6JTJjVkylK7yYLO7voTG Xjobt0L+gbetxiMKwVbYoPSEgOJluz1CXWzmupij+CS7X+wCYdzuB4L4qBOU59wQNpa5yW2s5Nm /XRbaz/Gp0vsLvCy8evZA0cutZUgGX/U9Qz04Dq0n85Aks6o304/Jug0u2sqqr9si4/o= X-Gm-Gg: ATEYQzwbYgSPBmAkyPNVF4IA7Z70PR+8G7cS3pi6WHl0OHjhfKDpqZZyhTr6+M4irP9 UxTqM/YfRd8Qa+Slg4xmwHD6djZQZ6vcEX+tFwjgTAVYuLWn8h6VxyQxWx+1Z1kS5QGyjR45bQI UvwCGMVQjmRcRElU4fgH8tMGjC6p3LP6G3S9ZipN763TWcTgl1LXxsgOlnVDqtyY/36A1pX4JaA UBVsZyFiePuUL1Bbdswjf4TD+4h9PAwGSC4+htlDVJUjr8GNty6Yj9QmZN38xOY1rn7Ldr2PnsD APjt5ardEcIvDngcpQPJYBXie9qf78j9jTzT5ekP9bClhSJnnyuVcDhiY3sh9kkPWIzB/81fAQ3 eAO7WW9JdwKOPBONuoX1JJxtDDdlfQ1gCxavzwFLdYxZxLPjgXDIbF683V4paLrNzMZ59WU/Qui 53WQqPcVE6ujrwhyMLk6kQeT5aLqnh2BNoLxY= X-Received: by 2002:a05:620a:3195:b0:8c6:b247:4c with SMTP id af79cd13be357-8cdb59ff4aemr800776985a.2.1773450563363; Fri, 13 Mar 2026 18:09:23 -0700 (PDT) X-Received: by 2002:a05:620a:3195:b0:8c6:b247:4c with SMTP id af79cd13be357-8cdb59ff4aemr800774585a.2.1773450562940; Fri, 13 Mar 2026 18:09:22 -0700 (PDT) Received: from umbar.lan (2001-14ba-a073-af00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a073:af00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a156366b22sm1806805e87.77.2026.03.13.18.09.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Mar 2026 18:09:20 -0700 (PDT) From: Dmitry Baryshkov Date: Sat, 14 Mar 2026 03:09:07 +0200 Subject: [PATCH v5 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: <20260314-hpd-refactor-v5-3-0c8450737d64@oss.qualcomm.com> References: <20260314-hpd-refactor-v5-0-0c8450737d64@oss.qualcomm.com> In-Reply-To: <20260314-hpd-refactor-v5-0-0c8450737d64@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 X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=4422; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=Fflo70A3oSMP6LkHXNPuDEYg6XV8ot0GBkcmgzq2Sd4=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBptLUzSX0Yvt+mbPHdcgYX/8JV/EIlm8oX59QLb v7OgZfSiEmJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCabS1MwAKCRCLPIo+Aiko 1XqFB/9wKZJq9LxL11bSOqiNpbCmdspf5rAtBMF7Lh/1flH7eirIkNkwtuSh1f1lOZmHQod13v5 6SiTzPdY8EHcz9CEe/qvUi5t6qroB83+AjUz7D3BNy3whNHMYkfRdRkX8zcu9V2CD2EG5JzmtRE QALNFS74iW8+b6A4VekcaL9OsCajS3FphsdP+n+i5U3pr1dB8U4gH64SrBBwavuLt6Y7tnP+fJh qNnEfLmfE4yP7Ij/pwJgb2BPxkd9Oag40r8dPnqzwJrpH9GaRzlO6xKeT23k4ZflqtnwuTcrR7a GIUPfSUx5TY5HznvwPHI/oQmPBzcsfftHTDf6N961rqB8DBE X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-ORIG-GUID: GMPCSyf9CuIT5Zoc_dSN6qjYcv_F-O1s X-Proofpoint-GUID: GMPCSyf9CuIT5Zoc_dSN6qjYcv_F-O1s X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzE0MDAwNiBTYWx0ZWRfX4epe0JbOCqp2 lQpFkLXq1t8rouXhJ8gcUHyNXB5D2du6V/+bbod3bAjvM6SEL2nVdMgf5jmVxORBY+MZAbsuEzV 0Yv+dSpGYSyOMwoo7PmkQjQ7elxoA9fg+GSc05zvcbdMAI/wFPdt9l4PJldJx/JLzKAXzCTJdqt TDsAqlMWEPWdnd9vJHbpAoYaLbFT7uOpCVCk0RXDJ44tjA2EmaspVOZI51qYf6DL1czeX1TP3OW T7oLi2KmhyYtZlMsZdGiHhzzv35Pus19hkPVw4B/+Bi4irN2QIGkTxsshz5D8KUdX84NkOGwvsk CkG1NaXk0Vo76vcLk5b56aCEX8jcs2u/v3YtM3v78U0yeWVFR+gHeysu9csT/YiJaJmXftx8caR 3+V3rW8Kzw5OF79ffxn4ta0X4LDEwMQwCbWrY5UWXo6nY0OHSRDO/YgSeSxlBxmruY+8JzKiRi7 A8dEgzWPI/33cM5fREQ== X-Authority-Analysis: v=2.4 cv=BpiQAIX5 c=1 sm=1 tr=0 ts=69b4b543 cx=c_pps a=hnmNkyzTK/kJ09Xio7VxxA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=pGLkceISAAAA:8 a=EUspDBNiAAAA:8 a=jcEwYMPARZwhhGfK5pwA:9 a=QEXdDO2ut3YA:10 a=PEH46H7Ffwr30OY-TuGO: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-03-13_05,2026-03-13_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 impostorscore=0 phishscore=0 adultscore=0 suspectscore=0 lowpriorityscore=0 clxscore=1015 bulkscore=0 spamscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603140006 From: Jessica Zhang Instead of relying on the link_ready flag to specify if DP is connected, read the DPCD bits and get the sink count to accurately detect if DP is connected. Signed-off-by: Jessica Zhang Signed-off-by: Dmitry Baryshkov Tested-by: Val Packett # x1e80100-dell-latitude-7455 Tested-by? --- drivers/gpu/drm/msm/dp/dp_display.c | 60 +++++++++++++++++++++++++++++++++= ++++ drivers/gpu/drm/msm/dp/dp_drm.c | 20 ------------- drivers/gpu/drm/msm/dp/dp_drm.h | 2 ++ 3 files changed, 62 insertions(+), 20 deletions(-) diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/d= p_display.c index 5997cd28ba11..a05144de3b93 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -1151,6 +1151,66 @@ static int msm_dp_hpd_event_thread_start(struct msm_= dp_display_private *msm_dp_p return 0; } =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 + */ +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; + struct msm_dp_display_private *priv; + int ret =3D 0; + int status =3D connector_status_disconnected; + u8 dpcd[DP_RECEIVER_CAP_SIZE]; + struct drm_dp_desc desc; + + 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 fd6443d2b6ce..e4622c85fb66 100644 --- a/drivers/gpu/drm/msm/dp/dp_drm.c +++ b/drivers/gpu/drm/msm/dp/dp_drm.c @@ -15,26 +15,6 @@ #include "dp_audio.h" #include "dp_drm.h" =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 9eb3431dd93a..6c0426803d78 100644 --- a/drivers/gpu/drm/msm/dp/dp_drm.h +++ b/drivers/gpu/drm/msm/dp/dp_drm.h @@ -25,6 +25,8 @@ int msm_dp_bridge_init(struct msm_dp *msm_dp_display, 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_state *state); void msm_dp_bridge_atomic_disable(struct drm_bridge *drm_bridge, --=20 2.47.3 From nobody Tue Apr 7 09:17:14 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 BDD692BD5A8 for ; Sat, 14 Mar 2026 01:09:27 +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=1773450569; cv=none; b=oV5ZIJMls76EzpsVmOjsxTAN+Bqa+OljclDgM10XQnboCXYxWjzSWA0EWgyVhXxWQwTzMKHTNy/XKjGjVjN9yBhpEgVJYtmrX3usMqwIy5nCknSpCCeQE55iHWydhz9cUxSlubdhXdwXAeSnX+y2/WlrWqr90Lp5HMP4spAFy3g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773450569; c=relaxed/simple; bh=okgHbNzqiXYxc/6yXGiXxswgZJigmkKqeXcAutwbh2U=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nDLR9kzrCxdTWfz2OIaPpJnjxADDhKXwgItnU+olyn6fy8baaqbgv5GB5ZqROsF/JmR4hv8dczQY27pndVWeA5ZFaX7CMfdeQz8BtGoxWo2r/dOGeA9SCS94M4uqfa2A2qlAiwe0wLfxkNpId0lPWbxZyHD+3kBs6N1gg2K9k1s= 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=SLKoeO8f; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=AoIRop24; 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="SLKoeO8f"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="AoIRop24" Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62DNH1dL2772639 for ; Sat, 14 Mar 2026 01:09:26 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= PqAtWAY9FAqIvdzkP+oLI4lRLzY7loPC33zOvhTcaJU=; b=SLKoeO8f4dgOy7mS MoRr53rOuDkxR68sbQug8F1nNRaBWSUd6mIqQKNdotob1iuY/7ff5uaT/AzkQwe2 dT3Rj6p5zJ3B2v00PjCto4DYiL6Q+DQZBe90nnwPWAbyZP2x9TF4ThkHW38/Hd1g IlUNs/ghBR3w2mk986widj0baNj1gH8Pi6/YSvjZXgEHjTAwx4p46Hr2BumgLVx5 cyx7pWhrfnh9sUEur4SMUIw95iVbosHqZ3yRd07Q+4+CKa3KgJqNGDjCco+hpmXj EbXINVfrOuBBynmGt8d1DXvXbG1XHeFELKzdOJcM1dyPVhlmBR9u+cgMWvinNr9L zZJDfQ== Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cvfh7txfa-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sat, 14 Mar 2026 01:09:26 +0000 (GMT) Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-8cd7d4cc049so2772751385a.0 for ; Fri, 13 Mar 2026 18:09:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773450566; x=1774055366; 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=PqAtWAY9FAqIvdzkP+oLI4lRLzY7loPC33zOvhTcaJU=; b=AoIRop24O78vVLOLB+Nfe/K8WlkN4uVDKNtvCOnshIOnYOg53Lb77c8tRozRO09H82 MnxmUVU1tRvsu0+3nL6o5Mx3tipiiRQZJ6xciDXfJ2BN9mSzKtlHJkxOEak30Xa9rYyD 6feEjD/NdzkTp1wZ+w0w69Ma1vsv8ENUUoeGqM9stf/gZzcdWAbvGo5cus7JnqZxc9s9 mKk1ldpWG3zTkjRuh3Bp9D5eX0PlVCX7x2it+aIwyIIQyaw9n+DYA32gS0Ltvi58AJhx 2yBShKeq/v7tnr863PSgt4B4EMnx61lukkilKnV0DV+C/UpH7n29Knsqwipf1+xpb3hj oWSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773450566; x=1774055366; 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=PqAtWAY9FAqIvdzkP+oLI4lRLzY7loPC33zOvhTcaJU=; b=C+Kr0d6rBROF0XJKpGpSOZsWxbeK42CDacyAeAScC87TSDHljC6UzZqo5UClrRTMH2 SR3pdAe8AGfFXQYQvfqoSRxf66LwFs9fzqEy+dlFCNg8qRZiH9K0qNjQre6tMgZU0ib5 YO6HSdt7JDAhveXCCNWkhZYTwfWirEKhEVILmDmoYUY4wH79Qxi+vSRc7zWC+UqI2SRe Jip0gFftbR9aYh5YzZEFC52ll4gtNk0c07f+ih+oNSEooK4JkudUx79rLPT8TYWZW6Ow YiOk0/rDeJETelT0Q3iHTx4EVJS27Po2Kw0Xms1fHaN4vB2Tao8JCAMUFjiVIoWbuev7 h/8Q== X-Forwarded-Encrypted: i=1; AJvYcCVJ/VBxDF1hgI6lmSs17s4V78IBhOqllSrHyIjjDeyuBVlpWWvRNcOF7QqTIaU03XCtkpKmYEvvafcKfxk=@vger.kernel.org X-Gm-Message-State: AOJu0YyT5N9LY9EezbEjNhgjMH9xZ80l/BrhIuVeteCBV8tFitbSG0wt juYexmgB9CBXdOXhyHqbSjkSl69QOH+xvJXK/hJJuf2aZcYvpk0CvEvsNO/xRnNnnfYDQjyv3sZ 0U7HoBHbP0PQQZP9fPX+pLJ79AIchXUfsreJ9bBW06BcdedHVP7B2v6FbZZFNMGThBDE= X-Gm-Gg: ATEYQzzpNJBW4uJsP0JVdDL/sfxbXEbAYSWqJ/jVeJg2sxVeqoo5MsTSfBb7G+rVu0k cQ7ZmiAt1CoH3AwKOXbR6pokEsnsODyDPk+1bgofJORfSEdEtnMlvgXo3k+ip+TuBIetA0mQ09K YsJGnzk3NX45ZWOmaD9Qzvvepgk/IFVJ7jQXELwZohV9xDmDkXHYtpMJONpCBLU6CBTV0z+W3o7 +GfNbV4wHSI+FNW/SGWKacH2jtu4IyqKxIGcv8pCWHjoTmKM6hmpiSHM2nWBUjec3KYHCbE/Dj0 5CMvjt0u7CLf0uqkHksJH6QkfV/KJvvIsyXwPXoHyU3kkoMNnGoCHbkFNCpebErbzpNQlkss1x5 FW9HnUSw3TrBUevTGTsAbdsnC80neb4EjSHO3Jnp7Eu8+SFbodj8qWhZtg+lsJfQr2dEtNvYJbn FPMqTARbZevknOFqhzWHEv5pCREfmULXRaVaI= X-Received: by 2002:a05:620a:4623:b0:8cd:8d50:169a with SMTP id af79cd13be357-8cdb5b8a3bfmr755063385a.54.1773450565943; Fri, 13 Mar 2026 18:09:25 -0700 (PDT) X-Received: by 2002:a05:620a:4623:b0:8cd:8d50:169a with SMTP id af79cd13be357-8cdb5b8a3bfmr755060685a.54.1773450565543; Fri, 13 Mar 2026 18:09:25 -0700 (PDT) Received: from umbar.lan (2001-14ba-a073-af00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a073:af00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a156366b22sm1806805e87.77.2026.03.13.18.09.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Mar 2026 18:09:24 -0700 (PDT) From: Dmitry Baryshkov Date: Sat, 14 Mar 2026 03:09:08 +0200 Subject: [PATCH v5 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: <20260314-hpd-refactor-v5-4-0c8450737d64@oss.qualcomm.com> References: <20260314-hpd-refactor-v5-0-0c8450737d64@oss.qualcomm.com> In-Reply-To: <20260314-hpd-refactor-v5-0-0c8450737d64@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 X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1716; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=JI7bZYAZgZZoG3QbCYkVN62ORKAZ93CC/pbTrYikaXc=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBptLUzvSvRU0YMLXy9h7xpFPKQwsTjACPD3ArMl C4jgvcRQx2JATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCabS1MwAKCRCLPIo+Aiko 1Y4xB/9UaFY1JNob4h3aSk0mKkF9ebTmHHwh/OdSZS8sAQZv0mNBREBQpLU/Qe/X6aH9RJhGqo7 xpVmr3AT8g3gVQO8sryfGijOJXexdwMrqYAnc4u4OWC2Y70ilj+eIMVhq9E3KHXf9G2owxZRwng WUSOUYGhi1QYeg/2wmS8CTSAW9nU9CDaovmwgM9nLEvaZJYF0I/9etpKLH+RjkGnBP7HTUkpG8i +N1qeLI7owHTltmhNxW/zrnFXFIWy6bKODuSN6KM29LLYMqhalSycosziNdcsjo1+dpafBi505u Dms6iPoG09CtOlgBQC4JqqlSVYSTTddTa9QT/9ZgqCbYSAai X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-ORIG-GUID: PHNJ9neNbtr-goEnnXmi5MKnXqOcfSks X-Proofpoint-GUID: PHNJ9neNbtr-goEnnXmi5MKnXqOcfSks X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzE0MDAwNiBTYWx0ZWRfX9zuAkDcH17SP s57GHwKNRIziVlEZsEBYNcHoXKsMgCZBpacAUZbHPZ1p1RFDTPA0uSiZt8tFrEqJaChjWJAhf6y aH8AGjpVly7k8DRgWZ5XAE+Wn2JtOZi1J8aaeNrl59VY2Z6lLH+DTnv0bBUqk6E3tGBMMi02O8M w2E79sDY6HbvMPUKF+l6SqOwJxNTrYD6u8Udvq8hdtp5bU7buuT1pTX6bUE+O7wPJ/MgR7a+nNr PVpX3SArBFBTmZI4oLvQQIccNvlcR2LrQBLm1ON2VoT+6betLdxOvxt5lrx6dawVoRKVPTJ5P0n bdgVdFS+QJ7JmSZhjCRUWXaWLjegDJrAk3+C55R9Ti3Zf0skcv5JTAz4HI3HGndk0J47+3co5ww YKMCoB88eTTNaPLlFGuysd41vYWrZH3Cn3fF2aPMKVLsSQByqbdYhJTJqeEC7ZqZi5Ztt430pk+ VNN9yLwxE85aubZYhnQ== X-Authority-Analysis: v=2.4 cv=BpiQAIX5 c=1 sm=1 tr=0 ts=69b4b546 cx=c_pps a=hnmNkyzTK/kJ09Xio7VxxA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=pGLkceISAAAA:8 a=EUspDBNiAAAA:8 a=IoBVowuyLm_M3JZO-XQA:9 a=QEXdDO2ut3YA:10 a=PEH46H7Ffwr30OY-TuGO: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-03-13_05,2026-03-13_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 impostorscore=0 phishscore=0 adultscore=0 suspectscore=0 lowpriorityscore=0 clxscore=1015 bulkscore=0 spamscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603140006 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). Finally, call the plug/unplug handlers directly in hpd_notify() instead of queueing them in the event thread so that they aren't preempted by other events. Signed-off-by: Jessica Zhang Signed-off-by: Dmitry Baryshkov Tested-by: Val Packett # x1e80100-dell-latitude-7455 Tested-by? --- drivers/gpu/drm/msm/dp/dp_display.c | 10 +++++----- 1 file changed, 5 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 a05144de3b93..e7b1ed5491c4 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -436,11 +436,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 @@ -1695,6 +1690,11 @@ 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() + 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 Tue Apr 7 09:17:14 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 34CEB2D46B2 for ; Sat, 14 Mar 2026 01:09:30 +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=1773450571; cv=none; b=FCeJWTioMeGbdCXHZAsSTBLgxiUejrFA8rl71xaunJOl1xuQXIPPSM4o0IE1VJTMBCheyp1q6hUH4mfdC/W9DiAR2hvJMXA2mKcBpA7BWkgR2mr/jL+YebGOdaFqAGO1h1fXoJGhVSDitQSXDRDrm1vDP5t8ce58tTNnd32QADg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773450571; c=relaxed/simple; bh=I7G7MN3cQLSG9zzE9VRfHedS7xYGG7oJXnJMlN7BAkA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=s9ZEI1xoXX+2mfFxGI0DT+AijNPqvUm/3v6fAxK6ajHi4enpKnegwcN7DPBceOShmjfxTBnTAXWwgk4TuF82nKO5vZng4CzifZGbQm8kWD87tjT956Npwf7iOP9UHYX0TGlmzNRG5VGkQCXostAz+QZUcUqdxtW15V2t3oueoRU= 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=I/ctSXwH; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=EQw0VXUH; 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="I/ctSXwH"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="EQw0VXUH" Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62DFXGhW437734 for ; Sat, 14 Mar 2026 01:09:29 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 8tg/xGuicw7U9Xav9pczQObs2YXJZYVzFJvZGTJOhik=; b=I/ctSXwH52K3mw2U MO548GHScOUbbjltbKyP8aaPmm8pYZ6Wc7BCE7DyH1BMCjewRp5osSdAleD6fsJD PqmJ4bBOxLzT5+GeObKc8y6JntnM2mFZQgCtQiI2Wcvj7iHJZMw38NRWQHwZbqcz fg4pq2TjZt1XgcjHGU96dzRdv0GB8/pMTFcvErBT7qJ3ohBYOouyQtKOwXqHzoKZ QfSGhTkBQEGiDV/tQQ+4r6B4KUJqo4ybHEHXFJnTqPelbkYkPj4lLFh+aG2mZl9N CKDOzcpCqi56c3h2nUJJpoRjmHlzLjcZTAJnHl8v+eu/FHjDhvk20ch1GaPo9jK5 M8Xj5g== Received: from mail-qk1-f197.google.com (mail-qk1-f197.google.com [209.85.222.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cvnax9m0e-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sat, 14 Mar 2026 01:09:29 +0000 (GMT) Received: by mail-qk1-f197.google.com with SMTP id af79cd13be357-8cd91c0262fso1805499185a.1 for ; Fri, 13 Mar 2026 18:09:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773450569; x=1774055369; 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=8tg/xGuicw7U9Xav9pczQObs2YXJZYVzFJvZGTJOhik=; b=EQw0VXUHcpArblgkXLjtcovaKrLajgm2u7O+9GfiTNurgH9bA91dsjFLNTjmhjtvfe txebe3rRJqGXWq/lJYnaDLO67UU+mWRTokDM4ei2f8+uETRG+hxwVy+VP7avXvJ8rhFy xD9AcBpu+tzuT+N8Yr5dBM6Ed0SIoSck7FoVLLZV7q9Qzu9QTSu4YYSA6wR9J9Go+vtj SChxUKRB+PBeAbwlUMIDDPxxWgTvkRuDvD6jADYRPNS08zVyGe0iABZ1TFReWZTWalaF wpJzCnBQP+QbeWMdsV32EjEnzPclWw/57fNoEUWZv+LTT6CJCq+6wn+1kDDKcvYgr/9v 06MA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773450569; x=1774055369; 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=8tg/xGuicw7U9Xav9pczQObs2YXJZYVzFJvZGTJOhik=; b=sLcpENDDrYzFoy+/K/PMkjXQXVYA/k2JuCm14quAH1nqJ7aP5S3JZaDinmDSGrw+zm ANbTiHhwhuVSQ40fwLdwUUm0aUflTo5XkCYS+0wpvF7+vbBjqQ+2bSFUBql/uLBfrmn8 1qCbIj3zGwXsJ1KQ+tbQCEpCJ23d/p4Gq0+RJdsSTzAzrngHQudg/HInhRaHfW1vrs8Y wiCKe2AmjSg6We7gqwOTS0rKgKhe3oSWf6qoPzYpmojz9mSKiGV/WKtQkXnLMRmozxh+ 8yQyJCXQF4I33VbXvGMICPNLyATji2/NHpOgRFk/n+O2MlaBgftqkhCV6yV/d5ABF1gd 6Ibg== X-Forwarded-Encrypted: i=1; AJvYcCUh5oLXyngsbIze+ULg+HOV+L2xxXOV6xXMxhCDEwvoy65OaZL62DpfkrLhhZvoAzHi1tsv1a624LVL2Eg=@vger.kernel.org X-Gm-Message-State: AOJu0YzVF6/d7mA58Hn1MPoLvsz/BvRBVe61S0tvKh8ivBCDKSUOU2ic g+VWa97c5ehemz4OqLS3PjR+jRq1ITL4BTqUpTbdptqLzlpCVIwkQV4xNtZVwsUF2yhhV78DR4E tw2RhZXqmrVeXpuNFd/s851r1ln48Mr7zFFTp33+4PZUiMFQ5R2vgLH7+VKabovc7C/k= X-Gm-Gg: ATEYQzwFar1ZieLcGvUydsjtQRsSCI86fWlIyAk7leq7OPkwQvcIvfIUIAr+kU5VoBs 5dOgi7Z/ZajpeX7rRuPrQWSuvWDTrSsygtz3uF+H34KhvgAv7g+ghnrUmoZikFT5UAUyIinT/DW 9tJ06Qz2i4opx217KB2p/vFv19e4hIXua5vY+GadTrxaQGwyJckWoUgCJSeFpDbJTFZcGJdP+k6 +LRiy2B9NPTOImWzj9vpSgAOBT2oF2rSkx4W/uFuWnJdLYaT12ANpaxMAL7yGMdWTTK0Xsc8b7z iz+5i++ZM+38GQ2YUc90bcNk6ga2yZQF0WZKVn2TaF1VtPKhRxo6XHVZ9rcfxXz1pcAzNU8mejD jty1hZpGKhDSvd9+wTQ96oXuG+f8eUh5KmgcqoExmMcXyuFzC4Rs84qsuzEP8AwSUJBmDCtZHOo psAOGjD2Esevu1NtIz3TQOINpkx6aJAz/bSxE= X-Received: by 2002:a05:620a:4609:b0:8cd:8a55:510d with SMTP id af79cd13be357-8cdb5b1b198mr785837185a.48.1773450568644; Fri, 13 Mar 2026 18:09:28 -0700 (PDT) X-Received: by 2002:a05:620a:4609:b0:8cd:8a55:510d with SMTP id af79cd13be357-8cdb5b1b198mr785835385a.48.1773450568179; Fri, 13 Mar 2026 18:09:28 -0700 (PDT) Received: from umbar.lan (2001-14ba-a073-af00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a073:af00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a156366b22sm1806805e87.77.2026.03.13.18.09.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Mar 2026 18:09:27 -0700 (PDT) From: Dmitry Baryshkov Date: Sat, 14 Mar 2026 03:09:09 +0200 Subject: [PATCH v5 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: <20260314-hpd-refactor-v5-5-0c8450737d64@oss.qualcomm.com> References: <20260314-hpd-refactor-v5-0-0c8450737d64@oss.qualcomm.com> In-Reply-To: <20260314-hpd-refactor-v5-0-0c8450737d64@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 X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=4138; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=vX+57P9cyOcJ2Ge82Wk30SNt2ZHf9zxIx/x8h+QULh8=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBptLUz4IAmlxbS1UTnKvwkZ4YZHxl9HswZRItXb bBeZtxAb8qJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCabS1MwAKCRCLPIo+Aiko 1TsmB/9cwJSdIlXYS4OWflFP0DNWpVn7iX4Ula8PJ9ALfCCocThDLOj4TvaYaLwUvCq5KXFwWwJ OhwGdUJQ1k0PyIJcZt5fNhXctUp4g0qDvxghT7mcQnZ7hGrgs5TB00zgE1l3xq96CcdujiX5j0z RJ54lDHtzpKfmujGOgjl7CBvgMOUqurCXl1YQHu+JxqDmB14WE73vOndqw5fNjU0ziIm8XV9qHX zR/nO9hsWQgeiTmVEzVUfSocnVUtsnxmaXSr44TqKKDF8yt01kZpcD7OgOYNlWmXBhiV+FHZtMe lhZ/r3pWTA4aMPdn91DzvEVrfwKqne1mhNZ1ai5nGxAnZSar X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-GUID: yXNLNVnPgKYIWuJHIj0QsCzI4CvhFmi3 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzE0MDAwNiBTYWx0ZWRfXxDqCVWD0IaYS RpAbtsUux3vFeEct/voVtW/uy93yzccbScYunvkMIQiyzCD+ZE8jAbRZX1Z9WZBQGhL1TjoIbv0 c5vxHtveHQqEGFlY/wZf2rDRLPjXSCKaiV7afVAAgLWdcIl8wnq6sxJXvUGJd143CoXpCXOcaiR lL6q+HiZ5DnYUgFEIw5SqLGRiCt1oBOL9wq1OkMkhoduV3CdJ8Xg5mg/quwgqUt+/mrpBQTzvvv XMGYMcMpWFu/4/OX1gsRhjxUlrt0nJKmXvKOaWeUE98SwxpfJ+jV1kKq2t0fRNUp69TYu1ns06O 4/8OYCQvON/vIIi0gV33XVFzKYo8yWFhMaI/z1vCeDLh4IKyWyGBoR+qutmTK3KY/aCoZSnvV0K KN+aMKIVArGnEWZWgyIeQbuP/Az+Qee79y2XBdvaF7Z8MPGukE/Z3ATr8uwmxWPPzox9Vdjx4H0 WtsNuNe4KcsnZ1+/exA== X-Authority-Analysis: v=2.4 cv=X5Ff6WTe c=1 sm=1 tr=0 ts=69b4b549 cx=c_pps a=50t2pK5VMbmlHzFWWp8p/g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=pGLkceISAAAA:8 a=EUspDBNiAAAA:8 a=gW5k9mFOS1cgrKxYKbgA:9 a=QEXdDO2ut3YA:10 a=IoWCM6iH3mJn3m4BftBB:22 X-Proofpoint-ORIG-GUID: yXNLNVnPgKYIWuJHIj0QsCzI4CvhFmi3 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-03-13_05,2026-03-13_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 impostorscore=0 phishscore=0 lowpriorityscore=0 clxscore=1015 spamscore=0 suspectscore=0 malwarescore=0 bulkscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603140006 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 Signed-off-by: Dmitry Baryshkov Tested-by: Val Packett # x1e80100-dell-latitude-7455 Tested-by? --- 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 e7b1ed5491c4..05c292e27126 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 */ @@ -343,17 +342,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) { @@ -377,7 +365,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; } @@ -437,7 +429,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; @@ -506,7 +498,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; } @@ -527,7 +519,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) { @@ -1121,10 +1113,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 e4622c85fb66..f935093c4df4 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 Tue Apr 7 09:17:14 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 086302BCF68 for ; Sat, 14 Mar 2026 01:09:33 +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=1773450575; cv=none; b=dTdMBnnCT/CIVv9ing75T17J4FB8MRt2roWL6j7aQq7YUGm1NAO8RdPQ+/ggkl+qgV88C8UaOerPdvnwiWCsXEKQ5xOALe6uuzyCNWZFBubHr9VImTul9G3a3Mf46eYDW4cumo+5HRilUNx7NIMjZoE47LKZPCZrhzYMZ3ugy0o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773450575; c=relaxed/simple; bh=uXjrwf6kVU4yfPAvO2dRImodIsQs6Els2Ljkho09jGo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PcgoOGDxylpmI207SwXp+3QjVs2GmZ4pGzc6qfpbggsCxPEU/mi0wMtJUvhA99qEnw64MtR/k+10nuK/xVj40f5tPdl8QcJD/jjIBHPIhNLWYA5VGn+XwD9GkSZibGFBa8vX8TZEGGWKbKs7d7+rA/35ZiCx27KWXDtdTKYYNBU= 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=SIAneFIH; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=jfZKf1ok; 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="SIAneFIH"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="jfZKf1ok" 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 62DHihTp1499087 for ; Sat, 14 Mar 2026 01:09:33 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= XHiLCL2Q/VJoKNHmnopqEVjk+hwroQfPTl82ni3pxPw=; b=SIAneFIHYzYtdSvw i9c457l72+BFGZ/KasS3k2GREWqF6viYExSWOfuXX8gmy6qwS6Io5Pods97BxbJu nckolsBAE7yW+SOf0f+WKlKS3jCDyCKXUsWC6unEc+fVbB1W5z1nRFexUiFyE6xv XNdMPsfgPDrjCvUy/oHi26aKwInwIWXvf3xDy0eIfmpbAUM8r9Lng938kNTViaAY R9b1cWohv1UUFGfagfM82n4REkqPv51u/Jro5UVnMg72EYPlnkPCkSdblqvD1GBA YAALyr0aowIdAqfiJaKbdoIPeO2jbJTkZV8UmW2Q/YOt08j4wYFNnCYMtOEQFIPy iTBHow== Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cvg0hjsu5-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sat, 14 Mar 2026 01:09:33 +0000 (GMT) Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-8cd820c6a4fso2155115985a.2 for ; Fri, 13 Mar 2026 18:09:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773450572; x=1774055372; 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=XHiLCL2Q/VJoKNHmnopqEVjk+hwroQfPTl82ni3pxPw=; b=jfZKf1okRF2BLVPXPAAuI+j5QH/KoS/LWQM5OmjvyPBCfPp2vRESpXNbgF8qdut6XL EEFlkwthkerJ5oPBXl+hlKsz2KmeAu61S986g2Tla8z/amyEAJjUC/UZDkAIqCq8m5Ms g0c2SI9ANC3B7gRyGbe2ah7q9jylXnJNzCclI5/mjUbYYVHsIpuBe+odzzUZDE9T+aqe Sm4q2YOiDiDsxffp7Vx/YXG7O5p+J1lIphiK+mYpK+COTU6UEZ4R7bIhdPUNgNkWf06M JIs50LIqrGYyBdDfsCsnUonoiBSRu/pDna2ntRXV/vpg1eQnQGJqz0hrxvLkLYwRQaWR JNfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773450572; x=1774055372; 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=XHiLCL2Q/VJoKNHmnopqEVjk+hwroQfPTl82ni3pxPw=; b=Uf5w8fYuvVPrKuZIcE9qUJAjZDvenCFaG3ogEkiNZ0TdVo7N934DfzylSpRc/wTuS5 EionnJ96vDcZk8HFQGNaYl4Gp8tAaIRdHzpKCvlXMVgXH3JrV1/YvTdB7mFYSvjvi5R7 RCvyZIO4+rfAnCKd8gW97fP5cMpOrH1qlfSDS4Oj3U2MuPXAj0HIB6aR4uWBGntrTQTr EWK33ixiauL0g/XxstYonkSS67y5Rld6ycW+guXl54lTfenRAj1nNx58peqt73vCgGio P/X6z2ZPwuzmmYDuL8hoHUqyjq8AwIMr0z51315oRBOT283az1DcKGBSGPli11Wj/J2m IiYg== X-Forwarded-Encrypted: i=1; AJvYcCWlL9hgVlW2H2HhYklzX17Tuao0ChA6VBlcv5WLWi8e8tgey6gfy8wMXd1j6a87wC3C94IRWKL9SFnv7ko=@vger.kernel.org X-Gm-Message-State: AOJu0YxyJULmf3vuJSOq4NrtIzTzuUG7MWOJz4qigdiM0mkFPLiZRXIu Ou6rLagSbwuoWavhigLXzo4wdErhhIDdu1ivIsXro/eL6k6neQod0hVWYij6sA//SUYQ3cPZLHt TTBv9yaaryj6eyMz7IOXdQtfQNses7LUSoQuiVWoqKlZKJmNHOgaSu8o5gjcHojoVNI8= X-Gm-Gg: ATEYQzxUcD4LDGovZ19fZc0IcgdYwPmV28sCB2OzSmW43uqZx1F3k0EaIkTCvsySkIQ KR0AnCHYl4GfP2BHqqcH9DTf6Z5UEEX/eERQDgOvhx2Hylxu7NKAD7wYS0FUlZd679mKe4GmJtQ cyFRG15iipOqPWWvjJsrRKl01jD/DE8Tpx4EKjHsFAfTHANRAQ7Z+02eWx+xVEFNgOK89cMzSeG ddKTr3yrwgE0xdkKtuR6AmTfvQJMb45BaQDfYtbNyjKOvoCIzSwSsCZvCZGCLhBApwDkkp0KVdJ 73M8jmZmvJ5T1z9wMt0Jq8HI+rv/5RWc/Wo/aYKcKhNl/OHwErVAwnYSM+Qwywoq0O5CbZyETtV twew0fTYpEYsFfZeIqcNLFO2jfslGkp2ai8gMHFuuiiWFyRJO9nDNveCI6I6Y9TfIMB7AFWWinn arTSbUzWe5bsg59n3J1deCulRAXPP+/JPjNxY= X-Received: by 2002:a05:620a:40c7:b0:8c7:1986:6b3e with SMTP id af79cd13be357-8cdb5a9e986mr769564385a.32.1773450572530; Fri, 13 Mar 2026 18:09:32 -0700 (PDT) X-Received: by 2002:a05:620a:40c7:b0:8c7:1986:6b3e with SMTP id af79cd13be357-8cdb5a9e986mr769561985a.32.1773450571974; Fri, 13 Mar 2026 18:09:31 -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-5a156366b22sm1806805e87.77.2026.03.13.18.09.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Mar 2026 18:09:29 -0700 (PDT) From: Dmitry Baryshkov Date: Sat, 14 Mar 2026 03:09:10 +0200 Subject: [PATCH v5 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: <20260314-hpd-refactor-v5-6-0c8450737d64@oss.qualcomm.com> References: <20260314-hpd-refactor-v5-0-0c8450737d64@oss.qualcomm.com> In-Reply-To: <20260314-hpd-refactor-v5-0-0c8450737d64@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 X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=5908; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=uXjrwf6kVU4yfPAvO2dRImodIsQs6Els2Ljkho09jGo=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBptLUzZ2VstDQcB4PSoYDcuWy2wYNQsofcctUxZ JuPfGzZpHOJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCabS1MwAKCRCLPIo+Aiko 1Xx9B/wNTzCyzrkjOiq6O/FZ0Q5qkNJinQZmVe6SQM5AmzOtzXD2KKnqSOArT57vXmDMBsXYPIx Dembn3NJGuT3NdbV+BG5/udtsbjkh31ptutuVZWmAW/VLXaBq/57EQyUdQM5NvS7iejHuyp3Ke6 2kL0643sIgryGo/KILVpsSUDLUiobOFEaEak1riNis8EEUSHjvBQkQ0nD0fcRPYIZAOQFgxc6d+ OzjxOeGLCFxY17EXsjlaK4UYlj/8aGmg2v1f4fGUdLdkaLIAD7mWCrNwzPlI00+6PgCS9Q08dA+ ekVY/6QQXtSms0YTKXmpHoMt+iFwF5NaA2iUoHH/WpgXmNMe X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Authority-Analysis: v=2.4 cv=T6eBjvKQ c=1 sm=1 tr=0 ts=69b4b54d cx=c_pps a=HLyN3IcIa5EE8TELMZ618Q==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=EUspDBNiAAAA:8 a=zd47t_UtYfsHpvN5YEcA:9 a=QEXdDO2ut3YA:10 a=bTQJ7kPSJx9SKPbeHEYW:22 X-Proofpoint-ORIG-GUID: sSvak5NXP4ZjTET5s6nhfb4I2jgTEesW X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzE0MDAwNiBTYWx0ZWRfX2sTHx73NOR6u wgZ30zUX/sF2nshbE9S+O8ZUCkTE+DPcKdh6ASU6P9xqXo91l/5fT99O25gEQkrd1O5ES4rXjyT Y/5g2vWPuCSMAce2y6tYa7aDQVsW8SnJxirxDRv9xzabPYmUIPvCf3m0879G28hgySwWQZFWBS8 E6mImXDcLfI9icQeLxz9I5ToJCFfHD+37+sXQuQBqoA7LdHIbr5fo7VjU+gnm2WjO8K84gpH0RE CZMG1yAlhkIIrxP1IQYIFd/OsdWGI1bAQO3eDGa3NRCWfhBE0MZGo5v/4FGO8KZuiaBAoTaV2FW 0i/s16T0FIrxOs70jJtu6kyMyKaW5JzUU7J2CkOqQZJFiv2eD8zXUKRxL0R++7wgRM6GwVp+kvS DXgGvwLMlOzm6HwR2RmyQ/4vJGb2zgCJIqIHHbPVEQKMg3OXZOmH4Tr0oC2Jmp/XMVU4KtCtYqA 5G3ZeqOeECCBbvl2WZA== X-Proofpoint-GUID: sSvak5NXP4ZjTET5s6nhfb4I2jgTEesW 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-03-13_05,2026-03-13_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 spamscore=0 lowpriorityscore=0 malwarescore=0 adultscore=0 suspectscore=0 bulkscore=0 phishscore=0 impostorscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603140006 With EV_USER_NOTIFICATION gone event's data is no longer useful. Drop it, removing also the argument from event handlers. Signed-off-by: Dmitry Baryshkov Tested-by: Val Packett # x1e80100-dell-latitude-7455 Tested-by? --- 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 05c292e27126..bc4078c229cb 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 @@ -218,7 +217,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; @@ -236,7 +235,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); @@ -576,7 +574,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; @@ -602,7 +600,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; } @@ -644,7 +642,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; @@ -706,7 +704,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 @@ -724,7 +722,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; } @@ -1079,7 +1077,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 */ @@ -1105,13 +1102,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; @@ -1212,19 +1209,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; } @@ -1649,7 +1646,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)) { @@ -1721,7 +1718,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 @@ -1843,7 +1840,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 Tue Apr 7 09:17:14 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 B7A112DA75A for ; Sat, 14 Mar 2026 01:09:38 +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=1773450581; cv=none; b=noSAuTT73BhQibgYLDNuyqAoyW6yCHT5YAeRT9b6Yp1viI1JE8uwWweVwXE6qvVA+R30x9r5jU2bAKu7mxXa2Ty7DaGUh2sr3LQCrukO7VS4CtiahEhzMHMh035bwegWNK1Akb1i3zSfoEi3NzNJclGqIyvfsH1PS2b3/e9Hg/Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773450581; c=relaxed/simple; bh=MQAOAijklq47bZWGfTVyKOrZZ6srabmc20fUFvToOvQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=uDue/Qt3m0UthZdPs7AEZ8+KYNeBmTYg829nxpIsdiLv59ZVjnjuXrMjZLbrgeKzwJCVnHMH+gCWQ/+UD6XMEIpH49BvGFM8B/MmuCf8opHkl4rSge/ZwKjLQyJx0GXAl35QeF9ebLREOFjdC0zIcD6qnke2xpE7RzmlbhmTJjg= 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=IiL3cgHG; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=K8fdDQMg; 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="IiL3cgHG"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="K8fdDQMg" Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62DGUwae482058 for ; Sat, 14 Mar 2026 01:09:37 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= ZZatLPKoHZzanwrWmtKdP3sVgEHlttWLJE2LgxI9t3U=; b=IiL3cgHG9IRFVAC7 DmhSNjjrbd2kKdvAyATxAMg1Cpr1OoMF/VQozONIJXNgGlHyeG3tgfHjVkF5vXl+ 9hILNPg1J9r6CT3TKUltVNJUY0VIRW7iGv+9x5DN5o65kkYJPlqcHZxJytKv+QMq ttkmQGM5CT2xdvXhfB8IkMQcSfLTUlOO/PQcKjmMPvduORTGGOhG9oGq/rjFlN0V 5r4a6zwV9yJXORgXjvtPlAVS83nGrTQ7/kAEL8vhhwF+Ex4Y4xqnxkFsupLBTSbu P3FS3vveMj0x4+5JdcaA3jiZ11LJnK1oQ/s/C1oB4GwX9xr2/mIOp9HcznlxGPpS wvIo2Q== Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cvfh7txg3-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sat, 14 Mar 2026 01:09:37 +0000 (GMT) Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-8cd77bc8186so2553885785a.0 for ; Fri, 13 Mar 2026 18:09:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773450577; x=1774055377; 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=ZZatLPKoHZzanwrWmtKdP3sVgEHlttWLJE2LgxI9t3U=; b=K8fdDQMguJmhWFYVHgnvOJLHEiiFtuSsy96xWRy56b8GXp2n+cxpABA6rtdYYpN41Q lLOg2kEm32xI+QFbBcqPPShVnxe6YDZDpy6vHI/x2+975VWLsQr9VffKTixYog0erTep g4j+kGoxhWeT+jIvfHbec0MLlo6x0DNHsYt7y37kUPtl3gtCe4m3xz7XGoYlQ0MvQsFj qIm/kScGm/+30kJVO+TURG3GZDwFSPbLIErg0i7S1rgzMWTGuQMVwLkfSh6cejk8eici uRDP2OsOzP62DqytHbtcReCpyQXIpezlfWRGW5epyj16wJLrBkOQvTy9VCUFnmtr3w4S Pi5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773450577; x=1774055377; 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=ZZatLPKoHZzanwrWmtKdP3sVgEHlttWLJE2LgxI9t3U=; b=SPWuEkZsOKNqe7fBXF5WwQEITukje1XJ9vFmCLdhstv3lYVfLLLqNgFTtU8bTOQzQa up7nvF+RCnZ5iZweA1NnzkfaKJc1KlAm1JfpGQk6AsZ38MD+kypr8Fr1cJptHa7PmBKU 6lJPWcXvqAumtnmLfD06qjP/qBwnEjuJkhYoG02NTqdZcOi28Zs+MgLwR9y59EyTRCJv yl2TKtkfqcTEHj4aJ4KqZ6Vr7spho5O/+9WO5ow6nKUQs7d5m8i13iqm/i76AZLRjpGY dInpK8LJ40ezugUMK1MDLmmPpHoolLhRTz2qrer/efnOiln/9l8/XFty8tOCE7WrrFVF z/fQ== X-Forwarded-Encrypted: i=1; AJvYcCW+6XTCzn69LQD4SASd+OUZe9rV4ty57nba8uMG3jktB5P/WPp2pUvwMUxc8T0zmpLInxsHDbyAXB+1Ops=@vger.kernel.org X-Gm-Message-State: AOJu0Ywr6wp/TUY8fIRiE/aojahYQ0rbTJQOkOkRSB1wwF/FjnpRpc8n c+fau5cbxw61fKbXdH543yEbb4ldBHfMr8yR2nqCFcSeshTBJ3h/WKJW1a2lj2fW3Tom43q/eG+ fpm/zZlJ/2J6eGqrUa/heoBga/CSpb8PwknFxFLW294J8DNRcNvrF5b+6np6jT6lqO0M= X-Gm-Gg: ATEYQzxgDbWTS36K1S4HLBX2dBOQh9u64xGWut1eVEY24TlvNJeHqC9yY+b34N+YD8J q6O2w3rIMzpI/d98TWzMHwh+iFDI209RZIop7+c8BeSh2xMld29trJCeCWUrov/WfUmQD73u2Ca Ed0itt5rRG3dOwaHrT6gKSOFvQO7KnbsV5AHuN/N2aLnPHiqAq84ydcbykSnBkeD9MuVpzybaAp n1QyPv4TszyNhxE71MlETjHlOFcht+8fovJydzPLe2sMV0Ar0NXMLt3F6VDw4Qp5uLiV3NsdMhF 7APwEEirGHhqrshQa4Vod0CR2cUGHmBrsMaqCU8jDBW4V+jxzrYfLLIiKcMLq9s5+JNgHVGGPcJ 3AdbWwFW4iRn45vPmkMPC87l5o1T6p4+3J+VGpSOxySgHE2yrQ4OI/Z6UGJA8mp5pEshQixYca7 Y+ssCkY+fbhsGAdF18PvCsOKTA72SgehsmR1A= X-Received: by 2002:a05:620a:46a5:b0:8c6:a539:55d4 with SMTP id af79cd13be357-8cdb5b5aed0mr784249085a.48.1773450576565; Fri, 13 Mar 2026 18:09:36 -0700 (PDT) X-Received: by 2002:a05:620a:46a5:b0:8c6:a539:55d4 with SMTP id af79cd13be357-8cdb5b5aed0mr784247185a.48.1773450576006; Fri, 13 Mar 2026 18:09:36 -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-5a156366b22sm1806805e87.77.2026.03.13.18.09.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Mar 2026 18:09:33 -0700 (PDT) From: Dmitry Baryshkov Date: Sat, 14 Mar 2026 03:09:11 +0200 Subject: [PATCH v5 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: <20260314-hpd-refactor-v5-7-0c8450737d64@oss.qualcomm.com> References: <20260314-hpd-refactor-v5-0-0c8450737d64@oss.qualcomm.com> In-Reply-To: <20260314-hpd-refactor-v5-0-0c8450737d64@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 X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=32049; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=nsafDlTUku1IO76CB4+MgqhDpKVOsXEJotRmXqknq88=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBptLUzln6hdZ18E2eX2X/bxW2TzPQQXgv4k/ws4 gnGcOUUPIeJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCabS1MwAKCRCLPIo+Aiko 1RxWB/9x+cFRMOAozSX/mn82DlbWGocW2sMzPZD+wP07hR2AwHYRBwGQ9d+gPRDPUYRPfw0Q64B /nCUSiRveowS9smXhybBdwQ5I8ZvJyfmRBxbf45ZpSIsKXgZum4J6UaHRWuSFOfnZuG+Y3/0hbu Ipjeh9ITarqKlRtkgPwMJHa1FoAZytIvcrPJCYUtV970QgQCrIkXIDbIVnUxPjzRZLpd/0RXgJ6 Z58kkKLGTjoiMcEpI4bQzuY8IdYsAUckf56xV3/I23ZZ3GLfz7WT7P6yaLxFdzEv0712ruQxs3K YH+AubwCQmAbjWOcDQ8DQ+Tp1r4eiF4hxV4p9S11PAH49DVY X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-ORIG-GUID: 7XBMQwN9W8tiuy23B146soAhMoEH-wp4 X-Proofpoint-GUID: 7XBMQwN9W8tiuy23B146soAhMoEH-wp4 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzE0MDAwNiBTYWx0ZWRfXzeuiIdqTra9n BuZUOl9HAAclyKGLPIOhYzJFjbrvEwZpz6OXM/UxTzuS3g67dBQXu1pef93VNCBtkjRxvOfWmQE AeC8EtNrT/hCNNiohayzvui8yhdNkvar1tokWgzps+Lh2CulNA4DnkwQ48h8ax+DL0slMvIyhhY qnaFZRupi/hIFnf7zosK3o5Vy8QpSmjXNgIgJtITtf6suHS5F+l27wb5F/CPn8664eTJ21rfKJY bfSgM6JbRE8QRNqk/wdsV4IcDCYs9FsVM/ZTM2jC4gdeMJ/OcnGThtz9fwChrdMy3ZUb5QEamr4 8O/i/0h9rLJcDDgpYR3ETEBxEc0NecgIbup7XI8+JWzMrQ49PBtuhGp781rmr+dXQsool79rv1M 7bjkGftkntNq4K6hhtwMxejdZn06w9v/n6aPRFR2do3GYt4eCqi/6Ic1lmo1Xs3w2S8d8z+gl// 3YqiM+NFZX6VjZPMqNQ== X-Authority-Analysis: v=2.4 cv=BpiQAIX5 c=1 sm=1 tr=0 ts=69b4b551 cx=c_pps a=HLyN3IcIa5EE8TELMZ618Q==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=pGLkceISAAAA:8 a=EUspDBNiAAAA:8 a=KKU_MhpSG83TwyDdul0A:9 a=QEXdDO2ut3YA:10 a=bTQJ7kPSJx9SKPbeHEYW: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-03-13_05,2026-03-13_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 impostorscore=0 phishscore=0 adultscore=0 suspectscore=0 lowpriorityscore=0 clxscore=1015 bulkscore=0 spamscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603140006 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 Co-developed-by: Dmitry Baryshkov Signed-off-by: Dmitry Baryshkov Tested-by: Val Packett # x1e80100-dell-latitude-7455 Tested-by? --- drivers/gpu/drm/msm/dp/dp_ctrl.c | 22 -- 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(+), 491 deletions(-) diff --git a/drivers/gpu/drm/msm/dp/dp_ctrl.c b/drivers/gpu/drm/msm/dp/dp_c= trl.c index ef298c7d3e5e..3bb08c9a020e 100644 --- a/drivers/gpu/drm/msm/dp/dp_ctrl.c +++ b/drivers/gpu/drm/msm/dp/dp_ctrl.c @@ -2593,28 +2593,6 @@ void msm_dp_ctrl_off_link_stream(struct msm_dp_ctrl = *msm_dp_ctrl) phy, phy->init_count, phy->power_count); } =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); - - DRM_DEBUG_DP("Before, phy=3D%p init_count=3D%d power_on=3D%d\n", - phy, phy->init_count, phy->power_count); - - phy_power_off(phy); - - DRM_DEBUG_DP("After, phy=3D%p init_count=3D%d power_on=3D%d\n", - phy, phy->init_count, phy->power_count); -} - 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 bc4078c229cb..d61a8ddd30a8 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 @@ -216,59 +181,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; @@ -287,8 +199,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) { @@ -308,12 +218,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; @@ -325,8 +229,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); @@ -340,38 +242,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; @@ -414,6 +284,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; @@ -427,8 +299,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; } @@ -483,24 +353,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) { @@ -509,34 +361,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); @@ -553,76 +383,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; @@ -644,97 +434,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) @@ -1010,12 +772,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"); @@ -1025,8 +783,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) @@ -1042,95 +798,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 * @bridge: Pointer to drm bridge structure @@ -1155,26 +822,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)) { @@ -1194,36 +866,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 */ @@ -1232,6 +888,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; @@ -1243,9 +929,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", @@ -1425,6 +1115,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) @@ -1436,11 +1127,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 @@ -1636,7 +1322,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); @@ -1648,29 +1333,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; } @@ -1688,11 +1365,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, @@ -1712,7 +1385,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); @@ -1720,27 +1392,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, @@ -1796,18 +1455,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) @@ -1816,15 +1470,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, @@ -1834,13 +1483,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 Tue Apr 7 09:17:14 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 D4D9923183F for ; Sat, 14 Mar 2026 01:09:41 +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=1773450583; cv=none; b=rPvDBqhFCRuh4fcWwLGjhpLT1kFxacUY9WKEsmijJNzAVaeGd5KBnxyH6gQu7WLIM1Ej0+uYM1LFVLSraL8yS//xQt5b2zE30xxgeF4FF8xw0MAyM0Ttyr38zcOP7HQgaJXgNkZo2oIHbSZLnKGOyhHPyfrb3UE1bUxs++vtgD8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773450583; c=relaxed/simple; bh=JxtJ94lgIwpIjxw4xKgw7pX72pK9Km/T+eifeOoDyuw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RDYFjaRVRZInL/IdO9OcnIr5KhEm2l2rwaXqItsq+5hJSHgNn1K2hHvrEi2KqvT2avTu6eYR2zLQAe/x4Qa/ea1OwRFiPsEFWd+3I/QeXWoeYpnH/PemE4hNKz9EIWZxjk8JrAKPih0q9WgdYc0oOdB4d08syjYqM6fGMPjGpTs= 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=osqP+Xe2; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=UslkXfmP; 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="osqP+Xe2"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="UslkXfmP" Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62DGOOtB481447 for ; Sat, 14 Mar 2026 01:09:41 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 2O9Vp9tLne1oeKIvhX+ujqUzU0muXQjI6Vz4oFspS0A=; b=osqP+Xe2XRAjbM8n Thtz17APc0SdPv+xXHGm/ro0GDteP3Fo2Vl5n/pYOzkDyRMTtEa7USuQhaCTyEnq 2SweVqB/vzEd/qqs4OyLq3s7Kg9wkcSbdqB4Rzt6qLf9ukWS9Z9q5VvegXFX4wJV tHxtpmHMhDqenEpgbGfpmLaNheEq5e/Q2lN3P7wbvehD+59Ejyl82P+NitV2ex0K bI0hdSE2x3ScwfPz/rXoqibIKZGqmmyImMoSSOuubunnBtX0vMfn4uK097//hYkb 1wHCRvq5B7toV2tqv5fy3sD7yXR8K8vvo+DQZuVAddgx+vpG4BIkz6eVte6q17Zw tpwjEA== Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cvfh7txgb-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sat, 14 Mar 2026 01:09:40 +0000 (GMT) Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-8cd773dd409so421032885a.1 for ; Fri, 13 Mar 2026 18:09:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773450580; x=1774055380; 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=2O9Vp9tLne1oeKIvhX+ujqUzU0muXQjI6Vz4oFspS0A=; b=UslkXfmPtNHrShxQQm4ZcGnv9Eosdn/f62Zmegp3jo6zCkebPP990tssgVPohbKyAe XTLJU6L9usbFEqfApZIQW9oZQMLEVvk7RW8dOULoDiwSFfeUtM1F4gRgbnsvCheRKEgi NMuC5txVlf4XP/TbzM87fIslLDmEd4N2lNbrSyIgqxu/NBTSSS/EMGwmMDAD9WKXDSjE K9UXqI3+4uCiQJ/pWmbhSnllBygr8sad1P7X/tU3iVgL+OQ03VwOtDhjkbxUSmqwt79r szhuLm55lSJfX/YZj/zO4zTtjS6JzQa6WtEPUW3w5eMjiz0HvtF9dfuMFxntcPZbkg/4 rclA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773450580; x=1774055380; 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=2O9Vp9tLne1oeKIvhX+ujqUzU0muXQjI6Vz4oFspS0A=; b=J09SE2HT+Z8QmbDDSlt5olASJzU0KLyb3QPsRq7hWKvrDuhOMdrYbsdLsDHMBCXWIP vXOd/CeXg4M+eTi6zs5k6Vxx03+VW5TCDFYAHU5Cyc1llgAQP7J4vJ6EGpXMsEArUr/r lrfO/Bzz6xUNGI6pbvKqkeFs0gLvt/8MhJ20bhF5KJdWhQaPwdOvF0Q5Y3YJCv2GVC69 P7JHOwxy8ISAK/cPq8XR+oMXxnnuZHEpv/RNl40x9HG2BO/U2jm21xcVQxSR9MzTkw/g DpS67zdcnhtk/ZlNN7+pvI+51qBMdGlu6SJuXI2BGhoLdoPqIQQl7Un3cpSW024Aea8w hFmA== X-Forwarded-Encrypted: i=1; AJvYcCXa5S4I1Cz45f5zgm8L3YIkUtDkBPVzd/Y5VIoMQ2RURnQ7x/fGkNQglnV+pZ6rSsaE6JPgWYSGBTRr6Pw=@vger.kernel.org X-Gm-Message-State: AOJu0YzAkrT9qA9WqUPQwHzAJJjFVTriaLHg9aLSFcPENQbcsXcJwgOo BHp2ryUFvi/E+ZXcve1vF2UsL3fhl1HoAB3DE4pRrcCA3XyTFjZYcNNsr6UPYIcz9vxQaReY6VA OTnABTs1FEUrBPAaquDxcwg+G2yeF+FplBcxFF3T2C8xJM8SwVNcJ6B09FKC92Bouyc8= X-Gm-Gg: ATEYQzyX0mGGDP5M+/6jBqxZidp5Xw/jFnQr7AOlJaRb8Sg8B3FRUJ2IYuiuWrlXjEQ OOLnm35h8i5kC22YZzY5Bj0cDf/P9aAjUdusZWBpuodHYXg6OgPMlsBbqNt2DXvhQFOmUPpnsi3 LF1EDT7C8N+ktOEqT5a22Rl5AR7nXa7p0ShvLEgSmOioE0ycLqji4uLwug3LFMkTd45epF6b0QL hnc8ovAu2k43lk2a/4bBTAWqZlpDkJeQMhuajkNM7sEWQly8mAhFktm4AAp05LF1O1BH+1Ujcvi /2PlvKFrMPAyRqW0ycuayyjscqAmAI6+z4/CpSTJbq8GxRWtr75yXRLmJXTVYHLPyxQFCYC97HQ 4TWVCp1lyz8e9xQRITKz15squU+Zp+WqB+TTsEx/N/bUkTEMq8AFSX4QqRPId5zFjNG3+T3agiz kUqzO6fqEzDnXemKdJ8oTBi+etP+abFbZMuEU= X-Received: by 2002:a05:620a:2915:b0:8c6:e224:d55b with SMTP id af79cd13be357-8cdb5b0a024mr716441085a.41.1773450580308; Fri, 13 Mar 2026 18:09:40 -0700 (PDT) X-Received: by 2002:a05:620a:2915:b0:8c6:e224:d55b with SMTP id af79cd13be357-8cdb5b0a024mr716439585a.41.1773450579768; Fri, 13 Mar 2026 18:09:39 -0700 (PDT) Received: from umbar.lan (2001-14ba-a073-af00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a073:af00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a156366b22sm1806805e87.77.2026.03.13.18.09.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Mar 2026 18:09:37 -0700 (PDT) From: Dmitry Baryshkov Date: Sat, 14 Mar 2026 03:09:12 +0200 Subject: [PATCH v5 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: <20260314-hpd-refactor-v5-8-0c8450737d64@oss.qualcomm.com> References: <20260314-hpd-refactor-v5-0-0c8450737d64@oss.qualcomm.com> In-Reply-To: <20260314-hpd-refactor-v5-0-0c8450737d64@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 X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3288; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=uIWeA/ok0gWyJD8sfFcM8MT443ZdrZtcJRL3n//W9TI=; b=kA0DAAoBizyKPgIpKNUByyZiAGm0tTSh6w8lGRerJ/v8G09Zdpb2EhrbiZfwUUFII0M7doIz5 YkBMwQAAQoAHRYhBExwhJVcsmNW8LiVf4s8ij4CKSjVBQJptLU0AAoJEIs8ij4CKSjVFZMIALIx Wa8lM8Exb5QxLX7rdXHrHj9HIzuJmN45QgiEaO3JoNAnv9wNdFZ0s6cWV0TOOB0BVPbNtWexB6f gNd4DJJYbjF7ptAQuKF9zwyGhxVq66PhJyvdflMNzyu0vMJzaXM8DCF/NfTBhAtvow8oKp9Lxwo hQEXYSsd4knhqSo5GxkB7PJDEjVBLKitM0DY4nMG27+u+NuG/e6yCETOSLZc1WMct/d/NbvCdv6 2EETqNn+LtVuCdyCMdH69EyXS4xnMQQWrctI6vl+kJxDWdZPhTIhoJz2MqRAJeEpYC4M79dSN5v U+QHwBF1y2ZUhQuhnro8XC3JLRGcq5pUvbZkfqU= X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-ORIG-GUID: hZOLpWvd-f7g9ve4HCaEM-tBweXecXkb X-Proofpoint-GUID: hZOLpWvd-f7g9ve4HCaEM-tBweXecXkb X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzE0MDAwNiBTYWx0ZWRfX0mNn7sd0r7f7 /tbOTQdMCfOeYdVILEAV81JgieK961FnZXcLV10irErBAgFjv4jua2FIulvPalnOOAvRnH80tz+ u1EyaXOS3LFgOwv6P9j155cEsgDHNKOkYZkQHis7NHnkEuBueBFmH1IjRkM9JZhsuvE37nWpYyv ZIhb825cYaIB/UF10v2Re2h8TWEJlRJYFMCVfBp7ROxG55edVIgnLVqMaNipkfzw7hBoFiXqWTq DpEpuqLKRTMRvq4riCQXHLXUipRLdX7X8OY1AL4b+8iIdGTIFfQsTbPSdH0hKw843a18aRpIMaz vdDMvCEueCN3Ob0OL76OQXMV5DZtoRmz0RPSrB5EqHKhnU/whgmVAnxcbZT08gvqmBAzNWkZ21J vHCjTeDqR0VkCJmIwxAMTUTKES8wVJOcjVJ9zI60tt6rlRa0KmDDk6sKaqWH4QRYoyjb1ZMiZJU SUEG4LYlOoZL/EFqpOA== X-Authority-Analysis: v=2.4 cv=BpiQAIX5 c=1 sm=1 tr=0 ts=69b4b554 cx=c_pps a=hnmNkyzTK/kJ09Xio7VxxA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=pGLkceISAAAA:8 a=EUspDBNiAAAA:8 a=D6o9UKO1UCu5gje6phcA:9 a=QEXdDO2ut3YA:10 a=PEH46H7Ffwr30OY-TuGO: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-03-13_05,2026-03-13_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 impostorscore=0 phishscore=0 adultscore=0 suspectscore=0 lowpriorityscore=0 clxscore=1015 bulkscore=0 spamscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603140006 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] Signed-off-by: Dmitry Baryshkov Tested-by: Val Packett # x1e80100-dell-latitude-7455 Tested-by? --- 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 d61a8ddd30a8..b4deeea0ec59 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -388,8 +388,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; @@ -411,8 +412,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; @@ -440,8 +442,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; @@ -465,8 +468,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); @@ -479,8 +483,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); @@ -493,8 +498,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 Tue Apr 7 09:17:14 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 881F0272801 for ; Sat, 14 Mar 2026 01:09:46 +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=1773450588; cv=none; b=HXZ7qJv8uabgZQCg9G+YAWLbnJumR09A/nucQbxkwJaHTYihwT6I034Rdyf/fkoRDl/kXvKhJoCWmvAj3cXV0kBiFMIZlO9gtASPEmyPtJPPebv+nHWVleynFSzljw+uF5l5j8A0Qua7x6Gh014v0Im8acJPY9mGID7D47U4BIU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773450588; c=relaxed/simple; bh=MDe7U9RsDHXV+2bJl632vfxF4W9rCCfL29yWTM6+O4w=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FzkMf0tdJ3q4P39B0qyBejAqxzCzKwLySL5pb43NrIGZXXVbWP73yTAVD9uy3FJR8ApwuqKW2O1wkljKT4xQl8qk6Osv0tlu4rnL45LCoUxFSk93dECePzyJ0P7Kn25P/KmHLwBplC3e2iETuheaI3FOL3sLP6yu7oqWfVhozsg= 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=JUC8pgl4; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=IQAvzxl6; 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="JUC8pgl4"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="IQAvzxl6" Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62DFXGhY437734 for ; Sat, 14 Mar 2026 01:09: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= 2UrDrn2pfKZTOmcACEWoN/bHKLN3H9Y3BpTX9LllKAY=; b=JUC8pgl4FCzZ7KRs nw87nrW3tkrEMfv7lc+oUnPQ0qzlwdJ7nFBtSyqvlRqk4gApfDmFJs+XQh0Oy4qf eoGyNm/DMZWESe7QsSp6IgPNIKp+WVilqxb+hSQzMR4Y8XN79TqVSVZ2269QBs/T ly237lzgPgAvgBnGQJmDXjRa4qAhe0IdFxSj6y5+ntSIzXHgD/1dkiFHLdlOUyE4 C1UwYGXQ4wBwJGkoMXpec3LjkK7pFQ32hdWcQsvTOTw+jYek016ETCNp4n1H2qrQ 8qnj9rl1aYJRdt3gZh5i9bXyYVEi14EpHUVt43wGi4GiGISqfOB5ixrEuKV+2VqL RuVncQ== Received: from mail-qk1-f197.google.com (mail-qk1-f197.google.com [209.85.222.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cvnax9m18-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sat, 14 Mar 2026 01:09:45 +0000 (GMT) Received: by mail-qk1-f197.google.com with SMTP id af79cd13be357-8cd80c4965aso1769415885a.1 for ; Fri, 13 Mar 2026 18:09:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773450584; x=1774055384; 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=2UrDrn2pfKZTOmcACEWoN/bHKLN3H9Y3BpTX9LllKAY=; b=IQAvzxl6cN51y/LBjO0g9kY7lnCAlRd+Sh9sQTqn3aWAx+yUXcKC+FFyz/ityi9rZc qDFqZP490hNgwZNe5Qu2BJBUVMewY4YInMXnywyMLe1lwLtuRELLAGnTDhLfYBKzjtm4 BLOPIkJYyOQNb/LC0etquTxOeQjWQD8nsLH62a7SM9mLMO6woZeA4daQcKKQxsQifTmy KK4zgCf0RUHjvseByrMa6YhJ19WRsN/bopl8QX8qJp6yAFLVqRIEauFY0DWHRerwRgeP fUYf+urthOglCJZZ7cY1t9AWxST9otylq/zvrU/TmqC6DKpadtX9JOcKbVK9cSkSjw5n qphA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773450584; x=1774055384; 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=2UrDrn2pfKZTOmcACEWoN/bHKLN3H9Y3BpTX9LllKAY=; b=rgJeKQeZf/sb8dA2wGUbizw+ofcYIdyCJvqM6ufNtojDATADOgscf/pG/Wn4LOlWv6 tSeb1SXEHrISSuIerwbQ6fm1BuaKONfHVWQO6h3ecelSXrWn6liJ/un82H8j6g1ZioQI Zr9SzslYWqIlwb5d4TvIHrqRusqAs0uS3ubRAQcXfFp11sb9GZrDG+qwF6d0IYIPXvV0 dpljDg2Jvun+eKU6mVQpoSxtczSQ0Di44YHRyYg7qImTp0Q9ZGUjfvJCE9aOqEtO8RbT nepdz2KUnwffIRXf1dIQDTZWlQozL0wKjmWDaYRWOSfc8J15jF8LwwTZM2Ggv3Z4GQo5 DZ9A== X-Forwarded-Encrypted: i=1; AJvYcCWi5tseEksTCcK48dePx0zOAKD827ISEB3FYtzG4gCD8eLxRkHO0ZvLn7RXdPzp3p5YrWIxnvGrtQmSn+Y=@vger.kernel.org X-Gm-Message-State: AOJu0YyXFM15/wBXgov0tvDl6qUtBtVAxtD20ic07zeQURdYKBEDb+kD tZx4184ZefUYfERLsOaVGk5gufyXJLBANiNkNxZe24KhU3hloZm0apgKJCyOC5+XGj5TYgT07ML s8UyQKr8qjAVIp2j9YEbqqkC6tTk/Y3q8TIz4jmFfWd90TvJjlwfBRhfTyxVi/GdyxjY= X-Gm-Gg: ATEYQzxkqr+3zgu07nPCQyJ+AuCj17wOBLsbo4A9WswTDqLYkgzkxZ7HWcQg+1FUoWN 5g0yO83TkpQaTfGcq4HpVKaHF/2YbMOZcI61V0qjEweMbMHeoDFMtQQq3z3IZx+0rLnFucanntg OKT8F4sPj9gr79PE0VKyrBW58jaW2vizg8jKu+doptnxgALVvaWatRChJdoCsEl4BDna6tjJ65F 0YHwo2vPUZVjimIYDO0JhLrcEt3d9EVg4YILRL2E4RDgiu3IxRd0g8ilYOrxMJfGqrWWBUNQUT5 oj9S5FNQ9sTyHCVeRaJx5qtrc/kp6Z0c1Gz5NbYqyfKlA8nZhGUUT5D9qyLlK1GT91e+EN02oDQ Dv4rwdLsoR1Kk1JLAI8L0VRHVGGwFJ3Jo9dYi53q/3j8+64DR+L/IqH/2EsFhM5QqnR926lc5Jt mRcQUA/nMQpuh3FcueE8suyZ7uOh3Z13ZEML4= X-Received: by 2002:a05:620a:1711:b0:8cd:9584:632a with SMTP id af79cd13be357-8cdaa8ab027mr1119963885a.41.1773450584118; Fri, 13 Mar 2026 18:09:44 -0700 (PDT) X-Received: by 2002:a05:620a:1711:b0:8cd:9584:632a with SMTP id af79cd13be357-8cdaa8ab027mr1119961685a.41.1773450583636; Fri, 13 Mar 2026 18:09: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-5a156366b22sm1806805e87.77.2026.03.13.18.09.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Mar 2026 18:09:41 -0700 (PDT) From: Dmitry Baryshkov Date: Sat, 14 Mar 2026 03:09:13 +0200 Subject: [PATCH v5 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: <20260314-hpd-refactor-v5-9-0c8450737d64@oss.qualcomm.com> References: <20260314-hpd-refactor-v5-0-0c8450737d64@oss.qualcomm.com> In-Reply-To: <20260314-hpd-refactor-v5-0-0c8450737d64@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 X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=11248; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=MDe7U9RsDHXV+2bJl632vfxF4W9rCCfL29yWTM6+O4w=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBptLU0RN/GdnZPPip1huXxiqgajf+0Hi/LOyBCs /hfcNeUNDGJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCabS1NAAKCRCLPIo+Aiko 1cRHCACsHIr/u4TXPlaZL/jz67bawo9+vJfuBxm1A5HZl2NfQiHH7zSFdcEi4BmLhiYIf7nta4+ f4cdD4Mkn2AXDws1fe7ZQ4MbM5mJIWOUy6ic1Z7wjyn+9DTvp2w2vH7SQd90lu5KIoz2ouiHTKY NG6IMK9GU7zcR2twfvMxnEm3GTlpbbsRv9EpkPFy9aQ/XD4tRSUp54ko2YFlTDQFp8CBbj1A/JB 2k5nAyn9tyyA4dHUfpnChWDAPNHM16w61inIY/xrHUDHlEZ0l4wnZ8Y1B3yC4eDunJyKsdQKq7o /DOKTXym0amNnJRf/tX+OshsmQfKxdbX6bBbel/R9PABwHI5 X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-GUID: 6FftNRkJFvF0B7us6TrwcnsJGfq_7xOR X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzE0MDAwNiBTYWx0ZWRfX3PWC8iCzmaSk Ou+UFSgIH4LAnzoONajFzlr8GEHvH8rjVWYVAf6AEicRAocbhpMI55o+efZNk1bYhIF0n48/LoK RI+kR7DEirUDDuDsn8t8Zie8lTdS2BM/Cu4TeB3U7WOJ4xXPs+08tZCVaDVo4hnWcQdC7qCf564 c9ikUGk7wTU5de2RhHFSQPzKSSUUEm1jiRcYulvL29juxpsOnNEv+Lyozn8nxcpto/0+ARsQXvX cEdoQEgqQ/3MsvMkbRdS8aVIyiwZAxKQqQQePw5VNmgZUol3Q1SkoDe5ROUD7lAnaW40/NBM7YY vpfsds3GDiiTj/Q8tjzS7ipwA8nypRJ2WYQOopdc4PCRHGu796PobSbBv6Mnt39RYQhkOWHobLq cfwvimtWXBgrs42YOjg4UapA5FZDWS6tbVHBsYEdztcTu2Og+xb6n54WlJ5Ob0F7wUZ4ptUKvX1 ZX+Kqd7rmaV/AH+yHng== X-Authority-Analysis: v=2.4 cv=X5Ff6WTe c=1 sm=1 tr=0 ts=69b4b559 cx=c_pps a=50t2pK5VMbmlHzFWWp8p/g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=EUspDBNiAAAA:8 a=n7_vWGaP1GUJy7dh50EA:9 a=QEXdDO2ut3YA:10 a=IoWCM6iH3mJn3m4BftBB:22 X-Proofpoint-ORIG-GUID: 6FftNRkJFvF0B7us6TrwcnsJGfq_7xOR 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-03-13_05,2026-03-13_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 impostorscore=0 phishscore=0 lowpriorityscore=0 clxscore=1015 spamscore=0 suspectscore=0 malwarescore=0 bulkscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603140006 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. Signed-off-by: Dmitry Baryshkov Tested-by: Val Packett # x1e80100-dell-latitude-7455 Tested-by? --- drivers/gpu/drm/msm/dp/dp_display.c | 94 ++++++++++++++++++++++-----------= ---- drivers/gpu/drm/msm/dp/dp_display.h | 1 - drivers/gpu/drm/msm/dp/dp_drm.c | 41 ++-------------- 3 files changed, 61 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 b4deeea0ec59..0a38957ea901 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; @@ -284,8 +287,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; @@ -303,7 +304,7 @@ static int msm_dp_display_process_hpd_high(struct msm_d= p_display_private *dp) return rc; } =20 -static void msm_dp_display_host_phy_init(struct msm_dp_display_private *dp) +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, @@ -312,7 +313,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) @@ -366,14 +370,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 @@ -392,11 +388,11 @@ static int msm_dp_hpd_plug_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) - return 0; + mutex_lock(&dp->plugged_lock); =20 ret =3D pm_runtime_resume_and_get(&pdev->dev); if (ret) { + mutex_unlock(&dp->plugged_lock); DRM_ERROR("failed to pm_runtime_resume\n"); return ret; } @@ -406,18 +402,16 @@ 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; + + mutex_unlock(&dp->plugged_lock); + + return ret; }; =20 static void msm_dp_display_handle_plugged_change(struct msm_dp *msm_dp_dis= play, @@ -446,8 +440,12 @@ 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 - if (!dp->msm_dp_display.link_ready) + mutex_lock(&dp->plugged_lock); + if (!dp->plugged) { + mutex_unlock(&dp->plugged_lock); + return 0; + } =20 /* triggered by irq_hdp with sink_count =3D 0 */ if (dp->link->sink_count =3D=3D 0) @@ -463,8 +461,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 @@ -472,8 +468,12 @@ 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; + } + mutex_unlock(&dp->plugged_lock); + return 0; } =20 @@ -820,41 +820,49 @@ enum drm_connector_status msm_dp_bridge_detect(struct= drm_bridge *bridge, int status =3D connector_status_disconnected; u8 dpcd[DP_RECEIVER_CAP_SIZE]; struct drm_dp_desc desc; + bool phy_deinit; =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; - + mutex_lock(&priv->plugged_lock); ret =3D pm_runtime_resume_and_get(&dp->pdev->dev); if (ret) { DRM_ERROR("failed to pm_runtime_resume\n"); + mutex_unlock(&priv->plugged_lock); 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 @@ -865,7 +873,21 @@ 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); + } + + mutex_unlock(&priv->plugged_lock); + return status; } =20 @@ -1123,6 +1145,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; @@ -1353,7 +1377,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; } @@ -1398,9 +1422,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); @@ -1498,9 +1519,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 f935093c4df4..8dc0dabd275c 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 Tue Apr 7 09:17:14 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 5CE252EA151 for ; Sat, 14 Mar 2026 01:09:48 +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=1773450589; cv=none; b=F1V8nTwsoTcDdTPKCJZGEpDzoTa6eXX7IrB4PVnSA1puQziYrYGcopCFhBWtF3Cjbo74yxo2dTELOP51b4PvvtunVELgR9nL6Gy32gx0YddOHvaolcJ4n5F9TplfKOyrTy3+z4QFhpeKEK9IDuIo1J1G9WQGK1k4fed1rH9jW28= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773450589; c=relaxed/simple; bh=mM1BPVW1QTH7/BXc4PZivhB4YvjG5aoCpugqUPEORdA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=giQ1cYde5VnO+CbNGwqZPKqV6iJJ+0GK4KS+XWfiDjkAaY/DE12UvzP7SEf7COrmgzAP8XVbMc0siMRCOiBY9JdvLlVx8j8dJ8ZzjVjzQDj3WmrJkxytRDWzm2UdRP1vCK5G5fP47+ZGj3tugDWbtIyW5ULHbFHU84k83ZJucpk= 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=X79+d29t; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=J29uabuL; 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="X79+d29t"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="J29uabuL" Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62DIenKJ2391118 for ; Sat, 14 Mar 2026 01:09:47 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= 7B0471sRKQMwDEZP6vpU2reSm934CwZ9IjApmWlQSQw=; b=X79+d29t3XHKRreF +O0f8mcaQwDaxa2vr6lUB3WlkJGsbFJicY/jHiQHrOQBBki1vjz9+/lywyfsg8jK qifkCBCL8xdIzYHf0397vUECcnQmpTBYcKUlUMR+sN5AW0v0a5tSGcJmOpH6GhNV RXPJ+qXonZI/qzkziLbroYq5GA5/xW7E3lIpcdNPrwFhJsgh+dSxky3XXx2L9DSH zSblkUiGv4E6QZy8RDwECBKIbjF0jSpcNe8+ehuRDQg0ZmKn6uMNjNW6UCIBB237 QjILzUK1KB0U6sW1zP1OHQ1BMgXeVH/gCid+QoISVQ+uHcg0VSQb337wYA2PFzGt GtbQKw== Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cvh5maher-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Sat, 14 Mar 2026 01:09:47 +0000 (GMT) Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-50937cf66b5so379085101cf.3 for ; Fri, 13 Mar 2026 18:09:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773450587; x=1774055387; 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=7B0471sRKQMwDEZP6vpU2reSm934CwZ9IjApmWlQSQw=; b=J29uabuLSFOzl4sFJjBhMSPB8JabKOp6fE1sgUm7POd7+e7/88aJjqg03lOf30BkYr P+L1GdFib9n+Uvs+gW83Ucn0jpdLChTNVkQeta1CSsGFhOt+VVx82qaw1mJ0wyzlZajg /+d3hFGcsdY2EMsRxjKLcYjiXwjHLrNAGu84JhGryLebAPEb1HoLiwyohG4105lJ+9Vn 8z0WNzQlMS/fdehRgBXni5gQTsNv98XbkJRXKc6tL2RTIKB3UCfdGOiQciqEElyOqAZQ P/mzKOkHNyXm5wM7jtdT0N9nZ9X0y8AkPXsTroPPFEzDu5sxR6SEU6EuKW/a0IA9U9FV blCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773450587; x=1774055387; 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=7B0471sRKQMwDEZP6vpU2reSm934CwZ9IjApmWlQSQw=; b=jQISgvLC4geYm5USAe1VscfjoNF4apZi+KC57dQv/XXhMSSkfad8gR09IVyGc/j6M2 2ZyFlht33AdM5oIUItPQTMpLuIQBlOBVRS0me/9SYAlze98OBXlURhPaG39qgFG8Fjml wb8zF5dKGS6QhLmQtZi6C0bpc0/ssmp2uQgHhyMNtIUI6AB0wJnGg9Y/wmHGhc0ldcDc sPwAMMWbFZZzoQKUVCxbtm6s9k17mRK7pPZBp4J+boW8TlyT+R4As09k8frkZc591hq7 mAacJQ9gIIZ3auNhNNYoBtdmhPf0c6n2Rsa87uCfNRwXkvLZ6jQcVEkYW0cdd8aIVtlR ljQA== X-Forwarded-Encrypted: i=1; AJvYcCUhS8UBmmcmUGhIEyoH7DkdWMwMZc1XUS7Z92ZDEEaLWHX3uu8GCB3uxEhU70roQFBGQa41oW+fJO34wEA=@vger.kernel.org X-Gm-Message-State: AOJu0Yy1gfIuDWrhgpXQlWuKcJNPYLKgiGtHRZwIncwpUo35d3jMYg86 S0U58unx3Q24mlLzuO/rqJA2pZdLB9aUZZWZ8z529zifAFv1O3HaPWFjnlxxEpd/YmCO0cY4I8V SkbIBIPnJBTAXeIjJk5Ptru9wmAoClkc3q0TCAv6Xwm/dXzfoE9Z3OlgKTdSiLdBRKz0= X-Gm-Gg: ATEYQzyvFm2pWnxp+D5hTLWJuMlqDcYAUbgkZynzBCJiku/c4PZq3uHnFrnhId0yYgW AiNt+VZpwuPxC6p3VrQKTX3akQs6+dG47GOG2rjSnQnoYciZRbPVN9bEmO6m/McJiCDG9cGoRlk 411fRKZXsgD9345tW1pLNkH4eus8FhSeuCGbs40BeVTKuiVlMKgaFQfvN6S3arYSglmTL2X/ukM JoSlaZMLZRuiYR/Ug8EKxTOCmrZmek6QlhumsnW24h5e/d5XHP9tblVn+ZnHT6DkVFdY+p/cotf 85sZkwozX7tjWf0+S2YFNjbI5gIOR1WPnc4va40mVVmCsiXKmyKpFSlc5MDYw9VS6aXHLek8ffE pphNpgDMt5Bq2p/kiYxkmf2hHSdcBpi96Cpn0/Z3pmxJFPpP5pcUVmNWNQR6pHgY16YRvbUQ2kz pDhQSiUkwM7E3BLQHFoM8z9ySqSMght1DTwBI= X-Received: by 2002:a05:620a:468d:b0:8cd:8938:f000 with SMTP id af79cd13be357-8cdb5a610edmr773788585a.28.1773450586678; Fri, 13 Mar 2026 18:09:46 -0700 (PDT) X-Received: by 2002:a05:620a:468d:b0:8cd:8938:f000 with SMTP id af79cd13be357-8cdb5a610edmr773785785a.28.1773450586260; Fri, 13 Mar 2026 18:09:46 -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-5a156366b22sm1806805e87.77.2026.03.13.18.09.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Mar 2026 18:09:45 -0700 (PDT) From: Dmitry Baryshkov Date: Sat, 14 Mar 2026 03:09:14 +0200 Subject: [PATCH v5 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: <20260314-hpd-refactor-v5-10-0c8450737d64@oss.qualcomm.com> References: <20260314-hpd-refactor-v5-0-0c8450737d64@oss.qualcomm.com> In-Reply-To: <20260314-hpd-refactor-v5-0-0c8450737d64@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 X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2545; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=mM1BPVW1QTH7/BXc4PZivhB4YvjG5aoCpugqUPEORdA=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBptLU0Pw/Wr8XI+UeUONhk97j/MiQGZKZWH4bTZ ZuB82VI0PeJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCabS1NAAKCRCLPIo+Aiko 1TH6B/9HVOXDOqe6Kq83wbuYJWfsDNfh6vW+7Iqx/NVA9Nnx0o83c41Vav4ihMIyb6Qj/LUe9ao uWaO0T3m5Y+Vv2/2cXK7OJxlssS5LPWj0xJlATqaY5bzdmw4dosdX2AdVx7FFeOTDiHeYjeB/So P6p/pVrXzztbZMMFYu86QiYRLBhrTMSz01gNqcf+CPIskZM9fuBZ/YqlRAwHOjHKsxfjREYZqll BsRNZz0tTh3ItupQBaB9fPnynvNfTPevJZI7r/gBQdChqRydV32MfJ7vOJTssXXg8i4pOX26CXZ JoAKIXO7q0Oy9FFK+YEYEeco5LmhuYsZzV2UVLxqIyWs7CQX X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-ORIG-GUID: Hf7Ge7uFLp2XUOI2ZpZXNCQzBq_33o5u X-Proofpoint-GUID: Hf7Ge7uFLp2XUOI2ZpZXNCQzBq_33o5u X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzE0MDAwNiBTYWx0ZWRfX58BVa3LU7hhG O/ezouTDeZEa0BqaGtTG5TTD389xB7+tT20qEknV5+PLX150Nqay0V/8ktosHDcabCs5Exb7Uzb ITpeMj4Vbaal7GxdsdvTxVM1mNeigeYI7qY0D2wiyp8z+sUwU223ieFSSMgyfZrNkj3Tb5FSUDE cIAaWcXouRyoE01eZ7YGwqX7IQi8A5fIrFoY3yQxeAXOfnom60RV9npEIGUBHnReb8DzRa9DHlV BvJXzpMm9mP8jAGJRfSgexzYtuy974Gy1oYOvnpR9hp0mbpZy6+xjisPbJuZg+1ly8O0rmuac1q ILzhucZ1vemn4Tw13g5Bb0YVKjCSN+YVR8ucwnWkQtGbecwFXGKr3xCdlMP/5CgE24VRrwzqZUW y1FBl3tUPo9uHe6dzLfFDPMznPcrlNP6I5bd/uG/5QyKDlkgMywaAZ+j/lluusvQTPVF/8sp0Fu 9rSRC5B/t4cjw1zEZQg== X-Authority-Analysis: v=2.4 cv=S6TUAYsP c=1 sm=1 tr=0 ts=69b4b55b cx=c_pps a=JbAStetqSzwMeJznSMzCyw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=EUspDBNiAAAA:8 a=NIqqIfc2bYnrFRhDr3kA:9 a=QEXdDO2ut3YA:10 a=uxP6HrT_eTzRwkO_Te1X:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-13_05,2026-03-13_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 phishscore=0 adultscore=0 lowpriorityscore=0 suspectscore=0 priorityscore=1501 malwarescore=0 spamscore=0 impostorscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603140006 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. Signed-off-by: Dmitry Baryshkov Tested-by: Val Packett # x1e80100-dell-latitude-7455 Tested-by? --- 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 0a38957ea901..5c6a24ec140d 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -447,6 +447,10 @@ static int msm_dp_hpd_unplug_handle(struct msm_dp_disp= lay_private *dp) 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