Commit 01f953e7 authored by Matt Roper's avatar Matt Roper Committed by Lucas De Marchi
Browse files

drm/i915/rkl: RKL only uses PHY_MISC for PHY's A and B



Since the number of platforms with this restriction are growing, let's
separate out the platform logic into a has_phy_misc() function.

Bspec: 50107
Signed-off-by: default avatarMatt Roper <matthew.d.roper@intel.com>
Reviewed-by: default avatarAnusha Srivatsa <anusha.srivatsa@intel.com>
Signed-off-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200504225227.464666-11-matthew.d.roper@intel.com
parent 93e2323b
Loading
Loading
Loading
Loading
+17 −13
Original line number Diff line number Diff line
@@ -181,11 +181,25 @@ static void cnl_combo_phys_uninit(struct drm_i915_private *dev_priv)
	intel_de_write(dev_priv, CHICKEN_MISC_2, val);
}

static bool has_phy_misc(struct drm_i915_private *i915, enum phy phy)
{
	/*
	 * Some platforms only expect PHY_MISC to be programmed for PHY-A and
	 * PHY-B and may not even have instances of the register for the
	 * other combo PHY's.
	 */
	if (IS_ELKHARTLAKE(i915) ||
	    IS_ROCKETLAKE(i915))
		return phy < PHY_C;

	return true;
}

static bool icl_combo_phy_enabled(struct drm_i915_private *dev_priv,
				  enum phy phy)
{
	/* The PHY C added by EHL has no PHY_MISC register */
	if (IS_ELKHARTLAKE(dev_priv) && phy == PHY_C)
	if (!has_phy_misc(dev_priv, phy))
		return intel_de_read(dev_priv, ICL_PORT_COMP_DW0(phy)) & COMP_INIT;
	else
		return !(intel_de_read(dev_priv, ICL_PHY_MISC(phy)) &
@@ -317,12 +331,7 @@ static void icl_combo_phys_init(struct drm_i915_private *dev_priv)
			continue;
		}

		/*
		 * Although EHL adds a combo PHY C, there's no PHY_MISC
		 * register for it and no need to program the
		 * DE_IO_COMP_PWR_DOWN setting on PHY C.
		 */
		if (IS_ELKHARTLAKE(dev_priv) && phy == PHY_C)
		if (!has_phy_misc(dev_priv, phy))
			goto skip_phy_misc;

		/*
@@ -376,12 +385,7 @@ static void icl_combo_phys_uninit(struct drm_i915_private *dev_priv)
				 "Combo PHY %c HW state changed unexpectedly\n",
				 phy_name(phy));

		/*
		 * Although EHL adds a combo PHY C, there's no PHY_MISC
		 * register for it and no need to program the
		 * DE_IO_COMP_PWR_DOWN setting on PHY C.
		 */
		if (IS_ELKHARTLAKE(dev_priv) && phy == PHY_C)
		if (!has_phy_misc(dev_priv, phy))
			goto skip_phy_misc;

		val = intel_de_read(dev_priv, ICL_PHY_MISC(phy));