Pass the maximum common lane count to intel_dp_link_caps_update() and
track it together with the supported link rates. This prepares for
converting all users of intel_dp_max_common_lane_count() to query the
value from the link caps module instead.

Signed-off-by: Imre Deak <[email protected]>
---
 drivers/gpu/drm/i915/display/intel_dp.c           | 14 +++++---------
 drivers/gpu/drm/i915/display/intel_dp_link_caps.c | 13 +++++++++----
 drivers/gpu/drm/i915/display/intel_dp_link_caps.h |  2 +-
 3 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c 
b/drivers/gpu/drm/i915/display/intel_dp.c
index 84640c8394534..2873b2df29f84 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -339,23 +339,19 @@ int intel_dp_max_source_lane_count(struct 
intel_digital_port *dig_port)
 
 /*
  * Theoretical max between source and sink.
- * Return %true if the max common lane count changed.
  */
-static bool intel_dp_set_max_common_lane_count(struct intel_dp *intel_dp)
+static int intel_dp_get_max_common_lane_count(struct intel_dp *intel_dp)
 {
        struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
        int source_max = intel_dp_max_source_lane_count(dig_port);
        int sink_max = intel_dp->max_sink_lane_count;
        int lane_max = intel_tc_port_max_lane_count(dig_port);
        int lttpr_max = 
drm_dp_lttpr_max_lane_count(intel_dp->lttpr_common_caps);
-       int old_max_common_lane_count = intel_dp->max_common_lane_count;
 
        if (lttpr_max)
                sink_max = min(sink_max, lttpr_max);
 
-       intel_dp->max_common_lane_count = min3(source_max, sink_max, lane_max);
-
-       return intel_dp->max_common_lane_count != old_max_common_lane_count;
+       return min3(source_max, sink_max, lane_max);
 }
 
 int intel_dp_max_common_lane_count(struct intel_dp *intel_dp)
@@ -705,12 +701,12 @@ static bool intel_dp_set_common_link_params(struct 
intel_dp *intel_dp)
        int common_rates[DP_MAX_SUPPORTED_RATES];
        bool params_changed = false;
 
-       if (intel_dp_set_max_common_lane_count(intel_dp))
-               params_changed = true;
+       intel_dp->max_common_lane_count = 
intel_dp_get_max_common_lane_count(intel_dp);
 
        intel_dp_get_common_rates(intel_dp, common_rates, &num_common_rates);
        if (intel_dp_link_caps_update(intel_dp,
-                                     common_rates, num_common_rates))
+                                     common_rates, num_common_rates,
+                                     
intel_dp_get_max_common_lane_count(intel_dp)))
                params_changed = true;
 
        return params_changed;
diff --git a/drivers/gpu/drm/i915/display/intel_dp_link_caps.c 
b/drivers/gpu/drm/i915/display/intel_dp_link_caps.c
index e28f7308283ce..bb727bcf4de18 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_link_caps.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_link_caps.c
@@ -25,6 +25,7 @@ struct intel_dp_link_caps {
        /* Rate, lane count caps common to source and sink. */
        int num_rates;
        int rates[DP_MAX_SUPPORTED_RATES];
+       int max_lane_count;
 
        /* common rate,lane_count configs in bw order */
        int num_configs;
@@ -169,7 +170,7 @@ static int link_config_cmp_by_bw(const void *a, const void 
*b, const void *p)
 
 /* Return %true if the supported link parameters have changed. */
 bool intel_dp_link_caps_update(struct intel_dp *intel_dp,
-                              const int *rates, int num_rates)
+                              const int *rates, int num_rates, int 
max_lane_count)
 {
        struct intel_dp_link_caps *link_caps = intel_dp->link.caps;
        struct intel_display *display = to_intel_display(intel_dp);
@@ -179,13 +180,13 @@ bool intel_dp_link_caps_update(struct intel_dp *intel_dp,
        int i;
        int j;
 
-       if (drm_WARN_ON(display->drm, 
!is_power_of_2(intel_dp_max_common_lane_count(intel_dp))))
+       if (drm_WARN_ON(display->drm, !is_power_of_2(max_lane_count)))
                return false;
 
        if (drm_WARN_ON(display->drm, num_rates > ARRAY_SIZE(link_caps->rates)))
                return false;
 
-       num_common_lane_configs = 
ilog2(intel_dp_max_common_lane_count(intel_dp)) + 1;
+       num_common_lane_configs = ilog2(max_lane_count) + 1;
 
        if (drm_WARN_ON(display->drm, num_rates * num_common_lane_configs >
                                    ARRAY_SIZE(link_caps->configs)))
@@ -197,8 +198,13 @@ bool intel_dp_link_caps_update(struct intel_dp *intel_dp,
            memcmp(rates, link_caps->rates, num_rates * sizeof(rates[0])))
                link_params_changed = true;
 
+       if (max_lane_count != link_caps->max_lane_count)
+               link_params_changed = true;
+
        memcpy(link_caps->rates, rates, num_rates * sizeof(rates[0]));
        link_caps->num_rates = num_rates;
+       link_caps->max_lane_count = max_lane_count;
+
        link_caps->num_configs = num_rates * num_common_lane_configs;
 
        lc = &link_caps->configs[0];
@@ -216,7 +222,6 @@ bool intel_dp_link_caps_update(struct intel_dp *intel_dp,
               link_config_cmp_by_bw, NULL,
               intel_dp);
 
-       /* TODO: Also detect a change in the max lane count. */
        return link_params_changed;
 }
 
diff --git a/drivers/gpu/drm/i915/display/intel_dp_link_caps.h 
b/drivers/gpu/drm/i915/display/intel_dp_link_caps.h
index 7d7d3d11ba3fe..e2f53eb167a8e 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_link_caps.h
+++ b/drivers/gpu/drm/i915/display/intel_dp_link_caps.h
@@ -27,7 +27,7 @@ int intel_dp_link_config_index(struct intel_dp *intel_dp, int 
link_rate, int lan
 void intel_dp_link_config_get(struct intel_dp *intel_dp, int idx, int 
*link_rate, int *lane_count);
 
 bool intel_dp_link_caps_update(struct intel_dp *intel_dp,
-                              const int *rates, int num_rates);
+                              const int *rates, int num_rates, int 
max_lane_count);
 
 void intel_dp_link_caps_debugfs_add(struct intel_connector *connector);
 
-- 
2.49.1

Reply via email to