[Intel-gfx] [PATCH 6/8] drm/i915: Pass hpd_pin to long_pulse_detect()

Rodrigo Vivi rodrigo.vivi at intel.com
Thu Jul 5 21:14:05 UTC 2018


On Thu, Jul 05, 2018 at 07:43:55PM +0300, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
> 
> We're doing a pointless translation from hpd_pin to port simply for
> passing the thing to long_pulse_detect(). Let's pass the hpd_pin
> directly instead.
> 
> This removes the assumption that the hpd_pin and port always
> match. The only other place where we make that assumption anymore
> is intel_hpd_pin_default() and that's fine as it's what determines
> the relationship between the two. If we ever get hardware where
> the hpd pins are wired in more interesting ways it should be
> trivial to handle from now on.
> 
> This should also fix the IS_CNL_WITH_PORT_F() case as that mapped
> pin E back to port F and passed that to
> spt_port_hotplug2_long_detect() which would always return false
> for port F. Now that we pass in pin E directly it'll actually
> do the right thing.
> 
> Cc: Rodrigo Vivi <rodrigo.vivi at intel.com>
> Fixes: cf53902f48c3 ("drm/i915/cnl: Add HPD support for Port F.")

Thanks!

I could swear that I had a version similar to this somewhere,
but anyways this is much better...

Reviewed-by: Rodrigo Vivi <rodrigo.vivi at intel.com>

> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> ---
>  drivers/gpu/drm/i915/i915_drv.h      |  2 -
>  drivers/gpu/drm/i915/i915_irq.c      | 95 +++++++++++++++++-------------------
>  drivers/gpu/drm/i915/intel_hotplug.c | 31 ------------
>  3 files changed, 45 insertions(+), 83 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index a808bb8aa4d8..5afadc897e76 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -2746,8 +2746,6 @@ void intel_hpd_irq_handler(struct drm_i915_private *dev_priv,
>  void intel_hpd_init(struct drm_i915_private *dev_priv);
>  void intel_hpd_init_work(struct drm_i915_private *dev_priv);
>  void intel_hpd_cancel_work(struct drm_i915_private *dev_priv);
> -enum port intel_hpd_pin_to_port(struct drm_i915_private *dev_priv,
> -				enum hpd_pin pin);
>  enum hpd_pin intel_hpd_pin_default(struct drm_i915_private *dev_priv,
>  				   enum port port);
>  bool intel_hpd_disable(struct drm_i915_private *dev_priv, enum hpd_pin pin);
> diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
> index 1c3ff07d9f2d..bb7c754979f8 100644
> --- a/drivers/gpu/drm/i915/i915_irq.c
> +++ b/drivers/gpu/drm/i915/i915_irq.c
> @@ -1576,122 +1576,122 @@ static void gen8_gt_irq_handler(struct drm_i915_private *i915,
>  	}
>  }
>  
> -static bool gen11_port_hotplug_long_detect(enum port port, u32 val)
> +static bool gen11_port_hotplug_long_detect(enum hpd_pin pin, u32 val)
>  {
> -	switch (port) {
> -	case PORT_C:
> +	switch (pin) {
> +	case HPD_PORT_C:
>  		return val & GEN11_HOTPLUG_CTL_LONG_DETECT(PORT_TC1);
> -	case PORT_D:
> +	case HPD_PORT_D:
>  		return val & GEN11_HOTPLUG_CTL_LONG_DETECT(PORT_TC2);
> -	case PORT_E:
> +	case HPD_PORT_E:
>  		return val & GEN11_HOTPLUG_CTL_LONG_DETECT(PORT_TC3);
> -	case PORT_F:
> +	case HPD_PORT_F:
>  		return val & GEN11_HOTPLUG_CTL_LONG_DETECT(PORT_TC4);
>  	default:
>  		return false;
>  	}
>  }
>  
> -static bool bxt_port_hotplug_long_detect(enum port port, u32 val)
> +static bool bxt_port_hotplug_long_detect(enum hpd_pin pin, u32 val)
>  {
> -	switch (port) {
> -	case PORT_A:
> +	switch (pin) {
> +	case HPD_PORT_A:
>  		return val & PORTA_HOTPLUG_LONG_DETECT;
> -	case PORT_B:
> +	case HPD_PORT_B:
>  		return val & PORTB_HOTPLUG_LONG_DETECT;
> -	case PORT_C:
> +	case HPD_PORT_C:
>  		return val & PORTC_HOTPLUG_LONG_DETECT;
>  	default:
>  		return false;
>  	}
>  }
>  
> -static bool icp_ddi_port_hotplug_long_detect(enum port port, u32 val)
> +static bool icp_ddi_port_hotplug_long_detect(enum hpd_pin pin, u32 val)
>  {
> -	switch (port) {
> -	case PORT_A:
> +	switch (pin) {
> +	case HPD_PORT_A:
>  		return val & ICP_DDIA_HPD_LONG_DETECT;
> -	case PORT_B:
> +	case HPD_PORT_B:
>  		return val & ICP_DDIB_HPD_LONG_DETECT;
>  	default:
>  		return false;
>  	}
>  }
>  
> -static bool icp_tc_port_hotplug_long_detect(enum port port, u32 val)
> +static bool icp_tc_port_hotplug_long_detect(enum hpd_pin pin, u32 val)
>  {
> -	switch (port) {
> -	case PORT_C:
> +	switch (pin) {
> +	case HPD_PORT_C:
>  		return val & ICP_TC_HPD_LONG_DETECT(PORT_TC1);
> -	case PORT_D:
> +	case HPD_PORT_D:
>  		return val & ICP_TC_HPD_LONG_DETECT(PORT_TC2);
> -	case PORT_E:
> +	case HPD_PORT_E:
>  		return val & ICP_TC_HPD_LONG_DETECT(PORT_TC3);
> -	case PORT_F:
> +	case HPD_PORT_F:
>  		return val & ICP_TC_HPD_LONG_DETECT(PORT_TC4);
>  	default:
>  		return false;
>  	}
>  }
>  
> -static bool spt_port_hotplug2_long_detect(enum port port, u32 val)
> +static bool spt_port_hotplug2_long_detect(enum hpd_pin pin, u32 val)
>  {
> -	switch (port) {
> -	case PORT_E:
> +	switch (pin) {
> +	case HPD_PORT_E:
>  		return val & PORTE_HOTPLUG_LONG_DETECT;
>  	default:
>  		return false;
>  	}
>  }
>  
> -static bool spt_port_hotplug_long_detect(enum port port, u32 val)
> +static bool spt_port_hotplug_long_detect(enum hpd_pin pin, u32 val)
>  {
> -	switch (port) {
> -	case PORT_A:
> +	switch (pin) {
> +	case HPD_PORT_A:
>  		return val & PORTA_HOTPLUG_LONG_DETECT;
> -	case PORT_B:
> +	case HPD_PORT_B:
>  		return val & PORTB_HOTPLUG_LONG_DETECT;
> -	case PORT_C:
> +	case HPD_PORT_C:
>  		return val & PORTC_HOTPLUG_LONG_DETECT;
> -	case PORT_D:
> +	case HPD_PORT_D:
>  		return val & PORTD_HOTPLUG_LONG_DETECT;
>  	default:
>  		return false;
>  	}
>  }
>  
> -static bool ilk_port_hotplug_long_detect(enum port port, u32 val)
> +static bool ilk_port_hotplug_long_detect(enum hpd_pin pin, u32 val)
>  {
> -	switch (port) {
> -	case PORT_A:
> +	switch (pin) {
> +	case HPD_PORT_A:
>  		return val & DIGITAL_PORTA_HOTPLUG_LONG_DETECT;
>  	default:
>  		return false;
>  	}
>  }
>  
> -static bool pch_port_hotplug_long_detect(enum port port, u32 val)
> +static bool pch_port_hotplug_long_detect(enum hpd_pin pin, u32 val)
>  {
> -	switch (port) {
> -	case PORT_B:
> +	switch (pin) {
> +	case HPD_PORT_B:
>  		return val & PORTB_HOTPLUG_LONG_DETECT;
> -	case PORT_C:
> +	case HPD_PORT_C:
>  		return val & PORTC_HOTPLUG_LONG_DETECT;
> -	case PORT_D:
> +	case HPD_PORT_D:
>  		return val & PORTD_HOTPLUG_LONG_DETECT;
>  	default:
>  		return false;
>  	}
>  }
>  
> -static bool i9xx_port_hotplug_long_detect(enum port port, u32 val)
> +static bool i9xx_port_hotplug_long_detect(enum hpd_pin pin, u32 val)
>  {
> -	switch (port) {
> -	case PORT_B:
> +	switch (pin) {
> +	case HPD_PORT_B:
>  		return val & PORTB_HOTPLUG_INT_LONG_PULSE;
> -	case PORT_C:
> +	case HPD_PORT_C:
>  		return val & PORTC_HOTPLUG_INT_LONG_PULSE;
> -	case PORT_D:
> +	case HPD_PORT_D:
>  		return val & PORTD_HOTPLUG_INT_LONG_PULSE;
>  	default:
>  		return false;
> @@ -1709,9 +1709,8 @@ static void intel_get_hpd_pins(struct drm_i915_private *dev_priv,
>  			       u32 *pin_mask, u32 *long_mask,
>  			       u32 hotplug_trigger, u32 dig_hotplug_reg,
>  			       const u32 hpd[HPD_NUM_PINS],
> -			       bool long_pulse_detect(enum port port, u32 val))
> +			       bool long_pulse_detect(enum hpd_pin pin, u32 val))
>  {
> -	enum port port;
>  	enum hpd_pin pin;
>  
>  	for_each_hpd_pin(pin) {
> @@ -1720,11 +1719,7 @@ static void intel_get_hpd_pins(struct drm_i915_private *dev_priv,
>  
>  		*pin_mask |= BIT(pin);
>  
> -		port = intel_hpd_pin_to_port(dev_priv, pin);
> -		if (port == PORT_NONE)
> -			continue;
> -
> -		if (long_pulse_detect(port, dig_hotplug_reg))
> +		if (long_pulse_detect(pin, dig_hotplug_reg))
>  			*long_mask |= BIT(pin);
>  	}
>  
> diff --git a/drivers/gpu/drm/i915/intel_hotplug.c b/drivers/gpu/drm/i915/intel_hotplug.c
> index d9d61d11dd2b..648a13c6043c 100644
> --- a/drivers/gpu/drm/i915/intel_hotplug.c
> +++ b/drivers/gpu/drm/i915/intel_hotplug.c
> @@ -76,37 +76,6 @@
>   * it will use i915_hotplug_work_func where this logic is handled.
>   */
>  
> -/**
> - * intel_hpd_port - return port hard associated with certain pin.
> - * @dev_priv: private driver data pointer
> - * @pin: the hpd pin to get associated port
> - *
> - * Return port that is associatade with @pin and PORT_NONE if no port is
> - * hard associated with that @pin.
> - */
> -enum port intel_hpd_pin_to_port(struct drm_i915_private *dev_priv,
> -				enum hpd_pin pin)
> -{
> -	switch (pin) {
> -	case HPD_PORT_A:
> -		return PORT_A;
> -	case HPD_PORT_B:
> -		return PORT_B;
> -	case HPD_PORT_C:
> -		return PORT_C;
> -	case HPD_PORT_D:
> -		return PORT_D;
> -	case HPD_PORT_E:
> -		if (IS_CNL_WITH_PORT_F(dev_priv))
> -			return PORT_F;
> -		return PORT_E;
> -	case HPD_PORT_F:
> -		return PORT_F;
> -	default:
> -		return PORT_NONE; /* no port for this pin */
> -	}
> -}
> -
>  /**
>   * intel_hpd_pin_default - return default pin associated with certain port.
>   * @dev_priv: private driver data pointer
> -- 
> 2.16.4
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx


More information about the Intel-gfx mailing list