summaryrefslogtreecommitdiff
path: root/drivers/gpu
diff options
context:
space:
mode:
authorImre Deak <imre.deak@intel.com>2026-10-29 13:30:17 +0200
committerJoonas Lahtinen <joonas.lahtinen@linux.intel.com>2026-11-09 13:36:45 +0200
commitb8c29d1e64a712decce01e3671bf7e6ec6bd70a0 (patch)
tree112eedb35716faa290290f6be1405f4ac503ff8d /drivers/gpu
parent522b0bdda49901113293f8b7e1aeb1c96ec41d85 (diff)
downloadlinux-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.c11
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