summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorImre Deak <imre.deak@intel.com>2026-02-19 21:28:19 +0300
committerImre Deak <imre.deak@intel.com>2026-02-25 16:29:46 +0300
commitafe3f74716235f9c137e9850ee0027391b46b570 (patch)
tree1cdfd4847be0b5f9c20a6599ac88479ddeef870d
parent13665885b14d907ebd7527a19c90e530e86c6bf0 (diff)
downloadlinux-afe3f74716235f9c137e9850ee0027391b46b570.tar.xz
drm/i915/dp_tunnel: Don't update tunnel state during system resume
During system resume, restoring the pre-suspend display state must not fail. This requires preserving the sink capabilities from before suspend, including the available link bandwidth. If these capabilities are not preserved, the restore modeset may fail, either due to a missing sink capability or insufficient link bandwidth for the restored mode. When the sink is connected through a DP tunnel, prevent such capability changes by skipping tunnel state updates during resume. This also avoids updating the sink state via the tunnel while it is being resumed. Reviewed-by: Arun R Murthy <arun.r.murthy@intel.com> Signed-off-by: Imre Deak <imre.deak@intel.com> Link: https://patch.msgid.link/20260219182823.926702-2-imre.deak@intel.com
-rw-r--r--drivers/gpu/drm/i915/display/intel_dp_tunnel.c11
1 files changed, 6 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 83865c02d477..633706274c9c 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_tunnel.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_tunnel.c
@@ -150,11 +150,9 @@ static int allocate_initial_tunnel_bw_for_pipes(struct intel_dp *intel_dp, u8 pi
drm_dp_tunnel_name(intel_dp->tunnel),
encoder->base.base.id, encoder->base.name,
ERR_PTR(err));
-
- return err;
}
- return update_tunnel_state(intel_dp);
+ return err;
}
static int allocate_initial_tunnel_bw(struct intel_dp *intel_dp,
@@ -200,10 +198,13 @@ static int detect_new_tunnel(struct intel_dp *intel_dp, struct drm_modeset_acqui
}
ret = allocate_initial_tunnel_bw(intel_dp, ctx);
- if (ret < 0)
+ if (ret < 0) {
intel_dp_tunnel_destroy(intel_dp);
- return ret;
+ return ret;
+ }
+
+ return update_tunnel_state(intel_dp);
}
/**