[Intel-gfx] [PATCH v3 02/22] drm/i915: Fix SKL DDI A digital port .connected()

Jani Nikula jani.nikula at linux.intel.com
Tue Feb 28 18:18:33 UTC 2023


On Wed, 22 Feb 2023, Ville Syrjala <ville.syrjala at linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
>
> SKL doesn't have any north DE hotplug stuff. Currently we're
> trying to read DDI A live state from the BDW north DE bit,
> instead of the approproate south DE bit. Fix it.
>
> And for good measure clear the pointer to the north hpd
> pin array, so that we'll actually notice if some other
> place is also using the wrong thing.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>

Finally found the clue in bspec for skl+, "This field is unused in
projects that have a PCH."

Reviewed-by: Jani Nikula <jani.nikula at intel.com>

> ---
>  drivers/gpu/drm/i915/display/intel_ddi.c | 11 +++++++----
>  drivers/gpu/drm/i915/i915_irq.c          |  2 ++
>  2 files changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
> index 40b5c93f9223..1a042f3658eb 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> @@ -4508,15 +4508,18 @@ void intel_ddi_init(struct drm_i915_private *dev_priv, enum port port)
>  		if (intel_phy_is_tc(dev_priv, phy))
>  			dig_port->connected = intel_tc_port_connected;
>  		else
>  			dig_port->connected = lpt_digital_port_connected;
> -	} else if (DISPLAY_VER(dev_priv) >= 8) {
> -		if (port == PORT_A || IS_GEMINILAKE(dev_priv) ||
> -		    IS_BROXTON(dev_priv))
> +	} else if (IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv)) {
> +		dig_port->connected = bdw_digital_port_connected;
> +	} else if (DISPLAY_VER(dev_priv) == 9) {
> +		dig_port->connected = lpt_digital_port_connected;
> +	} else if (IS_BROADWELL(dev_priv)) {
> +		if (port == PORT_A)
>  			dig_port->connected = bdw_digital_port_connected;
>  		else
>  			dig_port->connected = lpt_digital_port_connected;
> -	} else {
> +	} else if (IS_HASWELL(dev_priv)) {
>  		if (port == PORT_A)
>  			dig_port->connected = hsw_digital_port_connected;
>  		else
>  			dig_port->connected = lpt_digital_port_connected;
> diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
> index b024a3a7ca19..13ada0916c2a 100644
> --- a/drivers/gpu/drm/i915/i915_irq.c
> +++ b/drivers/gpu/drm/i915/i915_irq.c
> @@ -197,8 +197,10 @@ static void intel_hpd_init_pins(struct drm_i915_private *dev_priv)
>  	if (DISPLAY_VER(dev_priv) >= 11)
>  		hpd->hpd = hpd_gen11;
>  	else if (IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv))
>  		hpd->hpd = hpd_bxt;
> +	else if (DISPLAY_VER(dev_priv) == 9)
> +		hpd->hpd = NULL; /* no north HPD on SKL */
>  	else if (DISPLAY_VER(dev_priv) >= 8)
>  		hpd->hpd = hpd_bdw;
>  	else if (DISPLAY_VER(dev_priv) >= 7)
>  		hpd->hpd = hpd_ivb;

-- 
Jani Nikula, Intel Open Source Graphics Center


More information about the Intel-gfx mailing list