From nobody Thu Apr 9 23:25:03 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 84F23366540 for ; Thu, 5 Mar 2026 14:30:56 +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=1772721057; cv=none; b=la1iAfr/jkUU3lBqar0Kc889zuV7T0sH89LD1CHkTkmQClSP6QJU9FfFcWgAdiY9koa5/Ary4rxHyawx64VUoVst4b8jdlK/bpYLsHNgM6eyaEBiCRgQ1oNHLB97/+6BpSuPnY54YJlLGTY/tN6HU3kRZzCG+U0L8RTVfSPiN5I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772721057; c=relaxed/simple; bh=8TIpb1Vecd87DdarhQ45qjuuPLaThUggnFfuyV/O1a8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GMS8JytMNFYQpPoJBxKPNPaRdczf1S9gJcpsSGjP15udcEyuM2JME3L8bO+Wi4NKk3bme72TqTUFeBkegpFU3776hK3f6lxN0uoNbE8jDwZn3mfxHCrKNe8rc2mLtpzvyHnLewzF9bi7ZlI81f1f+jLMvGSOpra7zlQZrv+i+3w= 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=GAXLPrD1; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=DQ+SSwT3; 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="GAXLPrD1"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="DQ+SSwT3" 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 625AFpeW456115 for ; Thu, 5 Mar 2026 14:30:55 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 8vpj08mJ5C/IUKaBXReHEtx5aeFlsT0McmKWTl0bc1g=; b=GAXLPrD1frPdI5+x frD907lL5gWpKAxy7pDP9NgZupl5VWtMFNnBiwexg7hHSYe5qcnJO82li5g6kkVe JLZqEVZ5Z5GGk0AzJLPAODF+b6YZhGPN0YCDVuPxbvE5uP+/oBlZkgDnA72pzoC8 Dgi2dyUrLJrk5uMrT3zWkQ1UhTzPYvnFW/3NhXJZ84BKHyxkq1PFR5YI97EXCvzI eUfmjSHVrCVl7Mg1Ty+lCy+B2a6HYn+8TFMt9Dkl7hRYeUT0iFnyZApmfxTkaxyM mEd3vwdEo1sfZkkKudDU/3UQoxWJffyKF2VSfLBJnC26SFu9SpyKnvL08aApmqSb +I8Y5g== Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cps0wkj3q-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 05 Mar 2026 14:30:55 +0000 (GMT) Received: by mail-qk1-f198.google.com with SMTP id af79cd13be357-8cb413d0002so5282607585a.1 for ; Thu, 05 Mar 2026 06:30:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772721055; x=1773325855; 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=8vpj08mJ5C/IUKaBXReHEtx5aeFlsT0McmKWTl0bc1g=; b=DQ+SSwT3/VL0v5/WGhA235fXpHrRy/Rs2WwV5P2owghqJEKamyJDeWlulCHqMVzuT8 QwjaM8jhSd7t2iJWcSkS8CB6vCzq8tarFnR+Mkp58WGg4erQ+zu/09Vx1AyCDSz89dDZ mPebiGWs/fdicfJjq559PiBvJHdJX9ct/DPaec3Gxu2w7to1cqwxWYH+e1IFdFFdHB/d 9S586NQTlRRuI2jLeB1XUYyuMNTu/teA9uMGapRHSb645qveu8aIzGVqpA9CIK1w+qRM TJVcFx2iAoBVjaRVs0K5SDIJKdhVH/sy4NBU6FHvqI9lhjF9mGZ+ydDgTgEJHTihMLY3 8aSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772721055; x=1773325855; 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=8vpj08mJ5C/IUKaBXReHEtx5aeFlsT0McmKWTl0bc1g=; b=JAHxrgCURC8LnZoQSnmdiia+Qh97piu7ktJ1PVnrTwrUnvcvg30Zh7nDeCfMvkfLYG EB1A+djFuh8skTht8tk+67/lWT2Gp0xo6H1LXBD0dJW/w4Z1KLbB1fFdf4atls7tD70H tW+byqtCeebPyzM06jW/wm04XujHRr2aI5Uqvx4WtglwnYgPEBXkbJu2FO3PEgY7pJvM fkHknOu5EJd9KIl6CQ47tFIuykUMnhHbnn/Roj9e1HN4VsA/GDMw58EUOMBETryvmgji Dsgp0P4yeVDUbP2BS2CIj/SOWm85IJok6O95RlhfEer3yoANJkMK7ME5J9uu6F4WzpIO hrHw== X-Forwarded-Encrypted: i=1; AJvYcCWtDr2E2TebYUtUztfEjXsIJDxO+IxVtuwsQ5wH1+XtTiRAPD1c2gLuLiqIUhrnVnwgMAthit6/bbHuFZI=@vger.kernel.org X-Gm-Message-State: AOJu0YxpirsKJUvqYxNDUDm4Di95J1I9AHyqz6c8h+2/YX4lDDnJnn15 R/7qSqLoAoFeWQQq2zzQo7on/gpQP419rEGaPfmDWwKVfuMfIvKL/gEt6bSs9vZ2hP+quPMKCDa 1l3KMaNdmI4L+AQrkMjjaMrDyThTDO5/VUHFSELkiSoNkh0yA0THvG790rmKOL/aSG6U= X-Gm-Gg: ATEYQzxAiruyaf9F715SoJ6dGiFBY5IAzq3EZFJbPVYfNbxI0ZDWozz0VNXB19SfdAm bFwcKoP6MiqFG9UEmN89uTB2mU1tgZE7fu1EGbXwOimE01F6UnEELN83XfC5nj543vYNwpk8+/M bobtJQqEizds2wA7O1eVkjMMMedDJ+EIcs60yHXYz+aPp7hQTNQpsCXFRsmUARuypRxsS0zoQUw xXKytW5EA7NtbJN4r2yd1kgG6u165uTGX0A2h3Q2ocggaKba0lbfNwvky4j1H4UuH73ZPukdctA bOCSkCdeqAkxr057IRTeSOXN4/qzUxWfrBd6Omdxa21lvvpu/kl+TZFCRyC3xXEIa6FuHE4J79Y g8xh3YTIbqOW3SJHz1E3R7UBamisYULc0OD7fBp4zriGggM27dZYzZfMplYsUczu3C7br9CvfxF qhlKKCMy8Vb23cHdFkl+DsPbkt6BuuuEAb8js= X-Received: by 2002:a05:620a:25cc:b0:891:7008:f2e0 with SMTP id af79cd13be357-8cd63409339mr278190585a.8.1772721054579; Thu, 05 Mar 2026 06:30:54 -0800 (PST) X-Received: by 2002:a05:620a:25cc:b0:891:7008:f2e0 with SMTP id af79cd13be357-8cd63409339mr278166185a.8.1772721052543; Thu, 05 Mar 2026 06:30:52 -0800 (PST) Received: from umbar.lan (2001-14ba-a073-af00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a073:af00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a126fcf563sm1522618e87.27.2026.03.05.06.30.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Mar 2026 06:30:51 -0800 (PST) From: Dmitry Baryshkov Date: Thu, 05 Mar 2026 16:30:43 +0200 Subject: [PATCH v4 1/9] 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: <20260305-hpd-refactor-v4-1-39c9d1fef321@oss.qualcomm.com> References: <20260305-hpd-refactor-v4-0-39c9d1fef321@oss.qualcomm.com> In-Reply-To: <20260305-hpd-refactor-v4-0-39c9d1fef321@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/pANAwAKAYs8ij4CKSjVAcsmYgBpqZOYlpTbWo3CEyOsGYWNlPaqDWWExo3CkIsuF 0D84zyAIS2JATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCaamTmAAKCRCLPIo+Aiko 1Ua2CACOHrZcU20ETV8sAZ3SKCn35AIhtfhY1woMLphDSsS4bQFmltLTHXaKWBu/2yA4gRW29gJ 3NNse0O4xCty8GG6VNZvNHkgE4FahLW/ENcwEii/TSDuZCQTTcKmX0BMYgrAXJi19hpNwP7t0m3 TpZEhkFKgrF/yPtD42PqXsjgbymMmqp0OtC5JTpWAuVRzikl+fA+rO3rppSVU9bXf1YfO2ROqgm dQI4tedzx/EA9X+PsFVa1rtwc4Cq1jj19gJ+QLdO3f2tMOrAckzTVjAZecec/U4zVSysay0Olmi vTwCPjAyEksRF04Oqvr1K95P/kqXQmUbYlfkwYMX65TzZxco X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-GUID: O1ZboEKb08SPdyGd66dS_fvcE4Gh819R X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA1MDExNiBTYWx0ZWRfX7tLO6t+a75SK sA1XHPTjsbiR1dwTLMBJZlkr0RL9wVL47eyOKzp9btwIUYCZ0vNdYSCMeCELr7aLxjiqgnOJOch OGe7erdvQ7uRtCWyBSEXchsuZz+p7WKwbgG2ayZhgaBwz3Qca0Cc7bUr9vmGu7fJPLGxSLXl7Wm B5CvZWAHVQ9pfW1hsCOJyHQC/mHt8+PW8ixfIG7Hjz1vjmSXgiKRF0ov23G5MMF3QWXCW2Dfo2z oWg91ONDDOlcffxVTAtGn7ciXWywoHDTfR7r3R9C5/F/IDi+jKhfxw1R5lA/vyfEMh2aqjEJpKF NZ2LBqULT4zRrhmiwjr0KfHUSE/2+WsQU6Ik8jJ6t3a1i1hIpw8VnW6b1rZSuvW5Oi6oyjTAgbE X/v+bWTGTq+gcQ1hK9R1a/ChE/y3MY+5RJ0lZ1Xa7rXhagq6lormOLCwQQVVOJpcsBakX5yHz7h t4o3nToJ7Q9ZZTWGkOw== X-Authority-Analysis: v=2.4 cv=OYWVzxTY c=1 sm=1 tr=0 ts=69a9939f cx=c_pps a=qKBjSQ1v91RyAK45QCPf5w==: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=IBRk8GtBIsankUNt0b0A:9 a=QEXdDO2ut3YA:10 a=NFOGd7dJGGMPyQGDc5-O:22 X-Proofpoint-ORIG-GUID: O1ZboEKb08SPdyGd66dS_fvcE4Gh819R 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-05_04,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 impostorscore=0 adultscore=0 clxscore=1015 priorityscore=1501 spamscore=0 malwarescore=0 bulkscore=0 lowpriorityscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603050116 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 Reviewed-by: Konrad Dybcio --- 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 Thu Apr 9 23:25:03 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 C4802382386 for ; Thu, 5 Mar 2026 14:30:56 +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=1772721058; cv=none; b=qrUkpB8OR/Kq/kGQ+BSD6U2Dm8MFD47MDadtUSbUYlCNKQVa2KEQwm0IwGsEKEyKbgAUk1erbRiGCw1Xf9wGMxAmpu+WsaK0V0YpFs+dHHA4oIsaeb6jtFSlxBj7h7P4WP+6q1DQf0jIMdsQYGJvjLhA0UiyrmKMs6xtepsBIWg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772721058; c=relaxed/simple; bh=hvUV50vOotIGhGSbBe1rDn0cVLNRTXQOwNKUgE/1HFM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=MsvgBQJzm2VfkBYXBT2HYaCyekkGSFIpTuzQ9IRscnXj+CMwuNxrx7iGuVt5HSq5IoLhjMxNiFhNN0Lu5RIV8s+mQIRr4AaI7mDe3tmbPDvORLv4hw/KC1wLXiBhaImDKZ8phDg5CQYyjo7+f667YXChXPcK8o3Ay0y+4asm+ZY= 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=bLaQz/PP; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=dOkG3YFe; 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="bLaQz/PP"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="dOkG3YFe" 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 625AFklC917167 for ; Thu, 5 Mar 2026 14:30:55 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= Ih7YS3OMF9nyIk8eRvbGlEtAYQc1C2qkylBgX1JHA3o=; b=bLaQz/PPVqFIARsa 0url4Jp5GX9nt9kBhR0P/RciYQ6b6kUHzbtgwMu2eGWlsIELFK44yzwJxvSjkGQV 6DqRiaAgL8Nkuch2yDlUDdV0KVvw399gSFJVKAYvLrFNuzU7jhMfmMw/xUwrXfGk MB1TR/X1RDZSPUuWrhiHj4lVqrarskuqoqGEj/s01iqAk5qLi6zlJAGPgjoMPIy0 pCj0DNiMhAVzvbkwmBpp5mMUIIknaJKrrwJO/T5R7GXqQa8KVPRjET0cZ1IjyQt9 K4XBj23REGbt2NZrVlKckxmZO8VMd/pkw4orBG/1NJPSCTJgaJiMOF3sBZ82V0EV c8y3Uw== Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cq380ssth-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 05 Mar 2026 14:30:55 +0000 (GMT) Received: by mail-qk1-f198.google.com with SMTP id af79cd13be357-8c71304beb4so1153982485a.3 for ; Thu, 05 Mar 2026 06:30:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772721055; x=1773325855; 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=Ih7YS3OMF9nyIk8eRvbGlEtAYQc1C2qkylBgX1JHA3o=; b=dOkG3YFe4BELj+qPIm0GSzwq5lbvrKapAXoB5CvSz1aXP9G/a2lejXpCkyltVH05Qk cJ0vQuwdlkoxUFVneSevhN78yx3Jx8KZNYFnAGaIauXu/zVwhj3bTC0BGiXSEbyGNEyX ewH8/1UtG2j5P9S+vsb7UERd+2L6cRUlqYN1i+Jqh828MNptuLWRkAKmD4JxiMLs0+pJ dq6G/zUWxnABRSbYZM5wycS1VoyF03kIigv2MeiQqYjeLaDmW1CVTaL5KU+mToFgc+DP e+8DfCI8YMwFTTAStkP2stbx+6Gbsqmj3eSeFsHHNPPwIVOOzM3Z+20PWM3BV4+QqVW2 wnnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772721055; x=1773325855; 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=Ih7YS3OMF9nyIk8eRvbGlEtAYQc1C2qkylBgX1JHA3o=; b=mX2gowxcsz7zXkIANS26uZIhcxteX4acKlxJLIVXhDdSNOjyDWU4ukfgF1O5yIVOmp srW4Ud9gBY5UhpxuuBdbEiQgyxHUy92j1T2fTBUMjtD2m4S4yuhemKqKumstgVDLWN2b uzFw14Cy4tOqaUXNc3EW6R2Vddrhrx0bvIv+qzqiIzC6PWOMcDnSM7VXf6sG7jsHMrZS dLljvc/SEEvYGkChH+qrXZzm7gzwvc9ru8rXWXCnrhl/4AIbgDD/VY22T/e9snv8872a CVxJYi9i/y0fUU/fjfveCvMtR3dnBuvS+W0/UNUz/IQDArcgfNjhnvruWQNtTmtKrgFj 6kcg== X-Forwarded-Encrypted: i=1; AJvYcCVayUVncdJ92eYN7OwUDwQa5LUqNLeUcZ4aDM7D2RiSjpSYvzYEqJX7d9rzZoOvJgzui/QU5unpnv7Krv8=@vger.kernel.org X-Gm-Message-State: AOJu0YymaJqzgegbdzNjvboV2l0I70yudUe+1k9MhLeAxPPUrX2duYz5 /aZUOh/fyqeuw+0kWxie6WzD6AMdOIB3OMRdLtJOJTLVaWlqoQRz74k3Ve7I7fXAhb9wbGklmbb +wXq1h2jQ6zVmf4roaIuAA2CyJuG96zi28GL9lHn7ByhAY5vA6pgLm/Il5xhyRBFL71E= X-Gm-Gg: ATEYQzw1U7dR6grvpdGuZCmxN/qSo7eijnfGuQ20e57NBW5ssuWDY1EznalgAB8cnC2 XnVIcCIVAuwH8y6zSNT6ZJ2Ir7XQvjO7lMeE3gdRjMm5JHZsS5DaEBP6BYgiBlL8N+GavuQijjd YBdVRTUm4WW873GbSXN0CR8ShjPmNAH719WQ1/gQFtgx3yNgW4Rw/E3vAD1K6trZn26uzz3exDN RWio4mrrJEfGjs40kjHKzRi1BY59VCDXVsjI2309infuqg8Mvg7zS0RHZYiUfSrjFipa4i44mWp FRrLWRCuAIzay/ZtAULpIKDW881ZTubBjCqSE/e9p72KPSDxFXtc346fhdLOPsTa6tLkBg7+M29 VsWRe+Prn4BjzhJt17ssCsjwK0dSR1TO0UA6KEF6oTqU1PrN9MYcL7Ip/pJsUzo1trrGI4pjOsP C9c0sHupn5aFQOb44xKLXf2JUPPkA+B1086zs= X-Received: by 2002:a05:620a:4011:b0:8c6:b45b:9e2e with SMTP id af79cd13be357-8cd5af80331mr800441685a.38.1772721054695; Thu, 05 Mar 2026 06:30:54 -0800 (PST) X-Received: by 2002:a05:620a:4011:b0:8c6:b45b:9e2e with SMTP id af79cd13be357-8cd5af80331mr800431485a.38.1772721054108; Thu, 05 Mar 2026 06:30:54 -0800 (PST) Received: from umbar.lan (2001-14ba-a073-af00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a073:af00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a126fcf563sm1522618e87.27.2026.03.05.06.30.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Mar 2026 06:30:53 -0800 (PST) From: Dmitry Baryshkov Date: Thu, 05 Mar 2026 16:30:44 +0200 Subject: [PATCH v4 2/9] 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: <20260305-hpd-refactor-v4-2-39c9d1fef321@oss.qualcomm.com> References: <20260305-hpd-refactor-v4-0-39c9d1fef321@oss.qualcomm.com> In-Reply-To: <20260305-hpd-refactor-v4-0-39c9d1fef321@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/pANAwAKAYs8ij4CKSjVAcsmYgBpqZOYBQIJFSnt3j4DfPHw9uvVAqVMJ1BsFnH65 hO5T1YmymiJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCaamTmAAKCRCLPIo+Aiko 1aUzCACzIsi/nyt1jXaDzIfkKPhx3fbpgBMO2xIw7lATpx06VVEB75xlWiF+gGci7qd8bd6ZGS2 j8JcZeH5FdkojA9eGj2unttjK+G9HVm98Sa5hjA6NEWNPBunexiSEDi5QzY4ovQX57OXSmpFBwH Q976srXY4pi3iGqHLg7JQG228y+Jv9YIkxaAScuQQQvoMEzNFgr5062LUzzYYuLbcQO7kyCd3i6 AWHujAHI+F7p4CHdzlpOqdibjjwRimGYxGtpjpkjcToujA72cP0Im28hAu11A2vP449q6GkdOhk H16UKqbwzRHap5jVwOKRHCs7GI5cBAs4COxU+06K9/G4KErx X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Authority-Analysis: v=2.4 cv=I5Johdgg c=1 sm=1 tr=0 ts=69a9939f cx=c_pps a=qKBjSQ1v91RyAK45QCPf5w==: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=EUspDBNiAAAA:8 a=aneus3DpQx8xEqIVSrsA:9 a=QEXdDO2ut3YA:10 a=NFOGd7dJGGMPyQGDc5-O:22 X-Proofpoint-ORIG-GUID: 0reeh5sTS-IwMQkWtzkqJLiTYTn_FGrA X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA1MDExNiBTYWx0ZWRfX/zw5JagBK1ay MnoQkHf50w1Raklp0zvB5IBHnvsRPv43B5wHhJDeu5QELpApSu/dIssxyoVMofHC1HuMeT/whvU 7o2EUis1hGckykx9vGJrylUG2RuPzf8v3mmyiTXLB/jxx9BhlciVwuEsNJDQ02VcpK9PrJ318DU /bkA0knXKh1W5BvqlJVOAmzZpizqbG8iGWKncD87kNmJyihHsBdL9RWWzauxEGHcwRor1jUArXy 9ERaVZJTZlimJZ0AcPtj3N0ZOwo/o8mzZaCxNVFJQWLiEya7A4Ee3BF5DODhnkYhzUnbbv9TJqJ 2CiZTr8E4BbHidIIMoWlJfvLx84qUpXlEoRGgXgOiP5w7jm66hDns2RaU9rtQfl7PoMu0p2Y8wD WdEw/PG35x4/v6zDCrts9jHRYmX+c7e7HBuGmvR/skp1AgL6qpfUpKB9HXPodl/J0pl3WTt16CT Jb9AJlqs6PnoeZ2TJhw== X-Proofpoint-GUID: 0reeh5sTS-IwMQkWtzkqJLiTYTn_FGrA 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-05_04,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 bulkscore=0 malwarescore=0 suspectscore=0 adultscore=0 clxscore=1015 impostorscore=0 spamscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603050116 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 Reviewed-by: Konrad Dybcio --- 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 Thu Apr 9 23:25:03 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BBCBE3A7F51 for ; Thu, 5 Mar 2026 14:30:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772721060; cv=none; b=YE4rj3zp97lSuZ7vywm7e1QVDbbknrt4TR6CxjL74AtLXSREFxq6j4bSzFYs/B2mwZW9h1eXg7CPTpOYhgnvSGj/PhieanTsguXaNUi4Bmqs9HE887Q0fXkRPc663dNtq9KtN8FOYV4KmMvkUACM1jbyyCID6eZAx+n0hf+1xS4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772721060; c=relaxed/simple; bh=OWRdOQlqAgZDHEFjFECShBR1RF+bUr9ZLUwiZwlLTKQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XbKpn3K8n+625xgebMd27I6e7MPTxc7Zot8BHcj8GYKqBE/vRIFzn6CIPXW3U2eBdP6xHIy5HHNgWQLANa1p77wvA2yt/jnYTOUdVJZu/RdbUg6bKlIF9fEbWWtmfwFPLJvKhy0Qn4/KE+TUDV2LgBXtneIWilPeyXRUE9ls3nw= 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=d+e8FkeJ; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=AWiV5eZl; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="d+e8FkeJ"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="AWiV5eZl" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 625AFfHD2922564 for ; Thu, 5 Mar 2026 14:30:58 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= SKcwhb+xWTwW8lIkUoC+RbFacXz+V1PCsboLX21gXQg=; b=d+e8FkeJ4Y7l/fHE a8Mz499o/9gD4jHBziO8z5hLSXSHsthC8/PC/ELdFX5cuZfnJ/WNaY4v3MzdDGJI E7AWF41HW6qRlXudanQoaeEstRdy0zjzoVKMXBfTtIkGh9LqnrmgxFnkq+KA+wPb P9QNZCd48K7TshI1Rnhbzfk4Fx0V0Fqk7r3HZPKqXopQjYnTwJy4mGYQLoEmvn1a aqgDV/Jke3VRfEQIp+0QOM3M+IlMaATctBjN+RYrJBIKLVS9FmWsQvM1ikGQUSTT M39A2MFUe+nEnOuZ1G6/GZsb15SebGQO6eB/Qt2pYCz8ln1d81euPD3ZkxPE0I+j Llsm5Q== Received: from mail-ua1-f72.google.com (mail-ua1-f72.google.com [209.85.222.72]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cq2q81wx6-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 05 Mar 2026 14:30:57 +0000 (GMT) Received: by mail-ua1-f72.google.com with SMTP id a1e0cc1a2514c-94dec0ac214so72567658241.3 for ; Thu, 05 Mar 2026 06:30:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772721057; x=1773325857; 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=SKcwhb+xWTwW8lIkUoC+RbFacXz+V1PCsboLX21gXQg=; b=AWiV5eZlm24d+TUUmc/2sqc3B/yp1jAHHCnwgj7/2t06GVcWCDWV3OTHZmR5Xo48cL HRCgckUTG0U+IKUHHhJTUKpSUO+lpW3l8wV6gXObPbts7L0GbAkLShkkPukMHDhXh8sM wfaPCEwVriSq1yt3OSN9mMjIDtQzsk+CWsqK+Bm+Wl9n1i5V7Xc0NYaPbRIoJtZ7AOPW p8VHz5zW5Bequ+wwVPbV63BRYWUv0p0iCTmWevWcXvhljJirWnvCHzt+w1k2aAxH+M10 5QkhKn/+OjxIil9pCQWYzeugUB7Rd689HnW1xptYroQZ69VSVq/QhEKbNVyb+VrjNRVF 0JwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772721057; x=1773325857; 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=SKcwhb+xWTwW8lIkUoC+RbFacXz+V1PCsboLX21gXQg=; b=V5IkS/ExaK70+TfmeTwFnqzwleNqIiEXoZO+kYXKgvHXAbZBwAPVdC3whPHtjLgXjP eo5M96+qqrnB7fy3DjEq96uJUeL041EYNfO3nB5MNZ5vadUB3jXlpKNjzflvx+kLoewD Jpl4FFEYJbEjEk8n3/Y7sPEqFcKqvTWc2x7wLx7Z1S7GQvtvTMiOawcnh0sHyMm1N9WV AaEYUwLL8Z/84nRVrkJhqcUb4hcneBiTZeo8DNmWt28rFkCaexr0M7YHrJ5mbbMW+Q+o 1STwuLGzdcK6gzeqD9szLsemJ4Sn4Q7qmRPtIj4islJt0NSAPibNrDMW105WGp56kzeX i3Fw== X-Forwarded-Encrypted: i=1; AJvYcCXQQ6lRyzRSgxo2RYB2xmACZgmPD82IhuWV8jQJsONZUHgqrl8idWBaXbeYYNr7Vg49WdSkMA/ZuJZQ4zY=@vger.kernel.org X-Gm-Message-State: AOJu0YzodZmOq2EcUxkfMqxmc07rBRvpJIZaXiLMwx+28smK72rjq5PZ S8Txy9kxCLB7R4pyhw7Ha5oAs9hGmdkciqTMdsvezV3iNpaObresGeddezHsKJtc7Hb6ZZ8g+9V m6yzgqihWo0ZUBgu06ImYJr81mPyUpw0rH0W+j9NSvXU0HQzuMxhmqvxT56nLs2Gme8g= X-Gm-Gg: ATEYQzy8Qkxel97O6IdfyOhwgcaa2GTmSUpuhbXM7wtdvWMi4kT96lPUFJTKbof4vDi u/+340Zx9sIW8ugAsY3RJOmXW4Al+wg9j/jhs6WE91dtCETjgfm36VOyjYe1QPGNFvflHMCmHWE gs3fWyXeM1USHU0xekCBiDP8J48YOWsEz3OEjbuKWP9qvGQHAolF9zf8AwIezGHC75vxKU/HE1B BKiQTY5hyPnfRDDqIyYPU6R+SQG12i2abEXep+zdP5XuaRKLg61OaxDo4gt0zeaxEpBsp85O72N cMZczTvoFWsYatkYpqCxdZ9kKgfdiKl8of4JZGnNNrUUT/vMUtzBTRJfow44GBExUp+USDBfveR Xv5Cwl2c1K+C9a7RucoaQzts5HZP+8oPPY/dbSDrGQqd5Xdm0NAnESK8Fyn1MpLTZy4FlmwSvMc Fw6E4pD+RczAxlwxRhJPtexpkDMk5CRWIGlEg= X-Received: by 2002:a05:6102:a4a:b0:5ff:24b4:8992 with SMTP id ada2fe7eead31-5ffaac15453mr2837174137.4.1772721056378; Thu, 05 Mar 2026 06:30:56 -0800 (PST) X-Received: by 2002:a05:6102:a4a:b0:5ff:24b4:8992 with SMTP id ada2fe7eead31-5ffaac15453mr2837098137.4.1772721055666; Thu, 05 Mar 2026 06:30:55 -0800 (PST) Received: from umbar.lan (2001-14ba-a073-af00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a073:af00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a126fcf563sm1522618e87.27.2026.03.05.06.30.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Mar 2026 06:30:54 -0800 (PST) From: Dmitry Baryshkov Date: Thu, 05 Mar 2026 16:30:45 +0200 Subject: [PATCH v4 3/9] 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: <20260305-hpd-refactor-v4-3-39c9d1fef321@oss.qualcomm.com> References: <20260305-hpd-refactor-v4-0-39c9d1fef321@oss.qualcomm.com> In-Reply-To: <20260305-hpd-refactor-v4-0-39c9d1fef321@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/pANAwAKAYs8ij4CKSjVAcsmYgBpqZOY4EH5tOhJuNNlBqaGXMfWD0qmfHcWOb8Md OAljlFsck2JATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCaamTmAAKCRCLPIo+Aiko 1e3yB/9nmGw5lKskzi+7opE88tsBJ84JNH2uon89P31MsY0o31gm0avvv1hfvFUXX81kgUc/oSb 6LcX61PL5oNi0P6+CAoFWXb0iil+kzezIZm+jg0L/P5sOtoM0rNbyJqBkfBpxsUCdL7Td4WKCOp bhbpOmRinO25ahqKRWhbTLSnEAZScQ9jtTXHjAQvllfkR3j7xuHei6aGxVDGfEd6hVyjiRRn8TZ yxlOy76d2Tp/4bjjSzwso/BSkXfQF2JhAM034ZytvqRf/GPyn8SwBhMdVPxfBplYYSfs47nd5yq 56f9yujtCWga1EMW+Bs7dqBRoMb+Uomq0PcoqC0cSrmAvidy X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-GUID: r7bhd3z2uRZwfmX8z6B5_DQYWpw1in4E X-Proofpoint-ORIG-GUID: r7bhd3z2uRZwfmX8z6B5_DQYWpw1in4E X-Authority-Analysis: v=2.4 cv=GecaXAXL c=1 sm=1 tr=0 ts=69a993a1 cx=c_pps a=ULNsgckmlI/WJG3HAyAuOQ==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=jcEwYMPARZwhhGfK5pwA:9 a=QEXdDO2ut3YA:10 a=1WsBpfsz9X-RYQiigVTh:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA1MDExNiBTYWx0ZWRfXz3wNV/W2tndJ z5ZoDWlTxGSJasiTtturuUzmyEqH6ldDIyPlM2Xazb4KkOgPui7mFvwmOx9SdwD+apEKZopUndA Ewz09fC9PRCHZggJKrpOSwme/Ig9e63aJS3qBkabZd0VGzdqSEtJVRdqa2cBWtK42Qcz/4Pyxj1 Z8s9PmN2524JTrok36K3zyamoio+JNmwlZFVg93705czMTAn1Da5bQ1HF/bPdZAHOiZ5YUoBsS/ 6lzRfcmCHQfkL9Gv4G6RHFQTRB1jvkKajTT3+MC+BVQ6BARc26ZCkeW7sivnVVsp5PvEyxWFU27 5yJfuKM7NcS53tLT3NIixX8Mn0FA0xRslGYP2yhlBxlr+3PnTvl5SqcISn4KYgSfpLiZQsdl5QU rv2bbcV1DS9XQZLQRQDocX9joYkasxlebbGYMShG0zqGtcCTPK9GpiMt3uJXmA+p41oiM8f+IvP xBhA6XItPHlpoweqXJQ== 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-05_04,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 bulkscore=0 impostorscore=0 spamscore=0 suspectscore=0 clxscore=1015 lowpriorityscore=0 adultscore=0 malwarescore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603050116 From: Jessica Zhang Instead of relying on the link_ready flag to specify if DP is connected, read the DPCD bits and get the sink count to accurately detect if DP is connected. Signed-off-by: Jessica Zhang Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/dp/dp_display.c | 60 +++++++++++++++++++++++++++++++++= ++++ drivers/gpu/drm/msm/dp/dp_drm.c | 20 ------------- drivers/gpu/drm/msm/dp/dp_drm.h | 2 ++ 3 files changed, 62 insertions(+), 20 deletions(-) diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/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 Thu Apr 9 23:25:03 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B692F3A6EE9 for ; Thu, 5 Mar 2026 14:30:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772721061; cv=none; b=NOiMKUBgqWtEUq8aB6goD49iwomGDLZ0vV8r61tAE1ZivQeYKK7OI0aBnH5fIiwu9qLLWqDkmazeTyW5XZciNFUkrpUBrZEX9bdEVVCpqoZcREg5PruRZIabY7Rg/TVsxBHQF3jWZ1f6FrtmiHK7peP+EoZEMQHdfU8MXETdhgU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772721061; c=relaxed/simple; bh=93mNWzDSyV1/6hDP+y0Mc4joR9UKuCrK6sioo+SXDbw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=N/0H2FO78pU+pPy/q23dEncoubI0A/asTVzw84icgViL8a83j42GymU/4Vn3xCvVGAEW+RYsspzBXuhwlGI1V1KuGHv1VZ2Z67Oa1guMjM3rHMtXPcs99a69vMAk7rF5tcE4L2+ciwThRNRkZrfxNCnYPCRX+OWcxvKrRg5t4j0= 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=bvJd+QZV; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=KGtoK/qk; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="bvJd+QZV"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="KGtoK/qk" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 625AGHSD2119008 for ; Thu, 5 Mar 2026 14:30:59 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= gM1FM0OVfdRIp4jLyHcwDI8KJBwQikDnEiW6JeMAtS4=; b=bvJd+QZVd1cuXnBe d1Iu4H0BCI2RvIQ9+FkYoE1LMp3W7g5Uc6RN07q/YdOmW1zHapFWPIWyeWiFKAav YKH24h5m0nbgSt8D74Xju/mrNkgbx2PV26C/BNweWP0lsDNrG33K7h7XW1jU9VtR ew+d7k8hen45yRRSpoaDEZEXf0S9Q67KHumSzIg3f4YYC50wNAO5bLBlSc8Dn30+ Kz/97wUNFKI7vThte+/E6Q2jg4qNXVGeogaG+SZqwXWDg/1m3iilIKYb64Lif0G/ pA/RQEexF2cAUbDw1dY8n4GUS4DBcdTo1srCJ+CSPFRv3E/dvZwg0tRzDTichBoB EgXcFQ== Received: from mail-vk1-f199.google.com (mail-vk1-f199.google.com [209.85.221.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cps0m3nxf-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 05 Mar 2026 14:30:59 +0000 (GMT) Received: by mail-vk1-f199.google.com with SMTP id 71dfb90a1353d-5675cb317e3so10994155e0c.0 for ; Thu, 05 Mar 2026 06:30:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772721058; x=1773325858; 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=gM1FM0OVfdRIp4jLyHcwDI8KJBwQikDnEiW6JeMAtS4=; b=KGtoK/qkbUqf3OcAia4GLegsi1/5Lr4T61BiMSPwWwV+id1zPSXKMZqV1Yqrinkfvj LcKzJtpX8kIW+mrFaY7mZmE9cmqPuZDQX053ZqTSFgqDJw9ll6aCyVS+4wAuCQa3Yofw ngrMTK3IfBnpj6TAqG/IPp1tMvSha4+cQO9ruiblzWnQT9zd2iBqLDMi9/UR/Hs8e/si 4dFHUc7Z+algRKSU0tNvqSLnTYT/92keQ7gV4+BDfGvqW6PBjGnr0lGqsj8Spv4Ohr2e Miii2JapsIyWoyWpLH6McvIfl058VERkLCPLJj4PXIJVEC5fy093UpCzXOjPGLCTGGcD poAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772721058; x=1773325858; 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=gM1FM0OVfdRIp4jLyHcwDI8KJBwQikDnEiW6JeMAtS4=; b=T2XWg7ya3r6G5n5xOQhSEqAhIlBIaONBjjP4Tpn3PHhnVsRDBZmm0yFeXQzm7iyX68 Ng1EwqC68oIzvCYkqDe/VgDP8kLUN0i3EYnzxKM36divQNMTtxjC4Xznw8xUFI8C6w4B Td4O2mVsxvrTeGKcunFQQlbfMeRKV3Q9p2pmqvzUQyDriJMNJvMsmBP3JHvS+4fDKD4Z UHKtmHFMd9WIVSoCQ0duQvQuNsc5fIiQS/UR1Z5aA46LYbw0ueVUqE3SBbq0sugW1e4h ZGfKcHEg4T49+RPzsAeDs2rr3CRvgWqpU6SYhJhmp0HjvnX1hk7WRZmNLWCjrrhe2UY/ I7zw== X-Forwarded-Encrypted: i=1; AJvYcCUlecJfNRhDP36UsS4UhvICRhi1xsITMzayGg0TvMtFzwpLmXCqGCfvfxm+2yjXk+5qXf9ll74Tc86BV3o=@vger.kernel.org X-Gm-Message-State: AOJu0Yysq5VQZmk+pIQEd66vU84C6T7YKV6WZtsyHlcevlB3aOVU1LDJ apWE2fPwesa+MPQH4EiWexI+PrMCSMkbOkEd4VhX4+QMHpZmj3GpZDIrd58JGa96T/8n2gY1Xpk QOA0xemtHCzb9aN+H1tSrsjM6QrZrx05x+Rli/aiPphQAwOJ5rHAmmUdl5pLLVtf/lJM= X-Gm-Gg: ATEYQzzS+wJnmboYlcaZQPAQ0e2liqaconLks90dnH2kqRtVkuMkhg+wHuOrklSghsQ h6l6fJx9Ilw6RER23Rb5wDJqZ0tvnrVTtDDENXPLSxqBUvg2nCMnbMQTuyjMEGckIjqEqVlEZef o9TYdyv5lG5IODDp+W2KOjdRFo+yYZIVaiAk64quWHHcX9W1bSbtPUDSij20hnSkege/oYKQUiU Doy7EFzefP+kIqEQeWq/5n1GxbOJpYqt6u7j9SznmBcVkYDBHfCSVwnpSZ9lwOInp1OBWg2rsFq Omt9p1VL3Y+WqdDdd2RAkrOJBFrOloZTx0+YFgB8gMzSHXNdISKr4uCQ2I1LhCub5LnjmyUPlZp Q0SO0Kf7WNx9fvanTBUeRv9v/vAM2AmS3Gtx3icBgB/dIDh+NMzwmAn9NN8m0Dao3vXd9r4zsRU ljeiPpIN9Z3gz4ZuSBgk54+gNIhRSJ33pw+d4= X-Received: by 2002:a05:6122:3b11:b0:559:67df:5889 with SMTP id 71dfb90a1353d-56ae7603caamr2234053e0c.6.1772721057654; Thu, 05 Mar 2026 06:30:57 -0800 (PST) X-Received: by 2002:a05:6122:3b11:b0:559:67df:5889 with SMTP id 71dfb90a1353d-56ae7603caamr2234012e0c.6.1772721057127; Thu, 05 Mar 2026 06:30:57 -0800 (PST) Received: from umbar.lan (2001-14ba-a073-af00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a073:af00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a126fcf563sm1522618e87.27.2026.03.05.06.30.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Mar 2026 06:30:56 -0800 (PST) From: Dmitry Baryshkov Date: Thu, 05 Mar 2026 16:30:46 +0200 Subject: [PATCH v4 4/9] 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: <20260305-hpd-refactor-v4-4-39c9d1fef321@oss.qualcomm.com> References: <20260305-hpd-refactor-v4-0-39c9d1fef321@oss.qualcomm.com> In-Reply-To: <20260305-hpd-refactor-v4-0-39c9d1fef321@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/pANAwAKAYs8ij4CKSjVAcsmYgBpqZOYJcHCddaM4Ycs5ue+0qxkZQCBHCEMF1NlK SScGLBEaXeJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCaamTmAAKCRCLPIo+Aiko 1QzyB/9fUSrBJ7tXabZzoPSyhUByYGbsn2dwnTzGpCkrAjntqwc/Mvda3/QcMsW+TyTExxAMs2M uJn3K30cHJ3NJjol+mvY7nv8c/FVBw+JaAhKVwwyVripMBXYbheLqRTwnliIo00Oxn0Lw0kXZxe 2Gcb2i4YIg0IUhgubc3D4xY1EAS8M1wYZuCFDNuIdykwpshp8qAkQ6GGUD6Vrtdm4tmLA4CM7M/ eY7KoHPqppMk6+nsWgXJ2P61V2eInZvVGs1gPd1Yuh/BbFLf7zmCw3qluHzYcWR0EXJQvpS8VeK hi4FHW4s/frRPcAQmJYOucfohIoY5zf9dG1PzU1M8RcZTCKm X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Authority-Analysis: v=2.4 cv=e6wLiKp/ c=1 sm=1 tr=0 ts=69a993a3 cx=c_pps a=+D9SDfe9YZWTjADjLiQY5g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=EUspDBNiAAAA:8 a=IoBVowuyLm_M3JZO-XQA:9 a=QEXdDO2ut3YA:10 a=vmgOmaN-Xu0dpDh8OwbV:22 X-Proofpoint-ORIG-GUID: dx1k3fZHjwNTT1Iam2YxnufiESzK3k_I X-Proofpoint-GUID: dx1k3fZHjwNTT1Iam2YxnufiESzK3k_I X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA1MDExNiBTYWx0ZWRfXyu9tL5E59LU8 km2/b4mpDdmXRMVSwLS+FkI731UJ+pTd86FIpemh5hB/yPr3T5tLz14wXHdojI8JJBP/E1Mna0j nPGWi7qIW3vLRBhKqyTb+0VzSS4w1bCFN5l9DiOmQxXL0uJ14tkiWtNiLy8/2vRA/DiJSjyNEwy OVyNz8zIkoPIDpAkbF5/L1nOcRRE0IUcmgVoochRwxRt9XaqS3ed9RhNs2qWTzPaLBW91VOe+kn k5ZYQmlPAdvKog6YbiKD7YQapeM/S1kH55CNnxHxPIyUfV8EvryLY3a4dmjR7d6tXL0B+ggeF2U BLIYHjTJhp3T5RhTOuYNfvtDF66q+E0zRF/QjwdgzUXm0fRxoPR/zzhKJBXZRusJ1vmAvl1PUmQ 4zO2zqYdIW9jxdwoLVIkCstfdG7fB4sG7LNmZqprTH/cqr2kmT7LVBgs0+K1E90/P1D2eW1bstr FnVCgnYv3ys8oarQLPw== 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-05_04,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 bulkscore=0 phishscore=0 lowpriorityscore=0 clxscore=1015 spamscore=0 adultscore=0 impostorscore=0 suspectscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603050116 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 --- 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 Thu Apr 9 23:25:03 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D8728382386 for ; Thu, 5 Mar 2026 14:31:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772721098; cv=none; b=FkbE6+RvSK2baRM+RJN6A+T9x0+knTBOh7Bq3PjbAdKyIHfdbPvMCjSDjfBNIx3oUm4cu4weTrphHOTUQbFYzHmEAUCvHl0nQ0HQhmtoVkJy1uyU+og02Mf8QmnCCXcV6dPsqqMa8qAADqkvIU+uMxX/484vPwzVG5buFn543M8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772721098; c=relaxed/simple; bh=I8rK6s12S9h0XB8WDnncnpqwoYXRqAwrD4SMU9QyTY0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XZ+AZP0wRiK2z2s9Nyk8SdZ6gVFiXe6tBrfldgXUPs5e2nBexpGU9Z+SjkZ198Plh8UtJHPNy3mUvF9wpaxYl5L+Tvrjbt/6wMMDMX9xHzatDCUHs4C5vnjGgi9h5x3D0A0UmO0lKQJy/Kjqr/VyYYuTr7/3idnQWNPpS3ADId0= 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=CrfCuB4T; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=A2Dy3VBA; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="CrfCuB4T"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="A2Dy3VBA" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 625AGHSL2119008 for ; Thu, 5 Mar 2026 14:31:36 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= dm662BBng2zzi9pxMPe+Dyj+lpwsz7Dp0qh/kR+KjPA=; b=CrfCuB4TEIy78dAo iIoiWxZ9KGKtW++BM9AJiBmrzVUSTvPFs81/20wo0W+hTjGat6rTS8HzeubwEMpF uUgmJadesF3QDV3LCwaX+Hvej/rOCpHfglvCF3tkPZMVbA4itWfyGb1yh3njZBGe jT9N9xbB++5/JvJ54q26TTG7gXM+jHhaU9cdIAHrkPpNam9bj0j5qNSr+oogV0tr 5bQ/UMqb1rSTLyXWk8zwxV+JzmwqfXQ+2dSMI1uxElHi2h7klvLeanA9AhRaKgof Sawvsmd/Aqz/CPxXs+S1gQTBd1Dp2HuGie9nIP8tP4H+ThFmurKTWAA0o+/fcC9b pGYGPg== Received: from mail-qv1-f70.google.com (mail-qv1-f70.google.com [209.85.219.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cps0m3p0q-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 05 Mar 2026 14:31:36 +0000 (GMT) Received: by mail-qv1-f70.google.com with SMTP id 6a1803df08f44-89a1f95aea0so82222616d6.3 for ; Thu, 05 Mar 2026 06:31:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772721095; x=1773325895; 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=dm662BBng2zzi9pxMPe+Dyj+lpwsz7Dp0qh/kR+KjPA=; b=A2Dy3VBAW5RxqtJvp/BXGg5ljU60LeDjRaJNIlO500nE+yc5wJgpOiQSZ8KPbpNrSV cJCt4QAXhkwqNA+qA5UsQ6vBVUqZGPlGiiYLhkM2kQcHRnu7OPf8go7PloUCn8FKTNux +FfTDc1c3qKBsPYPuD53zd6byScsml00yUOoNiAjGBwoHNtyyuR+tUyJ/zBdbrcCyQYf 6K/RsMuAUuRnfa2pksThJ5www+59n8eHB1Rq+7K/zYk7J7stnxMzH5jmeuBruSm9ElS5 k0a7U5Jggiw55BDpeuLD77S+e4dFp07IxpGmsj9pkTkXTRqyW4/oZeRyY9Q8J4C0//xP TjlA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772721095; x=1773325895; 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=dm662BBng2zzi9pxMPe+Dyj+lpwsz7Dp0qh/kR+KjPA=; b=fCNtCOi6AX4knxGUNc+pMgHGkrPZPfayMxKerA+wEHtta32hGnCdI4L3s4/ka7eF8u MikEBe2BDAkLx6eTs5p2cbczyd/tdqS8/eWi5tYU54zb7YJokN1z1NXVXdDuB7s+DK1i DRRpH07wfhKDr1XIEc2lFzy5dxWKVQoVVM0+GYBXvPUSq3nB7mtNlZWyw++rBnMU+E8x uc0vTvKl4au58yf+Rqe3+dghYqRdc7RQRPXWqWDvGFETZ6ssszcTBcSV6Q+N+RQvoeJs Q4TnL2niSx6EwnPi3M+gElw8hCz/fhYojYIqHPPNdTy/eODM5IkiFlUTwRd0hV+19Dfj ecJw== X-Forwarded-Encrypted: i=1; AJvYcCXKamXTIaOKAjJoiBU0Cb3hupN7wB8Pwf6jLKbgrgOhvTHiXl371KwYkMo6+sSWIFyAvvol3z674r2Asl4=@vger.kernel.org X-Gm-Message-State: AOJu0YxFq4Zygp5Xo3kJiH5R4vwfZTHDEVa51gPSUnFYNcPNgpMi+DCP jmfzK3NZh7JRo6ZTc8rq0cRjbG5Vw5zkGY/Tpa6W14JwsulM8kkFFqq7uC3zqX6Oq+XawPGrGaU OML8eXagE2sUe136j4kh3gm/F6dO5bP6UXPCT9FfxSYUR7H59rXBJ3S/ZvTGEb1lUlR4= X-Gm-Gg: ATEYQzww3OWjCj4VHpzHSo1cAMeO91e0MZqmB7lJnlyEVHWLcGSlf9kiQ83+8dkX+Vp 3l7+koA08jmDXHsWyTVDipgqWIs5+wbRC/RVhOAs9TubUPrA3S3b0xs0MGr0XUIcIdRo11838Mu BZ8dGJc6ZAfb5ua1TcW/0xpsdqcFrHh6eQAtdoCOZWSHsxiBnPby9uUSjxQfuZrvsZjr8PmVdDh 04J0Z6ygJAGPkwTjdrPEJFhxq0QW64b7HrjgkgYaD9b3u6xHRFQQRjJySTVYPqJwCAta961UGJ4 cmnJ5TcxPhiXjkKrAwbhB6xdAT68tK60R7DcwiSimLABVVuRqgnVZEkLphVEVIAAxspTVBVyRCt hRYCKGGe0vpb7J+LRxy8mO882SVMQzCTFnZREFbGPVcmn4jTOKosnKQmxSm0z6tcAiKecPZ89WQ TRROpbjjHkf2h/dWUXsyhlHF7QJYIo8g+7yLI= X-Received: by 2002:a05:620a:3949:b0:8ca:3d7c:e74a with SMTP id af79cd13be357-8cd5afb208cmr653241185a.56.1772721087932; Thu, 05 Mar 2026 06:31:27 -0800 (PST) X-Received: by 2002:a05:620a:3949:b0:8ca:3d7c:e74a with SMTP id af79cd13be357-8cd5afb208cmr653031485a.56.1772721058621; Thu, 05 Mar 2026 06:30:58 -0800 (PST) Received: from umbar.lan (2001-14ba-a073-af00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a073:af00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a126fcf563sm1522618e87.27.2026.03.05.06.30.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Mar 2026 06:30:57 -0800 (PST) From: Dmitry Baryshkov Date: Thu, 05 Mar 2026 16:30:47 +0200 Subject: [PATCH v4 5/9] 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: <20260305-hpd-refactor-v4-5-39c9d1fef321@oss.qualcomm.com> References: <20260305-hpd-refactor-v4-0-39c9d1fef321@oss.qualcomm.com> In-Reply-To: <20260305-hpd-refactor-v4-0-39c9d1fef321@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/pANAwAKAYs8ij4CKSjVAcsmYgBpqZOYq3v0+B1pdezNRiSo6SlWnGVibturHchqG U66YpfGOc6JATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCaamTmAAKCRCLPIo+Aiko 1VP9B/9MBpJQ817H4AWTAIeZy7HcR8b+F65w/PHRo1ul2hWes3E1XsDDCmElfIhf4be/s0bxiRr Jp67xLF9WHDJj4Uh3b3qtY4lzu/jSFbvq49dSuQbKM2YGaHlXxMaUf8TqQzebyoAKVGi+pvS/Tb Hm89tMD4kuclG2akP5018pHVj0/YC5U5yknRpjJQ8cHBGhhFNDZBItUWrGsDQQ9Jj6+Z7xWt6hF zDX7crLLzRorpKtKZBv2mFgEmxmlEeyJXn9U5sROqfRK162QOw8UkRUwugh+24QjtBUtXQessiA 782kSvQ0N18HCvm/Ex75oJgPQjShSlNTGICPc2M3j4qqVH2m X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Authority-Analysis: v=2.4 cv=e6wLiKp/ c=1 sm=1 tr=0 ts=69a993c8 cx=c_pps a=oc9J++0uMp73DTRD5QyR2A==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=EUspDBNiAAAA:8 a=gW5k9mFOS1cgrKxYKbgA:9 a=QEXdDO2ut3YA:10 a=iYH6xdkBrDN1Jqds4HTS:22 X-Proofpoint-ORIG-GUID: DwlP_Z9V78jMefbxZivO-GF4ce1vFTbM X-Proofpoint-GUID: DwlP_Z9V78jMefbxZivO-GF4ce1vFTbM X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA1MDExNiBTYWx0ZWRfX1Vva6Yf3PM9o 9R7pTLaBpGOa2p8TNmXlf1RFQ60UsgI1ZcZfdvuOz0vaa+j61p+Wm8XmN85oCDZixgDfubvhEvf EnDrTs1sgw/0rLNUPbUQjAPYnEu5kF4h0VjvHhMyYSjtwUhTHSfoN80RNnFKIRoIF6kwRZ9avd1 e0Qpq+BTjh0FRbfP5MvYC7mmg8HJBCPjc9VeG0z1M+0qx4T3ZV2OPC+aUFvlIgvFaAurKlYlL4P 9EMOXlX0p/+WsRQnnOzLOGi3FQlz8HQs01iIeP53DUzxWWtpG50RKLNVTOInBDMJ6Ua+3uo88ea rGqQEqmj+v2YhCzKNkd2Fg27u+D/lOy1kY7EeCkcRwBk1xOJ5ku953Vgz9jBEE6BKrWQ7H6Ud1U T8riWJwHur/CE8rG86BDi8IqV+Rbsop72vOzh5C1I9n4/c2vbTnY6tBelPx7lswkje2Rm8Q92tr NEeFhq3fea6ehbTriFA== 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-05_04,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 bulkscore=0 phishscore=0 lowpriorityscore=0 clxscore=1015 spamscore=0 adultscore=0 impostorscore=0 suspectscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603050116 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 Acked-by: Konrad Dybcio --- 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 Thu Apr 9 23:25:03 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 6367A384259 for ; Thu, 5 Mar 2026 14:31:03 +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=1772721064; cv=none; b=eL7W5WSRaE04kFgU3m5z/ATlzoOjYO6xBD+2DxDdOK8jR2xq1SoXAvrbBglKyXapNMjhwOrVKygTRHBHiUlgc13v012yvDRRTW+FLG/hV2KUxphAvKSKTxQ6j1DkdCvPGDWCBXnhaCkS75wpT8FCjSzIdnFPZLGoycOiaAG/ehI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772721064; c=relaxed/simple; bh=uXjrwf6kVU4yfPAvO2dRImodIsQs6Els2Ljkho09jGo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mkGiZlophgGWMB4cpeW9j/V3Hmv2teKoVWyb9hrcAAynAPSuFWu73+xLmOyPgIZfJ3qe9zqBNxMy1RhsD9rCE4Z8TgfPuhPUJ/FZYJbWkXcB8M9RI47GCgQqJqhijmfz3dyScPPU5k+drodwWDCXD7mreSJcucrNhVmSF5jCJrU= 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=ceLZRLgV; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=BtUOdgwU; 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="ceLZRLgV"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="BtUOdgwU" Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 625CMxwW719996 for ; Thu, 5 Mar 2026 14:31:02 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= XHiLCL2Q/VJoKNHmnopqEVjk+hwroQfPTl82ni3pxPw=; b=ceLZRLgVk8jHQ9/M hohkNADPvfLT5HyhOkDJjY5LBvmfBSeuirkaFv6Tbc4CvJPP+Nm3oDz72ZploFhz D4jgCv7R/q9JVP69bcseYtk8xxWM6+iOkrPPOshkMW4DuranxeRQBIcsJZPXoCgI McA1i7uMdphKd0ZEJVJubojxy4sW0BmZQr39/l5hysITHcdqUPX4DweVebmP8NRG Ku5LWmow580/bCRsvY7hz1lWMd25m26z6eM4SnDbo2WOiy6Euz663dI3Nhb/fFCc 8WM7O8ed5FsezrJ7P8CmbqBR7ggR4ZuSIFD4nndIMKRJ2T3Dk+PsuiBqTf3Zxbo4 p+sLbw== Received: from mail-ua1-f70.google.com (mail-ua1-f70.google.com [209.85.222.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cq9srgcg8-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 05 Mar 2026 14:31:02 +0000 (GMT) Received: by mail-ua1-f70.google.com with SMTP id a1e0cc1a2514c-94df16a0801so12367463241.3 for ; Thu, 05 Mar 2026 06:31:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772721061; x=1773325861; 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=BtUOdgwUV1UaaqrDK2V5pRcfKFMUUixi6+FU5+FE3ONapwFDoG/XYzrbSKqlSedxHe sNeKbPd2PiP5gYW4VuXDGj057RHjQoJbLPnlLUKrlsg7yFMTg8Id7ocrVSWQwgpT/hdv 7cGwYkXx0mnmvkfKCXYKaVnM5FdEHIaqoIfLlpRY3iAf4Oa/ToLUEurdEKeMxllM/1sA f4uk6Y5UztoeveD4kAxJXIGpPlApRkkbT0NcK96BwKMOS9QNnc30cgrdrRhpEE/2W1iq aoiwtonyN+GCTeTOVpv56oqSfkhHSZSSoEh628+3g9RUYYaIpLHe2uhZMaBswAUdjOba xXww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772721061; x=1773325861; 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=bC050HMtHITXHKsN0hXvonkTwUAtNlHlun5QlwsSB+BjLicc0DZ8K7xeSh5PpovFin w4seOyrLjFdvdiKpEE4lgM6nQzEJOYtjwX/32cw78mIFGazR3AEIl769K/jw4Fjzsohc 3jqtKRTgyX53XbLbxCeDZlpvth3CHzstJdisjk+xHFyrPJ9r9252ouIOhlorLj7zWYXm WMG0eh37RDnx3AmQVfezVCAc9F9JyCRVAsNJ7q75pvjjZt1nLL3u1iKOLYr9997dNFzE T1GofZdPJu/o8GKxd16LLOOOwhhJ39stidAjnAsn+jyVv4mgrjGWJOrbVDalf0Zj+UTj EnZg== X-Forwarded-Encrypted: i=1; AJvYcCVqLIQmqNDVYb0IAsggj3PhaY2UANqhxkL0W79FnG9smbykETpT82dkGeno39vHqi9XLaD9lKLXLeKnK4U=@vger.kernel.org X-Gm-Message-State: AOJu0YxjZ83tFfXWQfOG2DYbEd7J8Vc5xoLi7bycow7u7BQwpX+9WrD2 e9+s400Fv2XJ0bKppWjumX2LJbVLSPRw/69rAovoa+Lq43T8+CLMPMxOR/JalfTdkpAcO5dYBOs pV7rVxT4Y/5BHmYNflrx7Gingb+xd7stg7NVo+JAs1CEPGRmArVJgZVawPveORindgbg= X-Gm-Gg: ATEYQzxmtQbXhwfupQCzvJ/qR6ucMFv6srzmfD3ItlagOViwLatyeUv9LTgWnDyZ9ea e/8VARVh+ikjbjfD61G/mKK3+h1u4PIkL6JlAY3UlaMVSqWVNIOx+JzhHMqS3a9VyAeFkrHoBcI 1LDXozA4mTXihZfYV6LsU9MSH1nLwPmZj8wqSndRY4zYSQiLOpL6EshZEFFOmY9TFXvjQs5qv59 PJDBetFUT9FV1KiuGplzld1fDHRVdEbDQePw4L/AfV6G74ukj+OWNS/ZUknk4MfYoxyukTP3z8V zZ+nBWv16ZOxnTPYqVxKoglEGgXICHn9iQ1DSvb1JuK+7cu/s4KB7qxOOyGW1Lx1OS0w0Q1br0+ d+WGjohQZkI71OGQm/DDx5Yf1rScTrup1I8YAdncBgpak5UIX+1VopZ/4QfrkhYDpPwkBJm08gW fxZECHRaATgsqxgraaXCnUKEOraOJSoQO5kwU= X-Received: by 2002:a05:6102:2913:b0:5ff:cd6e:85f3 with SMTP id ada2fe7eead31-5ffcd6e8968mr775540137.33.1772721061194; Thu, 05 Mar 2026 06:31:01 -0800 (PST) X-Received: by 2002:a05:6102:2913:b0:5ff:cd6e:85f3 with SMTP id ada2fe7eead31-5ffcd6e8968mr775509137.33.1772721060212; Thu, 05 Mar 2026 06:31:00 -0800 (PST) Received: from umbar.lan (2001-14ba-a073-af00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a073:af00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a126fcf563sm1522618e87.27.2026.03.05.06.30.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Mar 2026 06:30:59 -0800 (PST) From: Dmitry Baryshkov Date: Thu, 05 Mar 2026 16:30:48 +0200 Subject: [PATCH v4 6/9] 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: <20260305-hpd-refactor-v4-6-39c9d1fef321@oss.qualcomm.com> References: <20260305-hpd-refactor-v4-0-39c9d1fef321@oss.qualcomm.com> In-Reply-To: <20260305-hpd-refactor-v4-0-39c9d1fef321@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/pANAwAKAYs8ij4CKSjVAcsmYgBpqZOZPMNKFcGv9m5Q3LD4Nvt36+SPyZqiRmLc3 KrK2MAgHmSJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCaamTmQAKCRCLPIo+Aiko 1Rx7B/kBlcyEkD3uku+ktv4gegHOeY5dLhX2TnHEj2QvBgblCGeJoRfZRtGEa2bKZ5VnX/yzpJY SzUfiiffJEGa/UdrYDgzCBUhXp7H66bNhKzIWc4858VqdOK9UPBlZwr9mZoFVbVQbmL3qhRTHGF czSgR800dgvtkjmrMmYjzxABc0Yd1yPvrLC6E00bKZh+XemXl8nCXVim6mjB7aX+aVsNDRUgeTP CLVzbIqs3IysSyr0QXLeMJtnsDVrbxp17mi67y4WH9E0XQZuE/UYfQy7jnQ+uViJFzNz4YMAjTA UNFChVpyRyjlsHO6/oOp3BMBoQx2Y5/mrOJjjLXukasOVlCB X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Authority-Analysis: v=2.4 cv=a/I9NESF c=1 sm=1 tr=0 ts=69a993a6 cx=c_pps a=R6oCqFB+Yf/t2GF8e0/dFg==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=EUspDBNiAAAA:8 a=zd47t_UtYfsHpvN5YEcA:9 a=QEXdDO2ut3YA:10 a=TD8TdBvy0hsOASGTdmB-:22 X-Proofpoint-GUID: rgU1p28eRCdXWW77lGlh6cqhHA9lADKF X-Proofpoint-ORIG-GUID: rgU1p28eRCdXWW77lGlh6cqhHA9lADKF X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA1MDExNiBTYWx0ZWRfX+JdZsjD3FiZf +6Dol+JmaPiQ9QkgXEF+N/IZuLQOYnBxAbGr7FPfdh/havO7YsUJ6VGePBLcraQ7sSI0YLSi5sB LHtdIFQ8YUBXXzAE+ut+3daqNe5T/QsQ+J8DMMS1vScJTukERVRT1T0jPT6WlJcFqdZWKqY+woX CXvignkL9R3NKFrbP8cd2IFb3nExJ9MiONmnuzmgJ0E5U0qjlU2z++rOZJeRTyj6nzw+CRmm/c6 5pKrWuop+RIFMzWjXcr/DHjJtylO89gDpS0t7mVrjJ2GvFkW/Fyq7SALTjyVJTIivZ1u/m53W17 mA+J+e7FI1f0q5YocWrMXARtWQVZvw+8+Gf4ynZSShFW5nz6s3z2egs8k884j9sqtYl+Swjvb/r cRyHJBJmtSPygnIp5NBn096GoFrXNYAt0DBd/4efkFy3EHJF2r7duf6GtEanSqwJpWCGZtBOIMZ YE3KtaFzVIczAwR8oHA== 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-05_04,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 priorityscore=1501 impostorscore=0 phishscore=0 bulkscore=0 suspectscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603050116 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 Reviewed-by: Konrad Dybcio --- 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 Thu Apr 9 23:25:03 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 47EEC3A9626 for ; Thu, 5 Mar 2026 14:31:05 +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=1772721067; cv=none; b=P/y3cs3CvRXwrtsfYDQ/UQHc+yHkZDWykzcLH9fQu8hcqkFqPSxkbXX3ddh/aN3jANQEMFv0TVfXLhdYlGGe766maKBvQu/g/5D19jvXNVeS7BwyME4VccAtkMwERSV6u+7XnDtN4NXEpeHU4KZol/Fu1aGyWF6JgGVnC3jW6DM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772721067; c=relaxed/simple; bh=QqkLq0roH9mhznZ5Jyf/oWav/ZJn3kZXoD4ugj7aex8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LZ1fAKavB70UEBpBJbN59JYXVJRbcVF28uwJMgJ60HewSM/9T26388ByABDvrgm1yUx9J1a+P0Lk1+XxTJPtHyDQXz4spwwMrrfiS2EMhMNa9teoXA6RnASbtusS05GPrxrAEi1jFnk6sYMNS6wx3/LEQQWDg9gTbFYXhcQ5iIg= 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=QqZZxfrd; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=bX0h/uUv; 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="QqZZxfrd"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="bX0h/uUv" 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 625AFo0f456100 for ; Thu, 5 Mar 2026 14:31:04 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= vuUkFuprivPCynE3Ze7lmDFfgPE6xUCHIcAZSxhg2u4=; b=QqZZxfrdwEnRaJ/Y lh0cG1nE2uYDmxnKDYb4dm6Gwqf2c5xVNEACaLUN+sAQ/LEPh7+aou1FuHRsUpZQ D/VTwwEkAPX+jgLoCnAQUnQbjh+KxO3U7iq+4dW9o5ESYmdEf3O19ydPj0ea4waQ /OtA0LgR/WTUi0KYhyytlzYRWDstdB1uvPJWzy1pwBkxVbVDU+im1yJAKcuPI/rQ +kD3eO7Bur0K6q+tFhXbfyrtR2m5aNXimmJDmEVcz7XN76gsV7xHglaDtnRNhszm hyH1hT6W+obnHUkMcwx6B7KmSFsAajIVILy6/6k25ROPhaDYNlfNY6dIsk7WMUkC 9rI/VA== Received: from mail-oo1-f71.google.com (mail-oo1-f71.google.com [209.85.161.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cps0wkj4j-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 05 Mar 2026 14:31:04 +0000 (GMT) Received: by mail-oo1-f71.google.com with SMTP id 006d021491bc7-679c69b46c6so3828798eaf.0 for ; Thu, 05 Mar 2026 06:31:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772721063; x=1773325863; 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=vuUkFuprivPCynE3Ze7lmDFfgPE6xUCHIcAZSxhg2u4=; b=bX0h/uUv9bvr/7PZBku/LK1YoXaqz05ok0KsnTXl9/LIHYZ0p2ZiuHylMfYCG8qBMi BMqHuASHRL6MxQoKgl6ImVuBobYXGV/YcIWuDDhbE0CfVs8N3Z87GVzZIFCVUxbustQh UgG6ssC20dCOIQkbvsW0nnZNUjiKh4t4tWsTV01sqoCfsAKaqQhe+XRZGNPBjd9P71zy 2sHbd20HNfJ+9DbPFgELfOTEdZa/bsNMEBvcKKjR0krzm2VmLH1LY2YHk5YCONdCWXkV ZMIUFs+whWOMBF16dHKYDmgWfo/d0Mi92qF7zasOVJp+GN4qrewv4VhphidjokBQRozV aUag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772721063; x=1773325863; 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=vuUkFuprivPCynE3Ze7lmDFfgPE6xUCHIcAZSxhg2u4=; b=gTGBvXlV3e+lkqFyOSYBhhESWju+WzIMQ7vYziZMX0akem1YM1N5cw5djRdB/7oGGb mT6QaTnaj6Ow8HiMNYW/19wHMPPrmovIeSD6OI1iz45S8DDoKlTlypmQuavBwhQ0mhal 24Tek/mxKeiWEMYbVLhJt/0n1kQAx5F9xj6GIsGPeTV1UL3thfq+pCopsD1g4V6OBDrW Hg2hs3xLkefh3MwL5mmTKS47swwpqSBsB1av5mFLfevxk+c1VTEUG61Tr7AkTgKYnOsZ HubXGx8qeRU/3EhrOs/McXqKa8oYjZ13RRGHDnS1qZ8KD6xTm0Khfm5qxvw9ZtKBZCKS KUPA== X-Forwarded-Encrypted: i=1; AJvYcCX7xLQhWMGP8gQxXqOAasw652W2U7kWwIO6CpI/gUuGmEPaZ1WHHeUdH7q7uF59M1KiQAbcWeQ5BkOpkvg=@vger.kernel.org X-Gm-Message-State: AOJu0Yz7FmPuL/QOQmDbU8hdw/h8Uuc2x857B/z1HPKzsVbeLQljafQM bJJnVtJ9ill7HpnzTm6CbR5EggNEZzWLYklFfTzWLd8XWW8+mesVgIMLVCSpQJBQ/8uRXUMfmUa 8IZC4ymsVv5X4k+4N5THvmX0PohRUUBs9ns5QkLj5abneuYayig5n/ia3TmnmZb7hPNgvRXPpIv 8= X-Gm-Gg: ATEYQzy1kG2sVhQm2evUmlRhJR04/W/ALWngzbif76Vo4JLlpBvtIRcKX9l3eaDCKin jeKYQjwBFWvzYao+ZhCrfgfzDRB9Ddky3dmFFc/UN0XF3lKDWWBR0eXsdteOwB6vABYLg9ve94E uGSULuZP9KxxSIf95NCAHV2Ulh4c3MQ2bssNRx7YO8GPCoNjfqSti+hg7xrKE0+BNNYvVDkqgF/ dqlC/o1QvN1Ci+6mfAbMsM/ixqntBbIhoblLghDUhI8P+H8LaKNlTLqgsc/Oo9U3nGb576fkJ4E 5EB3OOgb3RbxWoEdJkLXfYYsh5tdBp2geijAxJKSPKLFZnB1nGFQ/GxdOZcAEAlGZ+a60GC9Jx9 FK4Yq162V2Hwsx6LqQrNrKON/IPzEeJ/pEQ5qPNA5DUL5e1oG5MNsiGRVpmq60G5L3zHr62D29B iMoX4n/vl0goDv/HlxCwOc4RmGyJPLKm50kG8= X-Received: by 2002:a05:6820:4487:b0:662:f759:4eac with SMTP id 006d021491bc7-67b1770cd42mr2739251eaf.32.1772721062611; Thu, 05 Mar 2026 06:31:02 -0800 (PST) X-Received: by 2002:a05:6820:4487:b0:662:f759:4eac with SMTP id 006d021491bc7-67b1770cd42mr2739226eaf.32.1772721061902; Thu, 05 Mar 2026 06:31:01 -0800 (PST) Received: from umbar.lan (2001-14ba-a073-af00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a073:af00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a126fcf563sm1522618e87.27.2026.03.05.06.31.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Mar 2026 06:31:00 -0800 (PST) From: Dmitry Baryshkov Date: Thu, 05 Mar 2026 16:30:49 +0200 Subject: [PATCH v4 7/9] 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: <20260305-hpd-refactor-v4-7-39c9d1fef321@oss.qualcomm.com> References: <20260305-hpd-refactor-v4-0-39c9d1fef321@oss.qualcomm.com> In-Reply-To: <20260305-hpd-refactor-v4-0-39c9d1fef321@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=cXwE7csKAH9IlMGt9Z1dQTiE5kmuNQ7b036P1vzkts0=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBpqZOZk3dPKYVlDjNuUVfO2gf5venT5n85en32Z MikJP8KpUyJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCaamTmQAKCRCLPIo+Aiko 1TaXB/9RjaFRgkqI1/earN+uc47BarXqqPMHN4tAcfrF858HOejXTLNr+SNnQM/QmObmF+qPjFx 2GeabvC1KAU6Nst31PG2LRxRnEp5gtJE/U717slh2RNs/+FplSj8KPmoE/CSc/7OuewZb9K6lqm Prs0N6lS6fAyI6HQMrUMsjrFCDRFo+3ckW+Sf0JhEkKSRV2ERVfBE8GvyOBg/Gb8t+iL3TSZ7he hk9S6az9RDPJWDSXuNoxmEPzgDeO5x1A5a19oCd1WLALOrjKWLp1rquJZkhalzFih9mqXyCRVvJ Zsfgso6vyX7MB6KrVY6IZr7PhP0aqK7+PH63tvM02TeKNR+x X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-GUID: KhUOv9WKewGPqM89Rfb-6pgG2oAugm55 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA1MDExNiBTYWx0ZWRfX4glqxdV0DIpv /vI7FYK7alNwiqXQXk7tlVFCGtZgmPXoQEv+uW4NscFuxBKgBuqaMMy/WDCO9qmXC67H6rELF+K qam2xNbeAirD+8SZ7huMSvTyRRCgNQwDjZbaK04VcRf56JbAZ83r6WCA1rAfyXpZayf1HUXANar pCBDXTGQ6kBlLyCibe5rfbbaeeUzuHPSAp+oK4jWhpq13i2EB8nKlc+qzQg673MEZIEa7LrPDTS G+q87rBuLzfLCEGj069DKXVfzLsasaa/Xh5XBwdRxIKtxQMCKdrzZnqPxjTek4fLarwCN2LLWry 2uvMIIn++R+alVGcK84E3/LwP0ZeiqJn5O1+/8lDwgY02xfI8Rm1cGWRsXF7MTJxSS1etGvCD4K bVqBy2+mZpkyQnln98yTKttbaYXiCc4ADWvlefr2L2zoHwWeclvoS5vNNgKOFtgf9Z5M57Um0Am qsWzCc9uKjiLMrIMMzw== X-Authority-Analysis: v=2.4 cv=OYWVzxTY c=1 sm=1 tr=0 ts=69a993a8 cx=c_pps a=V4L7fE8DliODT/OoDI2WOg==: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=KKU_MhpSG83TwyDdul0A:9 a=QEXdDO2ut3YA:10 a=WZGXeFmKUf7gPmL3hEjn:22 X-Proofpoint-ORIG-GUID: KhUOv9WKewGPqM89Rfb-6pgG2oAugm55 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-05_04,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 impostorscore=0 adultscore=0 clxscore=1015 priorityscore=1501 spamscore=0 malwarescore=0 bulkscore=0 lowpriorityscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603050116 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 --- 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 aa2303d0e148..80796dd255fc 100644 --- a/drivers/gpu/drm/msm/dp/dp_ctrl.c +++ b/drivers/gpu/drm/msm/dp/dp_ctrl.c @@ -2581,28 +2581,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..e3b43d73b67a 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_plug_handle(dp); + msm_dp_hpd_unplug_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 Thu Apr 9 23:25:03 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6436B3A785D for ; Thu, 5 Mar 2026 14:31:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772721066; cv=none; b=D63jPu6YYP51sWa0vrjfWxxfmx8EMhTraTy4LrzPCC92U3+jN4Mpmxsy6aa0v7q4sPU4ZDSQqBNObt7Op9dfoKxk5vwn1epnHUE3i0vifLoTEa9g860EDOfy/MqDNj7eI+Hvdb2wmbE88mN9w1/LtpSHqWMUGPbHLq8wxvIr5y8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772721066; c=relaxed/simple; bh=ryQ1Y0pu5UrSRA9AsDSGLsnSZCc23j7mQ1uFMjUERW0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IQMKICL/5csn+AxaHuWHkr7L5NIRKBLXnJnjV0JATRcLqUf4X709ZacdaCJIzH1AQWYDizGZ2HJ8086hI0LVvOGV8UrRADwK+DRC1siK3IScRknnqIV3/j2Dd+XlrbWkEGvTKkK3tZ2Bd2f+3WQSPi6V+wjjQVaOq+Sfm86LRXM= 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=LzyRhKtx; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Q8GR8Y7v; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="LzyRhKtx"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Q8GR8Y7v" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 625AFbBM2922186 for ; Thu, 5 Mar 2026 14:31:04 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= hA0YMMrWeRTI3WTeWLsPvkfJar0/KW3bNGEZxQ3XIL4=; b=LzyRhKtxGE1kumbe 53/WcnHYKeqZlXoy0NckKVM5OTwtZInDZk0tQA0vxUnFbZVuVCF2GDizxm6WH+au rQrgphU5NlGPrHxCFFNvR1ho0F01IweDwrGobvmld7SGjmNqyz2GUgnW8uLkxhhi kP7hcCfw7B10P5uuLZyOdPuLmz8CP2SZ0jDX2iXuyyW75NJiPofUdcCiGUu2u1qv pcZRoMHafQ3GRJhP4x25dsinTnVARzDNIccUf1HxG49z4hMbKcKu3x31/HrpUX5p mkfDhGk3HNWXBk7MBQckhBEP1kDZeVHS/lJzHVcfPX70hQ16cgPKGa0XdMaBj9J9 PXfOWQ== Received: from mail-ot1-f69.google.com (mail-ot1-f69.google.com [209.85.210.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cq2q81wxy-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 05 Mar 2026 14:31:04 +0000 (GMT) Received: by mail-ot1-f69.google.com with SMTP id 46e09a7af769-7d4c393cc9aso40999046a34.0 for ; Thu, 05 Mar 2026 06:31:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772721064; x=1773325864; 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=hA0YMMrWeRTI3WTeWLsPvkfJar0/KW3bNGEZxQ3XIL4=; b=Q8GR8Y7vKQlHWHww4VH1S37VkNynFVL65JDxoY+KCvfcBY3zsG5DT6g2Gor8DSNs4d 4cshwrUy2jKnk+mayCpnGdKpYpqOKuEcyHeexM8qsIOT+RjKzRPt52cuw/FGJ0MHXp3B 1SeIvLIea8SkorRzkquHrHAD+LVelAmFhVTm9qSP0edsLUjA+rZAAF8ExYVLm2SVjnXJ h/XAmhMOtTKVDhHW3gAg3A5O+O4+QhhWpAqXftCol17lvKoSvyzmHRAe5ttn+SwgCZQR niuelartjQxNh8pdzXqCRKvzBpXarXx6r2AMthDFFuPDjFWymUb2RJ8LcytbjRAaq92J i3Ew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772721064; x=1773325864; 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=hA0YMMrWeRTI3WTeWLsPvkfJar0/KW3bNGEZxQ3XIL4=; b=gJIOdd3fkdr2el9kfHqLBHPbDMNLw+J6iDG3dYobmW8j+YYmZNSpFhflsCIHnah6Eu 0dpnmsxyD55V0cE+xpS5AGPuL/r76zDHMWg7CQCpvm/Qe2ZU7XlZYCIn+In/NIiRkecx H/X+NJhc5mhEPUcqwj+9tYrdFcMzkGQyF5PFFUCE4EskgBRbeYkr36hSZBjkBLQhneYQ eoADkzrP7ohO8nl/VBB27uF8wvmn+8mjzuRYdRAPNfFjAOZyJ8T0PkvJB0SDiZKWkVaa oTbyoEmEanJphVQ9o1EYy22xmCtvCpPuiVfh5YkpTRYWqGuX780L33RWFrTgXwq4H9Wr vOJA== X-Forwarded-Encrypted: i=1; AJvYcCW/sZLD+kyXrMMaYY3YOsimFxJ7xbZ2g6y34c4dXTMujbpEaqNKqMgszkbTu7jn9ZXKUFHqPjZ58lwClDA=@vger.kernel.org X-Gm-Message-State: AOJu0YyVx9Uo3XsI5XB2kUXqSygv/cJocprHtVxTdUFsKJwUnRlqX7AU 4SAKMXDsdRTW7SHeuK4P2lMIFBVUdiF8zSz1Mfl3hAVJjjfh+QeRUAAD1YP4Dps/iEFvtidfTwS aQbCYq2zi8EhDEVlMYubqS6e8wag2ysjDwONJTUNHiZtuFJ0RjIuh/iDgBchdQsekPOo= X-Gm-Gg: ATEYQzyqjF2PgYjdRXiVLp25KhZ1OGwBgEF0lxkLPMI6oDpagRvJSuM08ngO7yjH61N 4isr78WCupKV5ABs7EyQ4taK6beU0Cmopiwwvts6QlhnryZhA94blNx6+SqZseW4+vAatFetCM3 n5ogyRb5oBwtTMbxy0GSDGuTJFbsCHnJ6IF59bSWl68DR6+F20wkwovwv2zU0oLTCTfRkl86Ru/ VpPQCJFmIB3+9pjFUzy+nv79lnLoojZa34sEdN/qxJj+7pvdZYCAR4fOTeeS1u/t6f1R4dbDtNi 644WyxB3sw1nWQzSO3OtW62eIvcPGqo0yrJn1b57VDotIqT0QiqHG+fd4osWpqSHQJ51c31IRRY X7HeTc21EQSEW7vsbLBwR1wLRA5Y14KUVBLwRxslgo6he2P7EnwgGp1Crt/L5i/Q9OXggjQfHye l2ic4Pr79ALJ10HvW3A7vUf7Ow8Z4WjAU0jT8= X-Received: by 2002:a05:6820:f00b:b0:67a:2e3:2236 with SMTP id 006d021491bc7-67b17700617mr3432246eaf.23.1772721063862; Thu, 05 Mar 2026 06:31:03 -0800 (PST) X-Received: by 2002:a05:6820:f00b:b0:67a:2e3:2236 with SMTP id 006d021491bc7-67b17700617mr3432231eaf.23.1772721063474; Thu, 05 Mar 2026 06:31:03 -0800 (PST) Received: from umbar.lan (2001-14ba-a073-af00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a073:af00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a126fcf563sm1522618e87.27.2026.03.05.06.31.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Mar 2026 06:31:02 -0800 (PST) From: Dmitry Baryshkov Date: Thu, 05 Mar 2026 16:30:50 +0200 Subject: [PATCH v4 8/9] 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: <20260305-hpd-refactor-v4-8-39c9d1fef321@oss.qualcomm.com> References: <20260305-hpd-refactor-v4-0-39c9d1fef321@oss.qualcomm.com> In-Reply-To: <20260305-hpd-refactor-v4-0-39c9d1fef321@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=Fiq6vHHLOBAD6Z/SIX1bFh0DDbKNiDPpLSiB5DaPkUs=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBpqZOZbZlxeWdGne2srEmPPStsGpSKCc0T2LuT7 bUf8mTP6dmJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCaamTmQAKCRCLPIo+Aiko 1VLkCACEcsY6owVA3haEIzVFQ6Jyh1RAU/1aWnOWCnzrqIFQxJUnCx1iPVXPwc2vYuq1X6du9uG Vff+VdXFteq7wmA4j4M2hOdGVdZ7P5MpTpDQPYwbScDEDpdbxJhwJ0/4b0ykSpW4FTui8bzmLJH QtjwtnuQMLNL8KDgNomhcOBMl8JKmOrITHk1XxWzXodRjQ5qt8ivsz35+MP6Nw9L28oNB3bVfce 3lClwyL8TNNMtQAac2oJ6L8uuag3vUB2ee74ZUDzUcP+JwvGfBIR3LX/qvpngOQhLU1zbK2Mu0N /LO5FbkYOLPIJfJbw1FoIXrZmK7GfGq74rKwvwQwqZca1mRF X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-GUID: hgVooKTp_s9_xhAcmdQv2J2DVuDwoK7_ X-Proofpoint-ORIG-GUID: hgVooKTp_s9_xhAcmdQv2J2DVuDwoK7_ X-Authority-Analysis: v=2.4 cv=GecaXAXL c=1 sm=1 tr=0 ts=69a993a8 cx=c_pps a=z9lCQkyTxNhZyzAvolXo/A==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=D6o9UKO1UCu5gje6phcA:9 a=QEXdDO2ut3YA:10 a=EyFUmsFV_t8cxB2kMr4A:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA1MDExNiBTYWx0ZWRfX5lLoLfKfNABf GHfyxeysqIJgRglGzdm2lVOvX4FTjaxMEGRmDt60X4GcjARLSCg5ujWJoVTkE2f0kJ5AkuYqw99 h7t5t4sfX2Jc+lMxKxjtTZQBAYg/fFX8ELlu2Qou6jynmUZ1bYCbhkdrQ+9bxAabZAGPNf+1EV0 EuvpeGEF96+BRN1VoII99vKSEPGn56MrABjsr0ZiKzEF4nZsQEcobIO4inA1mq8Mzb5Gd5v61wS CGcg5ZNaJq/AOyVgKlR5GZXikm8yif4hYqAhEhFVxY6wC5iYRPA1ZdEzJ3w+wjFArIydxbBX+we DJ8NiiRBQwQSK7XajAHqcXAWY5IhvUhA36RQypkazX9Si/IQwvAvdHXntlOIr8hMSf1jwUf1krO /ClhLzFLkufa+F0atJEwLJvzEHuUHv9nBF6Pj4Y3qz5uWpYfAAOy1N7h0PwstQkAyDEW0vpAWJ1 BNCY7f3IAf3rNBUylNQ== 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-05_04,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 bulkscore=0 impostorscore=0 spamscore=0 suspectscore=0 clxscore=1015 lowpriorityscore=0 adultscore=0 malwarescore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603050116 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 --- 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 e3b43d73b67a..a1fb9c62bb0e 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 Thu Apr 9 23:25:03 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 7F127384259 for ; Thu, 5 Mar 2026 14:31:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772721071; cv=none; b=paibztkKyS6MJf0IFxfKZa7NBpKTUwPa0Y14Ak0uvB1Y3Bf3T3ya/3fQ4X+OdVCS2rJeKLCHW8rJud0ZOosgArQDdPAK5Hx5p+TDwJgweqr1Dqc+73Ld4uXXHsdA/vElnLO/90HcP+vPmmsYaM1AF6bQIIu2ABteOiuOl3ab6GQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772721071; c=relaxed/simple; bh=R32OdfLUHsQw4ysEiC4sXpcqBoejWjyDNBiNJmZkCVg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jfFfn+hNIqBXj3SkhyhEzBPByMQ1mlpOvf0APEu8REZ5bGIXuLLJKPaSCTl47jKPzatxlOlj+5IkiaCygXCH9zbpL8MJrtBSyr0wTJt7gBBHlUsIniv/maS1R4gNV0sz07b5dUlbIiLnLe6uqIG78S3sT8pcE7IKDxVtjOOv4mA= 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=ZZlPtdgT; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=i/9/XhEu; 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="ZZlPtdgT"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="i/9/XhEu" Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 625CNcj7720709 for ; Thu, 5 Mar 2026 14:31:08 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= ld2Ouw92w6/L6Zu9kQQPQe8AQdAbl6wT5lMzyeNx8XI=; b=ZZlPtdgT1jKTbdHS yFlCXwiYqio9mNrNu0W73a8s2yZg1OZjFmqYx6CUcZB+ETIByZmk0yut6hgrYUfr xuRiyQLTJMIqyzoqSV+jVOEW9x8IQkPO2T0lCZO+h9JKUmxBiuFB6k/+jp6WVGI+ dpphcMhPn+qhACHdcMzxX4gDA39p5CmBETskqVt/ktlgFZVgwGm7ohDxAmpFbXOj bMWQOSqSbNmaogK7Oy7hzoiBB0RZCqjBmI9ovQjxfEIEPGx0PKV78Cg9kHlAMivp khhU3fQx2oL8DaylRIGMK1EJ1XuHk1EZO6jWYWH45w3l3gx41D0V2PAC0arQCiRw LsAh1A== Received: from mail-ua1-f70.google.com (mail-ua1-f70.google.com [209.85.222.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cq9srgcgs-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 05 Mar 2026 14:31:08 +0000 (GMT) Received: by mail-ua1-f70.google.com with SMTP id a1e0cc1a2514c-94dea812b24so10058354241.1 for ; Thu, 05 Mar 2026 06:31:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772721068; x=1773325868; 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=ld2Ouw92w6/L6Zu9kQQPQe8AQdAbl6wT5lMzyeNx8XI=; b=i/9/XhEukuRHgT+lykvDPhuZqgYsp33o155A4mga785iRUPnt4ZILPmS75vYAEMZnG OE5tjheg0tMAiCiKUP0C1qXWjMNQ4GzS7dB0Qu1o2DB5AbwSq0kO1948yqlT0aNIZWeD UpH4/0qpgZ0Uo6nJ8ceRGHdp/WpifUUHjrGn163fsK+WM5i9KTFkoNx6glVqNytEcw5T 4gdQ2Kruc48YroWbqqvi5e+Uj6xNn6NtNiXmdTSf/GTkGyPdM8wNFNp1QiL8/XVVKyQf RMCfqEn0Qj3/PYISdLTDRc3EG7gC66ck/bSsYw3OEKjnYTSwFDPwQOwRPX97wtmDBa/w D3zw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772721068; x=1773325868; 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=ld2Ouw92w6/L6Zu9kQQPQe8AQdAbl6wT5lMzyeNx8XI=; b=p2BCiTC6OzMDJ1Fil8oSD44QnvSKa/aamD984W50CJ8XVHdaJlLrO5zh1yM1sjA3Y5 J4O0ggQk5VCpKybfqdV/Po2xeN9C1fP0a8u381REKD9zrCtlrAdcJR7eLPkQaunivnaj +TSgDwh4pzNl10bXXzZAxQ2AlLohdj8c/1/B6Y68gNqGGEEwPSrJDGj+ad+KKVK2pcK4 9jnDD/4woTP607h0xY1yzaq2Czy3aKvrLvOZjQoEt9KquMr7FnYJULiPkgqqm95YxLiX L2yPJ4Hmz8yBQZ3uzJP7c9fM9HB3ySdIDAT6h7t6jQxejKarbKfKpG2pT8bjNSKWW5id NDhQ== X-Forwarded-Encrypted: i=1; AJvYcCVBUKl36r6YdpPMUKUbmtcGKFnkh65S7Xh3zd9xjf5DfxBMFgnujW8iOyYwDwnm8TA+TTZaiqgf/mOT0A4=@vger.kernel.org X-Gm-Message-State: AOJu0Yw59LdNSMbQxT1NUQWLM3Q0Eri5W7ovOi2Ue2MiccF6C3rbDe5E VYcWEVHuvi3SdHWUBk80h08hdxQwdG9hz36LmJdb428a77Neyt/gW9868Jruglf/0/7++blJNze AC9NtVyr9DwIQvVF/wBBbCvsm8KBaiZQGQJTovLqLiLiyf4ivwj+4Rvv59qFAEMdvx7s= X-Gm-Gg: ATEYQzzeE9PdKBKMiFf1yEYWTqHlichFuzqHwYUnnnbaHZrMSoTopTV13GabAFb95aA 5rxjTTIw7HClUbj6DLe0PrsaeBUnnagjkm41gtRzZpwGrKZ1mB15InkkvHonusDOnsEwlXBFFbp MdtHB3E3ysCiardpfe9EChGmY93WaNjUFTQIsh4SkzRZo4bSah5XE7Y3g0j3n3Dv3YRt015eKeT fdVJvgZJ49wt5Cltj3ebu7OGkaKUuT/ZXTSESd8hdvgKAJe24p0W8N/3TflueI9ZzdE1d2Wrkb/ gaIzpmyoUp1E135wxWvGm1EG3adxWrxVojaSAGzD8ghVwb9MvQtZj+UbpLxWBxBRrIPZjNAbK5O bHFdbxWrpjFepYdeEiJsG/6Jbob+FVkttbjzJR/txLtSFfeSpNfCY2wl3DjpUE3FYcTfd2WytqT P117o/TAsEjbm1t1Z4n4EwAiI0ku/8s3Zf53I= X-Received: by 2002:a05:6102:e0a:b0:5ff:a3de:7225 with SMTP id ada2fe7eead31-5ffaacfd745mr2297117137.16.1772721067651; Thu, 05 Mar 2026 06:31:07 -0800 (PST) X-Received: by 2002:a05:6102:e0a:b0:5ff:a3de:7225 with SMTP id ada2fe7eead31-5ffaacfd745mr2297065137.16.1772721065559; Thu, 05 Mar 2026 06:31:05 -0800 (PST) Received: from umbar.lan (2001-14ba-a073-af00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a073:af00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a126fcf563sm1522618e87.27.2026.03.05.06.31.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Mar 2026 06:31:03 -0800 (PST) From: Dmitry Baryshkov Date: Thu, 05 Mar 2026 16:30:51 +0200 Subject: [PATCH v4 9/9] 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: <20260305-hpd-refactor-v4-9-39c9d1fef321@oss.qualcomm.com> References: <20260305-hpd-refactor-v4-0-39c9d1fef321@oss.qualcomm.com> In-Reply-To: <20260305-hpd-refactor-v4-0-39c9d1fef321@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=R32OdfLUHsQw4ysEiC4sXpcqBoejWjyDNBiNJmZkCVg=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBpqZOZQbN5JUhkNPEYzXrMNKSqWRlqvzSYG/AvE knF6myJ2mSJATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCaamTmQAKCRCLPIo+Aiko 1RLbCACbfawTPPRng687TeslLGelMtrhY2VdjaX2+OUQvtLqLRsSiuoM4Xzw5f0Uw6FjtVwwrAq UJns3rfHeBxVNflPIEcdZsVDqpfQTJcAHEvl3/oYVrMj1GnKPSW6B6BhBh7i0FVLB6QyvqjY9wp y6efhJKgop96ABfz6YYOOF0BL9TyfIUgwGVBL1GCYP6USdhlY4JmNTsyE1zysd3myJJppLCqeIm wmeX6ugrwiGlYXk2AjL/d+tbKEwP0vjn1iz533gwEyljpkBAYiPbYQWdFxGCsl928jxoKC8KyNX xXV7XxbYWosQxrJUgf+IVeBc5W1w+lYb3lHppU+0sr8PlUgH X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Authority-Analysis: v=2.4 cv=a/I9NESF c=1 sm=1 tr=0 ts=69a993ac cx=c_pps a=R6oCqFB+Yf/t2GF8e0/dFg==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=EUspDBNiAAAA:8 a=n7_vWGaP1GUJy7dh50EA:9 a=QEXdDO2ut3YA:10 a=TD8TdBvy0hsOASGTdmB-:22 X-Proofpoint-GUID: TNb5SXG1PoDQeuakvmeY7RhpbWddBfNz X-Proofpoint-ORIG-GUID: TNb5SXG1PoDQeuakvmeY7RhpbWddBfNz X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA1MDExNiBTYWx0ZWRfX8CVLZu12bR8d labJ5ay14JF+fvIXVW/4yj5hQjgRMfwogII1bXv2CkIW0hL5CKcnIb/X4bW6K4LDD9JcNU2BhD3 RWycV+rD7rETPYSQ/fJbSrJ44xKbVgRYDsYX3kAq0di9hJV8c6gz2ASCzuCT6UFr9fz6mZ6SWwz HBpzLZ0kz2jltUeIqOyDHgzCjnG5V8YnW1juHPgv4q4KnIHT1H2gEE7QPwFvaUyGClRziS5wf+z LrT6HOiOfHQ/z26eeRIq+m0HdwohiEamVGrlKMRtzEs3XSFp6fmRKAL023Zk6eG01Y/8c+fpDnD wM8K1LC8qEYHEmcLHBz0FnIl7w3miDdKQM1f/PY7bJ/dmKAVCFUiWoAefdAdZ/xtPzuGMuu8/C1 RbxXwedMislJ27pk2XnwYcCyvHJZBVL/mETcTJrRJWdvOduLMH8u4q5v6ajJ2aKZCffdJevzwIS ywmELHSLXmwmhMLHqdg== 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-05_04,2026-03-04_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 priorityscore=1501 impostorscore=0 phishscore=0 bulkscore=0 suspectscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603050116 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 --- 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 a1fb9c62bb0e..4e3664f9e5e5 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