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.sriva...@intel.com>
> Cc: Matt Atwood <matthew.s.atw...@intel.com>
> Signed-off-by: Matt Roper <matthew.d.ro...@intel.com>
Reviewed-by: Matt Atwood <matthew.s.atw...@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
> 
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to