]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/i915/cx0: Toggle powerdown states for C10 on HDMI
authorGustavo Sousa <gustavo.sousa@intel.com>
Tue, 16 Dec 2025 21:12:01 +0000 (18:12 -0300)
committerGustavo Sousa <gustavo.sousa@intel.com>
Fri, 19 Dec 2025 17:00:26 +0000 (14:00 -0300)
A new step has been added to Bspec with respect to the C10 PHY, which
instructs the driver to toggle powerdown value for boths PHY lanes to P0
and then P2 when driving an HDMI connector. This update in the Bspec
reflects the changes required by Wa_14026084006, so document it.

Note that, unlike other display workarounds, this one is actually tied
to the C10 PHY and not to a specific display IP.  As such, let's just
document it in intel_cx0_phy.c instead of adding it to
intel_display_wa.c.

Bspec: 64568, 74489
Reviewed-by: Dnyaneshwar Bhadane <dnyaneshwar.bhadane@intel.com>
Link: https://patch.msgid.link/20251216-wa_14026084006-c10-hdmi-toggle-powerdown-v1-2-08677b03e2f1@intel.com
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
drivers/gpu/drm/i915/display/intel_cx0_phy.c

index 264f8a5072e596a73a7c6852fe1c1ba65393910d..2c87c58812da6c971b17af8b915234c2dddcd033 100644 (file)
@@ -3302,6 +3302,21 @@ static void intel_cx0pll_enable(struct intel_encoder *encoder,
         * Frequency Change. We handle this step in bxt_set_cdclk().
         */
 
+       /*
+        * 12. Toggle powerdown if HDMI is enabled on C10 PHY.
+        *
+        * Wa_13013502646:
+        * Fixes: HDMI lane to lane skew violations on C10 display PHYs.
+        * Workaround: Toggle powerdown value by setting first to P0 and then to P2, for both
+        * PHY lanes.
+        */
+       if (!cx0pll_state_is_dp(pll_state) && pll_state->use_c10) {
+               intel_cx0_powerdown_change_sequence(encoder, INTEL_CX0_BOTH_LANES,
+                                                   XELPDP_P0_STATE_ACTIVE);
+               intel_cx0_powerdown_change_sequence(encoder, INTEL_CX0_BOTH_LANES,
+                                                   XELPDP_P2_STATE_READY);
+       }
+
        intel_cx0_phy_transaction_end(encoder, wakeref);
 }