On Mon, Nov 25, 2024 at 02:09:59PM +0200, Jani Nikula wrote:
> 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 <[email protected]>
> Signed-off-by: Jani Nikula <[email protected]>

Looks ok to me:
Reviewed-by: Imre Deak <[email protected]>

> ---
>  drivers/gpu/drm/i915/display/intel_ddi.c | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c 
> b/drivers/gpu/drm/i915/display/intel_ddi.c
> index e25b712bf03b..7d37ddd9ad12 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> @@ -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;
> -- 
> 2.39.5
> 

Reply via email to