[Intel-gfx] [PATCH v2 45/50] drm/i915/dg2: Classify DG2 PHY types

Matt Atwood matthew.s.atwood at intel.com
Fri Jul 16 20:50:22 UTC 2021


On Tue, Jul 13, 2021 at 08:15:35PM -0700, Matt Roper wrote:
> Although the bspec labels four of DG2's outputs as "combo PHY," the
> underlying PHYs in both cases are actually Synopsys PHYs that are
> programmed completely differently than the traditional Intel "combo" PHY
> units.  As such, we don't want intel_phy_is_combo to take us down legacy
> programming paths, so just return false from it on DG2.  Instead add a
> new intel_phy_is_snps() that will return true for all DG2 PHYs.
> 
> Cc: Anusha Srivatsa <anusha.srivatsa at intel.com>
> Cc: Matt Atwood <matthew.s.atwood at intel.com>
> Signed-off-by: Matt Roper <matthew.d.roper at intel.com>
Reviewed-by: Matt Atwood <matthew.s.atwood at intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display.c | 26 +++++++++++++++++++-
>  drivers/gpu/drm/i915/display/intel_display.h |  1 +
>  2 files changed, 26 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 6f532b695b29..90d4efba466b 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -3698,6 +3698,13 @@ bool intel_phy_is_combo(struct drm_i915_private *dev_priv, enum phy phy)
>  {
>  	if (phy == PHY_NONE)
>  		return false;
> +	else if (IS_DG2(dev_priv))
> +		/*
> +		 * DG2 outputs labelled as "combo PHY" in the bspec use
> +		 * SNPS PHYs with completely different programming,
> +		 * hence we always return false here.
> +		 */
> +		return false;
>  	else if (IS_ALDERLAKE_S(dev_priv))
>  		return phy <= PHY_E;
>  	else if (IS_DG1(dev_priv) || IS_ROCKETLAKE(dev_priv))
> @@ -3712,7 +3719,10 @@ bool intel_phy_is_combo(struct drm_i915_private *dev_priv, enum phy phy)
>  
>  bool intel_phy_is_tc(struct drm_i915_private *dev_priv, enum phy phy)
>  {
> -	if (IS_ALDERLAKE_P(dev_priv))
> +	if (IS_DG2(dev_priv))
> +		/* DG2's "TC1" output uses a SNPS PHY */
> +		return false;
> +	else if (IS_ALDERLAKE_P(dev_priv))
>  		return phy >= PHY_F && phy <= PHY_I;
>  	else if (IS_TIGERLAKE(dev_priv))
>  		return phy >= PHY_D && phy <= PHY_I;
> @@ -3722,6 +3732,20 @@ bool intel_phy_is_tc(struct drm_i915_private *dev_priv, enum phy phy)
>  		return false;
>  }
>  
> +bool intel_phy_is_snps(struct drm_i915_private *dev_priv, enum phy phy)
> +{
> +	if (phy == PHY_NONE)
> +		return false;
> +	else if (IS_DG2(dev_priv))
> +		/*
> +		 * All four "combo" ports and the TC1 port (PHY E) use
> +		 * Synopsis PHYs.
> +		 */
> +		return phy <= PHY_E;
> +
> +	return false;
> +}
> +
>  enum phy intel_port_to_phy(struct drm_i915_private *i915, enum port port)
>  {
>  	if (DISPLAY_VER(i915) >= 13 && port >= PORT_D_XELPD)
> diff --git a/drivers/gpu/drm/i915/display/intel_display.h b/drivers/gpu/drm/i915/display/intel_display.h
> index c9dbaf074d77..284936f0ddab 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.h
> +++ b/drivers/gpu/drm/i915/display/intel_display.h
> @@ -561,6 +561,7 @@ struct drm_display_mode *
>  intel_encoder_current_mode(struct intel_encoder *encoder);
>  bool intel_phy_is_combo(struct drm_i915_private *dev_priv, enum phy phy);
>  bool intel_phy_is_tc(struct drm_i915_private *dev_priv, enum phy phy);
> +bool intel_phy_is_snps(struct drm_i915_private *dev_priv, enum phy phy);
>  enum tc_port intel_port_to_tc(struct drm_i915_private *dev_priv,
>  			      enum port port);
>  int intel_get_pipe_from_crtc_id_ioctl(struct drm_device *dev, void *data,
> -- 
> 2.25.4
> 


More information about the Intel-gfx mailing list