drm/i915/icl: Detect port F presence via VBT
authorImre Deak <imre.deak@intel.com>
Thu, 20 Dec 2018 13:26:03 +0000 (15:26 +0200)
committerImre Deak <imre.deak@intel.com>
Tue, 15 Jan 2019 14:18:31 +0000 (16:18 +0200)
Registering an output for a non-existent port (on a given SKU) can lead
to problems when trying to use the port, for instance timeouts during
power well enabling. Since there are no strap bits for port detection we
have to rely on VBT for this, so do that here.

There are no known SKUs where any of the A-E ports are non-existent, so
to reduce the likelihood of breakage due to incorrect VBT information,
do this detection only for port F (which is known to be missing on some
ICL SKUs).

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=108915
Cc: Mika Kahola <mika.kahola@intel.com>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20181220132604.25222-2-imre.deak@intel.com
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/intel_display.c

index 3d1e1e652d72fb83a7836927a443b7cd04f409ec..ce1cdd2c0c3d98930c92e2c3b3417332fb525e03 100644 (file)
@@ -14320,7 +14320,13 @@ static void intel_setup_outputs(struct drm_i915_private *dev_priv)
                intel_ddi_init(dev_priv, PORT_C);
                intel_ddi_init(dev_priv, PORT_D);
                intel_ddi_init(dev_priv, PORT_E);
-               intel_ddi_init(dev_priv, PORT_F);
+               /*
+                * On some ICL SKUs port F is not present. No strap bits for
+                * this, so rely on VBT.
+                */
+               if (intel_bios_is_port_present(dev_priv, PORT_F))
+                       intel_ddi_init(dev_priv, PORT_F);
+
                icl_dsi_init(dev_priv);
        } else if (IS_GEN9_LP(dev_priv)) {
                /*