Skip to content

Commit e60cff4

Browse files
committed
drm/i915/dp: Enable DP tunnel BW allocation mode
Detect DP tunnels and enable the BW allocation mode on them. Send a hotplug notification to userspace in response to a BW change. Reviewed-by: Uma Shankar <uma.shankar@intel.com> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Imre Deak <imre.deak@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20240220211841.448846-22-imre.deak@intel.com
1 parent a32f3a9 commit e60cff4

File tree

2 files changed

+28
-6
lines changed

2 files changed

+28
-6
lines changed

drivers/gpu/drm/i915/display/intel_display_driver.c

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#include "intel_dkl_phy.h"
3636
#include "intel_dmc.h"
3737
#include "intel_dp.h"
38+
#include "intel_dp_tunnel.h"
3839
#include "intel_dpll.h"
3940
#include "intel_dpll_mgr.h"
4041
#include "intel_fb.h"
@@ -434,10 +435,8 @@ int intel_display_driver_probe_nogem(struct drm_i915_private *i915)
434435

435436
for_each_pipe(i915, pipe) {
436437
ret = intel_crtc_init(i915, pipe);
437-
if (ret) {
438-
intel_mode_config_cleanup(i915);
439-
return ret;
440-
}
438+
if (ret)
439+
goto err_mode_config;
441440
}
442441

443442
intel_plane_possible_crtcs_init(i915);
@@ -457,6 +456,10 @@ int intel_display_driver_probe_nogem(struct drm_i915_private *i915)
457456
intel_vga_disable(i915);
458457
intel_setup_outputs(i915);
459458

459+
ret = intel_dp_tunnel_mgr_init(i915);
460+
if (ret)
461+
goto err_hdcp;
462+
460463
intel_display_driver_disable_user_access(i915);
461464

462465
drm_modeset_lock_all(dev);
@@ -475,6 +478,13 @@ int intel_display_driver_probe_nogem(struct drm_i915_private *i915)
475478
ilk_wm_sanitize(i915);
476479

477480
return 0;
481+
482+
err_hdcp:
483+
intel_hdcp_component_fini(i915);
484+
err_mode_config:
485+
intel_mode_config_cleanup(i915);
486+
487+
return ret;
478488
}
479489

480490
/* part #3: call after gem init */
@@ -598,6 +608,8 @@ void intel_display_driver_remove_noirq(struct drm_i915_private *i915)
598608

599609
intel_mode_config_cleanup(i915);
600610

611+
intel_dp_tunnel_mgr_cleanup(i915);
612+
601613
intel_overlay_cleanup(i915);
602614

603615
intel_gmbus_teardown(i915);

drivers/gpu/drm/i915/display/intel_dp.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5729,6 +5729,7 @@ intel_dp_detect(struct drm_connector *connector,
57295729
struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
57305730
struct intel_encoder *encoder = &dig_port->base;
57315731
enum drm_connector_status status;
5732+
int ret;
57325733

57335734
drm_dbg_kms(&dev_priv->drm, "[CONNECTOR:%d:%s]\n",
57345735
connector->base.id, connector->name);
@@ -5764,9 +5765,18 @@ intel_dp_detect(struct drm_connector *connector,
57645765
intel_dp->is_mst);
57655766
}
57665767

5768+
intel_dp_tunnel_disconnect(intel_dp);
5769+
57675770
goto out;
57685771
}
57695772

5773+
ret = intel_dp_tunnel_detect(intel_dp, ctx);
5774+
if (ret == -EDEADLK)
5775+
return ret;
5776+
5777+
if (ret == 1)
5778+
intel_connector->base.epoch_counter++;
5779+
57705780
intel_dp_detect_dsc_caps(intel_dp, intel_connector);
57715781

57725782
intel_dp_configure_mst(intel_dp);
@@ -5797,8 +5807,6 @@ intel_dp_detect(struct drm_connector *connector,
57975807
* with an IRQ_HPD, so force a link status check.
57985808
*/
57995809
if (!intel_dp_is_edp(intel_dp)) {
5800-
int ret;
5801-
58025810
ret = intel_dp_retrain_link(encoder, ctx);
58035811
if (ret)
58045812
return ret;
@@ -5938,6 +5946,8 @@ void intel_dp_encoder_flush_work(struct drm_encoder *encoder)
59385946

59395947
intel_dp_mst_encoder_cleanup(dig_port);
59405948

5949+
intel_dp_tunnel_destroy(intel_dp);
5950+
59415951
intel_pps_vdd_off_sync(intel_dp);
59425952

59435953
/*

0 commit comments

Comments
 (0)