[Intel-gfx] [PATCH] drm/i915: Check encoder type in enc_to_dig_port()

Imre Deak imre.deak at intel.com
Fri Feb 24 15:34:17 UTC 2017


On Fri, Feb 24, 2017 at 04:18:45PM +0200, Ander Conselvan de Oliveira wrote:
> Don't allow conversion from arbitraty encoder types to a digital port.
> Calling enc_to_dig_port() with the wrong encoder may seem far fetched,
> but certain paths of the ddi code may be called with hasell's analog
> encoder and the conversion is wrong for DP mst encoders too, so safe
> guard against it.
> 
> v2: Warn if encoder type is unknown and device is not DDI. (Imre)
> v3: Remove stray hunk from rebase error. (Ander)
> Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira at intel.com>

Reviewed-by: Imre Deak <imre.deak at intel.com>

> ---
>  drivers/gpu/drm/i915/intel_drv.h | 14 +++++++++++++-
>  1 file changed, 13 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index c916338..97621a1 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -1121,7 +1121,19 @@ intel_attached_encoder(struct drm_connector *connector)
>  static inline struct intel_digital_port *
>  enc_to_dig_port(struct drm_encoder *encoder)
>  {
> -	return container_of(encoder, struct intel_digital_port, base.base);
> +	struct intel_encoder *intel_encoder = to_intel_encoder(encoder);
> +
> +	switch (intel_encoder->type) {
> +	case INTEL_OUTPUT_UNKNOWN:
> +		WARN_ON(!HAS_DDI(to_i915(encoder->dev)));
> +	case INTEL_OUTPUT_DP:
> +	case INTEL_OUTPUT_EDP:
> +	case INTEL_OUTPUT_HDMI:
> +		return container_of(encoder, struct intel_digital_port,
> +				    base.base);
> +	default:
> +		return NULL;
> +	}
>  }
>  
>  static inline struct intel_dp_mst_encoder *
> -- 
> 2.9.3
> 


More information about the Intel-gfx mailing list