drm/i915: Fix SKL DDI A digital port .connected()
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Thu, 2 Mar 2023 16:10:08 +0000 (18:10 +0200)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Tue, 7 Mar 2023 17:09:13 +0000 (19:09 +0200)
SKL doesn't have any north DE hotplug stuff. Currently we're
trying to read DDI A live state from the BDW north DE bit,
instead of the approproate south DE bit. Fix it.

And for good measure clear the pointer to the north hpd
pin array, so that we'll actually notice if some other
place is also using the wrong thing.

Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230302161013.29213-3-ville.syrjala@linux.intel.com
drivers/gpu/drm/i915/display/intel_ddi.c
drivers/gpu/drm/i915/i915_irq.c

index ad016585f75ebcf101b466b4266fbda018290bf8..0950bcfea4c0b3b6bfafa5e7dd75950f4ef0fa13 100644 (file)
@@ -4510,13 +4510,16 @@ void intel_ddi_init(struct drm_i915_private *dev_priv, enum port port)
                        dig_port->connected = intel_tc_port_connected;
                else
                        dig_port->connected = lpt_digital_port_connected;
-       } else if (DISPLAY_VER(dev_priv) >= 8) {
-               if (port == PORT_A || IS_GEMINILAKE(dev_priv) ||
-                   IS_BROXTON(dev_priv))
+       } else if (IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv)) {
+               dig_port->connected = bdw_digital_port_connected;
+       } else if (DISPLAY_VER(dev_priv) == 9) {
+               dig_port->connected = lpt_digital_port_connected;
+       } else if (IS_BROADWELL(dev_priv)) {
+               if (port == PORT_A)
                        dig_port->connected = bdw_digital_port_connected;
                else
                        dig_port->connected = lpt_digital_port_connected;
-       } else {
+       } else if (IS_HASWELL(dev_priv)) {
                if (port == PORT_A)
                        dig_port->connected = hsw_digital_port_connected;
                else
index 6ce3c934d832a27f3ffe79814c282ecf9693f097..31271c30a8cf4edc726820c85fffb145a3172d31 100644 (file)
@@ -197,6 +197,8 @@ static void intel_hpd_init_pins(struct drm_i915_private *dev_priv)
                hpd->hpd = hpd_gen11;
        else if (IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv))
                hpd->hpd = hpd_bxt;
+       else if (DISPLAY_VER(dev_priv) == 9)
+               hpd->hpd = NULL; /* no north HPD on SKL */
        else if (DISPLAY_VER(dev_priv) >= 8)
                hpd->hpd = hpd_bdw;
        else if (DISPLAY_VER(dev_priv) >= 7)