[Intel-gfx] [PATCH 1/2] drm/i915: Simplify hpd pin to port

Pandiyan, Dhinakaran dhinakaran.pandiyan at intel.com
Thu Aug 10 05:22:21 UTC 2017


On Wed, 2017-08-02 at 10:20 -0700, Rodrigo Vivi wrote:
> We will soon need to make that pin port association per
> platform, so let's try to simplify it beforehand.
> 
> Also we are moving the backwards port to pin
> here as well so let's use a standardized way.
> 
> One extra possibility here would be to add a
> MISSING_CASE along with PORT_NONE, but I don't want
> to change this behaviour for now.
> 
> Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
> Signed-off-by: Rodrigo Vivi <rodrigo.vivi at intel.com>
> ---
>  drivers/gpu/drm/i915/i915_drv.h      |  2 +-
>  drivers/gpu/drm/i915/i915_irq.c      |  3 ++-
>  drivers/gpu/drm/i915/intel_dp.c      |  2 +-
>  drivers/gpu/drm/i915/intel_hotplug.c | 31 +++++++++++++++++--------------
>  4 files changed, 21 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index d63645a521c4..5c2c7a677e96 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -3147,7 +3147,7 @@ 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);
> -bool intel_hpd_pin_to_port(enum hpd_pin pin, enum port *port);
> +enum port intel_hpd_port(enum hpd_pin pin);

bikeshed: I feel hpd_pin_to_port reads better, conveys the conversion
from enum hpd_pin to enum port. Secondly, I haven't seen any references
to "hpd_port" in the driver.

It is not entirely obvious to me how changing the function signature
will help per-platform mapping, but returning port looks cleaner. 

With the function name left intact
Reviewed-by: Dhinakaran Pandiyan <dhinakaran.pandiyan at intel.com>


>  bool intel_hpd_disable(struct drm_i915_private *dev_priv, enum hpd_pin pin);
>  void intel_hpd_enable(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 196caa463edf..b115ab584b5e 100644
> --- a/drivers/gpu/drm/i915/i915_irq.c
> +++ b/drivers/gpu/drm/i915/i915_irq.c
> @@ -1501,7 +1501,8 @@ static void intel_get_hpd_pins(u32 *pin_mask, u32 *long_mask,
>  
>  		*pin_mask |= BIT(i);
>  
> -		if (!intel_hpd_pin_to_port(i, &port))
> +		port = intel_hpd_port(i);
> +		if (port == PORT_NONE)
>  			continue;
>  
>  		if (long_pulse_detect(port, dig_hotplug_reg))
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index 2d42d09428c9..d4e6128f3b3a 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -4566,7 +4566,7 @@ static bool bxt_digital_port_connected(struct drm_i915_private *dev_priv,
>  	enum port port;
>  	u32 bit;
>  
> -	intel_hpd_pin_to_port(intel_encoder->hpd_pin, &port);
> +	port = intel_hpd_port(intel_encoder->hpd_pin);
>  	switch (port) {
>  	case PORT_A:
>  		bit = BXT_DE_PORT_HP_DDIA;
> diff --git a/drivers/gpu/drm/i915/intel_hotplug.c b/drivers/gpu/drm/i915/intel_hotplug.c
> index f1200272a699..5982c47586e7 100644
> --- a/drivers/gpu/drm/i915/intel_hotplug.c
> +++ b/drivers/gpu/drm/i915/intel_hotplug.c
> @@ -76,26 +76,28 @@
>   * it will use i915_hotplug_work_func where this logic is handled.
>   */
>  
> -bool intel_hpd_pin_to_port(enum hpd_pin pin, enum port *port)
> +/**
> + * intel_hpd_port - return port hard associated with certain pin.
> + * @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_port(enum hpd_pin pin)
>  {
>  	switch (pin) {
>  	case HPD_PORT_A:
> -		*port = PORT_A;
> -		return true;
> +		return PORT_A;
>  	case HPD_PORT_B:
> -		*port = PORT_B;
> -		return true;
> +		return PORT_B;
>  	case HPD_PORT_C:
> -		*port = PORT_C;
> -		return true;
> +		return PORT_C;
>  	case HPD_PORT_D:
> -		*port = PORT_D;
> -		return true;
> +		return PORT_D;
>  	case HPD_PORT_E:
> -		*port = PORT_E;
> -		return true;
> +		return PORT_E;
>  	default:
> -		return false;	/* no hpd */
> +		return PORT_NONE; /* no port for this pin */
>  	}
>  }
>  
> @@ -389,8 +391,9 @@ void intel_hpd_irq_handler(struct drm_i915_private *dev_priv,
>  		if (!(BIT(i) & pin_mask))
>  			continue;
>  
> -		is_dig_port = intel_hpd_pin_to_port(i, &port) &&
> -			      dev_priv->hotplug.irq_port[port];
> +		port = intel_hpd_port(i);
> +		is_dig_port = port != PORT_NONE &&
> +			dev_priv->hotplug.irq_port[port];

nit: I find
= (port != PORT_NONE) && dev_priv->hotplug.irq_port[port]
easier to read

>  
>  		if (is_dig_port) {
>  			bool long_hpd = long_mask & BIT(i);


More information about the Intel-gfx mailing list