diff options
| author | Imre Deak <imre.deak@intel.com> | 2026-10-29 13:30:17 +0200 |
|---|---|---|
| committer | Joonas Lahtinen <joonas.lahtinen@linux.intel.com> | 2026-11-09 13:36:45 +0200 |
| commit | b8c29d1e64a712decce01e3671bf7e6ec6bd70a0 (patch) | |
| tree | 112eedb35716faa290290f6be1405f4ac503ff8d /drivers/gpu | |
| parent | 522b0bdda49901113293f8b7e1aeb1c96ec41d85 (diff) | |
| download | linux-b8c29d1e64a712decce01e3671bf7e6ec6bd70a0.tar.gz linux-b8c29d1e64a712decce01e3671bf7e6ec6bd70a0.zip | |
drm/i915/ptl+: Fix TypeC detection for eDP on port B
On PTL+ platforms with eDP on TypeC, port B's DDI is connected to a C20
TypeC PHY. Identify PHY B as TypeC and map port B to TC_PORT_1 when eDP
TypeC support is enabled.
Closes: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/9196
CC: stable@vger.kernel.org # 6.14+
Reviewed-by: Mika Kahola <mika.kahola@intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
Link: https://patch.msgid.link/20261029113017.618286-7-imre.deak@intel.com
(cherry picked from commit 20e3d954f70486bf14000fc1a6dac7c34e6e4f07)
Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/i915/display/intel_display.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c index f79caeb5a82e..b897678a93c0 100644 --- a/drivers/gpu/drm/i915/display/intel_display.c +++ b/drivers/gpu/drm/i915/display/intel_display.c @@ -1904,6 +1904,11 @@ bool intel_phy_is_combo(struct intel_display *display, enum phy phy) return false; } +static bool intel_phy_is_edp_on_tc(struct intel_display *display, enum phy phy) +{ + return DISPLAY_RUNTIME_INFO(display)->edp_typec_support && phy == PHY_B; +} + /* * This function returns true if the DDI port respective to the PHY enumeration * is a Type-C capable port. @@ -1924,6 +1929,9 @@ bool intel_phy_is_tc(struct intel_display *display, enum phy phy) if (display->platform.dgfx) return false; + if (intel_phy_is_edp_on_tc(display, phy)) + return true; + if (DISPLAY_VER(display) >= 13) return phy >= PHY_F && phy <= PHY_I; else if (display->platform.tigerlake) @@ -1974,6 +1982,9 @@ enum phy intel_port_to_phy(struct intel_display *display, enum port port) */ enum tc_port intel_port_to_tc(struct intel_display *display, enum port port) { + if (intel_phy_is_edp_on_tc(display, intel_port_to_phy(display, port))) + return TC_PORT_1; + if (DISPLAY_VER(display) >= 12) return TC_PORT_1 + port - PORT_TC1; else |
