From mboxrd@z Thu Jan 1 00:00:00 1970 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 C1B82426690 for ; Mon, 29 Jun 2026 14:17:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782742641; cv=none; b=s9V2vXfFrXMJyD59j4QfBlvde2GY+vmtQpaiqv4psAGR9rPIV6B87Zb0zWBTDDAyfxMk+nowCYtdH9Jk1UqGly6v93QOCrbtBPQGLMucLpnr1Wyz4AP/6WlXq1cj+BVakogzyehWSXMk9OQcUcv+xeOqGKTzhrinYGfes3Dkt/k= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782742641; c=relaxed/simple; bh=jgLawUeJTUEQ/LNV45pqJIuhaVIzKYq8VTCWBkSwzBc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=BIDiVSK9MnRos3w5eRUDmKSGZITs50J6PnSZ2ylmUEFpCoRzW6GIUKUaDt9GjXOVWGU6M7+eKuwM6fk9c9BBO/nQKySnRLQcfcZNu4+u8vIe9bBfuTLqd78Pxk4iEgREy/VQqolvzC0A9YHU9Kn+618qA9AyaoS4gkiKFA5OCx4= 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=MLD9EApN; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=BHypE5IJ; 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="MLD9EApN"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="BHypE5IJ" Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 65TASqmr2601127 for ; Mon, 29 Jun 2026 14:17:19 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= h/u6JPc641J8wBzj5j0oNFgP8pVVYegd9kCes0Z3CLU=; b=MLD9EApNBZEhayGF s3WgMec8Ij1hV63HGQZvte56NS0Ex9PbhVDV1mZPYFKhgSJktvrMLNBkExLP6v6y gVl9b4ct1hVicSTLeNW7LQnEGvDPWboZOrIG/itXcxtyHPbTyOXL1OFLWcUd1xAK MnlN6kEPvIZGEHeYa2svab8Lz6UBtJQKZV+pLAuo+1ZWj+A0mpn4BHLWo6uPOCl2 7n2VWlvAH2qkmqM9JVTAoe+Bpgt/lUvH4Y6Ajt81mzP748H5re8xK2fQ8TzGI9r+ blfh4NcGqZ+UyFlUD0mtwTs8ICceDuiUTElL2n/TYUvPUG3xqAZovFbOCXJVyneT gqFA3g== Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4f3nnw97ud-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 29 Jun 2026 14:17:18 +0000 (GMT) Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-92e55721a8cso122393585a.1 for ; Mon, 29 Jun 2026 07:17:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1782742638; x=1783347438; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=h/u6JPc641J8wBzj5j0oNFgP8pVVYegd9kCes0Z3CLU=; b=BHypE5IJrlbhy0EdjchZ8jbfrjCqCLy759CKfUbjhiVj24XuYk5BfBPZ8RwSncF5fo jSHQzpcOJAB34fRHP6J4qszxo8XukMdInJuwhydnnMnn2YVMwNHsvrVZDMhYnZ1Vntob vNNQB303O3EaSO1KqGMrrlwSMu+236RtGe3YG8qbKfBTkyHqhxR/KcW5rSxZHhps902m KEjJkesz5D9tKp+jDiRf3rb4EXdVA4BSjmIYojOwvwOBORwxfLwVft0OF5HUWDgTsN0j ZMUy6Xp53idizFy62BAk4gvwIqTgiprAqiuNokNBJhOHTpSP7ylOrOef3kvXLIYhAjkc 3AvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782742638; x=1783347438; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=h/u6JPc641J8wBzj5j0oNFgP8pVVYegd9kCes0Z3CLU=; b=jWt1bKb1JuzpVWbGo3Z93bpPMfhUt5XVQPgJ03OZ0rz62PelFXRVg/4te8o5pkf62J fNxlMuE0wTWnMNFO4UfICV0+HwSGr+kE8eYFZPEuNProVf4nIGNXTv9EH9t+BgTY7/Io X/2CrTxABO58nsBmKj8HpfBq6NShUoSQC1z5LWXsWnLeDzqg0/Xt998PaMNeO2pmVXjf 8bf674Nz0v3i+BeKEkRqpY3n9EFOhXe+7qzMwGujUK4ghoAe8E0C9qKVCcu9mXYgH+gM k1NKU11uAD17d8hJCke3a46A6Mxc/DulXCf0igyknHuYruZkNMECc1rgfL508nwB2avK fdQQ== X-Forwarded-Encrypted: i=1; AFNElJ9f+Tw/sHZjlpUKOuPgyRq+QgNR52cLYSjLgV+xSPuv4fC+EeDwKkKgIzzjAb8rneg0CJCUuy4e8MmZads=@vger.kernel.org X-Gm-Message-State: AOJu0YyaSKU1DYZePPTWWl8TK9oNnNIi9ueFj5Sp0jR86i86Kf2R3Mof l00Kp15nsLMh6upFImr1Ih8sQT5Vx85/U6vUNb13AqiCjo+AEY9fI1IoaPZ4sN9zY9teDSij4hz j8EMoYnUQgdKwmlu2UKlHJb37W9HnL193phX6C4OJuzcDEA9JVhJ6xXBKxqjwK0uyfJQ= X-Gm-Gg: AfdE7cnfYxQDapELp6nvDgelBOWZbZbwmg11xe4XEcdxP/sm+Nno5sLoJ/l4AVxHuGn cwVyMPri9dz883AzrNLBiQ0qt+NTwg+9a+/23JCD3zvqSqKWGskHkq/Xx+7f0lUV9rtRe8XP++S NE9VDDOGAKlZN7vZP8JWWVpOQ1kh8WlzpZnn0LtKYC44rIm9Ut3udDhgMlGTwJsgzCh+wUU+vm4 /oFWlNVYAq8JSG2Kwb4NpeSATdCuvRXkWgqKQfHhX2eWpa6UaMqtXuGJkeEvdm8J683R+FvWkMI R5xulhv3d9ekXShc54xUgmm7nbvla30QxMGYqm5mHNmfmw2+EwmU7aK8hj73UVm95JgnBZSEPll 2TOFZjoFISxVjzFzZ7vCBOFUpsfnQ4INyNYF/UOjtAHk9kxha07ea+oMmgCXEojBzkUfKbg== X-Received: by 2002:a05:620a:7113:b0:92d:d721:3fd1 with SMTP id af79cd13be357-92dd721454emr1060536985a.74.1782742637622; Mon, 29 Jun 2026 07:17:17 -0700 (PDT) X-Received: by 2002:a05:620a:7113:b0:92d:d721:3fd1 with SMTP id af79cd13be357-92dd721454emr1060530685a.74.1782742637124; Mon, 29 Jun 2026 07:17:17 -0700 (PDT) Received: from yongmou2.qualcomm.com (Global_NAT1_IAD_FW.qualcomm.com. [129.46.232.65]) by smtp.gmail.com with ESMTPSA id af79cd13be357-9260079070bsm2143165885a.40.2026.06.29.07.17.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Jun 2026 07:17:16 -0700 (PDT) From: Yongxing Mou To: Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Jessica Zhang Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Abhinav Kumar Subject: [PATCH RESEND v5 25/25] drm/msm/dp: add HPD callback for dp MST Date: Mon, 29 Jun 2026 22:14:46 +0800 Message-ID: <20260629-msm-dp-mst-v5-25-2ed6aee1867a@oss.qualcomm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260629-msm-dp-mst-v5-0-2ed6aee1867a@oss.qualcomm.com> References: <20260629-msm-dp-mst-v5-0-2ed6aee1867a@oss.qualcomm.com> 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" X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1782742144; l=5643; i=yongxing.mou@oss.qualcomm.com; s=20250910; h=from:subject:message-id; bh=b+G2f0mUuFh+XGa6ykrKQSB0dIdAdRaLzVWlRhztVIc=; b=pMp9/Trp/gclufRffFOYc6B9d49s9r7PIzdz4dDQACGjyqvLHFUEMD3EnEcqyZ4eyM5Yz21EE 0NAmDEiTz71CqgJj59RBm/9Umty2mnt78AADKZo6CL5r7lY04OHnFLP X-Developer-Key: i=yongxing.mou@oss.qualcomm.com; a=ed25519; pk=rAy5J1eP+V7OXqH5FJ7ngMCtUrnHhut30ZTldOj52UM= Content-Transfer-Encoding: 8bit X-Proofpoint-Spam-Info: AW1haW4tMjYwNjI5MDExOCBTYWx0ZWRfXzq/cavnRuINw /VBKEVaqZetiXIamiQc+wOhYXiox/PaISzSiiD2eVyEx3TSMv2chv+KhTLbRjggqraGntNZ+l25 w9dZniusgpS03wrFYlWVOnCv+LRFwRI= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNjI5MDExOCBTYWx0ZWRfX3p/JVuBdo8dC xVUrGzk5YBZg54w4I2+JJTUzqN6UJEBkXXtbXp57TLX4vzGInnJZ0VhjIEkyXhhl4ezUnqrqDsY Hiw3V2P5pVJKKWOpT+TfTxgF4ZVI5U0CHWhl+FbDBzMO1qO17Q34uhl1RroeXm610J3M7mV3Ak5 QhJhKM1vzJ6R6QMRKdd0hC+5SV1PhgKs1QhH170oDcn5g8k/e+1byrd8/bVPvhisZotn0MLN4zG xvo8RJB0B1m3s6uDYsF4y2K32L7KnKikyb7lpJRh80WHFemaPC1a0Qr+U2OO/kAWpy2ftyUvtFH WHjSv6L1+DIgD5fey8DojjHlL2dh2zX6w3tlm08DlCsGsASn4APIJhAEDhUfk5Wvq/GBYwli+BH zlhii/Z1qRDvlVxyKR72dlTXQxf1+wGQ6iJVCrcCtjnWvyJujC24Xr0AIJ0YWlRM3+KHOoJWA1h Xzpbb0vNx/dEB1AjCLw== X-Proofpoint-GUID: b2X1etyCJI2xBj8MUpVy5-LJ_dA8cKx- X-Authority-Analysis: v=2.4 cv=cefiaHDM c=1 sm=1 tr=0 ts=6a427e6e cx=c_pps a=HLyN3IcIa5EE8TELMZ618Q==:117 a=C3Dk8TwHQYyIj7nOf9RCJw==:17 a=IkcTkHD0fZMA:10 a=FelO9ux0wxsA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=COk6AnOGAAAA:8 a=EUspDBNiAAAA:8 a=cF23hRJ9h-J1zlJA4xMA:9 a=QEXdDO2ut3YA:10 a=bTQJ7kPSJx9SKPbeHEYW:22 a=TjNXssC_j7lpFel5tvFf:22 X-Proofpoint-ORIG-GUID: b2X1etyCJI2xBj8MUpVy5-LJ_dA8cKx- X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.125,FMLib:17.12.100.49 definitions=2026-06-29_03,2026-06-26_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 impostorscore=0 lowpriorityscore=0 malwarescore=0 bulkscore=0 suspectscore=0 clxscore=1015 priorityscore=1501 adultscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2606290118 From: Abhinav Kumar Add HPD callback for the MST module which shall be invoked from the dp_display's HPD handler to perform MST specific operations in case of HPD. In MST case, route the HPD messages to MST module. Signed-off-by: Abhinav Kumar Signed-off-by: Yongxing Mou --- drivers/gpu/drm/msm/dp/dp_display.c | 22 ++++++++++++++---- drivers/gpu/drm/msm/dp/dp_mst_drm.c | 46 +++++++++++++++++++++++++++++++++++++ drivers/gpu/drm/msm/dp/dp_mst_drm.h | 1 + 3 files changed, 65 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c index 6eac390af2e0..49a7bc5e031e 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -455,6 +455,9 @@ static int msm_dp_hpd_plug_handle(struct msm_dp_display_private *dp) dp->msm_dp_display.connector_type, dp->link->sink_count); + if (dp->plugged && dp->msm_dp_display.mst_active) + return 0; + guard(mutex)(&dp->plugged_lock); ret = pm_runtime_resume_and_get(&pdev->dev); @@ -550,12 +553,18 @@ static int msm_dp_irq_hpd_handle(struct msm_dp_display_private *dp) { u32 sink_request; int rc = 0; + struct msm_dp *msm_dp_display = &dp->msm_dp_display; /* irq_hpd can happen at either connected or disconnected state */ drm_dbg_dp(dp->drm_dev, "Before, type=%d, sink_count=%d\n", dp->msm_dp_display.connector_type, dp->link->sink_count); + if (msm_dp_display->mst_active) { + msm_dp_mst_display_hpd_irq(&dp->msm_dp_display); + return 0; + } + /* check for any test request issued by sink */ rc = msm_dp_link_process_request(dp->link); if (!rc) { @@ -1111,9 +1120,13 @@ static irqreturn_t msm_dp_display_irq_thread(int irq, void *dev_id) 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); + if (hpd_isr_status & DP_DP_IRQ_HPD_INT_MASK) { + if (dp->msm_dp_display.mst_active) + msm_dp_irq_hpd_handle(dp); + else + drm_bridge_hpd_notify(dp->msm_dp_display.bridge, + connector_status_connected); + } ret = IRQ_HANDLED; @@ -1776,7 +1789,8 @@ void msm_dp_bridge_hpd_notify(struct drm_bridge *bridge, msm_dp_hpd_plug_handle(dp); } } else { - msm_dp_hpd_unplug_handle(dp); + if (hpd_link_status == ISR_DISCONNECTED) + msm_dp_hpd_unplug_handle(dp); } pm_runtime_put_sync(&msm_dp_display->pdev->dev); diff --git a/drivers/gpu/drm/msm/dp/dp_mst_drm.c b/drivers/gpu/drm/msm/dp/dp_mst_drm.c index 12b47a413793..56f7a84e77d1 100644 --- a/drivers/gpu/drm/msm/dp/dp_mst_drm.c +++ b/drivers/gpu/drm/msm/dp/dp_mst_drm.c @@ -36,6 +36,8 @@ struct msm_dp_mst { struct drm_dp_aux *dp_aux; u32 max_streams; struct mutex mst_lock; + /* Serializes HPD IRQ handling between IRQ handler and poll_hpd_irq. */ + struct mutex hpd_irq_lock; struct msm_dp_link_info link_info; }; @@ -288,6 +290,41 @@ int msm_dp_mst_display_set_mgr_state(struct msm_dp *dp_display, bool state) return rc; } +void msm_dp_mst_display_hpd_irq(struct msm_dp *dp_display) +{ + int rc; + struct msm_dp_mst *mst = dp_display->msm_dp_mst; + u8 ack[8] = {}; + u8 esi[4]; + unsigned int esi_res = DP_SINK_COUNT_ESI + 1; + bool handled; + + guard(mutex)(&mst->hpd_irq_lock); + + rc = drm_dp_dpcd_read_data(mst->dp_aux, DP_SINK_COUNT_ESI, esi, 4); + if (rc < 0) { + DRM_ERROR("DPCD sink status read failed, rlen=%d\n", rc); + return; + } + + drm_dbg_dp(dp_display->drm_dev, "MST irq: esi1[0x%x] esi2[0x%x] esi3[%x]\n", + esi[1], esi[2], esi[3]); + + rc = drm_dp_mst_hpd_irq_handle_event(&mst->mst_mgr, esi, ack, &handled); + + /* ack the request */ + if (handled) { + rc = drm_dp_dpcd_write_byte(mst->dp_aux, esi_res, ack[1]); + if (rc < 0) { + DRM_ERROR("DPCD esi_res failed. rc=%d\n", rc); + return; + } + + drm_dp_mst_hpd_irq_send_new_request(&mst->mst_mgr); + } + drm_dbg_dp(dp_display->drm_dev, "MST display hpd_irq handled:%d rc:%d\n", handled, rc); +} + /* DP MST Connector OPs */ static int msm_dp_mst_connector_detect(struct drm_connector *connector, @@ -502,8 +539,16 @@ msm_dp_mst_add_connector(struct drm_dp_mst_topology_mgr *mgr, return NULL; } +static void msm_dp_mst_poll_hpd_irq(struct drm_dp_mst_topology_mgr *mgr) +{ + struct msm_dp_mst *mst = container_of(mgr, struct msm_dp_mst, mst_mgr); + + msm_dp_mst_display_hpd_irq(mst->msm_dp); +} + static const struct drm_dp_mst_topology_cbs msm_dp_mst_drm_cbs = { .add_connector = msm_dp_mst_add_connector, + .poll_hpd_irq = msm_dp_mst_poll_hpd_irq, }; int msm_dp_mst_init(struct msm_dp *dp_display, u32 max_streams, struct drm_dp_aux *drm_aux) @@ -532,6 +577,7 @@ int msm_dp_mst_init(struct msm_dp *dp_display, u32 max_streams, struct drm_dp_au } mutex_init(&mst->mst_lock); + mutex_init(&mst->hpd_irq_lock); dp_display->msm_dp_mst = mst; return 0; } diff --git a/drivers/gpu/drm/msm/dp/dp_mst_drm.h b/drivers/gpu/drm/msm/dp/dp_mst_drm.h index 5d411529f681..08e145399cfc 100644 --- a/drivers/gpu/drm/msm/dp/dp_mst_drm.h +++ b/drivers/gpu/drm/msm/dp/dp_mst_drm.h @@ -9,5 +9,6 @@ int msm_dp_mst_init(struct msm_dp *dp_display, u32 max_streams, struct drm_dp_aux *drm_aux); int msm_dp_mst_display_set_mgr_state(struct msm_dp *dp_display, bool state); +void msm_dp_mst_display_hpd_irq(struct msm_dp *dp_display); #endif /* _DP_MST_DRM_H_ */ -- 2.43.0