Atm we switch the TypeC port mode upon receiving an HPD interrupt. That's unsafe since the port could be active (after a modeset) or there could be other users that depend on the port mode to stay fixed. To make the mode switching robust add a TypeC port mode refcounting reflecting the active state of the port and locking for any other users of it (connector detection/AUX transfers). The port mode will be reset if needed, whenever the TypeC lock is taken and the port is inactive. During a modeset resetting the port and selecting the proper PLL for the new mode must happen during the atomic commit phase, after the port and its PLL got disabled. For that we need to reserve both the TBT and MG PHY PLLs for the port and select the correct one after the port mode got reset/locked down for the duration of the port's active state. The patchset has a few refactorings getting to the state described above gradually, so that reviewing the actual changes is somewhat easier. I also pushed the whole lot to [1]. The patchset also has a few fixes mostly related to the TBT-alt mode. [1] https://github.com/ideak/linux/commits/typec-mode-switch Cc: Manasi Navare <manasi.d.navare@xxxxxxxxx> Cc: José Roberto de Souza <jose.souza@xxxxxxxxx> Cc: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx> Cc: Animesh Manna <animesh.manna@xxxxxxxxx> Cc: Paulo Zanoni <paulo.r.zanoni@xxxxxxxxx> Cc: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> Cc: Daniel Vetter <daniel.vetter@xxxxxxxx> Cc: Lucas De Marchi <lucas.demarchi@xxxxxxxxx> Cc: Anusha Srivatsa <anusha.srivatsa@xxxxxxxxx> Cc: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx> Imre Deak (23): drm/i915/icl: Add support to read out the TBT PLL HW state drm/i915: Tune down WARNs about TBT AUX power well enabling drm/i915: Move the TypeC port handling code to a separate file drm/i915: Sanitize the terminology used for TypeC port modes drm/i915: Don't enable the DDI-IO power in the TypeC TBT-alt mode drm/i915: Fix the TBT AUX power well enabling drm/i915: Use the correct AUX power domain in TypeC TBT-alt mode drm/i915: Unify the TypeC port notation in debug/error messages drm/i915: Factor out common parts from TypeC port handling functions drm/i915: Wait for TypeC PHY complete flag to clear in safe mode drm/i915: Handle the TCCOLD power-down event drm/i915: Sanitize the TypeC connect/detect sequences drm/i915: Fix the TypeC port mode sanitization during loading/resume drm/i915: Keep the TypeC port mode fixed for detect/AUX transfers drm/i915: Sanitize the TypeC FIA lane configuration decoding drm/i915: Sanitize the shared DPLL reserve/release interface drm/i915: Sanitize the shared DPLL find/reference interface drm/i915/icl: Split getting the DPLLs to port type specific functions drm/i915/icl: Reserve all required PLLs for TypeC ports drm/i915: Keep the TypeC port mode fixed when the port is active drm/i915: Add state verification for the TypeC port mode drm/i915: Remove unneeded disconnect in TypeC legacy port mode drm/i915: WARN about invalid lane reversal in TBT-alt/DP-alt modes drivers/gpu/drm/i915/Makefile | 3 +- drivers/gpu/drm/i915/Makefile.header-test | 1 + drivers/gpu/drm/i915/intel_ddi.c | 123 ++--- drivers/gpu/drm/i915/intel_ddi.h | 7 + drivers/gpu/drm/i915/intel_display.c | 160 ++++++- drivers/gpu/drm/i915/intel_display.h | 7 +- drivers/gpu/drm/i915/intel_display_power.c | 111 ++++- drivers/gpu/drm/i915/intel_dp.c | 243 +--------- drivers/gpu/drm/i915/intel_dp.h | 2 - drivers/gpu/drm/i915/intel_dp_mst.c | 6 + drivers/gpu/drm/i915/intel_dp_mst.h | 8 +- drivers/gpu/drm/i915/intel_dpll_mgr.c | 524 +++++++++++++++------ drivers/gpu/drm/i915/intel_dpll_mgr.h | 25 +- drivers/gpu/drm/i915/intel_drv.h | 21 +- drivers/gpu/drm/i915/intel_hdmi.c | 7 + drivers/gpu/drm/i915/intel_tc.c | 469 ++++++++++++++++++ drivers/gpu/drm/i915/intel_tc.h | 27 ++ 17 files changed, 1272 insertions(+), 472 deletions(-) create mode 100644 drivers/gpu/drm/i915/intel_tc.c create mode 100644 drivers/gpu/drm/i915/intel_tc.h -- 2.17.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx