Move the check for port F to intel_bios.c and just make intel_ddi_init()
call it. This will allow the output initialization of ICL to be like
platforms after it, allowing us to make it generic.

Suggested-by: Jani Nikula <[email protected]>
Signed-off-by: Lucas De Marchi <[email protected]>
---
 drivers/gpu/drm/i915/display/intel_bios.c    | 23 +++++++++++++++-----
 drivers/gpu/drm/i915/display/intel_display.c | 10 +--------
 2 files changed, 18 insertions(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_bios.c 
b/drivers/gpu/drm/i915/display/intel_bios.c
index 6593e2c38043..9d42ea3721cd 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -1668,16 +1668,27 @@ static enum port dvo_port_to_port(struct 
drm_i915_private *dev_priv,
                [PORT_E] = { DVO_PORT_HDMID, DVO_PORT_DPD, -1 },
        };
 
-       if (IS_ROCKETLAKE(dev_priv))
+       if (IS_ROCKETLAKE(dev_priv)) {
                return __dvo_port_to_port(ARRAY_SIZE(rkl_port_mapping),
                                          ARRAY_SIZE(rkl_port_mapping[0]),
                                          rkl_port_mapping,
                                          dvo_port);
-       else
-               return __dvo_port_to_port(ARRAY_SIZE(port_mapping),
-                                         ARRAY_SIZE(port_mapping[0]),
-                                         port_mapping,
-                                         dvo_port);
+       } else {
+               enum port port = __dvo_port_to_port(ARRAY_SIZE(port_mapping),
+                                                   ARRAY_SIZE(port_mapping[0]),
+                                                   port_mapping,
+                                                   dvo_port);
+
+               /*
+                * On some ICL SKUs port F is not present. Work around broken
+                * VBTs by allowing port F only on select SKUs.
+                */
+               if (port == PORT_F && IS_ICELAKE(dev_priv) &&
+                   !IS_ICL_WITH_PORT_F(dev_priv))
+                       return PORT_NONE;
+
+               return port;
+       }
 }
 
 static void parse_ddi_port(struct drm_i915_private *dev_priv,
diff --git a/drivers/gpu/drm/i915/display/intel_display.c 
b/drivers/gpu/drm/i915/display/intel_display.c
index a11bb675f9b3..49772c82a299 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -16842,15 +16842,7 @@ 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);
-               /*
-                * On some ICL SKUs port F is not present. No strap bits for
-                * this, so rely on VBT.
-                * Work around broken VBTs on SKUs known to have no port F.
-                */
-               if (IS_ICL_WITH_PORT_F(dev_priv) &&
-                   intel_bios_is_port_present(dev_priv, PORT_F))
-                       intel_ddi_init(dev_priv, PORT_F);
-
+               intel_ddi_init(dev_priv, PORT_F);
                icl_dsi_init(dev_priv);
        } else if (IS_GEN9_LP(dev_priv)) {
                /*
-- 
2.26.2

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to