From nobody Fri Oct 2 06:58:29 2026 Received: from mail-m49229.qiye.163.com (mail-m49229.qiye.163.com [45.254.49.229]) (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 4A0A34AC170; Mon, 28 Sep 2026 11:44:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.254.49.229 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790595874; cv=none; b=WjuS7M4qMgNvIqb4Kf5r0dw7abY0ooQC9MbMa10QmUiTwhoZlYVK2fgD/jQiT2Z5q+n/+0OVxLzLCnfNS1hWod3ZZpdZoqG1m/7gXc3hcv1/jF2vDNoagI2d250/MHISDZnArKyBrEOCaxErdtwe4JxHXoz9NeccYd+PO1rb6M4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790595874; c=relaxed/simple; bh=Y0MsiQrYJDDSuydp8+WFnjB9TUx6dfjNvmhwJzV3kMQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=TrAj/r1IkBWy1lt+RJaHpYT8099XsZjHe9GY26ksKGni8ZuI0kHIlSu+q6wIclPe+fyzkpdNIh7r8jV91hH2L4W3BmHjcK3nNRXPPxXqSAB4/CNHSGXo+23RG0ec27Cr5fWcHRJKhfbNuS7Ny5P2QwDX4FHGoJJstT950pzpOhM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com; spf=pass smtp.mailfrom=rock-chips.com; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b=e9rUnIUn; arc=none smtp.client-ip=45.254.49.229 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b="e9rUnIUn" Received: from zyb-HP-ProDesk-680-G2-MT.. (unknown [61.154.14.86]) by smtp.qiye.163.com (Hmail) with ESMTP id 4f5398e40; Mon, 28 Sep 2026 16:15:02 +0800 (GMT+08:00) From: Damon Ding To: Andrzej Hajda , Neil Armstrong , Robert Foss , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jingoo Han , Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Peter Griffin , Alim Akhtar , Heiko Stuebner Cc: Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Dmitry Baryshkov , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-rockchip@lists.infradead.org, Damon Ding Subject: [PATCH v3 01/14] drm/bridge: analogix_dp: Return bitmask from analogix_dp_get_irq_type() Date: Mon, 28 Sep 2026 16:14:05 +0800 Message-Id: <20260928081418.3605775-2-damon.ding@rock-chips.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260928081418.3605775-1-damon.ding@rock-chips.com> References: <20260928081418.3605775-1-damon.ding@rock-chips.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-HM-Tid: 0aa0e714eaeb03a8kunm323e2b5437cf01 X-HM-MType: 1 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFITzdXWRgWCB1ZQUpXWS1ZQUlXWQ8JGhUIEh9ZQVkaSUlIVkJCT0pPHx1IHkJIS1YVFA kWGhdVEwETFhoSFyQUDg9ZV1kYEgtZQVlNSlVKTk9VSk9VQ01ZV1kWGg8SFR0UWUFZT0tIVUpLSU JDQ0xVSktLVUtZBg++ DKIM-Signature: a=rsa-sha256; b=e9rUnIUnggVntlM+VCCn3Pgkdao9uZAva/eyhDYkS+mpJG9kvFVs+UQiHBHj9uanrY95E6qMpW1TWQN2yXUCRx3lCupYRaGdilL+QImZUX58j6Nf8p1gib6hDpwyGY27P3ZS378dJuT2MjFTMCcmDRplArlaJ9yRXcHWo+75Yjw=; s=default; c=relaxed/relaxed; d=rock-chips.com; v=1; bh=fTbtcGZ0NiXRdk++xUkHW9KoNxxGSWE+RUMF8C782Oc=; h=date:mime-version:subject:message-id:from; Content-Type: text/plain; charset="utf-8" Analogix DP controllers support two sets of interrupts for hotplug detection: HOTPLUG_CHG, and the pair PLUG / HPD_LOST. The current driver logic relies on PLUG/HPD_LOST and does not consume HOTPLUG_CHG, nor does it check for INT_HPD for IRQ_HPD events. The existing analogix_dp_get_irq_type() returns on the first matched interrupt flag. This causes the hardirq handler to unconditionally mute all HPD interrupts, including HOTPLUG_CHG and INT_HPD, creating a limitation for future extensions. To prepare fine-grained interrupt handling, convert the return type from enum dp_irq_type to a u32 bitmask. Accumulate all pending interrupt flags instead of returning early, and add detection for DP_IRQ_TYPE_IRQ_HPD. Remove DP_IRQ_TYPE_UNKNOWN sentinel; use zero to indicate no pending interrupts, which simplifies code and facilitates future extension for additional interrupt types. Signed-off-by: Damon Ding Tested-by: Heiko Stuebner --- .../gpu/drm/bridge/analogix/analogix_dp_core.c | 8 ++++---- .../gpu/drm/bridge/analogix/analogix_dp_core.h | 4 ++-- .../gpu/drm/bridge/analogix/analogix_dp_reg.c | 18 ++++++++++-------- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/g= pu/drm/bridge/analogix/analogix_dp_core.c index 6df6963740d2..079f2f01f33b 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c @@ -701,10 +701,10 @@ static irqreturn_t analogix_dp_hardirq(int irq, void = *arg) { struct analogix_dp_device *dp =3D arg; irqreturn_t ret =3D IRQ_NONE; - enum dp_irq_type irq_type; + u32 irq_type; =20 irq_type =3D analogix_dp_get_irq_type(dp); - if (irq_type !=3D DP_IRQ_TYPE_UNKNOWN) { + if (irq_type) { analogix_dp_mute_hpd_interrupt(dp); ret =3D IRQ_WAKE_THREAD; } @@ -715,7 +715,7 @@ static irqreturn_t analogix_dp_hardirq(int irq, void *a= rg) static irqreturn_t analogix_dp_irq_thread(int irq, void *arg) { struct analogix_dp_device *dp =3D arg; - enum dp_irq_type irq_type; + u32 irq_type; =20 irq_type =3D analogix_dp_get_irq_type(dp); if (irq_type & DP_IRQ_TYPE_HP_CABLE_IN || @@ -725,7 +725,7 @@ static irqreturn_t analogix_dp_irq_thread(int irq, void= *arg) drm_helper_hpd_irq_event(dp->drm_dev); } =20 - if (irq_type !=3D DP_IRQ_TYPE_UNKNOWN) { + if (irq_type) { analogix_dp_clear_hotplug_interrupts(dp); analogix_dp_unmute_hpd_interrupt(dp); } diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h b/drivers/g= pu/drm/bridge/analogix/analogix_dp_core.h index 4560597604ad..3f40d95757c5 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h @@ -120,7 +120,7 @@ enum dp_irq_type { DP_IRQ_TYPE_HP_CABLE_IN =3D BIT(0), DP_IRQ_TYPE_HP_CABLE_OUT =3D BIT(1), DP_IRQ_TYPE_HP_CHANGE =3D BIT(2), - DP_IRQ_TYPE_UNKNOWN =3D BIT(3), + DP_IRQ_TYPE_IRQ_HPD =3D BIT(3), }; =20 struct video_info { @@ -195,7 +195,7 @@ void analogix_dp_set_analog_power_down(struct analogix_= dp_device *dp, int analogix_dp_init_analog_func(struct analogix_dp_device *dp); void analogix_dp_init_hpd(struct analogix_dp_device *dp); void analogix_dp_force_hpd(struct analogix_dp_device *dp); -enum dp_irq_type analogix_dp_get_irq_type(struct analogix_dp_device *dp); +u32 analogix_dp_get_irq_type(struct analogix_dp_device *dp); void analogix_dp_clear_hotplug_interrupts(struct analogix_dp_device *dp); void analogix_dp_reset_aux(struct analogix_dp_device *dp); void analogix_dp_init_aux(struct analogix_dp_device *dp); diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c b/drivers/gp= u/drm/bridge/analogix/analogix_dp_reg.c index c1344a3f013a..49c1961e4326 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c @@ -412,8 +412,9 @@ void analogix_dp_force_hpd(struct analogix_dp_device *d= p) writel(reg, dp->reg_base + ANALOGIX_DP_SYS_CTL_3); } =20 -enum dp_irq_type analogix_dp_get_irq_type(struct analogix_dp_device *dp) +u32 analogix_dp_get_irq_type(struct analogix_dp_device *dp) { + u32 irq_type =3D 0; u32 reg; =20 if (dp->hpd_gpiod) { @@ -425,17 +426,18 @@ enum dp_irq_type analogix_dp_get_irq_type(struct anal= ogix_dp_device *dp) } else { /* Parse hotplug interrupt status register */ reg =3D readl(dp->reg_base + ANALOGIX_DP_COMMON_INT_STA_4); - if (reg & PLUG) - return DP_IRQ_TYPE_HP_CABLE_IN; - + irq_type |=3D DP_IRQ_TYPE_HP_CABLE_IN; if (reg & HPD_LOST) - return DP_IRQ_TYPE_HP_CABLE_OUT; - + irq_type |=3D DP_IRQ_TYPE_HP_CABLE_OUT; if (reg & HOTPLUG_CHG) - return DP_IRQ_TYPE_HP_CHANGE; + irq_type |=3D DP_IRQ_TYPE_HP_CHANGE; + + reg =3D readl(dp->reg_base + ANALOGIX_DP_INT_STA); + if (reg & INT_HPD) + irq_type |=3D DP_IRQ_TYPE_IRQ_HPD; =20 - return DP_IRQ_TYPE_UNKNOWN; + return irq_type; } } =20 --=20 2.34.1 From nobody Fri Oct 2 06:58:29 2026 Received: from mail-m121160.qiye.163.com (mail-m121160.qiye.163.com [115.236.121.160]) (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 3D3BA349CD1; Mon, 28 Sep 2026 08:20:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=115.236.121.160 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790583624; cv=none; b=Z4KU6857DUd4dULH36e3MDfSukM/N4vBUxEKG0151cZ5ctqiNd0fNZXH6gYEMbHoa4YAr0ac8rvcFRNTJdt3G0+eQjt2EECm7ohXaJQ2iWcsLObQeRekoYXKU4pNy4d9/8J/YaL+rTOdwXn5sH4fnpgV15isGGb6qI9LM3U/IrE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790583624; c=relaxed/simple; bh=YGKSRyjUQMjIHH+H14eJyY43GLqzetdydIJbuwiKpn4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=gcjpTEjNBfD86/iD69GXbvj2OVRJw6/uhMZJNQWObOrhD7eMu/MQaNBx/HdtOn0um1eA23z/NEus1HuWC4UBg4p6I+R+rentDPETd3PDiOGIJhgec8dykkVkT+lcOWgKAuXgAgVawMKAgPPz7mGnAsWMTE3NknaYCybZIuCeSOQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com; spf=pass smtp.mailfrom=rock-chips.com; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b=GVEoTm0n; arc=none smtp.client-ip=115.236.121.160 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b="GVEoTm0n" Received: from zyb-HP-ProDesk-680-G2-MT.. (unknown [61.154.14.86]) by smtp.qiye.163.com (Hmail) with ESMTP id 4f5398e50; Mon, 28 Sep 2026 16:15:04 +0800 (GMT+08:00) From: Damon Ding To: Andrzej Hajda , Neil Armstrong , Robert Foss , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jingoo Han , Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Peter Griffin , Alim Akhtar , Heiko Stuebner Cc: Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Dmitry Baryshkov , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-rockchip@lists.infradead.org, Damon Ding , Sashiko Subject: [PATCH v3 02/14] drm/bridge: analogix_dp: Check all negative return values for &analogix_dp_device.irq Date: Mon, 28 Sep 2026 16:14:06 +0800 Message-Id: <20260928081418.3605775-3-damon.ding@rock-chips.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260928081418.3605775-1-damon.ding@rock-chips.com> References: <20260928081418.3605775-1-damon.ding@rock-chips.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-HM-Tid: 0aa0e714efb803a8kunm323e2b5437cf11 X-HM-MType: 1 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFITzdXWRgWCB1ZQUpXWS1ZQUlXWQ8JGhUIEh9ZQVkaHx8eVh4ZSR5CTEIeSEoaSFYVFA kWGhdVEwETFhoSFyQUDg9ZV1kYEgtZQVlNSlVKTk9VSk9VQ01ZV1kWGg8SFR0UWUFZT0tIVUpLSE pOTE5VSktLVUpCS0tZBg++ DKIM-Signature: a=rsa-sha256; b=GVEoTm0niGiCpErUv1BiE3AwAKiCnomyyogm5KnAx/EelFq0P8nbkxorN9hP+U9AIlQzsN9JrbpwkpCYd9Em2GSzu3US2dIny9+3iWqLKp0x953A2OGmEOQjs4Y0iZUcKKcmz/z/8frjgY8F5V0zJ4j1kOKm41FSLE73nUc5hnM=; s=default; c=relaxed/relaxed; d=rock-chips.com; v=1; bh=kq36aaWmtxNis0gWuJ3e4zUh00Bu1KsR9hnzmqki5yE=; h=date:mime-version:subject:message-id:from; Content-Type: text/plain; charset="utf-8" Currently only -ENXIO is checked for dp->irq from gpiod_to_irq(), which ignores other possible error codes like -EPROBE_DEFER, -ENOENT. Check for any negative value instead, and propagate the actual error code rather than hardcoding -ENODEV. Reported-by: Sashiko Link: https://lore.kernel.org/all/20260804083307.84ECA1F000E9@smtp.kernel.o= rg/ Signed-off-by: Damon Ding Tested-by: Heiko Stuebner --- drivers/gpu/drm/bridge/analogix/analogix_dp_core.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/g= pu/drm/bridge/analogix/analogix_dp_core.c index 079f2f01f33b..27c9a764e25f 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c @@ -1480,9 +1480,9 @@ analogix_dp_probe(struct device *dev, struct analogix= _dp_plat_data *plat_data) irq_flags =3D IRQF_NO_AUTOEN; } =20 - if (dp->irq =3D=3D -ENXIO) { + if (dp->irq < 0) { dev_err(&pdev->dev, "failed to get irq\n"); - return ERR_PTR(-ENODEV); + return ERR_PTR(dp->irq); } =20 ret =3D devm_request_threaded_irq(&pdev->dev, dp->irq, --=20 2.34.1 From nobody Fri Oct 2 06:58:29 2026 Received: from mail-m127162.xmail.ntesmail.com (mail-m127162.xmail.ntesmail.com [115.236.127.162]) (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 4139948F01D; Mon, 28 Sep 2026 09:30:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=115.236.127.162 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790587851; cv=none; b=W5Yl4EavYezCVHWShnTe3obch+JiPXksbsKeXGvXpKrjCyblKx6WftOG6er8dmmbQxArBNJ9csfa46WJJUbSeZCvxmUYQzMxhf4UlmK0HX/l+AmjI3i0CUpku0gK0JKJcwt0Dt7z/eYr1K5HWtUVHJ1uvGzJ84ROSozC+rnfGxY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790587851; c=relaxed/simple; bh=QfxPITENy2U6ojm7wIy6exXOKnlaV3obKxwLB4O4yJw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=EPJOIryaCmgpVWglKcZ3sUGJGw7M4yyElHBUZElASe7/i5M3XgUvwWgWGLJaCnMcxvJJwmdzarouNdLALcFjf7mLHI9zn6ILsm6em/a7TotxuME2BxBSuK1KlCxNjDZQsok0Z8qg8qEFpUchaIYEJzMqFIJBfZ9GKws3j51Nqfk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com; spf=pass smtp.mailfrom=rock-chips.com; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b=Wfr60wMv; arc=none smtp.client-ip=115.236.127.162 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b="Wfr60wMv" Received: from zyb-HP-ProDesk-680-G2-MT.. (unknown [61.154.14.86]) by smtp.qiye.163.com (Hmail) with ESMTP id 4f5398e5f; Mon, 28 Sep 2026 16:15:05 +0800 (GMT+08:00) From: Damon Ding To: Andrzej Hajda , Neil Armstrong , Robert Foss , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jingoo Han , Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Peter Griffin , Alim Akhtar , Heiko Stuebner Cc: Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Dmitry Baryshkov , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-rockchip@lists.infradead.org, Damon Ding Subject: [PATCH v3 03/14] drm/bridge: analogix_dp: Add IRQF_ONESHOT and simplify IRQ handling Date: Mon, 28 Sep 2026 16:14:07 +0800 Message-Id: <20260928081418.3605775-4-damon.ding@rock-chips.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260928081418.3605775-1-damon.ding@rock-chips.com> References: <20260928081418.3605775-1-damon.ding@rock-chips.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-HM-Tid: 0aa0e714f49203a8kunm323e2b5437cf1f X-HM-MType: 1 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFITzdXWRgWCB1ZQUpXWS1ZQUlXWQ8JGhUIEh9ZQVlCSUlOVkIaSUpNGB4ZGEsaQ1YVFA kWGhdVEwETFhoSFyQUDg9ZV1kYEgtZQVlNSlVKTk9VSk9VQ01ZV1kWGg8SFR0UWUFZT0tIVUpLSU 9PT0hVSktLVUpCS0tZBg++ DKIM-Signature: a=rsa-sha256; b=Wfr60wMvG2J8qXhOo+zFzALi2vXZTHnXnItUIGi80sunqP3uXezqTn20pSNXseZJpW14EPUORahf2X8lmgkjMQy2T0E3haipumge3QtefnLqRgtXcBC66qN5HZikwDMj0wARqUkZXwgFCjtPTlDh5i1Tyse4Ml1PBRn1DthkrPU=; s=default; c=relaxed/relaxed; d=rock-chips.com; v=1; bh=TeGRKIo9zN3ch77zMT+V+rC/6To7Yk8YMsagDBLa1v4=; h=date:mime-version:subject:message-id:from; Content-Type: text/plain; charset="utf-8" The threaded IRQ is requested without IRQF_ONESHOT, allowing hardirq to preempt the threaded handler. This creates a read-modify-write race on HPD interrupt mask registers between the hardirq mute and thread unmute operations. Add IRQF_ONESHOT to keep the IRQ line masked during thread execution, which eliminates the race and makes the per-event mute/unmute calls in hardirq and thread handlers redundant. Move interrupt status clearing to the beginning of the threaded handler, before drm_helper_hpd_irq_event(), to avoid losing events that arrive during the event handling. Signed-off-by: Damon Ding Tested-by: Heiko Stuebner --- Changes in v3: - Split out a separate commit to improve the return value checking for &analogix_dp_device.irq.(Sashiko) --- .../gpu/drm/bridge/analogix/analogix_dp_core.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/g= pu/drm/bridge/analogix/analogix_dp_core.c index 27c9a764e25f..974be5b702dc 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c @@ -704,10 +704,8 @@ static irqreturn_t analogix_dp_hardirq(int irq, void *= arg) u32 irq_type; =20 irq_type =3D analogix_dp_get_irq_type(dp); - if (irq_type) { - analogix_dp_mute_hpd_interrupt(dp); + if (irq_type) ret =3D IRQ_WAKE_THREAD; - } =20 return ret; } @@ -718,6 +716,9 @@ static irqreturn_t analogix_dp_irq_thread(int irq, void= *arg) u32 irq_type; =20 irq_type =3D analogix_dp_get_irq_type(dp); + if (irq_type) + analogix_dp_clear_hotplug_interrupts(dp); + if (irq_type & DP_IRQ_TYPE_HP_CABLE_IN || irq_type & DP_IRQ_TYPE_HP_CABLE_OUT) { dev_dbg(dp->dev, "Detected cable status changed!\n"); @@ -725,11 +726,6 @@ static irqreturn_t analogix_dp_irq_thread(int irq, voi= d *arg) drm_helper_hpd_irq_event(dp->drm_dev); } =20 - if (irq_type) { - analogix_dp_clear_hotplug_interrupts(dp); - analogix_dp_unmute_hpd_interrupt(dp); - } - return IRQ_HANDLED; } =20 @@ -1474,10 +1470,11 @@ analogix_dp_probe(struct device *dev, struct analog= ix_dp_plat_data *plat_data) * that we can get the current state of the GPIO. */ dp->irq =3D gpiod_to_irq(dp->hpd_gpiod); - irq_flags =3D IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_NO_AUTOE= N; + irq_flags =3D IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_NO_AUTOE= N | + IRQF_ONESHOT; } else { dp->irq =3D platform_get_irq(pdev, 0); - irq_flags =3D IRQF_NO_AUTOEN; + irq_flags =3D IRQF_NO_AUTOEN | IRQF_ONESHOT; } =20 if (dp->irq < 0) { --=20 2.34.1 From nobody Fri Oct 2 06:58:29 2026 Received: from mail-m19731114.qiye.163.com (mail-m19731114.qiye.163.com [220.197.31.114]) (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 46180472F60; Mon, 28 Sep 2026 08:20:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=220.197.31.114 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790583630; cv=none; b=abUFvC240bTf/LEOOdaGctAVQVqbbQbaQyJU09yIIxeInyA5nhoTR78++nUsXVvbEKlkVidR98o9WZLadYLoJ22o7vxzPtyGdkebYk6ftVBHGAd6TdmD2JkR3Iq9KHq8YjrNMfGMTLRSRp6xlXAWvS8it9/rBY2LfVVpcNeuYdw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790583630; c=relaxed/simple; bh=xqx/9wwnyZSOJtMOeVB2aHX+mobpoxasxJjw/cG11+k=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=sULAUPj0Kh95lzsUwZumUtujdolQtcCBMvBnjq6ETSlONTimgD0Ji0l1jsm82lBWZVe/56CteQeHYcHblTGbvnVa+GI3NknT+zDldSSacKzz5utWBBHYsQw7qtiHi7JTTHGvQ7UzWxPFLCCdODnPLp9lXt9mwBeNmLu4m8ete8w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com; spf=pass smtp.mailfrom=rock-chips.com; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b=Z56cA+TX; arc=none smtp.client-ip=220.197.31.114 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b="Z56cA+TX" Received: from zyb-HP-ProDesk-680-G2-MT.. (unknown [61.154.14.86]) by smtp.qiye.163.com (Hmail) with ESMTP id 4f5398e69; Mon, 28 Sep 2026 16:15:06 +0800 (GMT+08:00) From: Damon Ding To: Andrzej Hajda , Neil Armstrong , Robert Foss , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jingoo Han , Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Peter Griffin , Alim Akhtar , Heiko Stuebner Cc: Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Dmitry Baryshkov , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-rockchip@lists.infradead.org, Damon Ding Subject: [PATCH v3 04/14] drm/bridge: analogix_dp: Extend clear_hotplug_interrupts to accept IRQ bitmask Date: Mon, 28 Sep 2026 16:14:08 +0800 Message-Id: <20260928081418.3605775-5-damon.ding@rock-chips.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260928081418.3605775-1-damon.ding@rock-chips.com> References: <20260928081418.3605775-1-damon.ding@rock-chips.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-HM-Tid: 0aa0e714f95c03a8kunm323e2b5437cf2b X-HM-MType: 1 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFITzdXWRgWCB1ZQUpXWS1ZQUlXWQ8JGhUIEh9ZQVlDTU4dVkhCHRoYTRlKTRpLSFYVFA kWGhdVEwETFhoSFyQUDg9ZV1kYEgtZQVlNSlVKTk9VSk9VQ01ZV1kWGg8SFR0UWUFZT0tIVUpLSU 9PT0hVSktLVUpCS0tZBg++ DKIM-Signature: a=rsa-sha256; b=Z56cA+TXn61gM36KmMnqt58pWMIoN3X/1SUemzszGu1kqKdPEpp+oME3BGYgWyONLL7HgX6sEbMTLr4ukFGjl3ajtGX4IIXy+9YsN2xjiH3aj019v9MS8ZlQc5oxRHPc1RYFS7fnDiQAgfxqEW5lU2G3zDHew171aFWlpKwLNRo=; s=default; c=relaxed/relaxed; d=rock-chips.com; v=1; bh=UWZOxCLTaxMJAjRXwenGJil0lgzREKKZ0OpySOymUtY=; h=date:mime-version:subject:message-id:from; Content-Type: text/plain; charset="utf-8" Update analogix_dp_clear_hotplug_interrupts() to take an irq_type bitmask argument. Instead of clearing all hotplug interrupt bits unconditionally, only clear the interrupt flags corresponding to the triggered events. Pass the detected IRQ bitmask from the irq thread handler, and use the full HPD_IRQ_ALL mask during HPD initialization. Signed-off-by: Damon Ding Tested-by: Heiko Stuebner --- Changes in v2: - Add separate patch for IRQF_ONESHOT to resolve interrupt mask issues triggered by interrupt preemption.(Sashiko) Changes in v3: - Rename newly added macro HPD_IRQ to HPD_IRQ_ALL. --- .../drm/bridge/analogix/analogix_dp_core.c | 2 +- .../drm/bridge/analogix/analogix_dp_core.h | 2 +- .../gpu/drm/bridge/analogix/analogix_dp_reg.c | 28 +++++++++++++------ 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/g= pu/drm/bridge/analogix/analogix_dp_core.c index 974be5b702dc..f88e3263ba0e 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c @@ -717,7 +717,7 @@ static irqreturn_t analogix_dp_irq_thread(int irq, void= *arg) =20 irq_type =3D analogix_dp_get_irq_type(dp); if (irq_type) - analogix_dp_clear_hotplug_interrupts(dp); + analogix_dp_clear_hotplug_interrupts(dp, irq_type); =20 if (irq_type & DP_IRQ_TYPE_HP_CABLE_IN || irq_type & DP_IRQ_TYPE_HP_CABLE_OUT) { diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h b/drivers/g= pu/drm/bridge/analogix/analogix_dp_core.h index 3f40d95757c5..88fa538a5949 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h @@ -196,7 +196,7 @@ int analogix_dp_init_analog_func(struct analogix_dp_dev= ice *dp); void analogix_dp_init_hpd(struct analogix_dp_device *dp); void analogix_dp_force_hpd(struct analogix_dp_device *dp); u32 analogix_dp_get_irq_type(struct analogix_dp_device *dp); -void analogix_dp_clear_hotplug_interrupts(struct analogix_dp_device *dp); +void analogix_dp_clear_hotplug_interrupts(struct analogix_dp_device *dp, u= 32 irq_type); void analogix_dp_reset_aux(struct analogix_dp_device *dp); void analogix_dp_init_aux(struct analogix_dp_device *dp); int analogix_dp_get_plug_in_status(struct analogix_dp_device *dp); diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c b/drivers/gp= u/drm/bridge/analogix/analogix_dp_reg.c index 49c1961e4326..2c1d4655114b 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c @@ -24,6 +24,11 @@ #define COMMON_INT_MASK_4 (HOTPLUG_CHG | HPD_LOST | PLUG) #define INT_STA_MASK INT_HPD =20 +#define HPD_IRQ_ALL (DP_IRQ_TYPE_HP_CABLE_IN | DP_IRQ_TYPE_HP_CABLE_OUT |= \ + DP_IRQ_TYPE_HP_CHANGE | DP_IRQ_TYPE_IRQ_HPD) +#define COMMON_INT_4_HPD_IRQ (DP_IRQ_TYPE_HP_CABLE_IN | DP_IRQ_TYPE_HP_CAB= LE_OUT | \ + DP_IRQ_TYPE_HP_CHANGE) + void analogix_dp_enable_video_mute(struct analogix_dp_device *dp, bool ena= ble) { u32 reg; @@ -375,18 +380,25 @@ int analogix_dp_init_analog_func(struct analogix_dp_d= evice *dp) return 0; } =20 -void analogix_dp_clear_hotplug_interrupts(struct analogix_dp_device *dp) +void analogix_dp_clear_hotplug_interrupts(struct analogix_dp_device *dp, u= 32 irq_type) { - u32 reg; + u32 reg =3D 0; =20 - if (dp->hpd_gpiod) + if (dp->hpd_gpiod || !irq_type) return; =20 - reg =3D HOTPLUG_CHG | HPD_LOST | PLUG; - writel(reg, dp->reg_base + ANALOGIX_DP_COMMON_INT_STA_4); + if (irq_type & COMMON_INT_4_HPD_IRQ) { + if (irq_type & DP_IRQ_TYPE_HP_CABLE_IN) + reg |=3D PLUG; + if (irq_type & DP_IRQ_TYPE_HP_CABLE_OUT) + reg |=3D HPD_LOST; + if (irq_type & DP_IRQ_TYPE_HP_CHANGE) + reg |=3D HOTPLUG_CHG; + writel(reg, dp->reg_base + ANALOGIX_DP_COMMON_INT_STA_4); + } =20 - reg =3D INT_HPD; - writel(reg, dp->reg_base + ANALOGIX_DP_INT_STA); + if (irq_type & DP_IRQ_TYPE_IRQ_HPD) + writel(INT_HPD, dp->reg_base + ANALOGIX_DP_INT_STA); } =20 void analogix_dp_init_hpd(struct analogix_dp_device *dp) @@ -396,7 +408,7 @@ void analogix_dp_init_hpd(struct analogix_dp_device *dp) if (dp->hpd_gpiod) return; =20 - analogix_dp_clear_hotplug_interrupts(dp); + analogix_dp_clear_hotplug_interrupts(dp, HPD_IRQ_ALL); =20 reg =3D readl(dp->reg_base + ANALOGIX_DP_SYS_CTL_3); reg &=3D ~(F_HPD | HPD_CTRL); --=20 2.34.1 From nobody Fri Oct 2 06:58:29 2026 Received: from mail-m12797.qiye.163.com (mail-m12797.qiye.163.com [115.236.127.97]) (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 D27E045FFC8; Mon, 28 Sep 2026 09:30:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=115.236.127.97 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790587860; cv=none; b=XKKJvcUJICEG7ifqB4Up/2f9jOfbaCFIb+lN1ILeFN7j77cOaS2T9ptMMnncTyqJ12G6WEbz0pERm4JTsYER1Qs9kVSZec3o9szs8rpANK0i3NIPTwIefzJslz29bsAsFAtnsleyG6qv6+Hvyi5URqkzdbKNZv0OfXUpnaRhK0k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790587860; c=relaxed/simple; bh=pLPlzzdpwwDbdG4JlQdO21dAMQM8L0lBijxtT+eSBFo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=EBnxBPPIVbh3mn2YGFLwEY80R8OcRPY9PwlrMOXeJyxMhJD+bSHBrlRdwj9umdRs4CfyFL5dldI6dcGOSnHoxWq7pXwJp6fOdOUXJ13lOLPs1ZS8158GOPaYgqjRtThKpn2U+V9jC5/flHp9ChsjJDkMD+DBYnQhY5bXu2E/yNE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com; spf=pass smtp.mailfrom=rock-chips.com; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b=NM26liGJ; arc=none smtp.client-ip=115.236.127.97 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b="NM26liGJ" Received: from zyb-HP-ProDesk-680-G2-MT.. (unknown [61.154.14.86]) by smtp.qiye.163.com (Hmail) with ESMTP id 4f5398e74; Mon, 28 Sep 2026 16:15:07 +0800 (GMT+08:00) From: Damon Ding To: Andrzej Hajda , Neil Armstrong , Robert Foss , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jingoo Han , Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Peter Griffin , Alim Akhtar , Heiko Stuebner Cc: Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Dmitry Baryshkov , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-rockchip@lists.infradead.org, Damon Ding Subject: [PATCH v3 05/14] drm/bridge: analogix_dp: Extend mute/unmute HPD interrupts to accept irq bitmask Date: Mon, 28 Sep 2026 16:14:09 +0800 Message-Id: <20260928081418.3605775-6-damon.ding@rock-chips.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260928081418.3605775-1-damon.ding@rock-chips.com> References: <20260928081418.3605775-1-damon.ding@rock-chips.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-HM-Tid: 0aa0e714fe4803a8kunm323e2b5437cf39 X-HM-MType: 1 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFITzdXWRgWCB1ZQUpXWS1ZQUlXWQ8JGhUIEh9ZQVkaQkwdVh9LT0odHU1CHx4aH1YVFA kWGhdVEwETFhoSFyQUDg9ZV1kYEgtZQVlNSlVKTk9VSk9VQ01ZV1kWGg8SFR0UWUFZT0tIVUpLSU 9PT0hVSktLVUpCS0tZBg++ DKIM-Signature: a=rsa-sha256; b=NM26liGJePRuJW6MDBwFXDS82IbFn9Wnpu2k6TXL/Ow6y0iKqHwp66WDQZg+a4PJQvkSQ9u2V+GdtArCXtJJwZL0nr9lLBMKy9xqCjpn9Ht/soyNaUROOvtv9YEoszU4/a9274Ns8BItMPSTEZNbvYzWCWfwJ0efUxbIOo1rXKs=; s=default; c=relaxed/relaxed; d=rock-chips.com; v=1; bh=Qy4pxby9NM7jaee0yCfCeAMpArU4GaC85GrNjCNpwBM=; h=date:mime-version:subject:message-id:from; Content-Type: text/plain; charset="utf-8" Update the HPD interrupt mute/unmute routines to accept an irq_type bitmask parameter, allowing selective per-bit mask control instead of operating on all HPD interrupt bits unconditionally. With IRQF_ONESHOT handling IRQ line masking during threaded handler execution, these helpers are no longer needed in the runtime IRQ path. They are retained for init-time use by analogix_dp_config_interrupt() to configure platform-specific HPD interrupt masks. Also extract the irq_type-to-COMMON_INT_STA_4 bit mapping into a shared helper to avoid duplication in the clear/mute/unmute paths, and drop the now unused COMMON_INT_4_HPD_IRQ macro. Signed-off-by: Damon Ding Tested-by: Heiko Stuebner --- Changes in v2: - Update commit messages to align with newly added IRQF_ONESHOT related commit. Changes in v3: - Extract the irq_type bit mapping into a shared helper and document the mask register polarity once. - Drop the unused COMMON_INT_4_HPD_IRQ macro. --- .../drm/bridge/analogix/analogix_dp_core.h | 4 +- .../gpu/drm/bridge/analogix/analogix_dp_reg.c | 80 ++++++++++++------- 2 files changed, 55 insertions(+), 29 deletions(-) diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h b/drivers/g= pu/drm/bridge/analogix/analogix_dp_core.h index 88fa538a5949..6a3566b2e8de 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.h @@ -185,8 +185,8 @@ void analogix_dp_init_interrupt(struct analogix_dp_devi= ce *dp); void analogix_dp_reset(struct analogix_dp_device *dp); void analogix_dp_swreset(struct analogix_dp_device *dp); void analogix_dp_config_interrupt(struct analogix_dp_device *dp); -void analogix_dp_mute_hpd_interrupt(struct analogix_dp_device *dp); -void analogix_dp_unmute_hpd_interrupt(struct analogix_dp_device *dp); +void analogix_dp_mute_hpd_interrupt(struct analogix_dp_device *dp, u32 irq= _type); +void analogix_dp_unmute_hpd_interrupt(struct analogix_dp_device *dp, u32 i= rq_type); int analogix_dp_wait_pll_locked(struct analogix_dp_device *dp); void analogix_dp_set_pll_power_down(struct analogix_dp_device *dp, bool en= able); void analogix_dp_set_analog_power_down(struct analogix_dp_device *dp, diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c b/drivers/gp= u/drm/bridge/analogix/analogix_dp_reg.c index 2c1d4655114b..6ac03a1aa512 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c @@ -26,8 +26,20 @@ =20 #define HPD_IRQ_ALL (DP_IRQ_TYPE_HP_CABLE_IN | DP_IRQ_TYPE_HP_CABLE_OUT |= \ DP_IRQ_TYPE_HP_CHANGE | DP_IRQ_TYPE_IRQ_HPD) -#define COMMON_INT_4_HPD_IRQ (DP_IRQ_TYPE_HP_CABLE_IN | DP_IRQ_TYPE_HP_CAB= LE_OUT | \ - DP_IRQ_TYPE_HP_CHANGE) + +static u32 analogix_dp_irq_type_to_common_int_sta4(u32 irq_type) +{ + u32 reg =3D 0; + + if (irq_type & DP_IRQ_TYPE_HP_CABLE_IN) + reg |=3D PLUG; + if (irq_type & DP_IRQ_TYPE_HP_CABLE_OUT) + reg |=3D HPD_LOST; + if (irq_type & DP_IRQ_TYPE_HP_CHANGE) + reg |=3D HOTPLUG_CHG; + + return reg; +} =20 void analogix_dp_enable_video_mute(struct analogix_dp_device *dp, bool ena= ble) { @@ -196,30 +208,50 @@ void analogix_dp_config_interrupt(struct analogix_dp_= device *dp) writel(reg, dp->reg_base + ANALOGIX_DP_INT_STA_MASK); } =20 -void analogix_dp_mute_hpd_interrupt(struct analogix_dp_device *dp) +/* + * Both ANALOGIX_DP_COMMON_INT_MASK_4 and ANALOGIX_DP_INT_STA_MASK use + * 0 to mask and 1 to unmask the corresponding interrupt sources. + */ +void analogix_dp_mute_hpd_interrupt(struct analogix_dp_device *dp, u32 irq= _type) { - u32 reg; + u32 reg, mask; =20 - /* 0: mask, 1: unmask */ - reg =3D readl(dp->reg_base + ANALOGIX_DP_COMMON_INT_MASK_4); - reg &=3D ~COMMON_INT_MASK_4; - writel(reg, dp->reg_base + ANALOGIX_DP_COMMON_INT_MASK_4); + if (!irq_type) + return; =20 - reg =3D readl(dp->reg_base + ANALOGIX_DP_INT_STA_MASK); - reg &=3D ~INT_STA_MASK; - writel(reg, dp->reg_base + ANALOGIX_DP_INT_STA_MASK); + mask =3D analogix_dp_irq_type_to_common_int_sta4(irq_type); + if (mask) { + reg =3D readl(dp->reg_base + ANALOGIX_DP_COMMON_INT_MASK_4); + reg &=3D ~mask; + writel(reg, dp->reg_base + ANALOGIX_DP_COMMON_INT_MASK_4); + } + + if (irq_type & DP_IRQ_TYPE_IRQ_HPD) { + reg =3D readl(dp->reg_base + ANALOGIX_DP_INT_STA_MASK); + reg &=3D ~INT_HPD; + writel(reg, dp->reg_base + ANALOGIX_DP_INT_STA_MASK); + } } =20 -void analogix_dp_unmute_hpd_interrupt(struct analogix_dp_device *dp) +void analogix_dp_unmute_hpd_interrupt(struct analogix_dp_device *dp, u32 i= rq_type) { - u32 reg; + u32 reg, mask; =20 - /* 0: mask, 1: unmask */ - reg =3D COMMON_INT_MASK_4; - writel(reg, dp->reg_base + ANALOGIX_DP_COMMON_INT_MASK_4); + if (!irq_type) + return; =20 - reg =3D INT_STA_MASK; - writel(reg, dp->reg_base + ANALOGIX_DP_INT_STA_MASK); + mask =3D analogix_dp_irq_type_to_common_int_sta4(irq_type); + if (mask) { + reg =3D readl(dp->reg_base + ANALOGIX_DP_COMMON_INT_MASK_4); + reg |=3D mask; + writel(reg, dp->reg_base + ANALOGIX_DP_COMMON_INT_MASK_4); + } + + if (irq_type & DP_IRQ_TYPE_IRQ_HPD) { + reg =3D readl(dp->reg_base + ANALOGIX_DP_INT_STA_MASK); + reg |=3D INT_HPD; + writel(reg, dp->reg_base + ANALOGIX_DP_INT_STA_MASK); + } } =20 int analogix_dp_wait_pll_locked(struct analogix_dp_device *dp) @@ -382,20 +414,14 @@ int analogix_dp_init_analog_func(struct analogix_dp_d= evice *dp) =20 void analogix_dp_clear_hotplug_interrupts(struct analogix_dp_device *dp, u= 32 irq_type) { - u32 reg =3D 0; + u32 reg; =20 if (dp->hpd_gpiod || !irq_type) return; =20 - if (irq_type & COMMON_INT_4_HPD_IRQ) { - if (irq_type & DP_IRQ_TYPE_HP_CABLE_IN) - reg |=3D PLUG; - if (irq_type & DP_IRQ_TYPE_HP_CABLE_OUT) - reg |=3D HPD_LOST; - if (irq_type & DP_IRQ_TYPE_HP_CHANGE) - reg |=3D HOTPLUG_CHG; + reg =3D analogix_dp_irq_type_to_common_int_sta4(irq_type); + if (reg) writel(reg, dp->reg_base + ANALOGIX_DP_COMMON_INT_STA_4); - } =20 if (irq_type & DP_IRQ_TYPE_IRQ_HPD) writel(INT_HPD, dp->reg_base + ANALOGIX_DP_INT_STA); --=20 2.34.1 From nobody Fri Oct 2 06:58:29 2026 Received: from mail-m118217.qiye.163.com (mail-m118217.qiye.163.com [115.236.118.217]) (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 E16DE46C836; Mon, 28 Sep 2026 08:30:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=115.236.118.217 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790584241; cv=none; b=lh1RcwzuRad5qnaXcPs9sb7xb5qpqfnY3u1OMNGlqOzFZXDkR/G6Wjnw9cVGrq0ujex34w9NG+jzt0GTwAdMOykpabMYRb3hCwPRBbwJIkBIjxJkLSK6DHpaUgpbfx7P/3YyMnwwG0yRtPPaQBHVDSF2DAsM2fhDLQHZaYMDGBo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790584241; c=relaxed/simple; bh=56O1+XtCbBuMpsZY03ud511WNyyJck6lK7YOl8I3S/Y=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Vvq0BjPYTU+rktZM+B1AnSzLT3Q6I/Vd2TazRPTJb80j08tY4v/J7aZm9Y137/KqvRjskRRlaPgv4qEONDmQUJNzWOuO0ncZZe14W2dSADPXoWSjD4s+BD6bkVKI/mpZLzdkmdFvdZZ1YmhMiTWqIPegfL7ZB5HS/+xg4/+JLDs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com; spf=pass smtp.mailfrom=rock-chips.com; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b=FAHqU1AM; arc=none smtp.client-ip=115.236.118.217 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b="FAHqU1AM" Received: from zyb-HP-ProDesk-680-G2-MT.. (unknown [61.154.14.86]) by smtp.qiye.163.com (Hmail) with ESMTP id 4f5398e7e; Mon, 28 Sep 2026 16:15:09 +0800 (GMT+08:00) From: Damon Ding To: Andrzej Hajda , Neil Armstrong , Robert Foss , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jingoo Han , Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Peter Griffin , Alim Akhtar , Heiko Stuebner Cc: Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Dmitry Baryshkov , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-rockchip@lists.infradead.org, Damon Ding Subject: [PATCH v3 06/14] drm/bridge: analogix_dp: Simplify analogix_dp_config_interrupt() Date: Mon, 28 Sep 2026 16:14:10 +0800 Message-Id: <20260928081418.3605775-7-damon.ding@rock-chips.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260928081418.3605775-1-damon.ding@rock-chips.com> References: <20260928081418.3605775-1-damon.ding@rock-chips.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-HM-Tid: 0aa0e715032803a8kunm323e2b5437cf3f X-HM-MType: 1 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFITzdXWRgWCB1ZQUpXWS1ZQUlXWQ8JGhUIEh9ZQVlCS0wdVkoZHkodS0sZHh1KTVYVFA kWGhdVEwETFhoSFyQUDg9ZV1kYEgtZQVlNSlVKTk9VSk9VQ01ZV1kWGg8SFR0UWUFZT0tIVUpLSU JDQ0xVSktLVUtZBg++ DKIM-Signature: a=rsa-sha256; b=FAHqU1AMFg6sHS+bmLPMNVPm4GWr2jNNA78d4/VKocxSkxEoUQOCbs7IHvYWMIQNEKWjnYM5uROq0b/DEZElOzLYT2ZmJ/GRUxkE69kmOofEekArRl5zc6UgrBuEmxm3OTL404gFDlrUGxuAzuYXd+O0Vw7pLnSi8RtSRPoTxug=; s=default; c=relaxed/relaxed; d=rock-chips.com; v=1; bh=uKF52fufhJOZnsTT21ImBLc4H+Rm8ECocgf/WYHaG+I=; h=date:mime-version:subject:message-id:from; Content-Type: text/plain; charset="utf-8" Remove local COMMON_INT_MASK and INT_STA_MASK macros. These constants are only used once inside this function and bring no reuse benefit. Replace open-coded register writes for COMMON_INT_MASK_1~3 with direct writel(0) calls. Leverage analogix_dp_unmute_hpd_interrupt() using the full HPD_IRQ_ALL mask to initialize HPD interrupt state, removing duplicated register handling. Signed-off-by: Damon Ding Tested-by: Heiko Stuebner --- Changes in v3: - Replace macro HPD_IRQ with HPD_IRQ_ALL. --- .../gpu/drm/bridge/analogix/analogix_dp_reg.c | 25 +++---------------- 1 file changed, 4 insertions(+), 21 deletions(-) diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c b/drivers/gp= u/drm/bridge/analogix/analogix_dp_reg.c index 6ac03a1aa512..0f1406e4a5d3 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c @@ -18,12 +18,6 @@ #include "analogix_dp_core.h" #include "analogix_dp_reg.h" =20 -#define COMMON_INT_MASK_1 0 -#define COMMON_INT_MASK_2 0 -#define COMMON_INT_MASK_3 0 -#define COMMON_INT_MASK_4 (HOTPLUG_CHG | HPD_LOST | PLUG) -#define INT_STA_MASK INT_HPD - #define HPD_IRQ_ALL (DP_IRQ_TYPE_HP_CABLE_IN | DP_IRQ_TYPE_HP_CABLE_OUT |= \ DP_IRQ_TYPE_HP_CHANGE | DP_IRQ_TYPE_IRQ_HPD) =20 @@ -189,23 +183,12 @@ void analogix_dp_swreset(struct analogix_dp_device *d= p) =20 void analogix_dp_config_interrupt(struct analogix_dp_device *dp) { - u32 reg; - /* 0: mask, 1: unmask */ - reg =3D COMMON_INT_MASK_1; - writel(reg, dp->reg_base + ANALOGIX_DP_COMMON_INT_MASK_1); - - reg =3D COMMON_INT_MASK_2; - writel(reg, dp->reg_base + ANALOGIX_DP_COMMON_INT_MASK_2); - - reg =3D COMMON_INT_MASK_3; - writel(reg, dp->reg_base + ANALOGIX_DP_COMMON_INT_MASK_3); - - reg =3D COMMON_INT_MASK_4; - writel(reg, dp->reg_base + ANALOGIX_DP_COMMON_INT_MASK_4); + writel(0, dp->reg_base + ANALOGIX_DP_COMMON_INT_MASK_1); + writel(0, dp->reg_base + ANALOGIX_DP_COMMON_INT_MASK_2); + writel(0, dp->reg_base + ANALOGIX_DP_COMMON_INT_MASK_3); =20 - reg =3D INT_STA_MASK; - writel(reg, dp->reg_base + ANALOGIX_DP_INT_STA_MASK); + analogix_dp_unmute_hpd_interrupt(dp, HPD_IRQ_ALL); } =20 /* --=20 2.34.1 From nobody Fri Oct 2 06:58:29 2026 Received: from mail-m49227.qiye.163.com (mail-m49227.qiye.163.com [45.254.49.227]) (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 2E66D4D4880; Mon, 28 Sep 2026 13:58:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.254.49.227 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790603905; cv=none; b=pTbjh156YUOowWixIq4cTBp6R5UBCk1CgMoNltuQca/rBnKfXLCW7iLrFdVzgCnMkdts0LFMn22MjMaM/r34j3IUcWGRq6x0ltOIeE7Y8ikZ6uT5Mo3AVUK6raAsrKWhQ7xLFjVlKvad9vFKpRSo6/gBfU2Z0xaRGOpUXfuphaE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790603905; c=relaxed/simple; bh=uzMmhbGcunUgHE96gQ5ra+XHvPN4hFsgzpBNWL6HZ0s=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=e9yrJORdofmgpOoX/Nsx+foPJsfz5qfKu2pf5I+NF5u+BVOZfAszNWPqyH64mlcBPai7UApq3CBLm8IKLLZFcS0v9bTRGOFtkCZox32vjzc9V/yXTdke+ihHicnzNoK/3IxRsPxQW3w8lVwSpSP9xgsPrcu8lbaRGnHkRFHkvag= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com; spf=pass smtp.mailfrom=rock-chips.com; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b=SjHYE+56; arc=none smtp.client-ip=45.254.49.227 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b="SjHYE+56" Received: from zyb-HP-ProDesk-680-G2-MT.. (unknown [61.154.14.86]) by smtp.qiye.163.com (Hmail) with ESMTP id 4f5398e82; Mon, 28 Sep 2026 16:15:10 +0800 (GMT+08:00) From: Damon Ding To: Andrzej Hajda , Neil Armstrong , Robert Foss , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jingoo Han , Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Peter Griffin , Alim Akhtar , Heiko Stuebner Cc: Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Dmitry Baryshkov , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-rockchip@lists.infradead.org, Damon Ding Subject: [PATCH v3 07/14] drm/bridge: analogix_dp: Use platform-specific HPD detection scheme Date: Mon, 28 Sep 2026 16:14:11 +0800 Message-Id: <20260928081418.3605775-8-damon.ding@rock-chips.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260928081418.3605775-1-damon.ding@rock-chips.com> References: <20260928081418.3605775-1-damon.ding@rock-chips.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-HM-Tid: 0aa0e715079203a8kunm323e2b5437cf46 X-HM-MType: 1 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFITzdXWRgWCB1ZQUpXWS1ZQUlXWQ8JGhUIEh9ZQVlCTBpJVh9LTx9ITkxOS0hMGVYVFA kWGhdVEwETFhoSFyQUDg9ZV1kYEgtZQVlNSlVKTk9VSk9VQ01ZV1kWGg8SFR0UWUFZT0tIVUpLSU JDQ0xVSktLVUtZBg++ DKIM-Signature: a=rsa-sha256; b=SjHYE+56N6njEMERlvA7CzIvvttQUj+1DqOl5N+7vYVCDHNks5/VwpLpJwipHXqLp27AMonjVyXtHBUV3JDbbesPg/M4G2sKJZjfQHq5QmuDyiVDEkhjX4WiYzH86vsGeQUUX2JJ8bcBXKZSs3ByfXFgNYt7AO4aiDq4aNMr7dA=; s=default; c=relaxed/relaxed; d=rock-chips.com; v=1; bh=7ov5ZAWTee/V9ZBPtOKDaozcrk5oFd5f7m81BucbP6I=; h=date:mime-version:subject:message-id:from; Content-Type: text/plain; charset="utf-8" The Analogix DP controller provides two sets of interrupt sources for hotplug detection: HOTPLUG_CHG for any HPD level change, and the PLUG/HPD_LOST pair for connect/disconnect transitions respectively. On Rockchip platforms, configure the HPD deglitch filter and use HOTPLUG_CHG interrupt for hotplug detection. Other platforms retain the original PLUG + HPD_LOST scheme with unchanged deglitch values. Move the HPD deglitch configuration into analogix_dp_reset() so that platform-specific values are set alongside the existing register defaults in a single location. Update the threaded IRQ handler to check the corresponding interrupt flag based on platform type. Signed-off-by: Damon Ding Tested-by: Heiko Stuebner --- Changes in v2: - Move ANALOGIX_DP_HPD_DEGLITCH_L/ANALOGIX_DP_HPD_DEGLITCH_H configs to analogix_dp_reset(). Changes in v3: - Modify the commit msg. - Replace macro HPD_IRQ with HPD_IRQ_ALL. --- .../drm/bridge/analogix/analogix_dp_core.c | 9 ++++++-- .../gpu/drm/bridge/analogix/analogix_dp_reg.c | 22 ++++++++++++++++--- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/g= pu/drm/bridge/analogix/analogix_dp_core.c index f88e3263ba0e..287fc16125ef 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c @@ -714,13 +714,18 @@ static irqreturn_t analogix_dp_irq_thread(int irq, vo= id *arg) { struct analogix_dp_device *dp =3D arg; u32 irq_type; + bool hpd_detected; =20 irq_type =3D analogix_dp_get_irq_type(dp); if (irq_type) analogix_dp_clear_hotplug_interrupts(dp, irq_type); =20 - if (irq_type & DP_IRQ_TYPE_HP_CABLE_IN || - irq_type & DP_IRQ_TYPE_HP_CABLE_OUT) { + if (!dp->hpd_gpiod && analogix_dp_is_rockchip(dp->plat_data->dev_type)) + hpd_detected =3D irq_type & DP_IRQ_TYPE_HP_CHANGE; + else + hpd_detected =3D (irq_type & DP_IRQ_TYPE_HP_CABLE_IN) || + (irq_type & DP_IRQ_TYPE_HP_CABLE_OUT); + if (hpd_detected) { dev_dbg(dp->dev, "Detected cable status changed!\n"); if (dp->drm_dev) drm_helper_hpd_irq_event(dp->drm_dev); diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c b/drivers/gp= u/drm/bridge/analogix/analogix_dp_reg.c index 0f1406e4a5d3..025da25463a8 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c @@ -160,8 +160,13 @@ void analogix_dp_reset(struct analogix_dp_device *dp) writel(0x0, dp->reg_base + ANALOGIX_DP_PKT_SEND_CTL); writel(0x0, dp->reg_base + ANALOGIX_DP_HDCP_CTL); =20 - writel(0x5e, dp->reg_base + ANALOGIX_DP_HPD_DEGLITCH_L); - writel(0x1a, dp->reg_base + ANALOGIX_DP_HPD_DEGLITCH_H); + if (analogix_dp_is_rockchip(dp->plat_data->dev_type)) { + writel(0x80, dp->reg_base + ANALOGIX_DP_HPD_DEGLITCH_L); + writel(0xbb, dp->reg_base + ANALOGIX_DP_HPD_DEGLITCH_H); + } else { + writel(0x5e, dp->reg_base + ANALOGIX_DP_HPD_DEGLITCH_L); + writel(0x1a, dp->reg_base + ANALOGIX_DP_HPD_DEGLITCH_H); + } =20 writel(0x10, dp->reg_base + ANALOGIX_DP_LINK_DEBUG_CTL); =20 @@ -188,7 +193,18 @@ void analogix_dp_config_interrupt(struct analogix_dp_d= evice *dp) writel(0, dp->reg_base + ANALOGIX_DP_COMMON_INT_MASK_2); writel(0, dp->reg_base + ANALOGIX_DP_COMMON_INT_MASK_3); =20 - analogix_dp_unmute_hpd_interrupt(dp, HPD_IRQ_ALL); + /* + * Either HOTPLUG_CHG interrupt or PLUG + HPD_LOST interrupt + * pair can be used to implement hotplug detection. + * + * On Rockchip platforms, configuring HPD deglitch to 2ms and + * using HOTPLUG_CHG interrupt for hotplug detection is proven + * as a better solution via engineering verification. + */ + if (analogix_dp_is_rockchip(dp->plat_data->dev_type)) + analogix_dp_unmute_hpd_interrupt(dp, DP_IRQ_TYPE_HP_CHANGE); + else + analogix_dp_unmute_hpd_interrupt(dp, HPD_IRQ_ALL); } =20 /* --=20 2.34.1 From nobody Fri Oct 2 06:58:29 2026 Received: from mail-m118115.qiye.163.com (mail-m118115.qiye.163.com [115.236.118.115]) (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 3D93C1CD1E4; Mon, 28 Sep 2026 08:20:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=115.236.118.115 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790583631; cv=none; b=RwAuZQq4d5Wp7e4kRd/60iChyKIarXBxPbXA6aYpBtzAprFzyBzcPSPTzwqXKSvAsDD0lkWAM4CPgIG96X3KERQ/+fboUW1kBdHUUYacXUcFYZtvA7UsqWZ9Cglit2DoVzOWPBkF/ieQ+gQ68OYfSszKJQBeQF/GXLO9re/16pY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790583631; c=relaxed/simple; bh=Onk2rOCXQ34u1S02z8So8MSRT4/XaohMPzuJ1EoxRu8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=SwQqLbR87rT7skEH9xx27YGG8AberBPuaqt31H/SsThIf266voGdqJhnCPOxsa8NKmbs6QQAV/IIFdHmNhAso4fWr3cnEtW2skET8O20QR6OwBs2sn4viCEijCMWygMYIUk8K8jRcm6WBmgWWyaSfna68RC9/6pDr+WOeWxTBOc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com; spf=pass smtp.mailfrom=rock-chips.com; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b=f0+87VmQ; arc=none smtp.client-ip=115.236.118.115 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b="f0+87VmQ" Received: from zyb-HP-ProDesk-680-G2-MT.. (unknown [61.154.14.86]) by smtp.qiye.163.com (Hmail) with ESMTP id 4f5398e91; Mon, 28 Sep 2026 16:15:11 +0800 (GMT+08:00) From: Damon Ding To: Andrzej Hajda , Neil Armstrong , Robert Foss , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jingoo Han , Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Peter Griffin , Alim Akhtar , Heiko Stuebner Cc: Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Dmitry Baryshkov , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-rockchip@lists.infradead.org, Damon Ding Subject: [PATCH v3 08/14] drm/bridge: analogix_dp: Skip native HPD interrupt ops for GPIO HPD Date: Mon, 28 Sep 2026 16:14:12 +0800 Message-Id: <20260928081418.3605775-9-damon.ding@rock-chips.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260928081418.3605775-1-damon.ding@rock-chips.com> References: <20260928081418.3605775-1-damon.ding@rock-chips.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-HM-Tid: 0aa0e7150ca603a8kunm323e2b5437cf55 X-HM-MType: 1 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFITzdXWRgWCB1ZQUpXWS1ZQUlXWQ8JGhUIEh9ZQVkaSx5IVhpCTRoZTkoYHxhOGFYVFA kWGhdVEwETFhoSFyQUDg9ZV1kYEgtZQVlNSlVKTk9VSk9VQ01ZV1kWGg8SFR0UWUFZT0tIVUpLSU JDQ0xVSktLVUtZBg++ DKIM-Signature: a=rsa-sha256; b=f0+87VmQF9vupTYEYe3Z9akN8VbwB/H9oLpDOeVnAxWzLMKNOTmQ2NkVT7t1pJ0EpY/7ObNfwNb03mamfbpr93Mz88etlIP8X1Nu3Pn8iAc6/bs1lsONgnHQ8kWDEP5QZDsosZSeNDqmbWWYweNesbGkqJLo2qeN5LythSscOCc=; s=default; c=relaxed/relaxed; d=rock-chips.com; v=1; bh=BXZikg/Y4ph69/6GHaJwE7vnl2yUAaYiLUfJw+87QhI=; h=date:mime-version:subject:message-id:from; Content-Type: text/plain; charset="utf-8" GPIO HPD does not rely on DP controller internal native HPD interrupts. Skip native HPD register manipulations to avoid irrelevant operations. Move the hpd_gpiod guard to its caller so the helper operates purely on the given bitmask, and mute all native HPD interrupts for GPIO mode. Signed-off-by: Damon Ding Tested-by: Heiko Stuebner --- Changes in v2: - Adapt to the newly added IRQF_ONESHOT related commit and expand the commit msg. Changes in v3: - Reorganize the branch layout for hpd_gpiod check. - Simplify the commit msg. --- drivers/gpu/drm/bridge/analogix/analogix_dp_core.c | 2 +- drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/g= pu/drm/bridge/analogix/analogix_dp_core.c index 287fc16125ef..b92d28546192 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c @@ -717,7 +717,7 @@ static irqreturn_t analogix_dp_irq_thread(int irq, void= *arg) bool hpd_detected; =20 irq_type =3D analogix_dp_get_irq_type(dp); - if (irq_type) + if (!dp->hpd_gpiod && irq_type) analogix_dp_clear_hotplug_interrupts(dp, irq_type); =20 if (!dp->hpd_gpiod && analogix_dp_is_rockchip(dp->plat_data->dev_type)) diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c b/drivers/gp= u/drm/bridge/analogix/analogix_dp_reg.c index 025da25463a8..af5e5a8ec88d 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c @@ -193,6 +193,11 @@ void analogix_dp_config_interrupt(struct analogix_dp_d= evice *dp) writel(0, dp->reg_base + ANALOGIX_DP_COMMON_INT_MASK_2); writel(0, dp->reg_base + ANALOGIX_DP_COMMON_INT_MASK_3); =20 + if (dp->hpd_gpiod) { + analogix_dp_mute_hpd_interrupt(dp, HPD_IRQ_ALL); + return; + } + /* * Either HOTPLUG_CHG interrupt or PLUG + HPD_LOST interrupt * pair can be used to implement hotplug detection. @@ -415,7 +420,7 @@ void analogix_dp_clear_hotplug_interrupts(struct analog= ix_dp_device *dp, u32 irq { u32 reg; =20 - if (dp->hpd_gpiod || !irq_type) + if (!irq_type) return; =20 reg =3D analogix_dp_irq_type_to_common_int_sta4(irq_type); --=20 2.34.1 From nobody Fri Oct 2 06:58:29 2026 Received: from mail-m32108.qiye.163.com (mail-m32108.qiye.163.com [220.197.32.108]) (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 B59A4471268; Mon, 28 Sep 2026 08:20:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=220.197.32.108 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790583638; cv=none; b=uuYhNC6ai8d75Uhq9km4gC122xQbV0vwshxBair5HB3D7kHbFDh5ay6lCHVITPRqkjasSoeMZ24FuOXBjPagwHBE/XszYhxhskLMuCtTtyVM7ehkScwY/aT73bKoVyVE040C2cb+fniqc6xb+fuwhaAZ1tid/nxd4wiRSNgiNHI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790583638; c=relaxed/simple; bh=7494V5Z64wNDTN9W3AWBrDv1Gn+fLADTbuWDlAVShc0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=I9YDn/pkaFNK7c2ymAFXNnod8qHc0ZC6e9UnuxPBevpkJlSzl6uPAoBGV+RdyHw+NIG7CddQzqkwP928+FJ5XnnFpDJOukj5nNq6B3roJZEqUCFktkO4gNZRLC9UOBtOgC7MUz6/vyg7bA3KmKqG1WgT9J43SPmmNGECGDlStuA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com; spf=pass smtp.mailfrom=rock-chips.com; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b=cq1J3ON0; arc=none smtp.client-ip=220.197.32.108 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b="cq1J3ON0" Received: from zyb-HP-ProDesk-680-G2-MT.. (unknown [61.154.14.86]) by smtp.qiye.163.com (Hmail) with ESMTP id 4f5398e98; Mon, 28 Sep 2026 16:15:12 +0800 (GMT+08:00) From: Damon Ding To: Andrzej Hajda , Neil Armstrong , Robert Foss , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jingoo Han , Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Peter Griffin , Alim Akhtar , Heiko Stuebner Cc: Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Dmitry Baryshkov , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-rockchip@lists.infradead.org, Damon Ding Subject: [PATCH v3 09/14] drm/bridge: analogix_dp: Move IRQ enable/disable to bind/unbind Date: Mon, 28 Sep 2026 16:14:13 +0800 Message-Id: <20260928081418.3605775-10-damon.ding@rock-chips.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260928081418.3605775-1-damon.ding@rock-chips.com> References: <20260928081418.3605775-1-damon.ding@rock-chips.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-HM-Tid: 0aa0e71511ae03a8kunm323e2b5437cf5f X-HM-MType: 1 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFITzdXWRgWCB1ZQUpXWS1ZQUlXWQ8JGhUIEh9ZQVkZHk9JVklJT09KGR0YSx5DGVYVFA kWGhdVEwETFhoSFyQUDg9ZV1kYEgtZQVlNSlVKTk9VSk9VQ01ZV1kWGg8SFR0UWUFZT0tIVUpLSU 9PT0hVSktLVUpCS0tZBg++ DKIM-Signature: a=rsa-sha256; b=cq1J3ON0w2jXTb6eUGkXRxB5eKA2oZB6WI7TiCqF7FOgHPi354Va2LVOINBJW6NqZjw3DZ456uKwQhxCS0yFuN5xl/ZApPKGU9UXycRPETLXWrWpiLLAPKDct3kfifQdTKorK5B/TC0gfMOA8CSsEDOghhJSBnBs98VFGk8swxI=; s=default; c=relaxed/relaxed; d=rock-chips.com; v=1; bh=D/lHAE8K+D//L4haZOWeiYaNkQTqRHgCli2IR0i6wc4=; h=date:mime-version:subject:message-id:from; Content-Type: text/plain; charset="utf-8" Move enable_irq()/disable_irq() from bridge enable/disable handlers into analogix_dp_bind()/analogix_dp_unbind(). This keeps the IRQ active throughout the device lifecycle rather than only during display activity, which is a prerequisite for supporting HPD detection while the display pipeline is inactive. This is safe because the HPD interrupt sources are now managed explicitly: - Native HPD interrupt generation depends on the controller's power domain and clock. When runtime PM has suspended the device, the controller cannot produce interrupts, so the hardirq is never entered on an unpowered device. - For GPIO HPD mode, the native HPD interrupts are muted in analogix_dp_config_interrupt(), and the hardirq reads only the GPIO line via gpiod_get_value(), which is safe while the controller is suspended. Signed-off-by: Damon Ding Tested-by: Heiko Stuebner --- Changes in v3: - Move this patch after mute/unmute related modification and detail the commit msg. --- drivers/gpu/drm/bridge/analogix/analogix_dp_core.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/g= pu/drm/bridge/analogix/analogix_dp_core.c index b92d28546192..addd319719de 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c @@ -1018,7 +1018,6 @@ static int analogix_dp_set_bridge(struct analogix_dp_= device *dp) goto out_dp_init; } =20 - enable_irq(dp->irq); return 0; =20 out_dp_init: @@ -1160,8 +1159,6 @@ static void analogix_dp_bridge_disable(struct drm_bri= dge *bridge) if (dp->dpms_mode !=3D DRM_MODE_DPMS_ON) return; =20 - disable_irq(dp->irq); - analogix_dp_set_analog_power_down(dp, POWER_ALL, 1); =20 pm_runtime_put_sync(dp->dev); @@ -1574,6 +1571,8 @@ int analogix_dp_bind(struct analogix_dp_device *dp, s= truct drm_device *drm_dev) goto err_unregister_aux; } =20 + enable_irq(dp->irq); + return 0; =20 err_unregister_aux: @@ -1585,6 +1584,7 @@ EXPORT_SYMBOL_GPL(analogix_dp_bind); =20 void analogix_dp_unbind(struct analogix_dp_device *dp) { + disable_irq(dp->irq); drm_dp_aux_unregister(&dp->aux); } EXPORT_SYMBOL_GPL(analogix_dp_unbind); --=20 2.34.1 From nobody Fri Oct 2 06:58:29 2026 Received: from mail-m1973178.qiye.163.com (mail-m1973178.qiye.163.com [220.197.31.78]) (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 23E4B47126A; Mon, 28 Sep 2026 08:20:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=220.197.31.78 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790583644; cv=none; b=p5sbP5cW9c96LSo3sD8c11aqBoRAfZ+K/bNmziJ50XDjnDkRFaiP+MauvOY2u6n+0kHtHHxc91nk6cVyrsV6m+bCeAlUxMxUzzOAA6C3rg1if1v4sojVQotdFx2RrqqcyUIu0M0fhhgKGX9MuE7di7Am5LiQ6qLlIxWOnG6GxsM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790583644; c=relaxed/simple; bh=O+G1PsdrzcTL6zd1t7UY614jzYi/X+9Ypvjtk/iKbPU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=R4EO4EI5SK6YcSwmv1CGJ0/Myh2YE8PvjiJ0h3h82v7ohFllZtMSm3ovaMGA4pmiDmE+/AdwkNpG+bptmxNFYRG3opIz45FUGKj1JCPsSHvxI/1U8r5Ff0I1/1lbin/4TRmtF24NbgVc0X/U2b2uuB2M8Ga1P2y2vsbfmaZZNaE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com; spf=pass smtp.mailfrom=rock-chips.com; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b=FHR468bO; arc=none smtp.client-ip=220.197.31.78 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b="FHR468bO" Received: from zyb-HP-ProDesk-680-G2-MT.. (unknown [61.154.14.86]) by smtp.qiye.163.com (Hmail) with ESMTP id 4f5398ea3; Mon, 28 Sep 2026 16:15:14 +0800 (GMT+08:00) From: Damon Ding To: Andrzej Hajda , Neil Armstrong , Robert Foss , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jingoo Han , Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Peter Griffin , Alim Akhtar , Heiko Stuebner Cc: Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Dmitry Baryshkov , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-rockchip@lists.infradead.org, Damon Ding Subject: [PATCH v3 10/14] drm/bridge: analogix_dp: Manage pm runtime and IRQ for native HPD pin detection Date: Mon, 28 Sep 2026 16:14:14 +0800 Message-Id: <20260928081418.3605775-11-damon.ding@rock-chips.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260928081418.3605775-1-damon.ding@rock-chips.com> References: <20260928081418.3605775-1-damon.ding@rock-chips.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-HM-Tid: 0aa0e715167803a8kunm323e2b5437cf71 X-HM-MType: 1 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFITzdXWRgWCB1ZQUpXWS1ZQUlXWQ8JGhUIEh9ZQVkZSEoeVk5DS09JGRlIGB1MH1YVFA kWGhdVEwETFhoSFyQUDg9ZV1kYEgtZQVlNSlVKTk9VSk9VQ01ZV1kWGg8SFR0UWUFZT0tIVUpLSU 9PT0hVSktLVUpCS0tZBg++ DKIM-Signature: a=rsa-sha256; b=FHR468bOgqbhhO89sW6plrUIBNGprK8yYsnbhwl/HwN66rnW4hGl8VtzxBx68WybFuSZzy8j3qDfROdZCxkvRQ6vAzV8f/oAq+aB4t0IwrwwrfY+6QjEQaNJ508ExGLqC6LpAn4qYVRjMuO/H56CpbpVCrtGHnvHBXYvQ1Gt82w=; s=default; c=relaxed/relaxed; d=rock-chips.com; v=1; bh=QLzkxeakjSh54tUqTZOT4TJ34W2N82hCyBquIMOGQ6g=; h=date:mime-version:subject:message-id:from; Content-Type: text/plain; charset="utf-8" On Rockchip platforms, the Analogix DP native HPD pin IRQ requires the DP controller to remain powered and clocked to generate plug/unplug interrupts. Without a runtime PM reference, the controller suspends when the display pipeline is inactive, disabling HPD detection. Acquire a runtime PM reference in analogix_dp_bind() and release it in analogix_dp_unbind() for native HPD pin mode. This keeps the controller alive throughout the device lifecycle for continuous hotplug detection. Persistent power is only necessary for native HPD pin mode. It is not required for force-HPD or GPIO HPD modes, where hotplug detection does not depend on the DP controller's internal interrupt logic. Add helper analogix_dp_require_pm_for_hpd_irq() to identify Rockchip native HPD pin configurations (non-GPIO, non-force-HPD). Signed-off-by: Damon Ding Tested-by: Heiko Stuebner --- Changes in v2: - Split IRQ enable/disable logic, handle native HPD pin and GPIO/force-HPD modes separately to avoid unbalanced enable_irq() calls.(Sashiko) Changes in v3: - Modify the commit msg according to the previous commit for moving IRQ enabling/disabling. --- .../gpu/drm/bridge/analogix/analogix_dp_core.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/g= pu/drm/bridge/analogix/analogix_dp_core.c index addd319719de..38857508d939 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c @@ -39,6 +39,12 @@ =20 static const bool verify_fast_training; =20 +static bool analogix_dp_require_pm_for_hpd_irq(struct analogix_dp_device *= dp) +{ + return analogix_dp_is_rockchip(dp->plat_data->dev_type) && !dp->hpd_gpiod= && + !dp->force_hpd; +} + static void analogix_dp_init_dp(struct analogix_dp_device *dp) { analogix_dp_reset(dp); @@ -1571,6 +1577,12 @@ int analogix_dp_bind(struct analogix_dp_device *dp, = struct drm_device *drm_dev) goto err_unregister_aux; } =20 + if (analogix_dp_require_pm_for_hpd_irq(dp)) { + ret =3D pm_runtime_resume_and_get(dp->dev); + if (ret) + goto err_unregister_aux; + } + enable_irq(dp->irq); =20 return 0; @@ -1585,6 +1597,10 @@ EXPORT_SYMBOL_GPL(analogix_dp_bind); void analogix_dp_unbind(struct analogix_dp_device *dp) { disable_irq(dp->irq); + + if (analogix_dp_require_pm_for_hpd_irq(dp)) + pm_runtime_put_sync(dp->dev); + drm_dp_aux_unregister(&dp->aux); } EXPORT_SYMBOL_GPL(analogix_dp_unbind); --=20 2.34.1 From nobody Fri Oct 2 06:58:29 2026 Received: from mail-m49239.qiye.163.com (mail-m49239.qiye.163.com [45.254.49.239]) (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 EE9C748986D; Mon, 28 Sep 2026 08:50:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.254.49.239 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790585456; cv=none; b=KIq4v1lsUbfEAcIFLvdqTk9kRZqVj4ErmqRohtEf/V4zxZ91VEWnFldDro6XDRnF4KSWgfzISTGUwOsRhfTc8JhdbwjYojcEZIyrE6aG6xftBXaQkJF4XP5+9v8ljfNOanxn5qGKmjutnI448qC/XPh2x2szsq57+7hjBlAqLqc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790585456; c=relaxed/simple; bh=oo20zR64edegC3SG3BdC/JJ3ioFPI6co7ckcrZks2qY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=jL24GYkm7jg9+zyj0OF1nhfZnnoEUprmb2+6Qhscf2hrbm050w1KNP17ytsXAixs8KxF22Lr0LlXPTxOyr0l7wmsn5Q072TcSf0yxenOYy984DxupMxfdJwvTh2jPiTF63r3pS25VVkYiofl1OAcPCC1F+BtySmW/EfGkZ3jYbo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com; spf=pass smtp.mailfrom=rock-chips.com; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b=i9W2wGYK; arc=none smtp.client-ip=45.254.49.239 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=rock-chips.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=rock-chips.com header.i=@rock-chips.com header.b="i9W2wGYK" Received: from zyb-HP-ProDesk-680-G2-MT.. (unknown [61.154.14.86]) by smtp.qiye.163.com (Hmail) with ESMTP id 4f5398eae; Mon, 28 Sep 2026 16:15:15 +0800 (GMT+08:00) From: Damon Ding To: Andrzej Hajda , Neil Armstrong , Robert Foss , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jingoo Han , Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Peter Griffin , Alim Akhtar , Heiko Stuebner Cc: Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Dmitry Baryshkov , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-rockchip@lists.infradead.org, Damon Ding Subject: [PATCH v3 11/14] drm/bridge: analogix_dp: Use bridge->next_bridge instead of plat_data field Date: Mon, 28 Sep 2026 16:14:15 +0800 Message-Id: <20260928081418.3605775-12-damon.ding@rock-chips.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260928081418.3605775-1-damon.ding@rock-chips.com> References: <20260928081418.3605775-1-damon.ding@rock-chips.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-HM-Tid: 0aa0e7151b5c03a8kunm323e2b5437cf7b X-HM-MType: 1 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFITzdXWRgWCB1ZQUpXWS1ZQUlXWQ8JGhUIEh9ZQVkZSE8aVhgaSR1PGUlCSEJCSFYVFA kWGhdVEwETFhoSFyQUDg9ZV1kYEgtZQVlNSlVKTk9VSk9VQ01ZV1kWGg8SFR0UWUFZT0tIVUpLSE pOTE5VSktLVUpCS0tZBg++ DKIM-Signature: a=rsa-sha256; b=i9W2wGYKXGV2T4isZVlWgnjW8rWtA678+S3YvACjHBDDYhjS6UrRHGQSlYLQJnX6ahGJWCsKslg21Q9bxQLm779HpsVH5oeaFGi9/ItpNoROmSlXGDBPcNSuL1cwZzs3apoDp1Yzzix5u8tRvMnXcBj+tk5qPdcnwhyfJdBLmQE=; s=default; c=relaxed/relaxed; d=rock-chips.com; v=1; bh=j11Dmmvwc4sMN9cMfiaTCR0rnZ/rVwqt5MGQa88GIlk=; h=date:mime-version:subject:message-id:from; Content-Type: text/plain; charset="utf-8" The DRM bridge core provides a standard next_bridge field in struct drm_bridge for chaining downstream bridges. Use dp->bridge.next_bridge consistently inside the analogix_dp driver and drop the separate dp->plat_data->next_bridge field. The next bridge is now resolved in analogix_dp_aux_done_probing(): for Exynos platforms with legacy display-timings a display mode bridge is created and used directly, skipping the endpoint lookup; otherwise the remote endpoint bridge (panel or bridge) is looked up via of_drm_get_bridge_by_endpoint(). The reference returned by of_drm_get_bridge_by_endpoint() is transferred to bridge->next_bridge, and an explicit reference is taken for the devm-managed display mode bridge; the bridge core automatically puts bridge->next_bridge at bridge destroy time, pairing with both. Suggested-by: Heiko Stuebner Link: https://lore.kernel.org/all/5609825.iZASKD2KPV@diego/ Signed-off-by: Damon Ding Tested-by: Heiko Stuebner --- .../drm/bridge/analogix/analogix_dp_core.c | 44 +++++++++---------- drivers/gpu/drm/exynos/exynos_dp.c | 15 +------ include/drm/bridge/analogix_dp.h | 1 - 3 files changed, 23 insertions(+), 37 deletions(-) diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c b/drivers/g= pu/drm/bridge/analogix/analogix_dp_core.c index 38857508d939..853b6a6a7fe4 100644 --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c @@ -21,6 +21,7 @@ #include =20 #include +#include #include #include #include @@ -32,6 +33,8 @@ #include #include =20 +#include