Merge tag 'drm-intel-next-2021-05-19-1' of git://anongit.freedesktop.org/drm/drm...
[linux-2.6-microblaze.git] / drivers / gpu / drm / i915 / display / intel_dp_mst.c
index 2daa3f6..332d2f9 100644 (file)
 #include "intel_atomic.h"
 #include "intel_audio.h"
 #include "intel_connector.h"
+#include "intel_crtc.h"
 #include "intel_ddi.h"
+#include "intel_de.h"
 #include "intel_display_types.h"
-#include "intel_hotplug.h"
 #include "intel_dp.h"
+#include "intel_dp_hdcp.h"
 #include "intel_dp_mst.h"
 #include "intel_dpio_phy.h"
 #include "intel_hdcp.h"
+#include "intel_hotplug.h"
 #include "skl_scaler.h"
 
 static int intel_dp_mst_compute_link_config(struct intel_encoder *encoder,
@@ -70,7 +73,8 @@ static int intel_dp_mst_compute_link_config(struct intel_encoder *encoder,
                slots = drm_dp_atomic_find_vcpi_slots(state, &intel_dp->mst_mgr,
                                                      connector->port,
                                                      crtc_state->pbn,
-                                                     drm_dp_get_vc_payload_bw(crtc_state->port_clock,
+                                                     drm_dp_get_vc_payload_bw(&intel_dp->mst_mgr,
+                                                                              crtc_state->port_clock,
                                                                               crtc_state->lane_count));
                if (slots == -EDEADLK)
                        return slots;
@@ -154,7 +158,7 @@ static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
        pipe_config->limited_color_range =
                intel_dp_limited_color_range(pipe_config, conn_state);
 
-       if (IS_GEN9_LP(dev_priv))
+       if (IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv))
                pipe_config->lane_lat_optim_mask =
                        bxt_ddi_phy_calc_lane_lat_optim_mask(pipe_config->lane_count);
 
@@ -832,7 +836,7 @@ static struct drm_connector *intel_dp_add_mst_connector(struct drm_dp_mst_topolo
        intel_attach_broadcast_rgb_property(connector);
 
        if (DISPLAY_VER(dev_priv) <= 12) {
-               ret = intel_dp_init_hdcp(dig_port, intel_connector);
+               ret = intel_dp_hdcp_init(dig_port, intel_connector);
                if (ret)
                        drm_dbg_kms(&dev_priv->drm, "[%s:%d] HDCP MST init failed, skipping.\n",
                                    connector->name, connector->base.id);
@@ -941,6 +945,8 @@ intel_dp_mst_encoder_init(struct intel_digital_port *dig_port, int conn_base_id)
        struct intel_dp *intel_dp = &dig_port->dp;
        enum port port = dig_port->base.port;
        int ret;
+       int max_source_rate =
+               intel_dp->source_rates[intel_dp->num_source_rates - 1];
 
        if (!HAS_DP_MST(i915) || intel_dp_is_edp(intel_dp))
                return 0;
@@ -956,7 +962,10 @@ intel_dp_mst_encoder_init(struct intel_digital_port *dig_port, int conn_base_id)
        /* create encoders */
        intel_dp_create_fake_mst_encoders(dig_port);
        ret = drm_dp_mst_topology_mgr_init(&intel_dp->mst_mgr, &i915->drm,
-                                          &intel_dp->aux, 16, 3, conn_base_id);
+                                          &intel_dp->aux, 16, 3,
+                                          (u8)dig_port->max_lanes,
+                                          drm_dp_link_rate_to_bw_code(max_source_rate),
+                                          conn_base_id);
        if (ret)
                return ret;