Add a function for checking source MST support. Drop intel_dp->can_mst
and use intel_dp->mst_mgr.cbs to indicate the same. It's the single
point of truth without additional state variables. In code, "source
support" is also self-documenting as opposed to the vague "can mst".
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20211006101618.22066-1-jani.nikula@intel.com
 #include <drm/drm_fourcc.h>
 
 #include "i915_debugfs.h"
+#include "intel_de.h"
 #include "intel_display_debugfs.h"
 #include "intel_display_power.h"
-#include "intel_de.h"
 #include "intel_display_types.h"
 #include "intel_dmc.h"
 #include "intel_dp.h"
+#include "intel_dp_mst.h"
 #include "intel_drrs.h"
 #include "intel_fbc.h"
 #include "intel_hdcp.h"
                        continue;
 
                dig_port = enc_to_dig_port(intel_encoder);
-               if (!dig_port->dp.can_mst)
+               if (!intel_dp_mst_source_support(&dig_port->dp))
                        continue;
 
                seq_printf(m, "MST Source Port [ENCODER:%d:%s]\n",
 
 
        struct intel_pps pps;
 
-       bool can_mst; /* this port supports mst */
        bool is_mst;
        int active_mst_links;
 
 
        struct drm_i915_private *i915 = dp_to_i915(intel_dp);
 
        return i915->params.enable_dp_mst &&
-               intel_dp->can_mst &&
+               intel_dp_mst_source_support(intel_dp) &&
                drm_dp_read_mst_cap(&intel_dp->aux, intel_dp->dpcd);
 }
 
        drm_dbg_kms(&i915->drm,
                    "[ENCODER:%d:%s] MST support: port: %s, sink: %s, modparam: %s\n",
                    encoder->base.base.id, encoder->base.name,
-                   yesno(intel_dp->can_mst), yesno(sink_can_mst),
+                   yesno(intel_dp_mst_source_support(intel_dp)), yesno(sink_can_mst),
                    yesno(i915->params.enable_dp_mst));
 
-       if (!intel_dp->can_mst)
+       if (!intel_dp_mst_source_support(intel_dp))
                return;
 
        intel_dp->is_mst = sink_can_mst &&
 
                intel_dp = enc_to_intel_dp(encoder);
 
-               if (!intel_dp->can_mst)
+               if (!intel_dp_mst_source_support(intel_dp))
                        continue;
 
                if (intel_dp->is_mst)
 
                intel_dp = enc_to_intel_dp(encoder);
 
-               if (!intel_dp->can_mst)
+               if (!intel_dp_mst_source_support(intel_dp))
                        continue;
 
                ret = drm_dp_mst_topology_mgr_resume(&intel_dp->mst_mgr,
 
                                           dig_port->max_lanes,
                                           max_source_rate,
                                           conn_base_id);
-       if (ret)
+       if (ret) {
+               intel_dp->mst_mgr.cbs = NULL;
                return ret;
-
-       intel_dp->can_mst = true;
+       }
 
        return 0;
 }
 
+bool intel_dp_mst_source_support(struct intel_dp *intel_dp)
+{
+       return intel_dp->mst_mgr.cbs;
+}
+
 void
 intel_dp_mst_encoder_cleanup(struct intel_digital_port *dig_port)
 {
        struct intel_dp *intel_dp = &dig_port->dp;
 
-       if (!intel_dp->can_mst)
+       if (!intel_dp_mst_source_support(intel_dp))
                return;
 
        drm_dp_mst_topology_mgr_destroy(&intel_dp->mst_mgr);
        /* encoders will get killed by normal cleanup */
+
+       intel_dp->mst_mgr.cbs = NULL;
 }
 
 bool intel_dp_mst_is_master_trans(const struct intel_crtc_state *crtc_state)
 
 
 #include <linux/types.h>
 
-struct intel_digital_port;
 struct intel_crtc_state;
+struct intel_digital_port;
+struct intel_dp;
 
 int intel_dp_mst_encoder_init(struct intel_digital_port *dig_port, int conn_id);
 void intel_dp_mst_encoder_cleanup(struct intel_digital_port *dig_port);
 int intel_dp_mst_encoder_active_links(struct intel_digital_port *dig_port);
 bool intel_dp_mst_is_master_trans(const struct intel_crtc_state *crtc_state);
 bool intel_dp_mst_is_slave_trans(const struct intel_crtc_state *crtc_state);
+bool intel_dp_mst_source_support(struct intel_dp *intel_dp);
 
 #endif /* __INTEL_DP_MST_H__ */