[Intel-gfx] [PATCH] drm/i915/dg2: Skip output init on PHY calibration failure

Lucas De Marchi lucas.demarchi at intel.com
Wed Feb 23 17:14:55 UTC 2022


On Wed, Feb 23, 2022 at 08:54:21AM -0800, Matt Roper wrote:
>If one of our PHYs fails to complete calibration, we should skip the
>general initialization of the corresponding output.  Most likely this is
>going to happen on outputs that don't actually exist on the board; in
>theory we should have already decided to skip this output based on the
>VBT, but we can't always rely on the VBT being accurate.
>
>Cc: Lucas De Marchi <lucas.demarchi at intel.com>
>Signed-off-by: Matt Roper <matthew.d.roper at intel.com>
>---
> drivers/gpu/drm/i915/display/intel_ddi.c      |  8 ++++++++
> drivers/gpu/drm/i915/display/intel_snps_phy.c |  8 ++++++--
> drivers/gpu/drm/i915/i915_drv.h               | 12 ++++++++++--
> 3 files changed, 24 insertions(+), 4 deletions(-)
>
>diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
>index e4260806c2a4..b71035a5db85 100644
>--- a/drivers/gpu/drm/i915/display/intel_ddi.c
>+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
>@@ -4308,6 +4308,14 @@ void intel_ddi_init(struct drm_i915_private *dev_priv, enum port port)
> 		return;
> 	}
>
>+	if (intel_phy_is_snps(dev_priv, phy) &&
>+	    dev_priv->snps_phy_failed_calibration & BIT(phy)) {
>+		drm_dbg_kms(&dev_priv->drm,
>+			    "SNPS PHY %c failed to calibrate after 25ms; output will not be used.\n",

								   ^^^^
I would only skip mentioning the timeout here, as this can very easily
get out of sync.


>+			    phy_name(phy));
>+		return;
>+	}
>+
> 	dig_port = kzalloc(sizeof(*dig_port), GFP_KERNEL);
> 	if (!dig_port)
> 		return;
>diff --git a/drivers/gpu/drm/i915/display/intel_snps_phy.c b/drivers/gpu/drm/i915/display/intel_snps_phy.c
>index 7e6245b97fed..0dd4775e8195 100644
>--- a/drivers/gpu/drm/i915/display/intel_snps_phy.c
>+++ b/drivers/gpu/drm/i915/display/intel_snps_phy.c
>@@ -32,10 +32,14 @@ void intel_snps_phy_wait_for_calibration(struct drm_i915_private *i915)
> 		if (!intel_phy_is_snps(i915, phy))
> 			continue;
>
>+		/*
>+		 * If calibration does not complete successfully, we'll remember
>+		 * which phy was affected and skip setup of the corresponding
>+		 * output later.
>+		 */
> 		if (intel_de_wait_for_clear(i915, DG2_PHY_MISC(phy),
> 					    DG2_PHY_DP_TX_ACK_MASK, 25))
>-			drm_err(&i915->drm, "SNPS PHY %c failed to calibrate after 25ms.\n",
>-				phy_name(phy));

or just leave the message here as a debug.


Reviewed-by: Lucas De Marchi <lucas.demarchi at intel.com>

and I think this can go to drm-intel-next, not only topic/core-for-CI.

thanks
Lucas De Marchi


More information about the Intel-gfx mailing list