From: Imre Deak <imre.deak@intel.com>
To: <intel-gfx@lists.freedesktop.org>, <intel-xe@lists.freedesktop.org>
Subject: [PATCH 5/5] drm/i915/dp_tunnel: Send BW change notification after tunnel creation
Date: Thu, 19 Feb 2026 20:28:23 +0200 [thread overview]
Message-ID: <20260219182823.926702-6-imre.deak@intel.com> (raw)
In-Reply-To: <20260219182823.926702-1-imre.deak@intel.com>
Detecting a bandwidth change for a sink connected through a DP tunnel
depends on updating the sink's DPRX link rate and lane count.
detect_new_tunnel() -> update_tunnel_state() updates the link
configuration only if the tunnel state changes. However, after the
tunnel is created and bandwidth allocation mode is enabled, the tunnel
state itself may remain unchanged.
Record the sink bandwidth before creating the tunnel and compare it to
the bandwidth after tunnel creation and enabling bandwidth allocation
mode, ensuring that any bandwidth change is detected and userspace is
notified accordingly.
Signed-off-by: Imre Deak <imre.deak@intel.com>
---
.../gpu/drm/i915/display/intel_dp_tunnel.c | 25 +++++++++++++++----
1 file changed, 20 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dp_tunnel.c b/drivers/gpu/drm/i915/display/intel_dp_tunnel.c
index 1c552a7091897..4b743387b15a6 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_tunnel.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_tunnel.c
@@ -62,7 +62,7 @@ static int get_current_link_bw(struct intel_dp *intel_dp)
return intel_dp_max_link_data_rate(intel_dp, rate, lane_count);
}
-static int __update_tunnel_state(struct intel_dp *intel_dp)
+static int __update_tunnel_state(struct intel_dp *intel_dp, bool force_sink_update)
{
struct intel_display *display = to_intel_display(intel_dp);
struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
@@ -79,8 +79,8 @@ static int __update_tunnel_state(struct intel_dp *intel_dp)
return ret;
}
- if (ret == 0 ||
- !drm_dp_tunnel_bw_alloc_is_enabled(intel_dp->tunnel))
+ if (!force_sink_update &&
+ (ret == 0 || !drm_dp_tunnel_bw_alloc_is_enabled(intel_dp->tunnel)))
return 0;
intel_dp_update_sink_caps(intel_dp);
@@ -124,7 +124,7 @@ static int update_tunnel_state(struct intel_dp *intel_dp)
old_bw = get_current_link_bw(intel_dp);
- err = __update_tunnel_state(intel_dp);
+ err = __update_tunnel_state(intel_dp, false);
if (err)
return err;
@@ -187,13 +187,24 @@ static int allocate_initial_tunnel_bw(struct intel_dp *intel_dp,
return allocate_initial_tunnel_bw_for_pipes(intel_dp, pipe_mask);
}
+/*
+ * Returns:
+ * - 0 in case of success - after any tunnel detected and added to @intel_dp
+ * - 1 in case of success - after a tunnel detected and added to @intel_dp,
+ * where the link BW via the tunnel changed in a way requiring a user
+ * notification
+ * - Negative error code if the tunnel detection failed
+ */
static int detect_new_tunnel(struct intel_dp *intel_dp, struct drm_modeset_acquire_ctx *ctx)
{
struct intel_display *display = to_intel_display(intel_dp);
struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
struct drm_dp_tunnel *tunnel;
+ int old_bw;
int ret;
+ old_bw = get_current_link_bw(intel_dp);
+
tunnel = drm_dp_tunnel_detect(display->dp_tunnel_mgr,
&intel_dp->aux);
if (IS_ERR(tunnel))
@@ -223,7 +234,11 @@ static int detect_new_tunnel(struct intel_dp *intel_dp, struct drm_modeset_acqui
return ret;
}
- return update_tunnel_state(intel_dp);
+ ret = __update_tunnel_state(intel_dp, true);
+ if (ret)
+ return ret;
+
+ return has_tunnel_bw_changed(intel_dp, old_bw) ? 1 : 0;
}
/**
--
2.49.1
next prev parent reply other threads:[~2026-02-19 18:29 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-19 18:28 [PATCH 0/5] drm/i915/dp_tunnel: Preparation for UHBR DP tunnels Imre Deak
2026-02-19 18:28 ` [PATCH 1/5] drm/i915/dp_tunnel: Don't update tunnel state during system resume Imre Deak
2026-02-23 15:54 ` Murthy, Arun R
2026-02-23 16:30 ` Imre Deak
2026-02-24 2:33 ` Murthy, Arun R
2026-02-24 7:49 ` Imre Deak
2026-02-24 12:55 ` Murthy, Arun R
2026-02-19 18:28 ` [PATCH 2/5] drm/i915/dp_tunnel: Simplify detection of link BW change Imre Deak
2026-02-23 16:02 ` Murthy, Arun R
2026-02-23 16:35 ` Imre Deak
2026-02-24 12:56 ` Murthy, Arun R
2026-02-19 18:28 ` [PATCH 3/5] drm/i915/dp_tunnel: Split update_tunnel_state() Imre Deak
2026-02-24 12:57 ` Murthy, Arun R
2026-02-19 18:28 ` [PATCH 4/5] drm/i915/dp_tunnel: Sanitize documentation of intel_dp_tunnel_detect() Imre Deak
2026-02-23 16:12 ` Murthy, Arun R
2026-02-23 16:45 ` Imre Deak
2026-02-24 2:36 ` Murthy, Arun R
2026-02-24 7:55 ` Imre Deak
2026-02-24 12:55 ` Murthy, Arun R
2026-02-19 18:28 ` Imre Deak [this message]
2026-02-24 12:58 ` [PATCH 5/5] drm/i915/dp_tunnel: Send BW change notification after tunnel creation Murthy, Arun R
2026-02-19 19:28 ` ✓ CI.KUnit: success for drm/i915/dp_tunnel: Preparation for UHBR DP tunnels Patchwork
2026-02-20 8:42 ` ✓ Xe.CI.BAT: " Patchwork
2026-02-20 13:42 ` ✗ Xe.CI.FULL: failure " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260219182823.926702-6-imre.deak@intel.com \
--to=imre.deak@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox