From: Matt Atwood <matthew.s.atwood@intel.com>
To: intel-xe@lists.freedesktop.org, intel-gfx@lists.freedesktop.org
Cc: ankit.k.nautiyal@Intel.com, dnyaneshware.bhdane@intel.com,
gustavo.sousa@intel.com, jouni.hogander@intel.com,
juha-peka.heikkila@intel.com, luciano.coelho@intel.com,
matthew.d.roper@intel.com, ravi.kumar.vodapalli@intel.com,
shekhar.chauhan@intel.com, vinod.govindapillai@intel.com,
imre.deak@intel.com, jani.nikula@linux.intel.com,
suraj.kandapal@intel.com, jani.nikula@intel.com,
ville.syrjala@linux.intel.com, sai.teja.pottumuttu@Intel.com,
Suraj Kandpal <suraj.kandpal@intel.com>
Subject: [PATCH v6 2/8] drm/i915/power: Use intel_encoder_is_tc()
Date: Mon, 1 Dec 2025 17:23:00 -0800 [thread overview]
Message-ID: <20251202012306.9315-3-matthew.s.atwood@intel.com> (raw)
In-Reply-To: <20251202012306.9315-1-matthew.s.atwood@intel.com>
From: Gustavo Sousa <gustavo.sousa@intel.com>
Starting with Xe3p_LPD, when intel_phy_is_tc() returns true, it does
not necessarily mean that the port is connected to a PHY in the Type-C
subsystem. The reason is that there is now a VBT field called
dedicated_external that will indicate that a Type-C capable port is
connected to a (most likely) combo/dedicated PHY. When that's the case,
we must not do the extra programming required for Type-C connections.
In an upcoming change, we will modify intel_encoder_is_tc() to take the
VBT field dedicated_external into consideration. Update
intel_display_power_well.c to use that function instead of
intel_phy_is_tc().
Note that, even though icl_aux_power_well_{enable,disable} are not part
of Xe3p_LPD's display paths, we modify them anyway for uniformity.
v2:
- Add and use icl_aux_pw_is_tc_phy() helper to avoid explicit encoder
lookup. (Imre)
Cc: Imre Deak <imre.deak@intel.com>
Cc: Shekhar Chauhan <shekhar.chauhan@intel.com>
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com> # v1
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
Reviewed-by: Imre Deak <imre.deak@intel.com>
---
.../i915/display/intel_display_power_well.c | 33 +++++++++++++------
1 file changed, 23 insertions(+), 10 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display_power_well.c b/drivers/gpu/drm/i915/display/intel_display_power_well.c
index 719f58e43269..3abfb17f8988 100644
--- a/drivers/gpu/drm/i915/display/intel_display_power_well.c
+++ b/drivers/gpu/drm/i915/display/intel_display_power_well.c
@@ -257,8 +257,9 @@ aux_ch_to_digital_port(struct intel_display *display,
return NULL;
}
-static enum phy icl_aux_pw_to_phy(struct intel_display *display,
- const struct i915_power_well *power_well)
+static struct intel_encoder *
+icl_aux_pw_to_encoder(struct intel_display *display,
+ const struct i915_power_well *power_well)
{
enum aux_ch aux_ch = icl_aux_pw_to_ch(power_well);
struct intel_digital_port *dig_port = aux_ch_to_digital_port(display, aux_ch);
@@ -270,7 +271,23 @@ static enum phy icl_aux_pw_to_phy(struct intel_display *display,
* as HDMI-only and routed to a combo PHY, the encoder either won't be
* present at all or it will not have an aux_ch assigned.
*/
- return dig_port ? intel_encoder_to_phy(&dig_port->base) : PHY_NONE;
+ return dig_port ? &dig_port->base : NULL;
+}
+
+static enum phy icl_aux_pw_to_phy(struct intel_display *display,
+ const struct i915_power_well *power_well)
+{
+ struct intel_encoder *encoder = icl_aux_pw_to_encoder(display, power_well);
+
+ return encoder ? intel_encoder_to_phy(encoder) : PHY_NONE;
+}
+
+static bool icl_aux_pw_is_tc_phy(struct intel_display *display,
+ const struct i915_power_well *power_well)
+{
+ struct intel_encoder *encoder = icl_aux_pw_to_encoder(display, power_well);
+
+ return encoder && intel_encoder_is_tc(encoder);
}
static void hsw_wait_for_power_well_enable(struct intel_display *display,
@@ -569,9 +586,7 @@ static void
icl_aux_power_well_enable(struct intel_display *display,
struct i915_power_well *power_well)
{
- enum phy phy = icl_aux_pw_to_phy(display, power_well);
-
- if (intel_phy_is_tc(display, phy))
+ if (icl_aux_pw_is_tc_phy(display, power_well))
return icl_tc_phy_aux_power_well_enable(display, power_well);
else if (display->platform.icelake)
return icl_combo_phy_aux_power_well_enable(display,
@@ -584,9 +599,7 @@ static void
icl_aux_power_well_disable(struct intel_display *display,
struct i915_power_well *power_well)
{
- enum phy phy = icl_aux_pw_to_phy(display, power_well);
-
- if (intel_phy_is_tc(display, phy))
+ if (icl_aux_pw_is_tc_phy(display, power_well))
return hsw_power_well_disable(display, power_well);
else if (display->platform.icelake)
return icl_combo_phy_aux_power_well_disable(display,
@@ -1845,7 +1858,7 @@ static void xelpdp_aux_power_well_enable(struct intel_display *display,
enum aux_ch aux_ch = i915_power_well_instance(power_well)->xelpdp.aux_ch;
enum phy phy = icl_aux_pw_to_phy(display, power_well);
- if (intel_phy_is_tc(display, phy))
+ if (icl_aux_pw_is_tc_phy(display, power_well))
icl_tc_port_assert_ref_held(display, power_well,
aux_ch_to_digital_port(display, aux_ch));
--
2.51.0
next prev parent reply other threads:[~2025-12-02 1:23 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-02 1:22 [PATCH v6 0/8] drm/i915/display: Add initial support Xe3p_LPD Matt Atwood
2025-12-02 1:22 ` [PATCH v6 1/8] drm/i915/vbt: Add fields dedicated_external and dyn_port_over_tc Matt Atwood
2025-12-02 1:23 ` Matt Atwood [this message]
2025-12-02 1:23 ` [PATCH v6 3/8] drm/i915/display: Handle dedicated external ports in intel_encoder_is_tc() Matt Atwood
2025-12-02 1:23 ` [PATCH v6 4/8] drm/i915/xe3p_lpd: Handle underrun debug bits Matt Atwood
2025-12-02 18:11 ` Matt Roper
2025-12-02 1:23 ` [PATCH v6 5/8] drm/i915/nvls: Add NVL-S display support Matt Atwood
2025-12-02 1:23 ` [PATCH v6 6/8] drm/i915/display: Use platform check in HAS_LT_PHY() Matt Atwood
2025-12-02 1:23 ` [PATCH v6 7/8] drm/i915/display: Move HAS_LT_PHY() to intel_display_device.h Matt Atwood
2025-12-02 1:23 ` [PATCH v6 8/8] drm/i915/display: Use HAS_LT_PHY() for LT PHY AUX power Matt Atwood
2025-12-02 3:23 ` ✗ CI.checkpatch: warning for drm/i915/display: Add initial support Xe3p_LPD Patchwork
2025-12-02 3:24 ` ✓ CI.KUnit: success " Patchwork
2025-12-02 3:40 ` ✗ CI.checksparse: warning " Patchwork
2025-12-02 3:58 ` ✓ Xe.CI.BAT: success " Patchwork
2025-12-02 6:55 ` ✗ Xe.CI.Full: failure " Patchwork
2025-12-02 17:24 ` Matt Atwood
2025-12-02 18:17 ` Matt Roper
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251202012306.9315-3-matthew.s.atwood@intel.com \
--to=matthew.s.atwood@intel.com \
--cc=ankit.k.nautiyal@Intel.com \
--cc=dnyaneshware.bhdane@intel.com \
--cc=gustavo.sousa@intel.com \
--cc=imre.deak@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=jani.nikula@intel.com \
--cc=jani.nikula@linux.intel.com \
--cc=jouni.hogander@intel.com \
--cc=juha-peka.heikkila@intel.com \
--cc=luciano.coelho@intel.com \
--cc=matthew.d.roper@intel.com \
--cc=ravi.kumar.vodapalli@intel.com \
--cc=sai.teja.pottumuttu@Intel.com \
--cc=shekhar.chauhan@intel.com \
--cc=suraj.kandapal@intel.com \
--cc=suraj.kandpal@intel.com \
--cc=ville.syrjala@linux.intel.com \
--cc=vinod.govindapillai@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox