drm/i915/ddi: clarify intel_ddi_connector_get_hw_state() for DP MST
authorJani Nikula <jani.nikula@intel.com>
Mon, 25 Nov 2024 12:09:59 +0000 (14:09 +0200)
committerJani Nikula <jani.nikula@intel.com>
Tue, 26 Nov 2024 09:03:53 +0000 (11:03 +0200)
encoder->get_hw_state() returns false for DP MST, and currently always
interprets 128b/132b as MST. Therefore the DDI MST mode checks in
intel_ddi_connector_get_hw_state() are redundant.

Prepare for future, and handle 128b/132b SST and warn on 8b/10b MST.

Cc: Imre Deak <imre.deak@intel.com>
Reviewed-by: Imre Deak <imre.deak@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20241125120959.2366419-1-jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/display/intel_ddi.c

index e25b712bf03b8e4c3120d00160f62b283322ee14..7d37ddd9ad121b9e874c6e08ad98ef468b2bc0b5 100644 (file)
@@ -731,6 +731,7 @@ bool intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector)
        if (!wakeref)
                return false;
 
+       /* Note: This returns false for DP MST primary encoders. */
        if (!encoder->get_hw_state(encoder, &pipe)) {
                ret = false;
                goto out;
@@ -752,12 +753,14 @@ bool intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector)
        } else if (ddi_mode == TRANS_DDI_MODE_SELECT_DP_SST) {
                ret = type == DRM_MODE_CONNECTOR_eDP ||
                        type == DRM_MODE_CONNECTOR_DisplayPort;
-       } else if (ddi_mode == TRANS_DDI_MODE_SELECT_DP_MST ||
-                  (ddi_mode == TRANS_DDI_MODE_SELECT_FDI_OR_128B132B && HAS_DP20(display))) {
+       } else if (ddi_mode == TRANS_DDI_MODE_SELECT_FDI_OR_128B132B && HAS_DP20(display)) {
                /*
-                * If the transcoder is in MST state then connector isn't
-                * connected.
+                * encoder->get_hw_state() should have bailed out on MST. This
+                * must be SST and non-eDP.
                 */
+               ret = type == DRM_MODE_CONNECTOR_DisplayPort;
+       } else if (drm_WARN_ON(display->drm, ddi_mode == TRANS_DDI_MODE_SELECT_DP_MST)) {
+               /* encoder->get_hw_state() should have bailed out on MST. */
                ret = false;
        } else {
                ret = false;