* [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework
@ 2026-03-04 13:13 Mika Kahola
2026-03-04 13:14 ` [PATCH v2 01/24] drm/i915/lt_phy: Dump missing PLL state parameters Mika Kahola
` (28 more replies)
0 siblings, 29 replies; 62+ messages in thread
From: Mika Kahola @ 2026-03-04 13:13 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Mika Kahola
This is v2 of [1], with the following changes
- Split .enable_clock/disable_clock patch into separate, smaller patches
- Use PCLK ack register to check if PLL is locked or not
- Commit message updates
[1] https://lore.kernel.org/intel-gfx/20260213122615.1083654-1-mika.kahola@intel.com
Mika Kahola (24):
drm/i915/lt_phy: Dump missing PLL state parameters
drm/i915/lt_phy: Add check if PLL is enabled
drm/i915/lt_phy: Add PLL information for xe3plpd
drm/i915/lt_phy: Refactor LT PHY PLL handling to use explicit PLL
state
drm/i915/lt_phy: Add lane_count to PLL state
drm/i915/lt_phy: Add xe3plpd .compute_dplls hook
drm/i915/lt_phy: Add xe3plpd .get_dplls hook
drm/i915/lt_phy: Add xe3plpd .put_dplls hook
drm/i915/lt_phy: Add xe3plpd .update_active_dpll hook
drm/i915/lt_phy: Add xe3plpd .update_dpll_ref_clks hook
drm/i915/lt_phy: Add xe3plpd .dump_hw_state hook
drm/i915/lt_phy: Add xe3plpd .compare_hw_state hook
drm/i915/lt_phy: Add xe3plpd .get_hw_state hook
drm/i915/lt_phy: Add xe3plpd .get_freq hook
drm/i915/lt_phy: Add xe3plpd .crtc_get_dpll
drm/i915/lt_phy: Replace crtc compute clock
drm/i915/lt_phy: Add .enable_clock hook on DDI
drm/i915/lt_phy: Add .disable_clock hook on DDI
drm/i915/lt_phy: Dump lane count for HW state
drm/i915/lt_phy: Readout lane count
drm/i915/lt_phy: Get encoder configuration for xe3plpd platform
drm/i915/lt_phy: Add xe3plpd Thunderbolt pll hooks
drm/i915/lt_phy: Remove LT PHY specific state verification
drm/i915/lt_phy: Enable dpll framework for xe3plpd
drivers/gpu/drm/i915/display/intel_cx0_phy.c | 10 +-
drivers/gpu/drm/i915/display/intel_cx0_phy.h | 1 +
drivers/gpu/drm/i915/display/intel_ddi.c | 26 +--
drivers/gpu/drm/i915/display/intel_display.c | 32 ---
drivers/gpu/drm/i915/display/intel_dpll.c | 26 +--
drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 175 +++++++++++++++-
drivers/gpu/drm/i915/display/intel_dpll_mgr.h | 1 +
drivers/gpu/drm/i915/display/intel_lt_phy.c | 194 ++++++++++--------
drivers/gpu/drm/i915/display/intel_lt_phy.h | 26 ++-
.../drm/i915/display/intel_modeset_verify.c | 1 -
10 files changed, 319 insertions(+), 173 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 62+ messages in thread
* [PATCH v2 01/24] drm/i915/lt_phy: Dump missing PLL state parameters
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
@ 2026-03-04 13:14 ` Mika Kahola
2026-03-10 2:57 ` Kandpal, Suraj
2026-03-04 13:14 ` [PATCH v2 02/24] drm/i915/lt_phy: Add check if PLL is enabled Mika Kahola
` (27 subsequent siblings)
28 siblings, 1 reply; 62+ messages in thread
From: Mika Kahola @ 2026-03-04 13:14 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Mika Kahola
Dump missing PLL structure members ssc_enabled and tbt_mode
in order to enhance debugging.
v2: Drop addr_lsb and addr_msb printouts
Signed-off-by: Mika Kahola <mika.kahola@intel.com>
---
drivers/gpu/drm/i915/display/intel_lt_phy.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c b/drivers/gpu/drm/i915/display/intel_lt_phy.c
index eced8493e566..f768804122c1 100644
--- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
+++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
@@ -2141,7 +2141,9 @@ void intel_lt_phy_dump_hw_state(struct intel_display *display,
{
int i, j;
- drm_dbg_kms(display->drm, "lt_phy_pll_hw_state:\n");
+ drm_dbg_kms(display->drm, "lt_phy_pll_hw_state: ssc enabled: %d, tbt mode: %d\n",
+ hw_state->ssc_enabled, hw_state->tbt_mode);
+
for (i = 0; i < 3; i++) {
drm_dbg_kms(display->drm, "config[%d] = 0x%.4x,\n",
i, hw_state->config[i]);
--
2.43.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v2 02/24] drm/i915/lt_phy: Add check if PLL is enabled
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
2026-03-04 13:14 ` [PATCH v2 01/24] drm/i915/lt_phy: Dump missing PLL state parameters Mika Kahola
@ 2026-03-04 13:14 ` Mika Kahola
2026-03-10 3:09 ` Kandpal, Suraj
2026-03-04 13:14 ` [PATCH v2 03/24] drm/i915/lt_phy: Add PLL information for xe3plpd Mika Kahola
` (26 subsequent siblings)
28 siblings, 1 reply; 62+ messages in thread
From: Mika Kahola @ 2026-03-04 13:14 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Mika Kahola
Add check for PLL enabling and return early if
PLL is not enabled.
v2: Use PCLK PLL request to check if PLL is enabled (Suraj)
Signed-off-by: Mika Kahola <mika.kahola@intel.com>
---
drivers/gpu/drm/i915/display/intel_lt_phy.c | 24 +++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c b/drivers/gpu/drm/i915/display/intel_lt_phy.c
index f768804122c1..8fe61cfdb706 100644
--- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
+++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
@@ -2176,6 +2176,27 @@ intel_lt_phy_pll_compare_hw_state(const struct intel_lt_phy_pll_state *a,
return false;
}
+static u32 intel_lt_phy_get_pclk_pll_ack(u8 lane_mask)
+{
+ u32 val = 0;
+ int lane = 0;
+
+ for_each_lt_phy_lane_in_mask(lane_mask, lane)
+ val |= XELPDP_LANE_PCLK_PLL_ACK(lane);
+
+ return val;
+}
+
+static bool intel_lt_phy_pll_is_enabled(struct intel_encoder *encoder)
+{
+ struct intel_display *display = to_intel_display(encoder);
+ struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
+ u8 lane = dig_port->lane_reversal ? INTEL_LT_PHY_LANE1 : INTEL_LT_PHY_LANE0;
+
+ return intel_de_read(display, XELPDP_PORT_CLOCK_CTL(display, encoder->port)) &
+ intel_lt_phy_get_pclk_pll_ack(lane);
+}
+
void intel_lt_phy_pll_readout_hw_state(struct intel_encoder *encoder,
const struct intel_crtc_state *crtc_state,
struct intel_lt_phy_pll_state *pll_state)
@@ -2185,6 +2206,9 @@ void intel_lt_phy_pll_readout_hw_state(struct intel_encoder *encoder,
struct ref_tracker *wakeref;
int i, j, k;
+ if (!intel_lt_phy_pll_is_enabled(encoder))
+ return;
+
pll_state->tbt_mode = intel_tc_port_in_tbt_alt_mode(enc_to_dig_port(encoder));
if (pll_state->tbt_mode)
return;
--
2.43.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v2 03/24] drm/i915/lt_phy: Add PLL information for xe3plpd
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
2026-03-04 13:14 ` [PATCH v2 01/24] drm/i915/lt_phy: Dump missing PLL state parameters Mika Kahola
2026-03-04 13:14 ` [PATCH v2 02/24] drm/i915/lt_phy: Add check if PLL is enabled Mika Kahola
@ 2026-03-04 13:14 ` Mika Kahola
2026-03-10 3:54 ` Kandpal, Suraj
2026-03-04 13:14 ` [PATCH v2 04/24] drm/i915/lt_phy: Refactor LT PHY PLL handling to use explicit PLL state Mika Kahola
` (25 subsequent siblings)
28 siblings, 1 reply; 62+ messages in thread
From: Mika Kahola @ 2026-03-04 13:14 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Mika Kahola
Start bringing in xe3plpd as part of dpll framework. The work is
started by adding PLL information and related function hooks.
v2: Fix xe3plpd type (Suraj)
Remove empty line between BSpec link and Signed-off-by (Suraj)
BSpec: 74304
Signed-off-by: Mika Kahola <mika.kahola@intel.com>
---
drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
index f35a9252f4e1..4185c8e136da 100644
--- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
+++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
@@ -4571,6 +4571,25 @@ static const struct intel_dpll_mgr mtl_pll_mgr = {
.compare_hw_state = mtl_compare_hw_state,
};
+static const struct intel_dpll_funcs xe3plpd_pll_funcs = {
+};
+
+static const struct dpll_info xe3plpd_plls[] = {
+ { .name = "DPLL 0", .funcs = &xe3plpd_pll_funcs, .id = DPLL_ID_ICL_DPLL0, },
+ { .name = "DPLL 1", .funcs = &xe3plpd_pll_funcs, .id = DPLL_ID_ICL_DPLL1, },
+ /* TODO: Add TBT */
+ { .name = "TC PLL 1", .funcs = &xe3plpd_pll_funcs, .id = DPLL_ID_ICL_MGPLL1, },
+ { .name = "TC PLL 2", .funcs = &xe3plpd_pll_funcs, .id = DPLL_ID_ICL_MGPLL2, },
+ { .name = "TC PLL 3", .funcs = &xe3plpd_pll_funcs, .id = DPLL_ID_ICL_MGPLL3, },
+ { .name = "TC PLL 4", .funcs = &xe3plpd_pll_funcs, .id = DPLL_ID_ICL_MGPLL4, },
+ {}
+};
+
+__maybe_unused
+static const struct intel_dpll_mgr xe3plpd_pll_mgr = {
+ .dpll_info = xe3plpd_plls,
+};
+
/**
* intel_dpll_init - Initialize DPLLs
* @display: intel_display device
--
2.43.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v2 04/24] drm/i915/lt_phy: Refactor LT PHY PLL handling to use explicit PLL state
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
` (2 preceding siblings ...)
2026-03-04 13:14 ` [PATCH v2 03/24] drm/i915/lt_phy: Add PLL information for xe3plpd Mika Kahola
@ 2026-03-04 13:14 ` Mika Kahola
2026-03-04 14:04 ` Imre Deak
2026-03-10 13:36 ` [PATCH v3 03/24] " Mika Kahola
2026-03-04 13:14 ` [PATCH v2 05/24] drm/i915/lt_phy: Add lane_count to " Mika Kahola
` (24 subsequent siblings)
28 siblings, 2 replies; 62+ messages in thread
From: Mika Kahola @ 2026-03-04 13:14 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Mika Kahola
The LT PHY implementation currently pulls PLL and port_clock
information directly from the CRTC state. This ties the PHY
programming logic too tightly to the CRTC state and makes it
harder to clearly express the PHY’s own PLL configuration.
Introduce an explicit "struct intel_lt_phy_pll_state" argument
for the PHY functions and update callers accordingly.
No functional change is intended — this is a preparatory cleanup for
to bring LT PHY PLL handling as part of PLL framework.
Signed-off-by: Mika Kahola <mika.kahola@intel.com>
---
drivers/gpu/drm/i915/display/intel_lt_phy.c | 48 ++++++++++++---------
1 file changed, 27 insertions(+), 21 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c b/drivers/gpu/drm/i915/display/intel_lt_phy.c
index 8fe61cfdb706..ebdcab58df4a 100644
--- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
+++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
@@ -1178,7 +1178,8 @@ intel_lt_phy_lane_reset(struct intel_encoder *encoder,
static void
intel_lt_phy_program_port_clock_ctl(struct intel_encoder *encoder,
- const struct intel_crtc_state *crtc_state,
+ const struct intel_lt_phy_pll_state *ltpll,
+ int port_clock,
bool lane_reversal)
{
struct intel_display *display = to_intel_display(encoder);
@@ -1195,17 +1196,17 @@ intel_lt_phy_program_port_clock_ctl(struct intel_encoder *encoder,
* but since the register bits still remain the same we use
* the same definition
*/
- if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI) &&
- intel_hdmi_is_frl(crtc_state->port_clock))
+ if (encoder->type == INTEL_OUTPUT_HDMI &&
+ intel_hdmi_is_frl(port_clock))
val |= XELPDP_DDI_CLOCK_SELECT_PREP(display, XELPDP_DDI_CLOCK_SELECT_DIV18CLK);
else
val |= XELPDP_DDI_CLOCK_SELECT_PREP(display, XELPDP_DDI_CLOCK_SELECT_MAXPCLK);
/* DP2.0 10G and 20G rates enable MPLLA*/
- if (crtc_state->port_clock == 1000000 || crtc_state->port_clock == 2000000)
+ if (port_clock == 1000000 || port_clock == 2000000)
val |= XELPDP_SSC_ENABLE_PLLA;
else
- val |= crtc_state->dpll_hw_state.ltpll.ssc_enabled ? XELPDP_SSC_ENABLE_PLLB : 0;
+ val |= ltpll->ssc_enabled ? XELPDP_SSC_ENABLE_PLLB : 0;
intel_de_rmw(display, XELPDP_PORT_CLOCK_CTL(display, encoder->port),
XELPDP_LANE1_PHY_CLOCK_SELECT | XELPDP_FORWARD_CLOCK_UNGATE |
@@ -1248,10 +1249,12 @@ static u32 intel_lt_phy_get_dp_clock(u8 rate)
static bool
intel_lt_phy_config_changed(struct intel_encoder *encoder,
- const struct intel_crtc_state *crtc_state)
+ const struct intel_lt_phy_pll_state *ltpll)
{
+ struct intel_display *display = to_intel_display(encoder);
u8 val, rate;
u32 clock;
+ u32 port_clock = intel_lt_phy_calc_port_clock(display, ltpll);
val = intel_lt_phy_read(encoder, INTEL_LT_PHY_LANE0,
LT_PHY_VDR_0_CONFIG);
@@ -1262,9 +1265,10 @@ intel_lt_phy_config_changed(struct intel_encoder *encoder,
* using 1.62 Gbps clock since PHY PLL defaults to that
* otherwise we always need to reconfigure it.
*/
- if (intel_crtc_has_dp_encoder(crtc_state)) {
+ if (encoder->type == INTEL_OUTPUT_DP ||
+ encoder->type == INTEL_OUTPUT_EDP) {
clock = intel_lt_phy_get_dp_clock(rate);
- if (crtc_state->port_clock == 1620000 && crtc_state->port_clock == clock)
+ if (port_clock == 1620000 && port_clock == clock)
return false;
}
@@ -1759,41 +1763,41 @@ intel_lt_phy_pll_calc_state(struct intel_crtc_state *crtc_state,
static void
intel_lt_phy_program_pll(struct intel_encoder *encoder,
- const struct intel_crtc_state *crtc_state)
+ const struct intel_lt_phy_pll_state *ltpll)
{
u8 owned_lane_mask = intel_lt_phy_get_owned_lane_mask(encoder);
int i, j, k;
intel_lt_phy_write(encoder, owned_lane_mask, LT_PHY_VDR_0_CONFIG,
- crtc_state->dpll_hw_state.ltpll.config[0], MB_WRITE_COMMITTED);
+ ltpll->config[0], MB_WRITE_COMMITTED);
intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0, LT_PHY_VDR_1_CONFIG,
- crtc_state->dpll_hw_state.ltpll.config[1], MB_WRITE_COMMITTED);
+ ltpll->config[1], MB_WRITE_COMMITTED);
intel_lt_phy_write(encoder, owned_lane_mask, LT_PHY_VDR_2_CONFIG,
- crtc_state->dpll_hw_state.ltpll.config[2], MB_WRITE_COMMITTED);
+ ltpll->config[2], MB_WRITE_COMMITTED);
for (i = 0; i <= 12; i++) {
intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0, LT_PHY_VDR_X_ADDR_MSB(i),
- crtc_state->dpll_hw_state.ltpll.addr_msb[i],
+ ltpll->addr_msb[i],
MB_WRITE_COMMITTED);
intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0, LT_PHY_VDR_X_ADDR_LSB(i),
- crtc_state->dpll_hw_state.ltpll.addr_lsb[i],
+ ltpll->addr_lsb[i],
MB_WRITE_COMMITTED);
for (j = 3, k = 0; j >= 0; j--, k++)
intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0,
LT_PHY_VDR_X_DATAY(i, j),
- crtc_state->dpll_hw_state.ltpll.data[i][k],
+ ltpll->data[i][k],
MB_WRITE_COMMITTED);
}
}
static void
intel_lt_phy_enable_disable_tx(struct intel_encoder *encoder,
- const struct intel_crtc_state *crtc_state)
+ const struct intel_lt_phy_pll_state *ltpll,
+ u8 lane_count)
{
struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
bool lane_reversal = dig_port->lane_reversal;
- u8 lane_count = crtc_state->lane_count;
bool is_dp_alt =
intel_tc_port_in_dp_alt_mode(dig_port);
enum intel_tc_pin_assignment tc_pin =
@@ -1895,7 +1899,8 @@ void intel_lt_phy_pll_enable(struct intel_encoder *encoder,
intel_lt_phy_lane_reset(encoder, crtc_state->lane_count);
/* 2. Program PORT_CLOCK_CTL register to configure clock muxes, gating, and SSC. */
- intel_lt_phy_program_port_clock_ctl(encoder, crtc_state, lane_reversal);
+ intel_lt_phy_program_port_clock_ctl(encoder, &crtc_state->dpll_hw_state.ltpll,
+ crtc_state->port_clock, lane_reversal);
/* 3. Change owned PHY lanes power to Ready state. */
intel_lt_phy_powerdown_change_sequence(encoder, owned_lane_mask,
@@ -1905,12 +1910,12 @@ void intel_lt_phy_pll_enable(struct intel_encoder *encoder,
* 4. Read the PHY message bus VDR register PHY_VDR_0_Config check enabled PLL type,
* encoded rate and encoded mode.
*/
- if (intel_lt_phy_config_changed(encoder, crtc_state)) {
+ if (intel_lt_phy_config_changed(encoder, &crtc_state->dpll_hw_state.ltpll)) {
/*
* 5. Program the PHY internal PLL registers over PHY message bus for the desired
* frequency and protocol type
*/
- intel_lt_phy_program_pll(encoder, crtc_state);
+ intel_lt_phy_program_pll(encoder, &crtc_state->dpll_hw_state.ltpll);
/* 6. Use the P2P transaction flow */
/*
@@ -2001,7 +2006,8 @@ void intel_lt_phy_pll_enable(struct intel_encoder *encoder,
intel_lt_phy_powerdown_change_sequence(encoder, owned_lane_mask,
XELPDP_P0_STATE_ACTIVE);
- intel_lt_phy_enable_disable_tx(encoder, crtc_state);
+ intel_lt_phy_enable_disable_tx(encoder, &crtc_state->dpll_hw_state.ltpll,
+ crtc_state->lane_count);
intel_lt_phy_transaction_end(encoder, wakeref);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v2 05/24] drm/i915/lt_phy: Add lane_count to PLL state
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
` (3 preceding siblings ...)
2026-03-04 13:14 ` [PATCH v2 04/24] drm/i915/lt_phy: Refactor LT PHY PLL handling to use explicit PLL state Mika Kahola
@ 2026-03-04 13:14 ` Mika Kahola
2026-03-10 4:05 ` Kandpal, Suraj
2026-03-04 13:14 ` [PATCH v2 06/24] drm/i915/lt_phy: Add xe3plpd .compute_dplls hook Mika Kahola
` (23 subsequent siblings)
28 siblings, 1 reply; 62+ messages in thread
From: Mika Kahola @ 2026-03-04 13:14 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Mika Kahola
Cache lane count as part of PLL state.
Signed-off-by: Mika Kahola <mika.kahola@intel.com>
---
drivers/gpu/drm/i915/display/intel_dpll_mgr.h | 1 +
drivers/gpu/drm/i915/display/intel_lt_phy.c | 9 +++++----
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.h b/drivers/gpu/drm/i915/display/intel_dpll_mgr.h
index 4cc14ce5eebe..d408ccf6f902 100644
--- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.h
+++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.h
@@ -278,6 +278,7 @@ struct intel_lt_phy_pll_state {
u8 config[3];
bool ssc_enabled;
bool tbt_mode;
+ int lane_count;
};
struct intel_dpll_hw_state {
diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c b/drivers/gpu/drm/i915/display/intel_lt_phy.c
index ebdcab58df4a..07eab4d7bcff 100644
--- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
+++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
@@ -1749,11 +1749,13 @@ intel_lt_phy_pll_calc_state(struct intel_crtc_state *crtc_state,
}
crtc_state->dpll_hw_state.ltpll.ssc_enabled =
intel_lt_phy_pll_is_ssc_enabled(crtc_state, encoder);
+ crtc_state->dpll_hw_state.ltpll.lane_count = crtc_state->lane_count;
return 0;
}
}
if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) {
+ crtc_state->dpll_hw_state.ltpll.lane_count = crtc_state->lane_count;
return intel_lt_phy_calculate_hdmi_state(&crtc_state->dpll_hw_state.ltpll,
crtc_state->port_clock);
}
@@ -1793,11 +1795,11 @@ intel_lt_phy_program_pll(struct intel_encoder *encoder,
static void
intel_lt_phy_enable_disable_tx(struct intel_encoder *encoder,
- const struct intel_lt_phy_pll_state *ltpll,
- u8 lane_count)
+ const struct intel_lt_phy_pll_state *ltpll)
{
struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
bool lane_reversal = dig_port->lane_reversal;
+ u8 lane_count = ltpll->lane_count;
bool is_dp_alt =
intel_tc_port_in_dp_alt_mode(dig_port);
enum intel_tc_pin_assignment tc_pin =
@@ -2006,8 +2008,7 @@ void intel_lt_phy_pll_enable(struct intel_encoder *encoder,
intel_lt_phy_powerdown_change_sequence(encoder, owned_lane_mask,
XELPDP_P0_STATE_ACTIVE);
- intel_lt_phy_enable_disable_tx(encoder, &crtc_state->dpll_hw_state.ltpll,
- crtc_state->lane_count);
+ intel_lt_phy_enable_disable_tx(encoder, &crtc_state->dpll_hw_state.ltpll);
intel_lt_phy_transaction_end(encoder, wakeref);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v2 06/24] drm/i915/lt_phy: Add xe3plpd .compute_dplls hook
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
` (4 preceding siblings ...)
2026-03-04 13:14 ` [PATCH v2 05/24] drm/i915/lt_phy: Add lane_count to " Mika Kahola
@ 2026-03-04 13:14 ` Mika Kahola
2026-03-10 5:02 ` Kandpal, Suraj
2026-03-04 13:14 ` [PATCH v2 07/24] drm/i915/lt_phy: Add xe3plpd .get_dplls hook Mika Kahola
` (22 subsequent siblings)
28 siblings, 1 reply; 62+ messages in thread
From: Mika Kahola @ 2026-03-04 13:14 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Mika Kahola
Add compute dpll hook for xe3plpd platform and bring
PLL state calculation to support PLL framework.
Signed-off-by: Mika Kahola <mika.kahola@intel.com>
---
drivers/gpu/drm/i915/display/intel_dpll.c | 2 +-
drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 65 +++++++++++++++++++
drivers/gpu/drm/i915/display/intel_lt_phy.c | 17 +++--
drivers/gpu/drm/i915/display/intel_lt_phy.h | 3 +-
4 files changed, 78 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dpll.c b/drivers/gpu/drm/i915/display/intel_dpll.c
index 8433e3ff0319..147baa777856 100644
--- a/drivers/gpu/drm/i915/display/intel_dpll.c
+++ b/drivers/gpu/drm/i915/display/intel_dpll.c
@@ -1222,7 +1222,7 @@ static int xe3plpd_crtc_compute_clock(struct intel_atomic_state *state,
struct intel_display *display = to_intel_display(encoder);
int ret;
- ret = intel_lt_phy_pll_calc_state(crtc_state, encoder);
+ ret = intel_lt_phy_pll_calc_state(crtc_state, encoder, &crtc_state->dpll_hw_state);
if (ret)
return ret;
diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
index 4185c8e136da..58c24e2164ca 100644
--- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
+++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
@@ -4585,9 +4585,74 @@ static const struct dpll_info xe3plpd_plls[] = {
{}
};
+static int xe3plpd_compute_non_tc_phy_dpll(struct intel_atomic_state *state,
+ struct intel_crtc *crtc,
+ struct intel_encoder *encoder)
+{
+ struct intel_display *display = to_intel_display(encoder);
+ struct intel_crtc_state *crtc_state =
+ intel_atomic_get_new_crtc_state(state, crtc);
+ struct icl_port_dpll *port_dpll =
+ &crtc_state->icl_port_dplls[ICL_PORT_DPLL_DEFAULT];
+ int ret;
+
+ ret = intel_lt_phy_pll_calc_state(crtc_state, encoder, &port_dpll->hw_state);
+ if (ret)
+ return ret;
+
+ /* this is mainly for the fastset check */
+ icl_set_active_port_dpll(crtc_state, ICL_PORT_DPLL_DEFAULT);
+
+ crtc_state->port_clock = intel_lt_phy_calc_port_clock(display, &port_dpll->hw_state.ltpll);
+
+ return 0;
+}
+
+static int xe3plpd_compute_tc_phy_dplls(struct intel_atomic_state *state,
+ struct intel_crtc *crtc,
+ struct intel_encoder *encoder)
+{
+ struct intel_display *display = to_intel_display(encoder);
+ struct intel_crtc_state *crtc_state =
+ intel_atomic_get_new_crtc_state(state, crtc);
+ const struct intel_crtc_state *old_crtc_state =
+ intel_atomic_get_old_crtc_state(state, crtc);
+ struct icl_port_dpll *port_dpll;
+ int ret;
+
+ /* TODO: Add state calculation for TBT PLL */
+
+ port_dpll = &crtc_state->icl_port_dplls[ICL_PORT_DPLL_MG_PHY];
+ ret = intel_lt_phy_pll_calc_state(crtc_state, encoder, &port_dpll->hw_state);
+ if (ret)
+ return ret;
+
+ /* this is mainly for the fastset check */
+ if (old_crtc_state->intel_dpll &&
+ old_crtc_state->intel_dpll->info->id == DPLL_ID_ICL_TBTPLL)
+ icl_set_active_port_dpll(crtc_state, ICL_PORT_DPLL_DEFAULT);
+ else
+ icl_set_active_port_dpll(crtc_state, ICL_PORT_DPLL_MG_PHY);
+
+ crtc_state->port_clock = intel_lt_phy_calc_port_clock(display, &port_dpll->hw_state.ltpll);
+
+ return 0;
+}
+
+static int xe3plpd_compute_dplls(struct intel_atomic_state *state,
+ struct intel_crtc *crtc,
+ struct intel_encoder *encoder)
+{
+ if (intel_encoder_is_tc(encoder))
+ return xe3plpd_compute_tc_phy_dplls(state, crtc, encoder);
+ else
+ return xe3plpd_compute_non_tc_phy_dpll(state, crtc, encoder);
+}
+
__maybe_unused
static const struct intel_dpll_mgr xe3plpd_pll_mgr = {
.dpll_info = xe3plpd_plls,
+ .compute_dplls = xe3plpd_compute_dplls,
};
/**
diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c b/drivers/gpu/drm/i915/display/intel_lt_phy.c
index 07eab4d7bcff..ca31b3c1440c 100644
--- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
+++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
@@ -1727,12 +1727,15 @@ intel_lt_phy_calc_port_clock(struct intel_display *display,
int
intel_lt_phy_pll_calc_state(struct intel_crtc_state *crtc_state,
- struct intel_encoder *encoder)
+ struct intel_encoder *encoder,
+ struct intel_dpll_hw_state *hw_state)
{
struct intel_display *display = to_intel_display(crtc_state);
const struct intel_lt_phy_pll_params *tables;
int i;
+ memset(hw_state, 0, sizeof(*hw_state));
+
tables = intel_lt_phy_pll_tables_get(crtc_state, encoder);
if (!tables)
return -EINVAL;
@@ -1742,21 +1745,21 @@ intel_lt_phy_pll_calc_state(struct intel_crtc_state *crtc_state,
drm_WARN_ON(display->drm, !intel_dpll_clock_matches(clock, tables[i].clock_rate));
if (intel_dpll_clock_matches(crtc_state->port_clock, clock)) {
- crtc_state->dpll_hw_state.ltpll = *tables[i].state;
+ hw_state->ltpll = *tables[i].state;
if (intel_crtc_has_dp_encoder(crtc_state)) {
if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP))
- crtc_state->dpll_hw_state.ltpll.config[2] = 1;
+ hw_state->ltpll.config[2] = 1;
}
- crtc_state->dpll_hw_state.ltpll.ssc_enabled =
+ hw_state->ltpll.ssc_enabled =
intel_lt_phy_pll_is_ssc_enabled(crtc_state, encoder);
- crtc_state->dpll_hw_state.ltpll.lane_count = crtc_state->lane_count;
+ hw_state->ltpll.lane_count = crtc_state->lane_count;
return 0;
}
}
if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) {
- crtc_state->dpll_hw_state.ltpll.lane_count = crtc_state->lane_count;
- return intel_lt_phy_calculate_hdmi_state(&crtc_state->dpll_hw_state.ltpll,
+ hw_state->ltpll.lane_count = crtc_state->lane_count;
+ return intel_lt_phy_calculate_hdmi_state(&hw_state->ltpll,
crtc_state->port_clock);
}
diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.h b/drivers/gpu/drm/i915/display/intel_lt_phy.h
index db905668f86d..61ec0e5d8888 100644
--- a/drivers/gpu/drm/i915/display/intel_lt_phy.h
+++ b/drivers/gpu/drm/i915/display/intel_lt_phy.h
@@ -20,7 +20,8 @@ void intel_lt_phy_pll_enable(struct intel_encoder *encoder,
void intel_lt_phy_pll_disable(struct intel_encoder *encoder);
int
intel_lt_phy_pll_calc_state(struct intel_crtc_state *crtc_state,
- struct intel_encoder *encoder);
+ struct intel_encoder *encoder,
+ struct intel_dpll_hw_state *hw_state);
int intel_lt_phy_calc_port_clock(struct intel_display *display,
const struct intel_lt_phy_pll_state *lt_state);
void intel_lt_phy_set_signal_levels(struct intel_encoder *encoder,
--
2.43.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v2 07/24] drm/i915/lt_phy: Add xe3plpd .get_dplls hook
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
` (5 preceding siblings ...)
2026-03-04 13:14 ` [PATCH v2 06/24] drm/i915/lt_phy: Add xe3plpd .compute_dplls hook Mika Kahola
@ 2026-03-04 13:14 ` Mika Kahola
2026-03-04 13:14 ` [PATCH v2 08/24] drm/i915/lt_phy: Add xe3plpd .put_dplls hook Mika Kahola
` (21 subsequent siblings)
28 siblings, 0 replies; 62+ messages in thread
From: Mika Kahola @ 2026-03-04 13:14 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Mika Kahola, Suraj Kandpal
Add .get_dplls function pointer for xe3plpd platforms
to support dpll framework. Reuse the ICL function
pointer.
Signed-off-by: Mika Kahola <mika.kahola@intel.com>
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
---
drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
index 58c24e2164ca..9aa8eb0a7d4a 100644
--- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
+++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
@@ -4653,6 +4653,7 @@ __maybe_unused
static const struct intel_dpll_mgr xe3plpd_pll_mgr = {
.dpll_info = xe3plpd_plls,
.compute_dplls = xe3plpd_compute_dplls,
+ .get_dplls = mtl_get_dplls,
};
/**
--
2.43.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v2 08/24] drm/i915/lt_phy: Add xe3plpd .put_dplls hook
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
` (6 preceding siblings ...)
2026-03-04 13:14 ` [PATCH v2 07/24] drm/i915/lt_phy: Add xe3plpd .get_dplls hook Mika Kahola
@ 2026-03-04 13:14 ` Mika Kahola
2026-03-04 13:14 ` [PATCH v2 09/24] drm/i915/lt_phy: Add xe3plpd .update_active_dpll hook Mika Kahola
` (20 subsequent siblings)
28 siblings, 0 replies; 62+ messages in thread
From: Mika Kahola @ 2026-03-04 13:14 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Mika Kahola, Suraj Kandpal
Add .put_dplls function pointer to support xe3plpd platform
on dpll framework. Reuse ICL function pointer.
Signed-off-by: Mika Kahola <mika.kahola@intel.com>
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
---
drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
index 9aa8eb0a7d4a..af2613eeaf92 100644
--- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
+++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
@@ -4654,6 +4654,7 @@ static const struct intel_dpll_mgr xe3plpd_pll_mgr = {
.dpll_info = xe3plpd_plls,
.compute_dplls = xe3plpd_compute_dplls,
.get_dplls = mtl_get_dplls,
+ .put_dplls = icl_put_dplls,
};
/**
--
2.43.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v2 09/24] drm/i915/lt_phy: Add xe3plpd .update_active_dpll hook
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
` (7 preceding siblings ...)
2026-03-04 13:14 ` [PATCH v2 08/24] drm/i915/lt_phy: Add xe3plpd .put_dplls hook Mika Kahola
@ 2026-03-04 13:14 ` Mika Kahola
2026-03-04 13:14 ` [PATCH v2 10/24] drm/i915/lt_phy: Add xe3plpd .update_dpll_ref_clks hook Mika Kahola
` (19 subsequent siblings)
28 siblings, 0 replies; 62+ messages in thread
From: Mika Kahola @ 2026-03-04 13:14 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Mika Kahola, Suraj Kandpal
Add .update_active_dpll function pointer to support
dpll framework for xe3plpd platform. Reuse ICL function
pointer.
Signed-off-by: Mika Kahola <mika.kahola@intel.com>
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
---
drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
index af2613eeaf92..c1ed44b23bba 100644
--- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
+++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
@@ -4655,6 +4655,7 @@ static const struct intel_dpll_mgr xe3plpd_pll_mgr = {
.compute_dplls = xe3plpd_compute_dplls,
.get_dplls = mtl_get_dplls,
.put_dplls = icl_put_dplls,
+ .update_active_dpll = icl_update_active_dpll,
};
/**
--
2.43.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v2 10/24] drm/i915/lt_phy: Add xe3plpd .update_dpll_ref_clks hook
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
` (8 preceding siblings ...)
2026-03-04 13:14 ` [PATCH v2 09/24] drm/i915/lt_phy: Add xe3plpd .update_active_dpll hook Mika Kahola
@ 2026-03-04 13:14 ` Mika Kahola
2026-03-04 13:14 ` [PATCH v2 11/24] drm/i915/lt_phy: Add xe3plpd .dump_hw_state hook Mika Kahola
` (18 subsequent siblings)
28 siblings, 0 replies; 62+ messages in thread
From: Mika Kahola @ 2026-03-04 13:14 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Mika Kahola, Suraj Kandpal
Add .update_dpll_ref_clks function pointer to xe3plpd
platform to support dpll framework. Reuse ICL
function pointer.
Signed-off-by: Mika Kahola <mika.kahola@intel.com>
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
---
drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
index c1ed44b23bba..b50f02303356 100644
--- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
+++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
@@ -4656,6 +4656,7 @@ static const struct intel_dpll_mgr xe3plpd_pll_mgr = {
.get_dplls = mtl_get_dplls,
.put_dplls = icl_put_dplls,
.update_active_dpll = icl_update_active_dpll,
+ .update_ref_clks = icl_update_dpll_ref_clks,
};
/**
--
2.43.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v2 11/24] drm/i915/lt_phy: Add xe3plpd .dump_hw_state hook
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
` (9 preceding siblings ...)
2026-03-04 13:14 ` [PATCH v2 10/24] drm/i915/lt_phy: Add xe3plpd .update_dpll_ref_clks hook Mika Kahola
@ 2026-03-04 13:14 ` Mika Kahola
2026-03-10 6:19 ` Kandpal, Suraj
2026-03-04 13:14 ` [PATCH v2 12/24] drm/i915/lt_phy: Add xe3plpd .compare_hw_state hook Mika Kahola
` (17 subsequent siblings)
28 siblings, 1 reply; 62+ messages in thread
From: Mika Kahola @ 2026-03-04 13:14 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Mika Kahola
Add .dump_hw_state function pointer for xe3plpd platform
to support dpll framework. While at it, switch to use
drm_printer structure to print hw state information.
Signed-off-by: Mika Kahola <mika.kahola@intel.com>
---
drivers/gpu/drm/i915/display/intel_display.c | 5 ++---
drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 7 +++++++
drivers/gpu/drm/i915/display/intel_lt_phy.c | 16 ++++++++--------
drivers/gpu/drm/i915/display/intel_lt_phy.h | 3 ++-
4 files changed, 19 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 27354585ba92..d67ec81c0b01 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -5065,15 +5065,14 @@ pipe_config_lt_phy_pll_mismatch(struct drm_printer *p, bool fastset,
const struct intel_lt_phy_pll_state *a,
const struct intel_lt_phy_pll_state *b)
{
- struct intel_display *display = to_intel_display(crtc);
char *chipname = "LTPHY";
pipe_config_mismatch(p, fastset, crtc, name, chipname);
drm_printf(p, "expected:\n");
- intel_lt_phy_dump_hw_state(display, a);
+ intel_lt_phy_dump_hw_state(p, a);
drm_printf(p, "found:\n");
- intel_lt_phy_dump_hw_state(display, b);
+ intel_lt_phy_dump_hw_state(p, b);
}
bool
diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
index b50f02303356..26b78063dd94 100644
--- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
+++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
@@ -4649,6 +4649,12 @@ static int xe3plpd_compute_dplls(struct intel_atomic_state *state,
return xe3plpd_compute_non_tc_phy_dpll(state, crtc, encoder);
}
+static void xe3plpd_dump_hw_state(struct drm_printer *p,
+ const struct intel_dpll_hw_state *dpll_hw_state)
+{
+ intel_lt_phy_dump_hw_state(p, &dpll_hw_state->ltpll);
+}
+
__maybe_unused
static const struct intel_dpll_mgr xe3plpd_pll_mgr = {
.dpll_info = xe3plpd_plls,
@@ -4657,6 +4663,7 @@ static const struct intel_dpll_mgr xe3plpd_pll_mgr = {
.put_dplls = icl_put_dplls,
.update_active_dpll = icl_update_active_dpll,
.update_ref_clks = icl_update_dpll_ref_clks,
+ .dump_hw_state = xe3plpd_dump_hw_state,
};
/**
diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c b/drivers/gpu/drm/i915/display/intel_lt_phy.c
index ca31b3c1440c..923ee132ec3c 100644
--- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
+++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
@@ -2146,23 +2146,23 @@ void intel_lt_phy_set_signal_levels(struct intel_encoder *encoder,
intel_lt_phy_transaction_end(encoder, wakeref);
}
-void intel_lt_phy_dump_hw_state(struct intel_display *display,
+void intel_lt_phy_dump_hw_state(struct drm_printer *p,
const struct intel_lt_phy_pll_state *hw_state)
{
int i, j;
- drm_dbg_kms(display->drm, "lt_phy_pll_hw_state: ssc enabled: %d, tbt mode: %d\n",
- hw_state->ssc_enabled, hw_state->tbt_mode);
+ drm_printf(p, "lt_phy_pll_hw_state: ssc enabled: %d, tbt mode: %d\n",
+ hw_state->ssc_enabled, hw_state->tbt_mode);
for (i = 0; i < 3; i++) {
- drm_dbg_kms(display->drm, "config[%d] = 0x%.4x,\n",
- i, hw_state->config[i]);
+ drm_printf(p, "config[%d] = 0x%.4x,\n",
+ i, hw_state->config[i]);
}
for (i = 0; i <= 12; i++)
for (j = 3; j >= 0; j--)
- drm_dbg_kms(display->drm, "vdr_data[%d][%d] = 0x%.4x,\n",
- i, j, hw_state->data[i][j]);
+ drm_printf(p, "vdr_data[%d][%d] = 0x%.4x,\n",
+ i, j, hw_state->data[i][j]);
}
bool
@@ -2330,7 +2330,7 @@ static void intel_lt_phy_pll_verify_clock(struct intel_display *display,
drm_printf(&p, "PLL state %s (%s):\n",
pll_state_name,
is_precomputed_state ? "precomputed" : "computed");
- intel_lt_phy_dump_hw_state(display, pll_state);
+ intel_lt_phy_dump_hw_state(&p, pll_state);
}
static void intel_lt_phy_pll_verify_params(struct intel_display *display,
diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.h b/drivers/gpu/drm/i915/display/intel_lt_phy.h
index 61ec0e5d8888..b208bbd6f8ca 100644
--- a/drivers/gpu/drm/i915/display/intel_lt_phy.h
+++ b/drivers/gpu/drm/i915/display/intel_lt_phy.h
@@ -8,6 +8,7 @@
#include <linux/types.h>
+struct drm_printer;
struct intel_atomic_state;
struct intel_display;
struct intel_encoder;
@@ -26,7 +27,7 @@ int intel_lt_phy_calc_port_clock(struct intel_display *display,
const struct intel_lt_phy_pll_state *lt_state);
void intel_lt_phy_set_signal_levels(struct intel_encoder *encoder,
const struct intel_crtc_state *crtc_state);
-void intel_lt_phy_dump_hw_state(struct intel_display *display,
+void intel_lt_phy_dump_hw_state(struct drm_printer *p,
const struct intel_lt_phy_pll_state *hw_state);
bool
intel_lt_phy_pll_compare_hw_state(const struct intel_lt_phy_pll_state *a,
--
2.43.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v2 12/24] drm/i915/lt_phy: Add xe3plpd .compare_hw_state hook
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
` (10 preceding siblings ...)
2026-03-04 13:14 ` [PATCH v2 11/24] drm/i915/lt_phy: Add xe3plpd .dump_hw_state hook Mika Kahola
@ 2026-03-04 13:14 ` Mika Kahola
2026-03-10 6:23 ` Kandpal, Suraj
2026-03-04 13:14 ` [PATCH v2 13/24] drm/i915/lt_phy: Add xe3plpd .get_hw_state hook Mika Kahola
` (16 subsequent siblings)
28 siblings, 1 reply; 62+ messages in thread
From: Mika Kahola @ 2026-03-04 13:14 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Mika Kahola
Add .compare_hw_state function pointer for xe3plpd platform
to support dpll framework.
Signed-off-by: Mika Kahola <mika.kahola@intel.com>
---
drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
index 26b78063dd94..c1d7d9909544 100644
--- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
+++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
@@ -4655,6 +4655,15 @@ static void xe3plpd_dump_hw_state(struct drm_printer *p,
intel_lt_phy_dump_hw_state(p, &dpll_hw_state->ltpll);
}
+static bool xe3plpd_compare_hw_state(const struct intel_dpll_hw_state *_a,
+ const struct intel_dpll_hw_state *_b)
+{
+ const struct intel_lt_phy_pll_state *a = &_a->ltpll;
+ const struct intel_lt_phy_pll_state *b = &_b->ltpll;
+
+ return intel_lt_phy_pll_compare_hw_state(a, b);
+}
+
__maybe_unused
static const struct intel_dpll_mgr xe3plpd_pll_mgr = {
.dpll_info = xe3plpd_plls,
@@ -4664,6 +4673,7 @@ static const struct intel_dpll_mgr xe3plpd_pll_mgr = {
.update_active_dpll = icl_update_active_dpll,
.update_ref_clks = icl_update_dpll_ref_clks,
.dump_hw_state = xe3plpd_dump_hw_state,
+ .compare_hw_state = xe3plpd_compare_hw_state,
};
/**
--
2.43.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v2 13/24] drm/i915/lt_phy: Add xe3plpd .get_hw_state hook
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
` (11 preceding siblings ...)
2026-03-04 13:14 ` [PATCH v2 12/24] drm/i915/lt_phy: Add xe3plpd .compare_hw_state hook Mika Kahola
@ 2026-03-04 13:14 ` Mika Kahola
2026-03-04 13:14 ` [PATCH v2 14/24] drm/i915/lt_phy: Add xe3plpd .get_freq hook Mika Kahola
` (15 subsequent siblings)
28 siblings, 0 replies; 62+ messages in thread
From: Mika Kahola @ 2026-03-04 13:14 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Mika Kahola, Suraj Kandpal
Add .get_hw_state hook to xe3plpd platform for dpll framework
and update intel_lt_phy_pll_readout_hw_state() function
accordingly to support dpll framework.
Signed-off-by: Mika Kahola <mika.kahola@intel.com>
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
---
drivers/gpu/drm/i915/display/intel_ddi.c | 2 +-
drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 13 +++++++++++++
drivers/gpu/drm/i915/display/intel_lt_phy.c | 11 ++++++-----
drivers/gpu/drm/i915/display/intel_lt_phy.h | 3 +--
4 files changed, 21 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index 94ae583e907f..76ba308f32ad 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -4248,7 +4248,7 @@ static void xe3plpd_ddi_get_config(struct intel_encoder *encoder,
{
struct intel_display *display = to_intel_display(encoder);
- intel_lt_phy_pll_readout_hw_state(encoder, crtc_state, &crtc_state->dpll_hw_state.ltpll);
+ intel_lt_phy_pll_readout_hw_state(encoder, &crtc_state->dpll_hw_state.ltpll);
if (crtc_state->dpll_hw_state.ltpll.tbt_mode)
crtc_state->port_clock = intel_mtl_tbt_calc_port_clock(encoder);
diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
index c1d7d9909544..6502916793f5 100644
--- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
+++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
@@ -4571,7 +4571,20 @@ static const struct intel_dpll_mgr mtl_pll_mgr = {
.compare_hw_state = mtl_compare_hw_state,
};
+static bool xe3plpd_pll_get_hw_state(struct intel_display *display,
+ struct intel_dpll *pll,
+ struct intel_dpll_hw_state *dpll_hw_state)
+{
+ struct intel_encoder *encoder = get_intel_encoder(display, pll);
+
+ if (!encoder)
+ return false;
+
+ return intel_lt_phy_pll_readout_hw_state(encoder, &dpll_hw_state->ltpll);
+}
+
static const struct intel_dpll_funcs xe3plpd_pll_funcs = {
+ .get_hw_state = xe3plpd_pll_get_hw_state,
};
static const struct dpll_info xe3plpd_plls[] = {
diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c b/drivers/gpu/drm/i915/display/intel_lt_phy.c
index 923ee132ec3c..c3686ac6adc9 100644
--- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
+++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
@@ -2207,8 +2207,7 @@ static bool intel_lt_phy_pll_is_enabled(struct intel_encoder *encoder)
intel_lt_phy_get_pclk_pll_ack(lane);
}
-void intel_lt_phy_pll_readout_hw_state(struct intel_encoder *encoder,
- const struct intel_crtc_state *crtc_state,
+bool intel_lt_phy_pll_readout_hw_state(struct intel_encoder *encoder,
struct intel_lt_phy_pll_state *pll_state)
{
u8 owned_lane_mask;
@@ -2217,11 +2216,11 @@ void intel_lt_phy_pll_readout_hw_state(struct intel_encoder *encoder,
int i, j, k;
if (!intel_lt_phy_pll_is_enabled(encoder))
- return;
+ return false;
pll_state->tbt_mode = intel_tc_port_in_tbt_alt_mode(enc_to_dig_port(encoder));
if (pll_state->tbt_mode)
- return;
+ return false;
owned_lane_mask = intel_lt_phy_get_owned_lane_mask(encoder);
lane = owned_lane_mask & INTEL_LT_PHY_LANE0 ? : INTEL_LT_PHY_LANE1;
@@ -2239,6 +2238,8 @@ void intel_lt_phy_pll_readout_hw_state(struct intel_encoder *encoder,
}
intel_lt_phy_transaction_end(encoder, wakeref);
+
+ return true;
}
void intel_lt_phy_pll_state_verify(struct intel_atomic_state *state,
@@ -2264,7 +2265,7 @@ void intel_lt_phy_pll_state_verify(struct intel_atomic_state *state,
return;
encoder = intel_get_crtc_new_encoder(state, new_crtc_state);
- intel_lt_phy_pll_readout_hw_state(encoder, new_crtc_state, &pll_hw_state);
+ intel_lt_phy_pll_readout_hw_state(encoder, &pll_hw_state);
dig_port = enc_to_dig_port(encoder);
if (intel_tc_port_in_tbt_alt_mode(dig_port))
diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.h b/drivers/gpu/drm/i915/display/intel_lt_phy.h
index b208bbd6f8ca..0053bb5489e5 100644
--- a/drivers/gpu/drm/i915/display/intel_lt_phy.h
+++ b/drivers/gpu/drm/i915/display/intel_lt_phy.h
@@ -32,8 +32,7 @@ void intel_lt_phy_dump_hw_state(struct drm_printer *p,
bool
intel_lt_phy_pll_compare_hw_state(const struct intel_lt_phy_pll_state *a,
const struct intel_lt_phy_pll_state *b);
-void intel_lt_phy_pll_readout_hw_state(struct intel_encoder *encoder,
- const struct intel_crtc_state *crtc_state,
+bool intel_lt_phy_pll_readout_hw_state(struct intel_encoder *encoder,
struct intel_lt_phy_pll_state *pll_state);
void intel_lt_phy_pll_state_verify(struct intel_atomic_state *state,
struct intel_crtc *crtc);
--
2.43.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v2 14/24] drm/i915/lt_phy: Add xe3plpd .get_freq hook
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
` (12 preceding siblings ...)
2026-03-04 13:14 ` [PATCH v2 13/24] drm/i915/lt_phy: Add xe3plpd .get_hw_state hook Mika Kahola
@ 2026-03-04 13:14 ` Mika Kahola
2026-03-11 4:24 ` Kandpal, Suraj
2026-03-04 13:14 ` [PATCH v2 15/24] drm/i915/lt_phy: Add xe3plpd .crtc_get_dpll Mika Kahola
` (14 subsequent siblings)
28 siblings, 1 reply; 62+ messages in thread
From: Mika Kahola @ 2026-03-04 13:14 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Mika Kahola
Add .get_freq function hook to support dpll framework for xe3plpd
platform.
Signed-off-by: Mika Kahola <mika.kahola@intel.com>
---
drivers/gpu/drm/i915/display/intel_dpll.c | 5 -----
drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 13 +++++++++++++
2 files changed, 13 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dpll.c b/drivers/gpu/drm/i915/display/intel_dpll.c
index 147baa777856..88f11cb8c5e1 100644
--- a/drivers/gpu/drm/i915/display/intel_dpll.c
+++ b/drivers/gpu/drm/i915/display/intel_dpll.c
@@ -1219,17 +1219,12 @@ static int xe3plpd_crtc_compute_clock(struct intel_atomic_state *state,
intel_atomic_get_new_crtc_state(state, crtc);
struct intel_encoder *encoder =
intel_get_crtc_new_encoder(state, crtc_state);
- struct intel_display *display = to_intel_display(encoder);
int ret;
ret = intel_lt_phy_pll_calc_state(crtc_state, encoder, &crtc_state->dpll_hw_state);
if (ret)
return ret;
- /* TODO: Do the readback via intel_compute_shared_dplls() */
- crtc_state->port_clock =
- intel_lt_phy_calc_port_clock(display, &crtc_state->dpll_hw_state.ltpll);
-
crtc_state->hw.adjusted_mode.crtc_clock = intel_crtc_dotclock(crtc_state);
return 0;
diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
index 6502916793f5..412582e29ca6 100644
--- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
+++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
@@ -4583,8 +4583,21 @@ static bool xe3plpd_pll_get_hw_state(struct intel_display *display,
return intel_lt_phy_pll_readout_hw_state(encoder, &dpll_hw_state->ltpll);
}
+static int xe3plpd_pll_get_freq(struct intel_display *display,
+ const struct intel_dpll *pll,
+ const struct intel_dpll_hw_state *dpll_hw_state)
+{
+ struct intel_encoder *encoder = get_intel_encoder(display, pll);
+
+ if (drm_WARN_ON(display->drm, !encoder))
+ return -EINVAL;
+
+ return intel_lt_phy_calc_port_clock(display, &dpll_hw_state->ltpll);
+}
+
static const struct intel_dpll_funcs xe3plpd_pll_funcs = {
.get_hw_state = xe3plpd_pll_get_hw_state,
+ .get_freq = xe3plpd_pll_get_freq,
};
static const struct dpll_info xe3plpd_plls[] = {
--
2.43.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v2 15/24] drm/i915/lt_phy: Add xe3plpd .crtc_get_dpll
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
` (13 preceding siblings ...)
2026-03-04 13:14 ` [PATCH v2 14/24] drm/i915/lt_phy: Add xe3plpd .get_freq hook Mika Kahola
@ 2026-03-04 13:14 ` Mika Kahola
2026-03-04 13:14 ` [PATCH v2 16/24] drm/i915/lt_phy: Replace crtc compute clock Mika Kahola
` (13 subsequent siblings)
28 siblings, 0 replies; 62+ messages in thread
From: Mika Kahola @ 2026-03-04 13:14 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Mika Kahola, Suraj Kandpal
Add .crtc_get_dpll function pointer to support xe3plpd
platform.
Signed-off-by: Mika Kahola <mika.kahola@intel.com>
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
---
drivers/gpu/drm/i915/display/intel_dpll.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/gpu/drm/i915/display/intel_dpll.c b/drivers/gpu/drm/i915/display/intel_dpll.c
index 88f11cb8c5e1..abc85ee9b832 100644
--- a/drivers/gpu/drm/i915/display/intel_dpll.c
+++ b/drivers/gpu/drm/i915/display/intel_dpll.c
@@ -1691,6 +1691,7 @@ static int i8xx_crtc_compute_clock(struct intel_atomic_state *state,
static const struct intel_dpll_global_funcs xe3plpd_dpll_funcs = {
.crtc_compute_clock = xe3plpd_crtc_compute_clock,
+ .crtc_get_dpll = hsw_crtc_get_dpll,
};
static const struct intel_dpll_global_funcs mtl_dpll_funcs = {
--
2.43.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v2 16/24] drm/i915/lt_phy: Replace crtc compute clock
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
` (14 preceding siblings ...)
2026-03-04 13:14 ` [PATCH v2 15/24] drm/i915/lt_phy: Add xe3plpd .crtc_get_dpll Mika Kahola
@ 2026-03-04 13:14 ` Mika Kahola
2026-03-11 4:30 ` Kandpal, Suraj
2026-03-04 13:14 ` [PATCH v2 17/24] drm/i915/lt_phy: Add .enable_clock hook on DDI Mika Kahola
` (12 subsequent siblings)
28 siblings, 1 reply; 62+ messages in thread
From: Mika Kahola @ 2026-03-04 13:14 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Mika Kahola
The existing DPLL compute clock callback for the XE3PLPD platform
(`xe3plpd_crtc_compute_clock`) was specific to that platform. Replace it
with the more generic Haswell (`hsw_crtc_compute_clock`) implementation
so that the compute clock path does not rely on the XE3PLPD
hook.
Signed-off-by: Mika Kahola <mika.kahola@intel.com>
---
drivers/gpu/drm/i915/display/intel_dpll.c | 20 +-------------------
1 file changed, 1 insertion(+), 19 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dpll.c b/drivers/gpu/drm/i915/display/intel_dpll.c
index abc85ee9b832..c7d37e74fbe9 100644
--- a/drivers/gpu/drm/i915/display/intel_dpll.c
+++ b/drivers/gpu/drm/i915/display/intel_dpll.c
@@ -1212,24 +1212,6 @@ static int dg2_crtc_compute_clock(struct intel_atomic_state *state,
return 0;
}
-static int xe3plpd_crtc_compute_clock(struct intel_atomic_state *state,
- struct intel_crtc *crtc)
-{
- struct intel_crtc_state *crtc_state =
- intel_atomic_get_new_crtc_state(state, crtc);
- struct intel_encoder *encoder =
- intel_get_crtc_new_encoder(state, crtc_state);
- int ret;
-
- ret = intel_lt_phy_pll_calc_state(crtc_state, encoder, &crtc_state->dpll_hw_state);
- if (ret)
- return ret;
-
- crtc_state->hw.adjusted_mode.crtc_clock = intel_crtc_dotclock(crtc_state);
-
- return 0;
-}
-
static int ilk_fb_cb_factor(const struct intel_crtc_state *crtc_state)
{
struct intel_display *display = to_intel_display(crtc_state);
@@ -1690,7 +1672,7 @@ static int i8xx_crtc_compute_clock(struct intel_atomic_state *state,
}
static const struct intel_dpll_global_funcs xe3plpd_dpll_funcs = {
- .crtc_compute_clock = xe3plpd_crtc_compute_clock,
+ .crtc_compute_clock = hsw_crtc_compute_clock,
.crtc_get_dpll = hsw_crtc_get_dpll,
};
--
2.43.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v2 17/24] drm/i915/lt_phy: Add .enable_clock hook on DDI
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
` (15 preceding siblings ...)
2026-03-04 13:14 ` [PATCH v2 16/24] drm/i915/lt_phy: Replace crtc compute clock Mika Kahola
@ 2026-03-04 13:14 ` Mika Kahola
2026-03-11 4:48 ` Kandpal, Suraj
2026-03-04 13:14 ` [PATCH v2 18/24] drm/i915/lt_phy: Add .disable_clock " Mika Kahola
` (11 subsequent siblings)
28 siblings, 1 reply; 62+ messages in thread
From: Mika Kahola @ 2026-03-04 13:14 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Mika Kahola
Enable PLL clock on DDI by moving part of the PLL enabling
sequence into a DDI clock enabling function.
Signed-off-by: Mika Kahola <mika.kahola@intel.com>
---
drivers/gpu/drm/i915/display/intel_ddi.c | 2 +-
drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 13 ++++++++
drivers/gpu/drm/i915/display/intel_lt_phy.c | 33 ++++++++++++-------
drivers/gpu/drm/i915/display/intel_lt_phy.h | 10 ++++--
4 files changed, 43 insertions(+), 15 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index 76ba308f32ad..51403d09c477 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -5298,7 +5298,7 @@ void intel_ddi_init(struct intel_display *display,
encoder->pipe_mask = ~0;
if (HAS_LT_PHY(display)) {
- encoder->enable_clock = intel_xe3plpd_pll_enable;
+ encoder->enable_clock = intel_xe3plpd_pll_enable_clock;
encoder->disable_clock = intel_xe3plpd_pll_disable;
encoder->port_pll_type = intel_mtl_port_pll_type;
encoder->get_config = xe3plpd_ddi_get_config;
diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
index 412582e29ca6..54c7a255b3a5 100644
--- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
+++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
@@ -4595,7 +4595,20 @@ static int xe3plpd_pll_get_freq(struct intel_display *display,
return intel_lt_phy_calc_port_clock(display, &dpll_hw_state->ltpll);
}
+static void xe3plpd_pll_enable(struct intel_display *display,
+ struct intel_dpll *pll,
+ const struct intel_dpll_hw_state *dpll_hw_state)
+{
+ struct intel_encoder *encoder = get_intel_encoder(display, pll);
+
+ if (drm_WARN_ON(display->drm, !encoder))
+ return;
+
+ intel_xe3plpd_pll_enable(encoder, pll, dpll_hw_state);
+}
+
static const struct intel_dpll_funcs xe3plpd_pll_funcs = {
+ .enable = xe3plpd_pll_enable,
.get_hw_state = xe3plpd_pll_get_hw_state,
.get_freq = xe3plpd_pll_get_freq,
};
diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c b/drivers/gpu/drm/i915/display/intel_lt_phy.c
index c3686ac6adc9..6bc32d1734a7 100644
--- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
+++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
@@ -1883,9 +1883,11 @@ intel_lt_phy_enable_disable_tx(struct intel_encoder *encoder,
}
void intel_lt_phy_pll_enable(struct intel_encoder *encoder,
- const struct intel_crtc_state *crtc_state)
+ struct intel_dpll *pll,
+ const struct intel_dpll_hw_state *dpll_hw_state)
{
struct intel_display *display = to_intel_display(encoder);
+ int port_clock = intel_lt_phy_calc_port_clock(display, &dpll_hw_state->ltpll);
struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
bool lane_reversal = dig_port->lane_reversal;
u8 owned_lane_mask = intel_lt_phy_get_owned_lane_mask(encoder);
@@ -1901,11 +1903,11 @@ void intel_lt_phy_pll_enable(struct intel_encoder *encoder,
wakeref = intel_lt_phy_transaction_begin(encoder);
/* 1. Enable MacCLK at default 162 MHz frequency. */
- intel_lt_phy_lane_reset(encoder, crtc_state->lane_count);
+ intel_lt_phy_lane_reset(encoder, dpll_hw_state->ltpll.lane_count);
/* 2. Program PORT_CLOCK_CTL register to configure clock muxes, gating, and SSC. */
- intel_lt_phy_program_port_clock_ctl(encoder, &crtc_state->dpll_hw_state.ltpll,
- crtc_state->port_clock, lane_reversal);
+ intel_lt_phy_program_port_clock_ctl(encoder, &dpll_hw_state->ltpll,
+ port_clock, lane_reversal);
/* 3. Change owned PHY lanes power to Ready state. */
intel_lt_phy_powerdown_change_sequence(encoder, owned_lane_mask,
@@ -1915,12 +1917,12 @@ void intel_lt_phy_pll_enable(struct intel_encoder *encoder,
* 4. Read the PHY message bus VDR register PHY_VDR_0_Config check enabled PLL type,
* encoded rate and encoded mode.
*/
- if (intel_lt_phy_config_changed(encoder, &crtc_state->dpll_hw_state.ltpll)) {
+ if (intel_lt_phy_config_changed(encoder, &dpll_hw_state->ltpll)) {
/*
* 5. Program the PHY internal PLL registers over PHY message bus for the desired
* frequency and protocol type
*/
- intel_lt_phy_program_pll(encoder, &crtc_state->dpll_hw_state.ltpll);
+ intel_lt_phy_program_pll(encoder, &dpll_hw_state->ltpll);
/* 6. Use the P2P transaction flow */
/*
@@ -1952,8 +1954,7 @@ void intel_lt_phy_pll_enable(struct intel_encoder *encoder,
* Change. We handle this step in bxt_set_cdclk().
*/
/* 10. Program DDI_CLK_VALFREQ to match intended DDI clock frequency. */
- intel_de_write(display, DDI_CLK_VALFREQ(encoder->port),
- crtc_state->port_clock);
+ intel_de_write(display, DDI_CLK_VALFREQ(encoder->port), port_clock);
/* 11. Program PORT_CLOCK_CTL[PCLK PLL Request LN0] = 1. */
intel_de_rmw(display, XELPDP_PORT_CLOCK_CTL(display, port),
@@ -2000,7 +2001,7 @@ void intel_lt_phy_pll_enable(struct intel_encoder *encoder,
lane_phy_pulse_status,
lane_phy_pulse_status);
} else {
- intel_de_write(display, DDI_CLK_VALFREQ(encoder->port), crtc_state->port_clock);
+ intel_de_write(display, DDI_CLK_VALFREQ(encoder->port), port_clock);
}
/*
@@ -2011,7 +2012,7 @@ void intel_lt_phy_pll_enable(struct intel_encoder *encoder,
intel_lt_phy_powerdown_change_sequence(encoder, owned_lane_mask,
XELPDP_P0_STATE_ACTIVE);
- intel_lt_phy_enable_disable_tx(encoder, &crtc_state->dpll_hw_state.ltpll);
+ intel_lt_phy_enable_disable_tx(encoder, &dpll_hw_state->ltpll);
intel_lt_phy_transaction_end(encoder, wakeref);
}
@@ -2282,14 +2283,22 @@ void intel_lt_phy_pll_state_verify(struct intel_atomic_state *state,
}
void intel_xe3plpd_pll_enable(struct intel_encoder *encoder,
- const struct intel_crtc_state *crtc_state)
+ struct intel_dpll *pll,
+ const struct intel_dpll_hw_state *dpll_hw_state)
+{
+ intel_lt_phy_pll_enable(encoder, pll, dpll_hw_state);
+}
+
+void intel_xe3plpd_pll_enable_clock(struct intel_encoder *encoder,
+ const struct intel_crtc_state *crtc_state)
{
struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
if (intel_tc_port_in_tbt_alt_mode(dig_port))
intel_mtl_tbt_pll_enable_clock(encoder, crtc_state->port_clock);
else
- intel_lt_phy_pll_enable(encoder, crtc_state);
+ /* TODO: remove when PLL mgr is in place. */
+ intel_xe3plpd_pll_enable(encoder, NULL, &crtc_state->dpll_hw_state);
}
void intel_xe3plpd_pll_disable(struct intel_encoder *encoder)
diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.h b/drivers/gpu/drm/i915/display/intel_lt_phy.h
index 0053bb5489e5..9188ce980119 100644
--- a/drivers/gpu/drm/i915/display/intel_lt_phy.h
+++ b/drivers/gpu/drm/i915/display/intel_lt_phy.h
@@ -11,13 +11,16 @@
struct drm_printer;
struct intel_atomic_state;
struct intel_display;
+struct intel_dpll;
+struct intel_dpll_hw_state;
struct intel_encoder;
struct intel_crtc_state;
struct intel_crtc;
struct intel_lt_phy_pll_state;
void intel_lt_phy_pll_enable(struct intel_encoder *encoder,
- const struct intel_crtc_state *crtc_state);
+ struct intel_dpll *pll,
+ const struct intel_dpll_hw_state *dpll_hw_state);
void intel_lt_phy_pll_disable(struct intel_encoder *encoder);
int
intel_lt_phy_pll_calc_state(struct intel_crtc_state *crtc_state,
@@ -40,8 +43,11 @@ int
intel_lt_phy_calculate_hdmi_state(struct intel_lt_phy_pll_state *lt_state,
u32 frequency_khz);
void intel_xe3plpd_pll_enable(struct intel_encoder *encoder,
- const struct intel_crtc_state *crtc_state);
+ struct intel_dpll *pll,
+ const struct intel_dpll_hw_state *dpll_hw_state);
void intel_xe3plpd_pll_disable(struct intel_encoder *encoder);
void intel_lt_phy_verify_plls(struct intel_display *display);
+void intel_xe3plpd_pll_enable_clock(struct intel_encoder *encoder,
+ const struct intel_crtc_state *crtc_state);
#endif /* __INTEL_LT_PHY_H__ */
--
2.43.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v2 18/24] drm/i915/lt_phy: Add .disable_clock hook on DDI
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
` (16 preceding siblings ...)
2026-03-04 13:14 ` [PATCH v2 17/24] drm/i915/lt_phy: Add .enable_clock hook on DDI Mika Kahola
@ 2026-03-04 13:14 ` Mika Kahola
2026-03-11 5:31 ` Kandpal, Suraj
2026-03-04 13:14 ` [PATCH v2 19/24] drm/i915/lt_phy: Dump lane count for HW state Mika Kahola
` (10 subsequent siblings)
28 siblings, 1 reply; 62+ messages in thread
From: Mika Kahola @ 2026-03-04 13:14 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Mika Kahola
Disable PLL clock on DDI by moving part of the PLL disabling
sequence into a DDI clock disabling function.
Signed-off-by: Mika Kahola <mika.kahola@intel.com>
---
drivers/gpu/drm/i915/display/intel_ddi.c | 2 +-
drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 12 ++++++++++++
drivers/gpu/drm/i915/display/intel_lt_phy.c | 11 +++++++++++
drivers/gpu/drm/i915/display/intel_lt_phy.h | 1 +
4 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index 51403d09c477..191ae7cf81fb 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -5299,7 +5299,7 @@ void intel_ddi_init(struct intel_display *display,
if (HAS_LT_PHY(display)) {
encoder->enable_clock = intel_xe3plpd_pll_enable_clock;
- encoder->disable_clock = intel_xe3plpd_pll_disable;
+ encoder->disable_clock = intel_xe3plpd_pll_disable_clock;
encoder->port_pll_type = intel_mtl_port_pll_type;
encoder->get_config = xe3plpd_ddi_get_config;
} else if (DISPLAY_VER(display) >= 14) {
diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
index 54c7a255b3a5..28c560417409 100644
--- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
+++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
@@ -4607,8 +4607,20 @@ static void xe3plpd_pll_enable(struct intel_display *display,
intel_xe3plpd_pll_enable(encoder, pll, dpll_hw_state);
}
+static void xe3plpd_pll_disable(struct intel_display *display,
+ struct intel_dpll *pll)
+{
+ struct intel_encoder *encoder = get_intel_encoder(display, pll);
+
+ if (drm_WARN_ON(display->drm, !encoder))
+ return;
+
+ intel_xe3plpd_pll_disable(encoder);
+}
+
static const struct intel_dpll_funcs xe3plpd_pll_funcs = {
.enable = xe3plpd_pll_enable,
+ .disable = xe3plpd_pll_disable,
.get_hw_state = xe3plpd_pll_get_hw_state,
.get_freq = xe3plpd_pll_get_freq,
};
diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c b/drivers/gpu/drm/i915/display/intel_lt_phy.c
index 6bc32d1734a7..3230d2e28d9c 100644
--- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
+++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
@@ -2309,6 +2309,17 @@ void intel_xe3plpd_pll_disable(struct intel_encoder *encoder)
intel_mtl_tbt_pll_disable_clock(encoder);
else
intel_lt_phy_pll_disable(encoder);
+}
+
+void intel_xe3plpd_pll_disable_clock(struct intel_encoder *encoder)
+{
+ struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
+
+ if (intel_tc_port_in_tbt_alt_mode(dig_port))
+ intel_mtl_tbt_pll_disable_clock(encoder);
+ else
+ /* TODO: remove when PLL mgr is in place. */
+ intel_xe3plpd_pll_disable(encoder);
}
diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.h b/drivers/gpu/drm/i915/display/intel_lt_phy.h
index 9188ce980119..3838e9326773 100644
--- a/drivers/gpu/drm/i915/display/intel_lt_phy.h
+++ b/drivers/gpu/drm/i915/display/intel_lt_phy.h
@@ -49,5 +49,6 @@ void intel_xe3plpd_pll_disable(struct intel_encoder *encoder);
void intel_lt_phy_verify_plls(struct intel_display *display);
void intel_xe3plpd_pll_enable_clock(struct intel_encoder *encoder,
const struct intel_crtc_state *crtc_state);
+void intel_xe3plpd_pll_disable_clock(struct intel_encoder *encoder);
#endif /* __INTEL_LT_PHY_H__ */
--
2.43.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v2 19/24] drm/i915/lt_phy: Dump lane count for HW state
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
` (17 preceding siblings ...)
2026-03-04 13:14 ` [PATCH v2 18/24] drm/i915/lt_phy: Add .disable_clock " Mika Kahola
@ 2026-03-04 13:14 ` Mika Kahola
2026-03-11 5:46 ` Kandpal, Suraj
2026-03-04 13:14 ` [PATCH v2 20/24] drm/i915/lt_phy: Readout lane count Mika Kahola
` (9 subsequent siblings)
28 siblings, 1 reply; 62+ messages in thread
From: Mika Kahola @ 2026-03-04 13:14 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Mika Kahola
Add lane count as part of HW state dump.
Signed-off-by: Mika Kahola <mika.kahola@intel.com>
---
drivers/gpu/drm/i915/display/intel_lt_phy.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c b/drivers/gpu/drm/i915/display/intel_lt_phy.c
index 3230d2e28d9c..066e2f16791c 100644
--- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
+++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
@@ -2152,8 +2152,8 @@ void intel_lt_phy_dump_hw_state(struct drm_printer *p,
{
int i, j;
- drm_printf(p, "lt_phy_pll_hw_state: ssc enabled: %d, tbt mode: %d\n",
- hw_state->ssc_enabled, hw_state->tbt_mode);
+ drm_printf(p, "lt_phy_pll_hw_state: lane count: %d, ssc enabled: %d, tbt mode: %d\n",
+ hw_state->lane_count, hw_state->ssc_enabled, hw_state->tbt_mode);
for (i = 0; i < 3; i++) {
drm_printf(p, "config[%d] = 0x%.4x,\n",
--
2.43.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v2 20/24] drm/i915/lt_phy: Readout lane count
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
` (18 preceding siblings ...)
2026-03-04 13:14 ` [PATCH v2 19/24] drm/i915/lt_phy: Dump lane count for HW state Mika Kahola
@ 2026-03-04 13:14 ` Mika Kahola
2026-03-04 13:14 ` [PATCH v2 21/24] drm/i915/lt_phy: Get encoder configuration for xe3plpd platform Mika Kahola
` (8 subsequent siblings)
28 siblings, 0 replies; 62+ messages in thread
From: Mika Kahola @ 2026-03-04 13:14 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Mika Kahola, Suraj Kandpal
Readout lane count back from HW. Reuse existing function
for Cx0 for LT PHY case with minor modification to add
lanes as function parameters.
Signed-off-by: Mika Kahola <mika.kahola@intel.com>
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
---
drivers/gpu/drm/i915/display/intel_cx0_phy.c | 10 ++++++----
drivers/gpu/drm/i915/display/intel_cx0_phy.h | 1 +
drivers/gpu/drm/i915/display/intel_lt_phy.c | 2 ++
3 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_cx0_phy.c b/drivers/gpu/drm/i915/display/intel_cx0_phy.c
index 6a471c021c0e..7e59409bbf01 100644
--- a/drivers/gpu/drm/i915/display/intel_cx0_phy.c
+++ b/drivers/gpu/drm/i915/display/intel_cx0_phy.c
@@ -2180,7 +2180,7 @@ static int intel_c10pll_calc_state(const struct intel_crtc_state *crtc_state,
return 0;
}
-static int readout_enabled_lane_count(struct intel_encoder *encoder)
+int intel_readout_lane_count(struct intel_encoder *encoder, int lane0, int lane1)
{
struct intel_display *display = to_intel_display(encoder);
u8 enabled_tx_lane_count = 0;
@@ -2212,7 +2212,7 @@ static int readout_enabled_lane_count(struct intel_encoder *encoder)
max_tx_lane_count = round_up(max_tx_lane_count, 2);
for (tx_lane = 0; tx_lane < max_tx_lane_count; tx_lane++) {
- u8 phy_lane_mask = tx_lane < 2 ? INTEL_CX0_LANE0 : INTEL_CX0_LANE1;
+ u8 phy_lane_mask = tx_lane < 2 ? lane0 : lane1;
int tx = tx_lane % 2 + 1;
u8 val;
@@ -2252,7 +2252,8 @@ static void intel_c10pll_readout_hw_state(struct intel_encoder *encoder,
*/
intel_c10_msgbus_access_begin(encoder, lane);
- cx0pll_state->lane_count = readout_enabled_lane_count(encoder);
+ cx0pll_state->lane_count = intel_readout_lane_count(encoder, INTEL_CX0_LANE0,
+ INTEL_CX0_LANE1);
for (i = 0; i < ARRAY_SIZE(pll_state->pll); i++)
pll_state->pll[i] = intel_cx0_read(encoder, lane, PHY_C10_VDR_PLL(i));
@@ -2707,7 +2708,8 @@ static void intel_c20pll_readout_hw_state(struct intel_encoder *encoder,
wakeref = intel_cx0_phy_transaction_begin(encoder);
- cx0pll_state->lane_count = readout_enabled_lane_count(encoder);
+ cx0pll_state->lane_count = intel_readout_lane_count(encoder, INTEL_CX0_LANE0,
+ INTEL_CX0_LANE1);
/* 1. Read VDR params and current context selection */
intel_c20_readout_vdr_params(encoder, &pll_state->vdr, &cntx);
diff --git a/drivers/gpu/drm/i915/display/intel_cx0_phy.h b/drivers/gpu/drm/i915/display/intel_cx0_phy.h
index 1d4480b8bf39..1428e7a5a318 100644
--- a/drivers/gpu/drm/i915/display/intel_cx0_phy.h
+++ b/drivers/gpu/drm/i915/display/intel_cx0_phy.h
@@ -28,6 +28,7 @@ struct intel_hdmi;
void intel_cx0_clear_response_ready_flag(struct intel_encoder *encoder,
int lane);
bool intel_encoder_is_c10phy(struct intel_encoder *encoder);
+int intel_readout_lane_count(struct intel_encoder *encoder, int lane0, int lane1);
void intel_mtl_pll_enable(struct intel_encoder *encoder,
struct intel_dpll *pll,
const struct intel_dpll_hw_state *dpll_hw_state);
diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c b/drivers/gpu/drm/i915/display/intel_lt_phy.c
index 066e2f16791c..232f14d69ec8 100644
--- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
+++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
@@ -2227,6 +2227,8 @@ bool intel_lt_phy_pll_readout_hw_state(struct intel_encoder *encoder,
lane = owned_lane_mask & INTEL_LT_PHY_LANE0 ? : INTEL_LT_PHY_LANE1;
wakeref = intel_lt_phy_transaction_begin(encoder);
+ pll_state->lane_count = intel_readout_lane_count(encoder, INTEL_LT_PHY_LANE0,
+ INTEL_LT_PHY_LANE1);
pll_state->config[0] = intel_lt_phy_read(encoder, lane, LT_PHY_VDR_0_CONFIG);
pll_state->config[1] = intel_lt_phy_read(encoder, INTEL_LT_PHY_LANE0, LT_PHY_VDR_1_CONFIG);
pll_state->config[2] = intel_lt_phy_read(encoder, lane, LT_PHY_VDR_2_CONFIG);
--
2.43.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v2 21/24] drm/i915/lt_phy: Get encoder configuration for xe3plpd platform
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
` (19 preceding siblings ...)
2026-03-04 13:14 ` [PATCH v2 20/24] drm/i915/lt_phy: Readout lane count Mika Kahola
@ 2026-03-04 13:14 ` Mika Kahola
2026-03-11 5:55 ` Kandpal, Suraj
2026-03-04 13:14 ` [PATCH v2 22/24] drm/i915/lt_phy: Add xe3plpd Thunderbolt pll hooks Mika Kahola
` (7 subsequent siblings)
28 siblings, 1 reply; 62+ messages in thread
From: Mika Kahola @ 2026-03-04 13:14 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Mika Kahola
For DDI initialization get encoder configuration by reusing
MTL+ configuration.
Signed-off-by: Mika Kahola <mika.kahola@intel.com>
---
drivers/gpu/drm/i915/display/intel_ddi.c | 20 ++++----------------
1 file changed, 4 insertions(+), 16 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index 191ae7cf81fb..385d6b26693d 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -4243,21 +4243,6 @@ void intel_ddi_get_clock(struct intel_encoder *encoder,
&crtc_state->dpll_hw_state);
}
-static void xe3plpd_ddi_get_config(struct intel_encoder *encoder,
- struct intel_crtc_state *crtc_state)
-{
- struct intel_display *display = to_intel_display(encoder);
-
- intel_lt_phy_pll_readout_hw_state(encoder, &crtc_state->dpll_hw_state.ltpll);
-
- if (crtc_state->dpll_hw_state.ltpll.tbt_mode)
- crtc_state->port_clock = intel_mtl_tbt_calc_port_clock(encoder);
- else
- crtc_state->port_clock =
- intel_lt_phy_calc_port_clock(display, &crtc_state->dpll_hw_state.ltpll);
- intel_ddi_get_config(encoder, crtc_state);
-}
-
static bool icl_ddi_tc_pll_is_tbt(const struct intel_dpll *pll)
{
return pll->info->id == DPLL_ID_ICL_TBTPLL;
@@ -5301,7 +5286,10 @@ void intel_ddi_init(struct intel_display *display,
encoder->enable_clock = intel_xe3plpd_pll_enable_clock;
encoder->disable_clock = intel_xe3plpd_pll_disable_clock;
encoder->port_pll_type = intel_mtl_port_pll_type;
- encoder->get_config = xe3plpd_ddi_get_config;
+ if (intel_encoder_is_tc(encoder))
+ encoder->get_config = mtl_ddi_tc_phy_get_config;
+ else
+ encoder->get_config = mtl_ddi_non_tc_phy_get_config;
} else if (DISPLAY_VER(display) >= 14) {
encoder->enable_clock = intel_mtl_pll_enable_clock;
encoder->disable_clock = intel_mtl_pll_disable_clock;
--
2.43.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v2 22/24] drm/i915/lt_phy: Add xe3plpd Thunderbolt pll hooks
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
` (20 preceding siblings ...)
2026-03-04 13:14 ` [PATCH v2 21/24] drm/i915/lt_phy: Get encoder configuration for xe3plpd platform Mika Kahola
@ 2026-03-04 13:14 ` Mika Kahola
2026-03-11 6:05 ` Kandpal, Suraj
2026-03-04 13:14 ` [PATCH v2 23/24] drm/i915/lt_phy: Remove LT PHY specific state verification Mika Kahola
` (6 subsequent siblings)
28 siblings, 1 reply; 62+ messages in thread
From: Mika Kahola @ 2026-03-04 13:14 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Mika Kahola
Add the PLL hooks for the TBT PLL on xe3plpd. These are simple stubs
similarly to the TBT PLL on earlier platforms, since this PLL is always
on from the display POV - so no PLL enable/disable programming is
required as opposed to the non-TBT PLLs - and the clocks for different
link rates are enabled/disabled at a different level, via the
intel_encoder::enable_clock()/disable_clock() interface.
Signed-off-by: Mika Kahola <mika.kahola@intel.com>
---
drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 13 +++++++++++--
drivers/gpu/drm/i915/display/intel_lt_phy.c | 18 ++++++++++++++++++
drivers/gpu/drm/i915/display/intel_lt_phy.h | 4 ++++
3 files changed, 33 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
index 28c560417409..534cc691979f 100644
--- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
+++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
@@ -4618,6 +4618,13 @@ static void xe3plpd_pll_disable(struct intel_display *display,
intel_xe3plpd_pll_disable(encoder);
}
+static const struct intel_dpll_funcs xe3plpd_tbt_pll_funcs = {
+ .enable = mtl_tbt_pll_enable,
+ .disable = mtl_tbt_pll_disable,
+ .get_hw_state = intel_lt_phy_tbt_pll_readout_hw_state,
+ .get_freq = mtl_tbt_pll_get_freq,
+};
+
static const struct intel_dpll_funcs xe3plpd_pll_funcs = {
.enable = xe3plpd_pll_enable,
.disable = xe3plpd_pll_disable,
@@ -4628,7 +4635,8 @@ static const struct intel_dpll_funcs xe3plpd_pll_funcs = {
static const struct dpll_info xe3plpd_plls[] = {
{ .name = "DPLL 0", .funcs = &xe3plpd_pll_funcs, .id = DPLL_ID_ICL_DPLL0, },
{ .name = "DPLL 1", .funcs = &xe3plpd_pll_funcs, .id = DPLL_ID_ICL_DPLL1, },
- /* TODO: Add TBT */
+ { .name = "TBT PLL", .funcs = &xe3plpd_tbt_pll_funcs, .id = DPLL_ID_ICL_TBTPLL,
+ .is_alt_port_dpll = true, .always_on = true },
{ .name = "TC PLL 1", .funcs = &xe3plpd_pll_funcs, .id = DPLL_ID_ICL_MGPLL1, },
{ .name = "TC PLL 2", .funcs = &xe3plpd_pll_funcs, .id = DPLL_ID_ICL_MGPLL2, },
{ .name = "TC PLL 3", .funcs = &xe3plpd_pll_funcs, .id = DPLL_ID_ICL_MGPLL3, },
@@ -4671,7 +4679,8 @@ static int xe3plpd_compute_tc_phy_dplls(struct intel_atomic_state *state,
struct icl_port_dpll *port_dpll;
int ret;
- /* TODO: Add state calculation for TBT PLL */
+ port_dpll = &crtc_state->icl_port_dplls[ICL_PORT_DPLL_DEFAULT];
+ intel_lt_phy_tbt_pll_calc_state(&port_dpll->hw_state);
port_dpll = &crtc_state->icl_port_dplls[ICL_PORT_DPLL_MG_PHY];
ret = intel_lt_phy_pll_calc_state(crtc_state, encoder, &port_dpll->hw_state);
diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c b/drivers/gpu/drm/i915/display/intel_lt_phy.c
index 232f14d69ec8..746b0182362a 100644
--- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
+++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
@@ -1766,6 +1766,13 @@ intel_lt_phy_pll_calc_state(struct intel_crtc_state *crtc_state,
return -EINVAL;
}
+void intel_lt_phy_tbt_pll_calc_state(struct intel_dpll_hw_state *hw_state)
+{
+ memset(hw_state, 0, sizeof(*hw_state));
+
+ hw_state->ltpll.tbt_mode = true;
+}
+
static void
intel_lt_phy_program_pll(struct intel_encoder *encoder,
const struct intel_lt_phy_pll_state *ltpll)
@@ -2208,6 +2215,17 @@ static bool intel_lt_phy_pll_is_enabled(struct intel_encoder *encoder)
intel_lt_phy_get_pclk_pll_ack(lane);
}
+bool intel_lt_phy_tbt_pll_readout_hw_state(struct intel_display *display,
+ struct intel_dpll *pll,
+ struct intel_dpll_hw_state *hw_state)
+{
+ memset(hw_state, 0, sizeof(*hw_state));
+
+ hw_state->ltpll.tbt_mode = true;
+
+ return true;
+}
+
bool intel_lt_phy_pll_readout_hw_state(struct intel_encoder *encoder,
struct intel_lt_phy_pll_state *pll_state)
{
diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.h b/drivers/gpu/drm/i915/display/intel_lt_phy.h
index 3838e9326773..1c2ec438cd10 100644
--- a/drivers/gpu/drm/i915/display/intel_lt_phy.h
+++ b/drivers/gpu/drm/i915/display/intel_lt_phy.h
@@ -26,6 +26,7 @@ int
intel_lt_phy_pll_calc_state(struct intel_crtc_state *crtc_state,
struct intel_encoder *encoder,
struct intel_dpll_hw_state *hw_state);
+void intel_lt_phy_tbt_pll_calc_state(struct intel_dpll_hw_state *hw_state);
int intel_lt_phy_calc_port_clock(struct intel_display *display,
const struct intel_lt_phy_pll_state *lt_state);
void intel_lt_phy_set_signal_levels(struct intel_encoder *encoder,
@@ -35,6 +36,9 @@ void intel_lt_phy_dump_hw_state(struct drm_printer *p,
bool
intel_lt_phy_pll_compare_hw_state(const struct intel_lt_phy_pll_state *a,
const struct intel_lt_phy_pll_state *b);
+bool intel_lt_phy_tbt_pll_readout_hw_state(struct intel_display *display,
+ struct intel_dpll *pll,
+ struct intel_dpll_hw_state *hw_state);
bool intel_lt_phy_pll_readout_hw_state(struct intel_encoder *encoder,
struct intel_lt_phy_pll_state *pll_state);
void intel_lt_phy_pll_state_verify(struct intel_atomic_state *state,
--
2.43.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v2 23/24] drm/i915/lt_phy: Remove LT PHY specific state verification
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
` (21 preceding siblings ...)
2026-03-04 13:14 ` [PATCH v2 22/24] drm/i915/lt_phy: Add xe3plpd Thunderbolt pll hooks Mika Kahola
@ 2026-03-04 13:14 ` Mika Kahola
2026-03-06 11:43 ` [PATCH v3 " Mika Kahola
2026-03-04 13:14 ` [PATCH v2 24/24] drm/i915/lt_phy: Enable dpll framework for xe3plpd Mika Kahola
` (5 subsequent siblings)
28 siblings, 1 reply; 62+ messages in thread
From: Mika Kahola @ 2026-03-04 13:14 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Mika Kahola
Remove LT PHY specific state verification as DPLL framework
has state verification check.
v2: Reuse intel_lt_phy_pll_compare_hw_state() as only config[0]
and config[0] parameters are reliable with LT PHY (Suraj)
Signed-off-by: Mika Kahola <mika.kahola@intel.com>
---
drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 5 ++-
drivers/gpu/drm/i915/display/intel_lt_phy.c | 39 -------------------
drivers/gpu/drm/i915/display/intel_lt_phy.h | 2 -
.../drm/i915/display/intel_modeset_verify.c | 1 -
4 files changed, 3 insertions(+), 44 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
index 534cc691979f..63a0469d4e65 100644
--- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
+++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
@@ -5117,8 +5117,9 @@ verify_single_dpll_state(struct intel_display *display,
pll->info->name, pipe_mask, pll->state.pipe_mask);
if (INTEL_DISPLAY_STATE_WARN(display,
- pll->on && memcmp(&pll->state.hw_state, &dpll_hw_state,
- sizeof(dpll_hw_state)),
+ pll->on && HAS_LT_PHY(display) ?
+ !intel_lt_phy_pll_compare_hw_state(&pll->state.hw_state.ltpll, &dpll_hw_state.ltpll) :
+ memcmp(&pll->state.hw_state, &dpll_hw_state, sizeof(dpll_hw_state)),
"%s: pll hw state mismatch\n",
pll->info->name)) {
struct drm_printer p = drm_dbg_printer(display->drm, DRM_UT_KMS, NULL);
diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c b/drivers/gpu/drm/i915/display/intel_lt_phy.c
index 746b0182362a..032fd80664c6 100644
--- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
+++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
@@ -2263,45 +2263,6 @@ bool intel_lt_phy_pll_readout_hw_state(struct intel_encoder *encoder,
return true;
}
-void intel_lt_phy_pll_state_verify(struct intel_atomic_state *state,
- struct intel_crtc *crtc)
-{
- struct intel_display *display = to_intel_display(state);
- struct intel_digital_port *dig_port;
- const struct intel_crtc_state *new_crtc_state =
- intel_atomic_get_new_crtc_state(state, crtc);
- struct intel_encoder *encoder;
- struct intel_lt_phy_pll_state pll_hw_state = {};
- const struct intel_lt_phy_pll_state *pll_sw_state = &new_crtc_state->dpll_hw_state.ltpll;
-
- if (DISPLAY_VER(display) < 35)
- return;
-
- if (!new_crtc_state->hw.active)
- return;
-
- /* intel_get_crtc_new_encoder() only works for modeset/fastset commits */
- if (!intel_crtc_needs_modeset(new_crtc_state) &&
- !intel_crtc_needs_fastset(new_crtc_state))
- return;
-
- encoder = intel_get_crtc_new_encoder(state, new_crtc_state);
- intel_lt_phy_pll_readout_hw_state(encoder, &pll_hw_state);
-
- dig_port = enc_to_dig_port(encoder);
- if (intel_tc_port_in_tbt_alt_mode(dig_port))
- return;
-
- INTEL_DISPLAY_STATE_WARN(display, pll_hw_state.config[0] != pll_sw_state->config[0],
- "[CRTC:%d:%s] mismatch in LT PHY PLL CONFIG 0: (expected 0x%04x, found 0x%04x)",
- crtc->base.base.id, crtc->base.name,
- pll_sw_state->config[0], pll_hw_state.config[0]);
- INTEL_DISPLAY_STATE_WARN(display, pll_hw_state.config[2] != pll_sw_state->config[2],
- "[CRTC:%d:%s] mismatch in LT PHY PLL CONFIG 2: (expected 0x%04x, found 0x%04x)",
- crtc->base.base.id, crtc->base.name,
- pll_sw_state->config[2], pll_hw_state.config[2]);
-}
-
void intel_xe3plpd_pll_enable(struct intel_encoder *encoder,
struct intel_dpll *pll,
const struct intel_dpll_hw_state *dpll_hw_state)
diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.h b/drivers/gpu/drm/i915/display/intel_lt_phy.h
index 1c2ec438cd10..8b98997b3107 100644
--- a/drivers/gpu/drm/i915/display/intel_lt_phy.h
+++ b/drivers/gpu/drm/i915/display/intel_lt_phy.h
@@ -41,8 +41,6 @@ bool intel_lt_phy_tbt_pll_readout_hw_state(struct intel_display *display,
struct intel_dpll_hw_state *hw_state);
bool intel_lt_phy_pll_readout_hw_state(struct intel_encoder *encoder,
struct intel_lt_phy_pll_state *pll_state);
-void intel_lt_phy_pll_state_verify(struct intel_atomic_state *state,
- struct intel_crtc *crtc);
int
intel_lt_phy_calculate_hdmi_state(struct intel_lt_phy_pll_state *lt_state,
u32 frequency_khz);
diff --git a/drivers/gpu/drm/i915/display/intel_modeset_verify.c b/drivers/gpu/drm/i915/display/intel_modeset_verify.c
index 12a00121c274..2ec17c2bfe0f 100644
--- a/drivers/gpu/drm/i915/display/intel_modeset_verify.c
+++ b/drivers/gpu/drm/i915/display/intel_modeset_verify.c
@@ -246,7 +246,6 @@ void intel_modeset_verify_crtc(struct intel_atomic_state *state,
verify_crtc_state(state, crtc);
intel_dpll_state_verify(state, crtc);
intel_mpllb_state_verify(state, crtc);
- intel_lt_phy_pll_state_verify(state, crtc);
}
void intel_modeset_verify_disabled(struct intel_atomic_state *state)
--
2.43.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH v2 24/24] drm/i915/lt_phy: Enable dpll framework for xe3plpd
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
` (22 preceding siblings ...)
2026-03-04 13:14 ` [PATCH v2 23/24] drm/i915/lt_phy: Remove LT PHY specific state verification Mika Kahola
@ 2026-03-04 13:14 ` Mika Kahola
2026-03-11 6:12 ` Kandpal, Suraj
2026-03-04 19:58 ` ✗ i915.CI.BAT: failure for Refactor LT PHY PLL handling to use DPLL framework (rev2) Patchwork
` (4 subsequent siblings)
28 siblings, 1 reply; 62+ messages in thread
From: Mika Kahola @ 2026-03-04 13:14 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Mika Kahola
xe3plpd platform is supported by dpll framework remove a separate
check for hw comparison and rely solely on dpll framework
hw comparison.
Finally, all required hooks are now in place so initialize
PLL manager for xe3plpd platform and remove the redirections
to the legacy code paths for clock enable/disable as well as
state mismatch checks that are no longer needed.
Signed-off-by: Mika Kahola <mika.kahola@intel.com>
---
drivers/gpu/drm/i915/display/intel_ddi.c | 2 +-
drivers/gpu/drm/i915/display/intel_display.c | 31 -------------------
drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 7 +++--
drivers/gpu/drm/i915/display/intel_lt_phy.c | 8 +----
4 files changed, 6 insertions(+), 42 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index 385d6b26693d..c3cceaf781ab 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -5285,7 +5285,7 @@ void intel_ddi_init(struct intel_display *display,
if (HAS_LT_PHY(display)) {
encoder->enable_clock = intel_xe3plpd_pll_enable_clock;
encoder->disable_clock = intel_xe3plpd_pll_disable_clock;
- encoder->port_pll_type = intel_mtl_port_pll_type;
+ encoder->port_pll_type = icl_ddi_tc_port_pll_type;
if (intel_encoder_is_tc(encoder))
encoder->get_config = mtl_ddi_tc_phy_get_config;
else
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index d67ec81c0b01..af02a666c3a1 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -5058,23 +5058,6 @@ static bool allow_vblank_delay_fastset(const struct intel_crtc_state *old_crtc_s
!intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DSI);
}
-static void
-pipe_config_lt_phy_pll_mismatch(struct drm_printer *p, bool fastset,
- const struct intel_crtc *crtc,
- const char *name,
- const struct intel_lt_phy_pll_state *a,
- const struct intel_lt_phy_pll_state *b)
-{
- char *chipname = "LTPHY";
-
- pipe_config_mismatch(p, fastset, crtc, name, chipname);
-
- drm_printf(p, "expected:\n");
- intel_lt_phy_dump_hw_state(p, a);
- drm_printf(p, "found:\n");
- intel_lt_phy_dump_hw_state(p, b);
-}
-
bool
intel_pipe_config_compare(const struct intel_crtc_state *current_config,
const struct intel_crtc_state *pipe_config,
@@ -5189,16 +5172,6 @@ intel_pipe_config_compare(const struct intel_crtc_state *current_config,
} \
} while (0)
-#define PIPE_CONF_CHECK_PLL_LT(name) do { \
- if (!intel_lt_phy_pll_compare_hw_state(¤t_config->name, \
- &pipe_config->name)) { \
- pipe_config_lt_phy_pll_mismatch(&p, fastset, crtc, __stringify(name), \
- ¤t_config->name, \
- &pipe_config->name); \
- ret = false; \
- } \
-} while (0)
-
#define PIPE_CONF_CHECK_TIMINGS(name) do { \
PIPE_CONF_CHECK_I(name.crtc_hdisplay); \
PIPE_CONF_CHECK_I(name.crtc_htotal); \
@@ -5425,10 +5398,6 @@ intel_pipe_config_compare(const struct intel_crtc_state *current_config,
if (display->dpll.mgr || HAS_GMCH(display))
PIPE_CONF_CHECK_PLL(dpll_hw_state);
- /* FIXME convert MTL+ platforms over to dpll_mgr */
- if (HAS_LT_PHY(display))
- PIPE_CONF_CHECK_PLL_LT(dpll_hw_state.ltpll);
-
PIPE_CONF_CHECK_X(dsi_pll.ctrl);
PIPE_CONF_CHECK_X(dsi_pll.div);
diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
index 63a0469d4e65..c4add325d8d6 100644
--- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
+++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
@@ -4724,7 +4724,6 @@ static bool xe3plpd_compare_hw_state(const struct intel_dpll_hw_state *_a,
return intel_lt_phy_pll_compare_hw_state(a, b);
}
-__maybe_unused
static const struct intel_dpll_mgr xe3plpd_pll_mgr = {
.dpll_info = xe3plpd_plls,
.compute_dplls = xe3plpd_compute_dplls,
@@ -4750,9 +4749,11 @@ void intel_dpll_init(struct intel_display *display)
mutex_init(&display->dpll.lock);
- if (DISPLAY_VER(display) >= 35 || display->platform.dg2)
- /* No shared DPLLs on NVL or DG2; port PLLs are part of the PHY */
+ if (display->platform.dg2)
+ /* No shared DPLLs on DG2; port PLLs are part of the PHY */
dpll_mgr = NULL;
+ else if (DISPLAY_VER(display) >= 35)
+ dpll_mgr = &xe3plpd_pll_mgr;
else if (DISPLAY_VER(display) >= 14)
dpll_mgr = &mtl_pll_mgr;
else if (display->platform.alderlake_p)
diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c b/drivers/gpu/drm/i915/display/intel_lt_phy.c
index 032fd80664c6..31669a435582 100644
--- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
+++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
@@ -11,6 +11,7 @@
#include "intel_ddi_buf_trans.h"
#include "intel_de.h"
#include "intel_display.h"
+#include "intel_display_regs.h"
#include "intel_display_types.h"
#include "intel_display_utils.h"
#include "intel_dpll.h"
@@ -2277,9 +2278,6 @@ void intel_xe3plpd_pll_enable_clock(struct intel_encoder *encoder,
if (intel_tc_port_in_tbt_alt_mode(dig_port))
intel_mtl_tbt_pll_enable_clock(encoder, crtc_state->port_clock);
- else
- /* TODO: remove when PLL mgr is in place. */
- intel_xe3plpd_pll_enable(encoder, NULL, &crtc_state->dpll_hw_state);
}
void intel_xe3plpd_pll_disable(struct intel_encoder *encoder)
@@ -2298,10 +2296,6 @@ void intel_xe3plpd_pll_disable_clock(struct intel_encoder *encoder)
if (intel_tc_port_in_tbt_alt_mode(dig_port))
intel_mtl_tbt_pll_disable_clock(encoder);
- else
- /* TODO: remove when PLL mgr is in place. */
- intel_xe3plpd_pll_disable(encoder);
-
}
static void intel_lt_phy_pll_verify_clock(struct intel_display *display,
--
2.43.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* Re: [PATCH v2 04/24] drm/i915/lt_phy: Refactor LT PHY PLL handling to use explicit PLL state
2026-03-04 13:14 ` [PATCH v2 04/24] drm/i915/lt_phy: Refactor LT PHY PLL handling to use explicit PLL state Mika Kahola
@ 2026-03-04 14:04 ` Imre Deak
2026-03-05 8:19 ` Kahola, Mika
2026-03-10 13:36 ` [PATCH v3 03/24] " Mika Kahola
1 sibling, 1 reply; 62+ messages in thread
From: Imre Deak @ 2026-03-04 14:04 UTC (permalink / raw)
To: Mika Kahola; +Cc: intel-gfx, intel-xe
On Wed, Mar 04, 2026 at 01:14:03PM +0000, Mika Kahola wrote:
> The LT PHY implementation currently pulls PLL and port_clock
> information directly from the CRTC state. This ties the PHY
> programming logic too tightly to the CRTC state and makes it
> harder to clearly express the PHY’s own PLL configuration.
>
> Introduce an explicit "struct intel_lt_phy_pll_state" argument
> for the PHY functions and update callers accordingly.
>
> No functional change is intended — this is a preparatory cleanup for
> to bring LT PHY PLL handling as part of PLL framework.
>
> Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_lt_phy.c | 48 ++++++++++++---------
> 1 file changed, 27 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> index 8fe61cfdb706..ebdcab58df4a 100644
> --- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> @@ -1178,7 +1178,8 @@ intel_lt_phy_lane_reset(struct intel_encoder *encoder,
>
> static void
> intel_lt_phy_program_port_clock_ctl(struct intel_encoder *encoder,
> - const struct intel_crtc_state *crtc_state,
> + const struct intel_lt_phy_pll_state *ltpll,
> + int port_clock,
> bool lane_reversal)
> {
> struct intel_display *display = to_intel_display(encoder);
> @@ -1195,17 +1196,17 @@ intel_lt_phy_program_port_clock_ctl(struct intel_encoder *encoder,
> * but since the register bits still remain the same we use
> * the same definition
> */
> - if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI) &&
> - intel_hdmi_is_frl(crtc_state->port_clock))
> + if (encoder->type == INTEL_OUTPUT_HDMI &&
This was discussed already elsewhere: encoder->type can't be used to
determine if the encoder is in HDMI or DP mode. In fact on LT PHY
platforms encoder->type will be never INTEL_OUTPUT_HDMI, rather it's
INTEL_OUTPUT_DDI, where the actual mode of the DDI encoder could be
either HDMI or DP.
The ideal would be to deduct the DP/HDMI mode from the
intel_lt_phy_pll_state instead. AFAICS ltpll->config[0] is explicitly
set to 0x84 for both the computed and table-specified HDMI PLL
configurations and config[0] is not 0x84 for any DP PLL configurations.
Could be used that instead to distinguish the HDMI and DP configs?
> + intel_hdmi_is_frl(port_clock))
> val |= XELPDP_DDI_CLOCK_SELECT_PREP(display, XELPDP_DDI_CLOCK_SELECT_DIV18CLK);
> else
> val |= XELPDP_DDI_CLOCK_SELECT_PREP(display, XELPDP_DDI_CLOCK_SELECT_MAXPCLK);
>
> /* DP2.0 10G and 20G rates enable MPLLA*/
> - if (crtc_state->port_clock == 1000000 || crtc_state->port_clock == 2000000)
> + if (port_clock == 1000000 || port_clock == 2000000)
> val |= XELPDP_SSC_ENABLE_PLLA;
> else
> - val |= crtc_state->dpll_hw_state.ltpll.ssc_enabled ? XELPDP_SSC_ENABLE_PLLB : 0;
> + val |= ltpll->ssc_enabled ? XELPDP_SSC_ENABLE_PLLB : 0;
>
> intel_de_rmw(display, XELPDP_PORT_CLOCK_CTL(display, encoder->port),
> XELPDP_LANE1_PHY_CLOCK_SELECT | XELPDP_FORWARD_CLOCK_UNGATE |
> @@ -1248,10 +1249,12 @@ static u32 intel_lt_phy_get_dp_clock(u8 rate)
>
> static bool
> intel_lt_phy_config_changed(struct intel_encoder *encoder,
> - const struct intel_crtc_state *crtc_state)
> + const struct intel_lt_phy_pll_state *ltpll)
> {
> + struct intel_display *display = to_intel_display(encoder);
> u8 val, rate;
> u32 clock;
> + u32 port_clock = intel_lt_phy_calc_port_clock(display, ltpll);
>
> val = intel_lt_phy_read(encoder, INTEL_LT_PHY_LANE0,
> LT_PHY_VDR_0_CONFIG);
> @@ -1262,9 +1265,10 @@ intel_lt_phy_config_changed(struct intel_encoder *encoder,
> * using 1.62 Gbps clock since PHY PLL defaults to that
> * otherwise we always need to reconfigure it.
> */
> - if (intel_crtc_has_dp_encoder(crtc_state)) {
> + if (encoder->type == INTEL_OUTPUT_DP ||
> + encoder->type == INTEL_OUTPUT_EDP) {
Same as above, encoder->type can't be used here.
> clock = intel_lt_phy_get_dp_clock(rate);
> - if (crtc_state->port_clock == 1620000 && crtc_state->port_clock == clock)
> + if (port_clock == 1620000 && port_clock == clock)
> return false;
> }
>
> @@ -1759,41 +1763,41 @@ intel_lt_phy_pll_calc_state(struct intel_crtc_state *crtc_state,
>
> static void
> intel_lt_phy_program_pll(struct intel_encoder *encoder,
> - const struct intel_crtc_state *crtc_state)
> + const struct intel_lt_phy_pll_state *ltpll)
> {
> u8 owned_lane_mask = intel_lt_phy_get_owned_lane_mask(encoder);
> int i, j, k;
>
> intel_lt_phy_write(encoder, owned_lane_mask, LT_PHY_VDR_0_CONFIG,
> - crtc_state->dpll_hw_state.ltpll.config[0], MB_WRITE_COMMITTED);
> + ltpll->config[0], MB_WRITE_COMMITTED);
> intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0, LT_PHY_VDR_1_CONFIG,
> - crtc_state->dpll_hw_state.ltpll.config[1], MB_WRITE_COMMITTED);
> + ltpll->config[1], MB_WRITE_COMMITTED);
> intel_lt_phy_write(encoder, owned_lane_mask, LT_PHY_VDR_2_CONFIG,
> - crtc_state->dpll_hw_state.ltpll.config[2], MB_WRITE_COMMITTED);
> + ltpll->config[2], MB_WRITE_COMMITTED);
>
> for (i = 0; i <= 12; i++) {
> intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0, LT_PHY_VDR_X_ADDR_MSB(i),
> - crtc_state->dpll_hw_state.ltpll.addr_msb[i],
> + ltpll->addr_msb[i],
> MB_WRITE_COMMITTED);
> intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0, LT_PHY_VDR_X_ADDR_LSB(i),
> - crtc_state->dpll_hw_state.ltpll.addr_lsb[i],
> + ltpll->addr_lsb[i],
> MB_WRITE_COMMITTED);
>
> for (j = 3, k = 0; j >= 0; j--, k++)
> intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0,
> LT_PHY_VDR_X_DATAY(i, j),
> - crtc_state->dpll_hw_state.ltpll.data[i][k],
> + ltpll->data[i][k],
> MB_WRITE_COMMITTED);
> }
> }
>
> static void
> intel_lt_phy_enable_disable_tx(struct intel_encoder *encoder,
> - const struct intel_crtc_state *crtc_state)
> + const struct intel_lt_phy_pll_state *ltpll,
> + u8 lane_count)
> {
> struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
> bool lane_reversal = dig_port->lane_reversal;
> - u8 lane_count = crtc_state->lane_count;
> bool is_dp_alt =
> intel_tc_port_in_dp_alt_mode(dig_port);
> enum intel_tc_pin_assignment tc_pin =
> @@ -1895,7 +1899,8 @@ void intel_lt_phy_pll_enable(struct intel_encoder *encoder,
> intel_lt_phy_lane_reset(encoder, crtc_state->lane_count);
>
> /* 2. Program PORT_CLOCK_CTL register to configure clock muxes, gating, and SSC. */
> - intel_lt_phy_program_port_clock_ctl(encoder, crtc_state, lane_reversal);
> + intel_lt_phy_program_port_clock_ctl(encoder, &crtc_state->dpll_hw_state.ltpll,
> + crtc_state->port_clock, lane_reversal);
>
> /* 3. Change owned PHY lanes power to Ready state. */
> intel_lt_phy_powerdown_change_sequence(encoder, owned_lane_mask,
> @@ -1905,12 +1910,12 @@ void intel_lt_phy_pll_enable(struct intel_encoder *encoder,
> * 4. Read the PHY message bus VDR register PHY_VDR_0_Config check enabled PLL type,
> * encoded rate and encoded mode.
> */
> - if (intel_lt_phy_config_changed(encoder, crtc_state)) {
> + if (intel_lt_phy_config_changed(encoder, &crtc_state->dpll_hw_state.ltpll)) {
> /*
> * 5. Program the PHY internal PLL registers over PHY message bus for the desired
> * frequency and protocol type
> */
> - intel_lt_phy_program_pll(encoder, crtc_state);
> + intel_lt_phy_program_pll(encoder, &crtc_state->dpll_hw_state.ltpll);
>
> /* 6. Use the P2P transaction flow */
> /*
> @@ -2001,7 +2006,8 @@ void intel_lt_phy_pll_enable(struct intel_encoder *encoder,
> intel_lt_phy_powerdown_change_sequence(encoder, owned_lane_mask,
> XELPDP_P0_STATE_ACTIVE);
>
> - intel_lt_phy_enable_disable_tx(encoder, crtc_state);
> + intel_lt_phy_enable_disable_tx(encoder, &crtc_state->dpll_hw_state.ltpll,
> + crtc_state->lane_count);
> intel_lt_phy_transaction_end(encoder, wakeref);
> }
>
> --
> 2.43.0
>
^ permalink raw reply [flat|nested] 62+ messages in thread
* ✗ i915.CI.BAT: failure for Refactor LT PHY PLL handling to use DPLL framework (rev2)
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
` (23 preceding siblings ...)
2026-03-04 13:14 ` [PATCH v2 24/24] drm/i915/lt_phy: Enable dpll framework for xe3plpd Mika Kahola
@ 2026-03-04 19:58 ` Patchwork
2026-03-06 13:18 ` ✓ i915.CI.BAT: success for Refactor LT PHY PLL handling to use DPLL framework (rev3) Patchwork
` (3 subsequent siblings)
28 siblings, 0 replies; 62+ messages in thread
From: Patchwork @ 2026-03-04 19:58 UTC (permalink / raw)
To: Mika Kahola; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 18777 bytes --]
== Series Details ==
Series: Refactor LT PHY PLL handling to use DPLL framework (rev2)
URL : https://patchwork.freedesktop.org/series/161587/
State : failure
== Summary ==
CI Bug Log - changes from CI_DRM_18090 -> Patchwork_161587v2
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with Patchwork_161587v2 absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in Patchwork_161587v2, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/index.html
Participating hosts (41 -> 40)
------------------------------
Missing (1): bat-dg2-13
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in Patchwork_161587v2:
### IGT changes ###
#### Possible regressions ####
* igt@kms_flip@basic-flip-vs-dpms:
- fi-cfl-guc: [PASS][1] -> [ABORT][2] +1 other test abort
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/fi-cfl-guc/igt@kms_flip@basic-flip-vs-dpms.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/fi-cfl-guc/igt@kms_flip@basic-flip-vs-dpms.html
- fi-ivb-3770: [PASS][3] -> [ABORT][4] +1 other test abort
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/fi-ivb-3770/igt@kms_flip@basic-flip-vs-dpms.html
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/fi-ivb-3770/igt@kms_flip@basic-flip-vs-dpms.html
- bat-arls-6: [PASS][5] -> [ABORT][6] +1 other test abort
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-arls-6/igt@kms_flip@basic-flip-vs-dpms.html
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-arls-6/igt@kms_flip@basic-flip-vs-dpms.html
- fi-hsw-4770: [PASS][7] -> [ABORT][8] +1 other test abort
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/fi-hsw-4770/igt@kms_flip@basic-flip-vs-dpms.html
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/fi-hsw-4770/igt@kms_flip@basic-flip-vs-dpms.html
- fi-glk-j4005: [PASS][9] -> [ABORT][10] +1 other test abort
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/fi-glk-j4005/igt@kms_flip@basic-flip-vs-dpms.html
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/fi-glk-j4005/igt@kms_flip@basic-flip-vs-dpms.html
- bat-jsl-5: [PASS][11] -> [ABORT][12] +1 other test abort
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-jsl-5/igt@kms_flip@basic-flip-vs-dpms.html
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-jsl-5/igt@kms_flip@basic-flip-vs-dpms.html
- fi-tgl-1115g4: [PASS][13] -> [ABORT][14] +1 other test abort
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/fi-tgl-1115g4/igt@kms_flip@basic-flip-vs-dpms.html
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/fi-tgl-1115g4/igt@kms_flip@basic-flip-vs-dpms.html
* igt@kms_flip@basic-flip-vs-dpms@a-dp1:
- bat-adlp-9: [PASS][15] -> [ABORT][16] +1 other test abort
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-adlp-9/igt@kms_flip@basic-flip-vs-dpms@a-dp1.html
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-adlp-9/igt@kms_flip@basic-flip-vs-dpms@a-dp1.html
- bat-apl-1: [PASS][17] -> [ABORT][18] +1 other test abort
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-apl-1/igt@kms_flip@basic-flip-vs-dpms@a-dp1.html
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-apl-1/igt@kms_flip@basic-flip-vs-dpms@a-dp1.html
- bat-rpls-4: [PASS][19] -> [ABORT][20] +1 other test abort
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-rpls-4/igt@kms_flip@basic-flip-vs-dpms@a-dp1.html
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-rpls-4/igt@kms_flip@basic-flip-vs-dpms@a-dp1.html
- fi-cfl-8109u: [PASS][21] -> [ABORT][22] +1 other test abort
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/fi-cfl-8109u/igt@kms_flip@basic-flip-vs-dpms@a-dp1.html
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/fi-cfl-8109u/igt@kms_flip@basic-flip-vs-dpms@a-dp1.html
- fi-kbl-7567u: [PASS][23] -> [ABORT][24] +1 other test abort
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/fi-kbl-7567u/igt@kms_flip@basic-flip-vs-dpms@a-dp1.html
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/fi-kbl-7567u/igt@kms_flip@basic-flip-vs-dpms@a-dp1.html
* igt@kms_flip@basic-flip-vs-dpms@a-dp2:
- fi-cfl-8109u: [PASS][25] -> [DMESG-WARN][26] +4 other tests dmesg-warn
[25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/fi-cfl-8109u/igt@kms_flip@basic-flip-vs-dpms@a-dp2.html
[26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/fi-cfl-8109u/igt@kms_flip@basic-flip-vs-dpms@a-dp2.html
* igt@kms_flip@basic-flip-vs-dpms@a-dp3:
- bat-adlp-6: [PASS][27] -> [DMESG-WARN][28] +6 other tests dmesg-warn
[27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-adlp-6/igt@kms_flip@basic-flip-vs-dpms@a-dp3.html
[28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-adlp-6/igt@kms_flip@basic-flip-vs-dpms@a-dp3.html
- bat-arls-5: [PASS][29] -> [ABORT][30] +1 other test abort
[29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-arls-5/igt@kms_flip@basic-flip-vs-dpms@a-dp3.html
[30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-arls-5/igt@kms_flip@basic-flip-vs-dpms@a-dp3.html
* igt@kms_flip@basic-flip-vs-dpms@a-edp1:
- bat-twl-2: [PASS][31] -> [ABORT][32] +1 other test abort
[31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-twl-2/igt@kms_flip@basic-flip-vs-dpms@a-edp1.html
[32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-twl-2/igt@kms_flip@basic-flip-vs-dpms@a-edp1.html
- bat-adlp-6: [PASS][33] -> [ABORT][34] +1 other test abort
[33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-adlp-6/igt@kms_flip@basic-flip-vs-dpms@a-edp1.html
[34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-adlp-6/igt@kms_flip@basic-flip-vs-dpms@a-edp1.html
- bat-mtlp-8: [PASS][35] -> [ABORT][36] +1 other test abort
[35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-mtlp-8/igt@kms_flip@basic-flip-vs-dpms@a-edp1.html
[36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-mtlp-8/igt@kms_flip@basic-flip-vs-dpms@a-edp1.html
- bat-mtlp-9: [PASS][37] -> [ABORT][38] +1 other test abort
[37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-mtlp-9/igt@kms_flip@basic-flip-vs-dpms@a-edp1.html
[38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-mtlp-9/igt@kms_flip@basic-flip-vs-dpms@a-edp1.html
- bat-twl-1: [PASS][39] -> [ABORT][40] +1 other test abort
[39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-twl-1/igt@kms_flip@basic-flip-vs-dpms@a-edp1.html
[40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-twl-1/igt@kms_flip@basic-flip-vs-dpms@a-edp1.html
- bat-rplp-1: [PASS][41] -> [ABORT][42] +1 other test abort
[41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-rplp-1/igt@kms_flip@basic-flip-vs-dpms@a-edp1.html
[42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-rplp-1/igt@kms_flip@basic-flip-vs-dpms@a-edp1.html
- bat-arlh-3: [PASS][43] -> [ABORT][44] +1 other test abort
[43]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-arlh-3/igt@kms_flip@basic-flip-vs-dpms@a-edp1.html
[44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-arlh-3/igt@kms_flip@basic-flip-vs-dpms@a-edp1.html
* igt@kms_flip@basic-flip-vs-dpms@a-hdmi-a1:
- fi-cfl-8700k: [PASS][45] -> [ABORT][46] +1 other test abort
[45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/fi-cfl-8700k/igt@kms_flip@basic-flip-vs-dpms@a-hdmi-a1.html
[46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/fi-cfl-8700k/igt@kms_flip@basic-flip-vs-dpms@a-hdmi-a1.html
- bat-adls-6: [PASS][47] -> [ABORT][48] +1 other test abort
[47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-adls-6/igt@kms_flip@basic-flip-vs-dpms@a-hdmi-a1.html
[48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-adls-6/igt@kms_flip@basic-flip-vs-dpms@a-hdmi-a1.html
* igt@kms_flip@basic-flip-vs-dpms@a-hdmi-a2:
- bat-dg1-7: [PASS][49] -> [ABORT][50] +1 other test abort
[49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-dg1-7/igt@kms_flip@basic-flip-vs-dpms@a-hdmi-a2.html
[50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-dg1-7/igt@kms_flip@basic-flip-vs-dpms@a-hdmi-a2.html
- bat-rpls-4: [PASS][51] -> [DMESG-WARN][52] +6 other tests dmesg-warn
[51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-rpls-4/igt@kms_flip@basic-flip-vs-dpms@a-hdmi-a2.html
[52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-rpls-4/igt@kms_flip@basic-flip-vs-dpms@a-hdmi-a2.html
* igt@kms_flip@basic-flip-vs-dpms@a-vga1:
- fi-ilk-650: [PASS][53] -> [ABORT][54] +1 other test abort
[53]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/fi-ilk-650/igt@kms_flip@basic-flip-vs-dpms@a-vga1.html
[54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/fi-ilk-650/igt@kms_flip@basic-flip-vs-dpms@a-vga1.html
* igt@kms_flip@basic-flip-vs-dpms@b-dp3:
- bat-arls-5: [PASS][55] -> [DMESG-WARN][56] +2 other tests dmesg-warn
[55]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-arls-5/igt@kms_flip@basic-flip-vs-dpms@b-dp3.html
[56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-arls-5/igt@kms_flip@basic-flip-vs-dpms@b-dp3.html
* igt@kms_flip@basic-flip-vs-dpms@b-dp7:
- bat-mtlp-9: [PASS][57] -> [DMESG-WARN][58] +10 other tests dmesg-warn
[57]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-mtlp-9/igt@kms_flip@basic-flip-vs-dpms@b-dp7.html
[58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-mtlp-9/igt@kms_flip@basic-flip-vs-dpms@b-dp7.html
* igt@kms_flip@basic-flip-vs-dpms@b-edp1:
- bat-mtlp-8: [PASS][59] -> [DMESG-WARN][60] +2 other tests dmesg-warn
[59]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-mtlp-8/igt@kms_flip@basic-flip-vs-dpms@b-edp1.html
[60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-mtlp-8/igt@kms_flip@basic-flip-vs-dpms@b-edp1.html
- bat-arlh-3: [PASS][61] -> [DMESG-WARN][62] +2 other tests dmesg-warn
[61]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-arlh-3/igt@kms_flip@basic-flip-vs-dpms@b-edp1.html
[62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-arlh-3/igt@kms_flip@basic-flip-vs-dpms@b-edp1.html
- bat-twl-1: [PASS][63] -> [DMESG-WARN][64] +1 other test dmesg-warn
[63]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-twl-1/igt@kms_flip@basic-flip-vs-dpms@b-edp1.html
[64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-twl-1/igt@kms_flip@basic-flip-vs-dpms@b-edp1.html
- bat-rplp-1: [PASS][65] -> [DMESG-WARN][66] +2 other tests dmesg-warn
[65]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-rplp-1/igt@kms_flip@basic-flip-vs-dpms@b-edp1.html
[66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-rplp-1/igt@kms_flip@basic-flip-vs-dpms@b-edp1.html
* igt@kms_flip@basic-flip-vs-dpms@b-hdmi-a1:
- bat-adls-6: [PASS][67] -> [DMESG-WARN][68] +2 other tests dmesg-warn
[67]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-adls-6/igt@kms_flip@basic-flip-vs-dpms@b-hdmi-a1.html
[68]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-adls-6/igt@kms_flip@basic-flip-vs-dpms@b-hdmi-a1.html
* igt@kms_flip@basic-flip-vs-dpms@b-hdmi-a2:
- bat-arls-6: [PASS][69] -> [DMESG-WARN][70] +2 other tests dmesg-warn
[69]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-arls-6/igt@kms_flip@basic-flip-vs-dpms@b-hdmi-a2.html
[70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-arls-6/igt@kms_flip@basic-flip-vs-dpms@b-hdmi-a2.html
- bat-dg1-7: [PASS][71] -> [DMESG-WARN][72] +2 other tests dmesg-warn
[71]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-dg1-7/igt@kms_flip@basic-flip-vs-dpms@b-hdmi-a2.html
[72]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-dg1-7/igt@kms_flip@basic-flip-vs-dpms@b-hdmi-a2.html
- fi-glk-j4005: [PASS][73] -> [DMESG-WARN][74] +1 other test dmesg-warn
[73]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/fi-glk-j4005/igt@kms_flip@basic-flip-vs-dpms@b-hdmi-a2.html
[74]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/fi-glk-j4005/igt@kms_flip@basic-flip-vs-dpms@b-hdmi-a2.html
* igt@kms_flip@basic-flip-vs-dpms@b-vga1:
- fi-ilk-650: [PASS][75] -> [DMESG-WARN][76]
[75]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/fi-ilk-650/igt@kms_flip@basic-flip-vs-dpms@b-vga1.html
[76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/fi-ilk-650/igt@kms_flip@basic-flip-vs-dpms@b-vga1.html
* igt@kms_flip@basic-flip-vs-dpms@c-dp1:
- bat-adlp-9: [PASS][77] -> [DMESG-WARN][78] +2 other tests dmesg-warn
[77]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-adlp-9/igt@kms_flip@basic-flip-vs-dpms@c-dp1.html
[78]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-adlp-9/igt@kms_flip@basic-flip-vs-dpms@c-dp1.html
- bat-apl-1: [PASS][79] -> [DMESG-WARN][80] +1 other test dmesg-warn
[79]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-apl-1/igt@kms_flip@basic-flip-vs-dpms@c-dp1.html
[80]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-apl-1/igt@kms_flip@basic-flip-vs-dpms@c-dp1.html
- fi-kbl-7567u: [PASS][81] -> [DMESG-WARN][82] +1 other test dmesg-warn
[81]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/fi-kbl-7567u/igt@kms_flip@basic-flip-vs-dpms@c-dp1.html
[82]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/fi-kbl-7567u/igt@kms_flip@basic-flip-vs-dpms@c-dp1.html
* igt@kms_flip@basic-flip-vs-dpms@c-edp1:
- bat-twl-2: [PASS][83] -> [DMESG-WARN][84] +1 other test dmesg-warn
[83]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-twl-2/igt@kms_flip@basic-flip-vs-dpms@c-edp1.html
[84]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-twl-2/igt@kms_flip@basic-flip-vs-dpms@c-edp1.html
* igt@kms_flip@basic-flip-vs-dpms@c-hdmi-a1:
- bat-jsl-5: [PASS][85] -> [DMESG-WARN][86] +1 other test dmesg-warn
[85]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-jsl-5/igt@kms_flip@basic-flip-vs-dpms@c-hdmi-a1.html
[86]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-jsl-5/igt@kms_flip@basic-flip-vs-dpms@c-hdmi-a1.html
- fi-tgl-1115g4: [PASS][87] -> [DMESG-WARN][88] +2 other tests dmesg-warn
[87]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/fi-tgl-1115g4/igt@kms_flip@basic-flip-vs-dpms@c-hdmi-a1.html
[88]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/fi-tgl-1115g4/igt@kms_flip@basic-flip-vs-dpms@c-hdmi-a1.html
- fi-cfl-guc: [PASS][89] -> [DMESG-WARN][90] +1 other test dmesg-warn
[89]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/fi-cfl-guc/igt@kms_flip@basic-flip-vs-dpms@c-hdmi-a1.html
[90]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/fi-cfl-guc/igt@kms_flip@basic-flip-vs-dpms@c-hdmi-a1.html
- fi-cfl-8700k: [PASS][91] -> [DMESG-WARN][92] +1 other test dmesg-warn
[91]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/fi-cfl-8700k/igt@kms_flip@basic-flip-vs-dpms@c-hdmi-a1.html
[92]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/fi-cfl-8700k/igt@kms_flip@basic-flip-vs-dpms@c-hdmi-a1.html
* igt@kms_flip@basic-flip-vs-dpms@c-vga1:
- fi-hsw-4770: [PASS][93] -> [DMESG-WARN][94] +1 other test dmesg-warn
[93]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/fi-hsw-4770/igt@kms_flip@basic-flip-vs-dpms@c-vga1.html
[94]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/fi-hsw-4770/igt@kms_flip@basic-flip-vs-dpms@c-vga1.html
- fi-ivb-3770: [PASS][95] -> [DMESG-WARN][96] +1 other test dmesg-warn
[95]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/fi-ivb-3770/igt@kms_flip@basic-flip-vs-dpms@c-vga1.html
[96]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/fi-ivb-3770/igt@kms_flip@basic-flip-vs-dpms@c-vga1.html
Known issues
------------
Here are the changes found in Patchwork_161587v2 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@gem_lmem_swapping@parallel-random-engines@lmem0:
- bat-dg2-8: [PASS][97] -> [ABORT][98] ([i915#15759]) +1 other test abort
[97]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-dg2-8/igt@gem_lmem_swapping@parallel-random-engines@lmem0.html
[98]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-dg2-8/igt@gem_lmem_swapping@parallel-random-engines@lmem0.html
#### Possible fixes ####
* igt@i915_selftest@live@workarounds:
- bat-dg2-14: [DMESG-FAIL][99] ([i915#12061]) -> [PASS][100] +1 other test pass
[99]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18090/bat-dg2-14/igt@i915_selftest@live@workarounds.html
[100]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/bat-dg2-14/igt@i915_selftest@live@workarounds.html
[i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
[i915#15759]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15759
Build changes
-------------
* Linux: CI_DRM_18090 -> Patchwork_161587v2
CI-20190529: 20190529
CI_DRM_18090: d6f74d61a95e54f21a4dc344b33d541f254a1325 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_8777: a50285a68dbef0fe11140adef4016a756f57b324 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
Patchwork_161587v2: d6f74d61a95e54f21a4dc344b33d541f254a1325 @ git://anongit.freedesktop.org/gfx-ci/linux
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v2/index.html
[-- Attachment #2: Type: text/html, Size: 20037 bytes --]
^ permalink raw reply [flat|nested] 62+ messages in thread
* RE: [PATCH v2 04/24] drm/i915/lt_phy: Refactor LT PHY PLL handling to use explicit PLL state
2026-03-04 14:04 ` Imre Deak
@ 2026-03-05 8:19 ` Kahola, Mika
2026-03-10 4:02 ` Kandpal, Suraj
0 siblings, 1 reply; 62+ messages in thread
From: Kahola, Mika @ 2026-03-05 8:19 UTC (permalink / raw)
To: Deak, Imre
Cc: intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org
> -----Original Message-----
> From: Deak, Imre <imre.deak@intel.com>
> Sent: Wednesday, 4 March 2026 16.05
> To: Kahola, Mika <mika.kahola@intel.com>
> Cc: intel-gfx@lists.freedesktop.org; intel-xe@lists.freedesktop.org
> Subject: Re: [PATCH v2 04/24] drm/i915/lt_phy: Refactor LT PHY PLL handling to use explicit PLL state
>
> On Wed, Mar 04, 2026 at 01:14:03PM +0000, Mika Kahola wrote:
> > The LT PHY implementation currently pulls PLL and port_clock
> > information directly from the CRTC state. This ties the PHY
> > programming logic too tightly to the CRTC state and makes it harder to
> > clearly express the PHY’s own PLL configuration.
> >
> > Introduce an explicit "struct intel_lt_phy_pll_state" argument for the
> > PHY functions and update callers accordingly.
> >
> > No functional change is intended — this is a preparatory cleanup for
> > to bring LT PHY PLL handling as part of PLL framework.
> >
> > Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> > ---
> > drivers/gpu/drm/i915/display/intel_lt_phy.c | 48
> > ++++++++++++---------
> > 1 file changed, 27 insertions(+), 21 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > index 8fe61cfdb706..ebdcab58df4a 100644
> > --- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > @@ -1178,7 +1178,8 @@ intel_lt_phy_lane_reset(struct intel_encoder
> > *encoder,
> >
> > static void
> > intel_lt_phy_program_port_clock_ctl(struct intel_encoder *encoder,
> > - const struct intel_crtc_state *crtc_state,
> > + const struct intel_lt_phy_pll_state *ltpll,
> > + int port_clock,
> > bool lane_reversal)
> > {
> > struct intel_display *display = to_intel_display(encoder); @@
> > -1195,17 +1196,17 @@ intel_lt_phy_program_port_clock_ctl(struct intel_encoder *encoder,
> > * but since the register bits still remain the same we use
> > * the same definition
> > */
> > - if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI) &&
> > - intel_hdmi_is_frl(crtc_state->port_clock))
> > + if (encoder->type == INTEL_OUTPUT_HDMI &&
>
> This was discussed already elsewhere: encoder->type can't be used to determine if the encoder is in HDMI or DP mode. In fact on
> LT PHY platforms encoder->type will be never INTEL_OUTPUT_HDMI, rather it's INTEL_OUTPUT_DDI, where the actual mode of
> the DDI encoder could be either HDMI or DP.
>
> The ideal would be to deduct the DP/HDMI mode from the intel_lt_phy_pll_state instead. AFAICS ltpll->config[0] is explicitly set to
> 0x84 for both the computed and table-specified HDMI PLL configurations and config[0] is not 0x84 for any DP PLL configurations.
> Could be used that instead to distinguish the HDMI and DP configs?
Right. I keep forgetting this that "encoder->type" can be both DP and HDMI. The naming to me seems a bit misleading and hence I keep forgetting this. Anyway, this approach cannot be used here but I must come up with better solution.
I could switch to use config[0] to distinguish HDMI.
Thanks for a review!
-Mika-
>
> > + intel_hdmi_is_frl(port_clock))
> > val |= XELPDP_DDI_CLOCK_SELECT_PREP(display, XELPDP_DDI_CLOCK_SELECT_DIV18CLK);
> > else
> > val |= XELPDP_DDI_CLOCK_SELECT_PREP(display,
> > XELPDP_DDI_CLOCK_SELECT_MAXPCLK);
> >
> > /* DP2.0 10G and 20G rates enable MPLLA*/
> > - if (crtc_state->port_clock == 1000000 || crtc_state->port_clock == 2000000)
> > + if (port_clock == 1000000 || port_clock == 2000000)
> > val |= XELPDP_SSC_ENABLE_PLLA;
> > else
> > - val |= crtc_state->dpll_hw_state.ltpll.ssc_enabled ? XELPDP_SSC_ENABLE_PLLB : 0;
> > + val |= ltpll->ssc_enabled ? XELPDP_SSC_ENABLE_PLLB : 0;
> >
> > intel_de_rmw(display, XELPDP_PORT_CLOCK_CTL(display, encoder->port),
> > XELPDP_LANE1_PHY_CLOCK_SELECT | XELPDP_FORWARD_CLOCK_UNGATE |
> > @@ -1248,10 +1249,12 @@ static u32 intel_lt_phy_get_dp_clock(u8 rate)
> >
> > static bool
> > intel_lt_phy_config_changed(struct intel_encoder *encoder,
> > - const struct intel_crtc_state *crtc_state)
> > + const struct intel_lt_phy_pll_state *ltpll)
> > {
> > + struct intel_display *display = to_intel_display(encoder);
> > u8 val, rate;
> > u32 clock;
> > + u32 port_clock = intel_lt_phy_calc_port_clock(display, ltpll);
> >
> > val = intel_lt_phy_read(encoder, INTEL_LT_PHY_LANE0,
> > LT_PHY_VDR_0_CONFIG);
> > @@ -1262,9 +1265,10 @@ intel_lt_phy_config_changed(struct intel_encoder *encoder,
> > * using 1.62 Gbps clock since PHY PLL defaults to that
> > * otherwise we always need to reconfigure it.
> > */
> > - if (intel_crtc_has_dp_encoder(crtc_state)) {
> > + if (encoder->type == INTEL_OUTPUT_DP ||
> > + encoder->type == INTEL_OUTPUT_EDP) {
>
> Same as above, encoder->type can't be used here.
>
> > clock = intel_lt_phy_get_dp_clock(rate);
> > - if (crtc_state->port_clock == 1620000 && crtc_state->port_clock == clock)
> > + if (port_clock == 1620000 && port_clock == clock)
> > return false;
> > }
> >
> > @@ -1759,41 +1763,41 @@ intel_lt_phy_pll_calc_state(struct
> > intel_crtc_state *crtc_state,
> >
> > static void
> > intel_lt_phy_program_pll(struct intel_encoder *encoder,
> > - const struct intel_crtc_state *crtc_state)
> > + const struct intel_lt_phy_pll_state *ltpll)
> > {
> > u8 owned_lane_mask = intel_lt_phy_get_owned_lane_mask(encoder);
> > int i, j, k;
> >
> > intel_lt_phy_write(encoder, owned_lane_mask, LT_PHY_VDR_0_CONFIG,
> > - crtc_state->dpll_hw_state.ltpll.config[0], MB_WRITE_COMMITTED);
> > + ltpll->config[0], MB_WRITE_COMMITTED);
> > intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0, LT_PHY_VDR_1_CONFIG,
> > - crtc_state->dpll_hw_state.ltpll.config[1], MB_WRITE_COMMITTED);
> > + ltpll->config[1], MB_WRITE_COMMITTED);
> > intel_lt_phy_write(encoder, owned_lane_mask, LT_PHY_VDR_2_CONFIG,
> > - crtc_state->dpll_hw_state.ltpll.config[2], MB_WRITE_COMMITTED);
> > + ltpll->config[2], MB_WRITE_COMMITTED);
> >
> > for (i = 0; i <= 12; i++) {
> > intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0, LT_PHY_VDR_X_ADDR_MSB(i),
> > - crtc_state->dpll_hw_state.ltpll.addr_msb[i],
> > + ltpll->addr_msb[i],
> > MB_WRITE_COMMITTED);
> > intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0, LT_PHY_VDR_X_ADDR_LSB(i),
> > - crtc_state->dpll_hw_state.ltpll.addr_lsb[i],
> > + ltpll->addr_lsb[i],
> > MB_WRITE_COMMITTED);
> >
> > for (j = 3, k = 0; j >= 0; j--, k++)
> > intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0,
> > LT_PHY_VDR_X_DATAY(i, j),
> > - crtc_state->dpll_hw_state.ltpll.data[i][k],
> > + ltpll->data[i][k],
> > MB_WRITE_COMMITTED);
> > }
> > }
> >
> > static void
> > intel_lt_phy_enable_disable_tx(struct intel_encoder *encoder,
> > - const struct intel_crtc_state *crtc_state)
> > + const struct intel_lt_phy_pll_state *ltpll,
> > + u8 lane_count)
> > {
> > struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
> > bool lane_reversal = dig_port->lane_reversal;
> > - u8 lane_count = crtc_state->lane_count;
> > bool is_dp_alt =
> > intel_tc_port_in_dp_alt_mode(dig_port);
> > enum intel_tc_pin_assignment tc_pin = @@ -1895,7 +1899,8 @@ void
> > intel_lt_phy_pll_enable(struct intel_encoder *encoder,
> > intel_lt_phy_lane_reset(encoder, crtc_state->lane_count);
> >
> > /* 2. Program PORT_CLOCK_CTL register to configure clock muxes, gating, and SSC. */
> > - intel_lt_phy_program_port_clock_ctl(encoder, crtc_state, lane_reversal);
> > + intel_lt_phy_program_port_clock_ctl(encoder, &crtc_state->dpll_hw_state.ltpll,
> > + crtc_state->port_clock, lane_reversal);
> >
> > /* 3. Change owned PHY lanes power to Ready state. */
> > intel_lt_phy_powerdown_change_sequence(encoder, owned_lane_mask, @@
> > -1905,12 +1910,12 @@ void intel_lt_phy_pll_enable(struct intel_encoder *encoder,
> > * 4. Read the PHY message bus VDR register PHY_VDR_0_Config check enabled PLL type,
> > * encoded rate and encoded mode.
> > */
> > - if (intel_lt_phy_config_changed(encoder, crtc_state)) {
> > + if (intel_lt_phy_config_changed(encoder,
> > +&crtc_state->dpll_hw_state.ltpll)) {
> > /*
> > * 5. Program the PHY internal PLL registers over PHY message bus for the desired
> > * frequency and protocol type
> > */
> > - intel_lt_phy_program_pll(encoder, crtc_state);
> > + intel_lt_phy_program_pll(encoder,
> > +&crtc_state->dpll_hw_state.ltpll);
> >
> > /* 6. Use the P2P transaction flow */
> > /*
> > @@ -2001,7 +2006,8 @@ void intel_lt_phy_pll_enable(struct intel_encoder *encoder,
> > intel_lt_phy_powerdown_change_sequence(encoder, owned_lane_mask,
> > XELPDP_P0_STATE_ACTIVE);
> >
> > - intel_lt_phy_enable_disable_tx(encoder, crtc_state);
> > + intel_lt_phy_enable_disable_tx(encoder, &crtc_state->dpll_hw_state.ltpll,
> > + crtc_state->lane_count);
> > intel_lt_phy_transaction_end(encoder, wakeref); }
> >
> > --
> > 2.43.0
> >
^ permalink raw reply [flat|nested] 62+ messages in thread
* [PATCH v3 23/24] drm/i915/lt_phy: Remove LT PHY specific state verification
2026-03-04 13:14 ` [PATCH v2 23/24] drm/i915/lt_phy: Remove LT PHY specific state verification Mika Kahola
@ 2026-03-06 11:43 ` Mika Kahola
2026-03-10 8:40 ` Kandpal, Suraj
0 siblings, 1 reply; 62+ messages in thread
From: Mika Kahola @ 2026-03-06 11:43 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Mika Kahola
Remove LT PHY specific state verification as DPLL framework
has state verification check.
v2: Reuse intel_lt_phy_pll_compare_hw_state() as only config[0]
and config[0] parameters are reliable with LT PHY (Suraj)
v3: Rephrase handling of LT PHY case when verifying the state (CI)
Signed-off-by: Mika Kahola <mika.kahola@intel.com>
---
drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 14 +++++--
drivers/gpu/drm/i915/display/intel_lt_phy.c | 39 -------------------
drivers/gpu/drm/i915/display/intel_lt_phy.h | 2 -
.../drm/i915/display/intel_modeset_verify.c | 1 -
4 files changed, 11 insertions(+), 45 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
index 534cc691979f..c3f35250f192 100644
--- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
+++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
@@ -5075,6 +5075,7 @@ verify_single_dpll_state(struct intel_display *display,
const struct intel_crtc_state *new_crtc_state)
{
struct intel_dpll_hw_state dpll_hw_state = {};
+ bool pll_mismatch = false;
u8 pipe_mask;
bool active;
@@ -5116,9 +5117,16 @@ verify_single_dpll_state(struct intel_display *display,
"%s: pll enabled crtcs mismatch (expected 0x%x in 0x%x)\n",
pll->info->name, pipe_mask, pll->state.pipe_mask);
- if (INTEL_DISPLAY_STATE_WARN(display,
- pll->on && memcmp(&pll->state.hw_state, &dpll_hw_state,
- sizeof(dpll_hw_state)),
+ if (pll->on) {
+ const struct intel_dpll_mgr *dpll_mgr = display->dpll.mgr;
+
+ if (HAS_LT_PHY(display))
+ pll_mismatch = !dpll_mgr->compare_hw_state(&pll->state.hw_state, &dpll_hw_state);
+ else
+ pll_mismatch = memcmp(&pll->state.hw_state, &dpll_hw_state, sizeof(dpll_hw_state));
+ }
+
+ if (INTEL_DISPLAY_STATE_WARN(display, pll_mismatch,
"%s: pll hw state mismatch\n",
pll->info->name)) {
struct drm_printer p = drm_dbg_printer(display->drm, DRM_UT_KMS, NULL);
diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c b/drivers/gpu/drm/i915/display/intel_lt_phy.c
index 746b0182362a..032fd80664c6 100644
--- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
+++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
@@ -2263,45 +2263,6 @@ bool intel_lt_phy_pll_readout_hw_state(struct intel_encoder *encoder,
return true;
}
-void intel_lt_phy_pll_state_verify(struct intel_atomic_state *state,
- struct intel_crtc *crtc)
-{
- struct intel_display *display = to_intel_display(state);
- struct intel_digital_port *dig_port;
- const struct intel_crtc_state *new_crtc_state =
- intel_atomic_get_new_crtc_state(state, crtc);
- struct intel_encoder *encoder;
- struct intel_lt_phy_pll_state pll_hw_state = {};
- const struct intel_lt_phy_pll_state *pll_sw_state = &new_crtc_state->dpll_hw_state.ltpll;
-
- if (DISPLAY_VER(display) < 35)
- return;
-
- if (!new_crtc_state->hw.active)
- return;
-
- /* intel_get_crtc_new_encoder() only works for modeset/fastset commits */
- if (!intel_crtc_needs_modeset(new_crtc_state) &&
- !intel_crtc_needs_fastset(new_crtc_state))
- return;
-
- encoder = intel_get_crtc_new_encoder(state, new_crtc_state);
- intel_lt_phy_pll_readout_hw_state(encoder, &pll_hw_state);
-
- dig_port = enc_to_dig_port(encoder);
- if (intel_tc_port_in_tbt_alt_mode(dig_port))
- return;
-
- INTEL_DISPLAY_STATE_WARN(display, pll_hw_state.config[0] != pll_sw_state->config[0],
- "[CRTC:%d:%s] mismatch in LT PHY PLL CONFIG 0: (expected 0x%04x, found 0x%04x)",
- crtc->base.base.id, crtc->base.name,
- pll_sw_state->config[0], pll_hw_state.config[0]);
- INTEL_DISPLAY_STATE_WARN(display, pll_hw_state.config[2] != pll_sw_state->config[2],
- "[CRTC:%d:%s] mismatch in LT PHY PLL CONFIG 2: (expected 0x%04x, found 0x%04x)",
- crtc->base.base.id, crtc->base.name,
- pll_sw_state->config[2], pll_hw_state.config[2]);
-}
-
void intel_xe3plpd_pll_enable(struct intel_encoder *encoder,
struct intel_dpll *pll,
const struct intel_dpll_hw_state *dpll_hw_state)
diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.h b/drivers/gpu/drm/i915/display/intel_lt_phy.h
index 1c2ec438cd10..8b98997b3107 100644
--- a/drivers/gpu/drm/i915/display/intel_lt_phy.h
+++ b/drivers/gpu/drm/i915/display/intel_lt_phy.h
@@ -41,8 +41,6 @@ bool intel_lt_phy_tbt_pll_readout_hw_state(struct intel_display *display,
struct intel_dpll_hw_state *hw_state);
bool intel_lt_phy_pll_readout_hw_state(struct intel_encoder *encoder,
struct intel_lt_phy_pll_state *pll_state);
-void intel_lt_phy_pll_state_verify(struct intel_atomic_state *state,
- struct intel_crtc *crtc);
int
intel_lt_phy_calculate_hdmi_state(struct intel_lt_phy_pll_state *lt_state,
u32 frequency_khz);
diff --git a/drivers/gpu/drm/i915/display/intel_modeset_verify.c b/drivers/gpu/drm/i915/display/intel_modeset_verify.c
index 12a00121c274..2ec17c2bfe0f 100644
--- a/drivers/gpu/drm/i915/display/intel_modeset_verify.c
+++ b/drivers/gpu/drm/i915/display/intel_modeset_verify.c
@@ -246,7 +246,6 @@ void intel_modeset_verify_crtc(struct intel_atomic_state *state,
verify_crtc_state(state, crtc);
intel_dpll_state_verify(state, crtc);
intel_mpllb_state_verify(state, crtc);
- intel_lt_phy_pll_state_verify(state, crtc);
}
void intel_modeset_verify_disabled(struct intel_atomic_state *state)
--
2.43.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* ✓ i915.CI.BAT: success for Refactor LT PHY PLL handling to use DPLL framework (rev3)
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
` (24 preceding siblings ...)
2026-03-04 19:58 ` ✗ i915.CI.BAT: failure for Refactor LT PHY PLL handling to use DPLL framework (rev2) Patchwork
@ 2026-03-06 13:18 ` Patchwork
2026-03-07 14:27 ` ✗ i915.CI.Full: failure " Patchwork
` (2 subsequent siblings)
28 siblings, 0 replies; 62+ messages in thread
From: Patchwork @ 2026-03-06 13:18 UTC (permalink / raw)
To: Mika Kahola; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 7150 bytes --]
== Series Details ==
Series: Refactor LT PHY PLL handling to use DPLL framework (rev3)
URL : https://patchwork.freedesktop.org/series/161587/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_18104 -> Patchwork_161587v3
====================================================
Summary
-------
**SUCCESS**
No regressions found.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/index.html
Participating hosts (40 -> 39)
------------------------------
Additional (1): bat-adls-6
Missing (2): bat-dg2-13 fi-snb-2520m
Known issues
------------
Here are the changes found in Patchwork_161587v3 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@fbdev@info:
- fi-hsw-4770: [PASS][1] -> [SKIP][2] ([i915#1849] / [i915#2582])
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/fi-hsw-4770/igt@fbdev@info.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/fi-hsw-4770/igt@fbdev@info.html
* igt@fbdev@nullptr:
- fi-hsw-4770: [PASS][3] -> [SKIP][4] ([i915#2582]) +3 other tests skip
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/fi-hsw-4770/igt@fbdev@nullptr.html
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/fi-hsw-4770/igt@fbdev@nullptr.html
* igt@gem_lmem_swapping@parallel-random-engines:
- bat-adls-6: NOTRUN -> [SKIP][5] ([i915#4613]) +3 other tests skip
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/bat-adls-6/igt@gem_lmem_swapping@parallel-random-engines.html
* igt@gem_softpin@safe-alignment:
- fi-hsw-4770: [PASS][6] -> [FAIL][7] ([i915#15527])
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/fi-hsw-4770/igt@gem_softpin@safe-alignment.html
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/fi-hsw-4770/igt@gem_softpin@safe-alignment.html
* igt@gem_tiled_pread_basic@basic:
- bat-adls-6: NOTRUN -> [SKIP][8] ([i915#15656])
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/bat-adls-6/igt@gem_tiled_pread_basic@basic.html
* igt@i915_selftest@live@workarounds:
- bat-dg2-14: [PASS][9] -> [DMESG-FAIL][10] ([i915#12061]) +1 other test dmesg-fail
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/bat-dg2-14/igt@i915_selftest@live@workarounds.html
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/bat-dg2-14/igt@i915_selftest@live@workarounds.html
- bat-arls-6: [PASS][11] -> [DMESG-FAIL][12] ([i915#12061]) +1 other test dmesg-fail
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/bat-arls-6/igt@i915_selftest@live@workarounds.html
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/bat-arls-6/igt@i915_selftest@live@workarounds.html
* igt@intel_hwmon@hwmon-read:
- bat-adls-6: NOTRUN -> [SKIP][13] ([i915#7707]) +1 other test skip
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/bat-adls-6/igt@intel_hwmon@hwmon-read.html
* igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy:
- bat-adls-6: NOTRUN -> [SKIP][14] ([i915#4103]) +1 other test skip
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/bat-adls-6/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html
* igt@kms_dsc@dsc-basic:
- bat-adls-6: NOTRUN -> [SKIP][15] ([i915#3555] / [i915#3840])
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/bat-adls-6/igt@kms_dsc@dsc-basic.html
* igt@kms_force_connector_basic@force-load-detect:
- bat-adls-6: NOTRUN -> [SKIP][16]
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/bat-adls-6/igt@kms_force_connector_basic@force-load-detect.html
* igt@kms_pm_backlight@basic-brightness:
- bat-adls-6: NOTRUN -> [SKIP][17] ([i915#5354])
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/bat-adls-6/igt@kms_pm_backlight@basic-brightness.html
* igt@kms_psr@psr-primary-mmap-gtt:
- bat-adls-6: NOTRUN -> [SKIP][18] ([i915#1072] / [i915#9732]) +3 other tests skip
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/bat-adls-6/igt@kms_psr@psr-primary-mmap-gtt.html
* igt@kms_setmode@basic-clone-single-crtc:
- bat-adls-6: NOTRUN -> [SKIP][19] ([i915#3555])
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/bat-adls-6/igt@kms_setmode@basic-clone-single-crtc.html
* igt@prime_vgem@basic-fence-read:
- bat-adls-6: NOTRUN -> [SKIP][20] ([i915#3291]) +2 other tests skip
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/bat-adls-6/igt@prime_vgem@basic-fence-read.html
#### Possible fixes ####
* igt@i915_selftest@live:
- bat-apl-1: [DMESG-FAIL][21] ([i915#14808]) -> [PASS][22] +1 other test pass
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/bat-apl-1/igt@i915_selftest@live.html
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/bat-apl-1/igt@i915_selftest@live.html
- bat-adlp-11: [DMESG-FAIL][23] ([i915#12964]) -> [PASS][24] +1 other test pass
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/bat-adlp-11/igt@i915_selftest@live.html
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/bat-adlp-11/igt@i915_selftest@live.html
[i915#1072]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1072
[i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
[i915#12964]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12964
[i915#14808]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14808
[i915#15527]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15527
[i915#15656]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15656
[i915#1849]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1849
[i915#2582]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2582
[i915#3291]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3291
[i915#3555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3555
[i915#3840]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3840
[i915#4103]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4103
[i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613
[i915#5354]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5354
[i915#7707]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7707
[i915#9732]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9732
Build changes
-------------
* Linux: CI_DRM_18104 -> Patchwork_161587v3
CI-20190529: 20190529
CI_DRM_18104: a48305e6a2e6a1ed90df374101dd29542c105d8f @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_8782: eac3b04d1f76b82ac3a183fb293c44e9185d8dba @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
Patchwork_161587v3: a48305e6a2e6a1ed90df374101dd29542c105d8f @ git://anongit.freedesktop.org/gfx-ci/linux
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/index.html
[-- Attachment #2: Type: text/html, Size: 8342 bytes --]
^ permalink raw reply [flat|nested] 62+ messages in thread
* ✗ i915.CI.Full: failure for Refactor LT PHY PLL handling to use DPLL framework (rev3)
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
` (25 preceding siblings ...)
2026-03-06 13:18 ` ✓ i915.CI.BAT: success for Refactor LT PHY PLL handling to use DPLL framework (rev3) Patchwork
@ 2026-03-07 14:27 ` Patchwork
2026-03-10 13:53 ` ✗ Fi.CI.BUILD: failure for Refactor LT PHY PLL handling to use DPLL framework (rev4) Patchwork
2026-03-10 17:26 ` ✗ i915.CI.BAT: failure for Refactor LT PHY PLL handling to use DPLL framework (rev5) Patchwork
28 siblings, 0 replies; 62+ messages in thread
From: Patchwork @ 2026-03-07 14:27 UTC (permalink / raw)
To: Mika Kahola; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 91009 bytes --]
== Series Details ==
Series: Refactor LT PHY PLL handling to use DPLL framework (rev3)
URL : https://patchwork.freedesktop.org/series/161587/
State : failure
== Summary ==
CI Bug Log - changes from CI_DRM_18104_full -> Patchwork_161587v3_full
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with Patchwork_161587v3_full absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in Patchwork_161587v3_full, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
Participating hosts (10 -> 10)
------------------------------
No changes in participating hosts
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in Patchwork_161587v3_full:
### IGT changes ###
#### Possible regressions ####
* igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions:
- shard-glk: NOTRUN -> [FAIL][1]
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-glk1/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html
#### Warnings ####
* igt@gem_pwrite@basic-exhaustion:
- shard-tglu: [WARN][2] ([i915#2658]) -> [ABORT][3]
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-tglu-2/igt@gem_pwrite@basic-exhaustion.html
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-8/igt@gem_pwrite@basic-exhaustion.html
Known issues
------------
Here are the changes found in Patchwork_161587v3_full that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@api_intel_bb@crc32:
- shard-tglu-1: NOTRUN -> [SKIP][4] ([i915#6230])
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@api_intel_bb@crc32.html
* igt@device_reset@unbind-cold-reset-rebind:
- shard-tglu-1: NOTRUN -> [SKIP][5] ([i915#11078])
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@device_reset@unbind-cold-reset-rebind.html
* igt@gem_basic@multigpu-create-close:
- shard-tglu-1: NOTRUN -> [SKIP][6] ([i915#7697])
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@gem_basic@multigpu-create-close.html
* igt@gem_ccs@block-copy-compressed:
- shard-tglu: NOTRUN -> [SKIP][7] ([i915#3555] / [i915#9323])
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-3/igt@gem_ccs@block-copy-compressed.html
* igt@gem_ccs@block-multicopy-inplace:
- shard-dg1: NOTRUN -> [SKIP][8] ([i915#3555] / [i915#9323])
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@gem_ccs@block-multicopy-inplace.html
* igt@gem_ccs@large-ctrl-surf-copy:
- shard-rkl: NOTRUN -> [SKIP][9] ([i915#13008])
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-4/igt@gem_ccs@large-ctrl-surf-copy.html
* igt@gem_close_race@multigpu-basic-process:
- shard-rkl: NOTRUN -> [SKIP][10] ([i915#7697])
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-3/igt@gem_close_race@multigpu-basic-process.html
* igt@gem_create@create-ext-cpu-access-sanity-check:
- shard-rkl: NOTRUN -> [SKIP][11] ([i915#6335])
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-2/igt@gem_create@create-ext-cpu-access-sanity-check.html
* igt@gem_ctx_isolation@preservation-s3@rcs0:
- shard-glk: [PASS][12] -> [INCOMPLETE][13] ([i915#13356])
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-glk3/igt@gem_ctx_isolation@preservation-s3@rcs0.html
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-glk8/igt@gem_ctx_isolation@preservation-s3@rcs0.html
* igt@gem_ctx_param@set-priority-not-supported:
- shard-dg1: NOTRUN -> [SKIP][14] +7 other tests skip
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@gem_ctx_param@set-priority-not-supported.html
* igt@gem_ctx_persistence@hang:
- shard-dg1: NOTRUN -> [SKIP][15] ([i915#8555])
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@gem_ctx_persistence@hang.html
* igt@gem_ctx_sseu@engines:
- shard-tglu: NOTRUN -> [SKIP][16] ([i915#280])
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-3/igt@gem_ctx_sseu@engines.html
* igt@gem_ctx_sseu@invalid-sseu:
- shard-tglu-1: NOTRUN -> [SKIP][17] ([i915#280])
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@gem_ctx_sseu@invalid-sseu.html
* igt@gem_exec_balancer@bonded-sync:
- shard-dg1: NOTRUN -> [SKIP][18] ([i915#4771])
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@gem_exec_balancer@bonded-sync.html
* igt@gem_exec_balancer@parallel-balancer:
- shard-tglu-1: NOTRUN -> [SKIP][19] ([i915#4525]) +1 other test skip
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@gem_exec_balancer@parallel-balancer.html
* igt@gem_exec_balancer@parallel-contexts:
- shard-tglu: NOTRUN -> [SKIP][20] ([i915#4525])
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-3/igt@gem_exec_balancer@parallel-contexts.html
* igt@gem_exec_capture@capture-invisible:
- shard-glk10: NOTRUN -> [SKIP][21] ([i915#6334]) +1 other test skip
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-glk10/igt@gem_exec_capture@capture-invisible.html
* igt@gem_exec_flush@basic-uc-prw-default:
- shard-dg1: NOTRUN -> [SKIP][22] ([i915#3539])
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@gem_exec_flush@basic-uc-prw-default.html
* igt@gem_exec_flush@basic-wb-ro-default:
- shard-dg1: NOTRUN -> [SKIP][23] ([i915#3539] / [i915#4852])
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@gem_exec_flush@basic-wb-ro-default.html
* igt@gem_exec_reloc@basic-gtt-wc-active:
- shard-dg1: NOTRUN -> [SKIP][24] ([i915#3281])
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@gem_exec_reloc@basic-gtt-wc-active.html
* igt@gem_exec_reloc@basic-write-read-noreloc:
- shard-rkl: NOTRUN -> [SKIP][25] ([i915#3281]) +4 other tests skip
[25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-3/igt@gem_exec_reloc@basic-write-read-noreloc.html
* igt@gem_exec_schedule@preempt-queue-chain:
- shard-dg1: NOTRUN -> [SKIP][26] ([i915#4812])
[26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@gem_exec_schedule@preempt-queue-chain.html
* igt@gem_lmem_swapping@heavy-verify-random:
- shard-tglu-1: NOTRUN -> [SKIP][27] ([i915#4613]) +1 other test skip
[27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@gem_lmem_swapping@heavy-verify-random.html
* igt@gem_lmem_swapping@verify-ccs:
- shard-glk: NOTRUN -> [SKIP][28] ([i915#4613]) +4 other tests skip
[28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-glk8/igt@gem_lmem_swapping@verify-ccs.html
- shard-rkl: NOTRUN -> [SKIP][29] ([i915#4613])
[29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-3/igt@gem_lmem_swapping@verify-ccs.html
* igt@gem_media_vme:
- shard-dg1: NOTRUN -> [SKIP][30] ([i915#284])
[30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@gem_media_vme.html
* igt@gem_mmap_wc@read:
- shard-dg1: NOTRUN -> [SKIP][31] ([i915#4083])
[31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@gem_mmap_wc@read.html
* igt@gem_partial_pwrite_pread@write:
- shard-dg1: NOTRUN -> [SKIP][32] ([i915#3282])
[32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@gem_partial_pwrite_pread@write.html
* igt@gem_partial_pwrite_pread@writes-after-reads:
- shard-rkl: NOTRUN -> [SKIP][33] ([i915#3282]) +3 other tests skip
[33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-3/igt@gem_partial_pwrite_pread@writes-after-reads.html
* igt@gem_pxp@hw-rejects-pxp-context:
- shard-tglu: NOTRUN -> [SKIP][34] ([i915#13398])
[34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-4/igt@gem_pxp@hw-rejects-pxp-context.html
* igt@gem_userptr_blits@coherency-unsync:
- shard-tglu: NOTRUN -> [SKIP][35] ([i915#3297]) +3 other tests skip
[35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-3/igt@gem_userptr_blits@coherency-unsync.html
* igt@gem_userptr_blits@create-destroy-unsync:
- shard-rkl: NOTRUN -> [SKIP][36] ([i915#3297])
[36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-4/igt@gem_userptr_blits@create-destroy-unsync.html
* igt@gem_userptr_blits@dmabuf-sync:
- shard-rkl: NOTRUN -> [SKIP][37] ([i915#3297] / [i915#3323])
[37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-4/igt@gem_userptr_blits@dmabuf-sync.html
* igt@gem_userptr_blits@forbidden-operations:
- shard-dg1: NOTRUN -> [SKIP][38] ([i915#3282] / [i915#3297])
[38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@gem_userptr_blits@forbidden-operations.html
* igt@gem_userptr_blits@unsync-unmap-cycles:
- shard-dg1: NOTRUN -> [SKIP][39] ([i915#3297])
[39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@gem_userptr_blits@unsync-unmap-cycles.html
* igt@gen9_exec_parse@batch-invalid-length:
- shard-rkl: NOTRUN -> [SKIP][40] ([i915#2527]) +1 other test skip
[40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-3/igt@gen9_exec_parse@batch-invalid-length.html
* igt@gen9_exec_parse@batch-zero-length:
- shard-tglu: NOTRUN -> [SKIP][41] ([i915#2527] / [i915#2856]) +1 other test skip
[41]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-3/igt@gen9_exec_parse@batch-zero-length.html
* igt@gen9_exec_parse@bb-start-far:
- shard-tglu-1: NOTRUN -> [SKIP][42] ([i915#2527] / [i915#2856])
[42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@gen9_exec_parse@bb-start-far.html
* igt@gen9_exec_parse@shadow-peek:
- shard-dg1: NOTRUN -> [SKIP][43] ([i915#2527]) +1 other test skip
[43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@gen9_exec_parse@shadow-peek.html
* igt@i915_module_load@fault-injection@__uc_init:
- shard-tglu-1: NOTRUN -> [SKIP][44] ([i915#15479]) +4 other tests skip
[44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@i915_module_load@fault-injection@__uc_init.html
* igt@i915_module_load@fault-injection@intel_connector_register:
- shard-tglu-1: NOTRUN -> [ABORT][45] ([i915#15342]) +1 other test abort
[45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@i915_module_load@fault-injection@intel_connector_register.html
* igt@i915_pm_freq_api@freq-reset-multiple:
- shard-tglu-1: NOTRUN -> [SKIP][46] ([i915#8399])
[46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@i915_pm_freq_api@freq-reset-multiple.html
* igt@i915_pm_freq_api@freq-suspend@gt0:
- shard-dg2: [PASS][47] -> [INCOMPLETE][48] ([i915#13356] / [i915#13820]) +1 other test incomplete
[47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-dg2-1/igt@i915_pm_freq_api@freq-suspend@gt0.html
[48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg2-5/igt@i915_pm_freq_api@freq-suspend@gt0.html
* igt@i915_pm_rc6_residency@rc6-fence:
- shard-tglu: NOTRUN -> [WARN][49] ([i915#13790] / [i915#2681]) +1 other test warn
[49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-3/igt@i915_pm_rc6_residency@rc6-fence.html
* igt@i915_pm_rc6_residency@rc6-idle:
- shard-tglu: NOTRUN -> [SKIP][50] ([i915#14498])
[50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-4/igt@i915_pm_rc6_residency@rc6-idle.html
* igt@i915_pm_rpm@system-suspend-execbuf:
- shard-glk11: NOTRUN -> [INCOMPLETE][51] ([i915#13356] / [i915#15172])
[51]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-glk11/igt@i915_pm_rpm@system-suspend-execbuf.html
* igt@i915_pm_rps@reset:
- shard-snb: [PASS][52] -> [INCOMPLETE][53] ([i915#13729] / [i915#13821])
[52]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-snb1/igt@i915_pm_rps@reset.html
[53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-snb7/igt@i915_pm_rps@reset.html
* igt@i915_pm_sseu@full-enable:
- shard-tglu-1: NOTRUN -> [SKIP][54] ([i915#4387])
[54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@i915_pm_sseu@full-enable.html
* igt@i915_suspend@basic-s2idle-without-i915:
- shard-dg1: [PASS][55] -> [DMESG-WARN][56] ([i915#4391] / [i915#4423])
[55]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-dg1-17/igt@i915_suspend@basic-s2idle-without-i915.html
[56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-13/igt@i915_suspend@basic-s2idle-without-i915.html
* igt@i915_suspend@basic-s3-without-i915:
- shard-tglu: NOTRUN -> [INCOMPLETE][57] ([i915#4817] / [i915#7443])
[57]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-4/igt@i915_suspend@basic-s3-without-i915.html
* igt@i915_suspend@debugfs-reader:
- shard-rkl: [PASS][58] -> [INCOMPLETE][59] ([i915#4817]) +1 other test incomplete
[58]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-7/igt@i915_suspend@debugfs-reader.html
[59]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-3/igt@i915_suspend@debugfs-reader.html
* igt@i915_suspend@fence-restore-untiled:
- shard-dg2: NOTRUN -> [SKIP][60] ([i915#4077]) +1 other test skip
[60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg2-8/igt@i915_suspend@fence-restore-untiled.html
* igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-hdmi-a-3:
- shard-dg2: [PASS][61] -> [FAIL][62] ([i915#5956]) +1 other test fail
[61]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-dg2-5/igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-hdmi-a-3.html
[62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg2-8/igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-hdmi-a-3.html
* igt@kms_big_fb@4-tiled-16bpp-rotate-0:
- shard-rkl: NOTRUN -> [SKIP][63] ([i915#5286]) +1 other test skip
[63]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-4/igt@kms_big_fb@4-tiled-16bpp-rotate-0.html
* igt@kms_big_fb@4-tiled-16bpp-rotate-90:
- shard-tglu: NOTRUN -> [SKIP][64] ([i915#5286])
[64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-3/igt@kms_big_fb@4-tiled-16bpp-rotate-90.html
* igt@kms_big_fb@4-tiled-8bpp-rotate-180:
- shard-tglu-1: NOTRUN -> [SKIP][65] ([i915#5286]) +3 other tests skip
[65]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@kms_big_fb@4-tiled-8bpp-rotate-180.html
* igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip:
- shard-dg1: NOTRUN -> [SKIP][66] ([i915#4538] / [i915#5286]) +1 other test skip
[66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip.html
* igt@kms_big_fb@linear-64bpp-rotate-90:
- shard-rkl: NOTRUN -> [SKIP][67] ([i915#3638]) +1 other test skip
[67]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-4/igt@kms_big_fb@linear-64bpp-rotate-90.html
* igt@kms_big_fb@linear-max-hw-stride-64bpp-rotate-0-hflip:
- shard-tglu: NOTRUN -> [SKIP][68] ([i915#3828])
[68]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-3/igt@kms_big_fb@linear-max-hw-stride-64bpp-rotate-0-hflip.html
* igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-hflip:
- shard-dg2: NOTRUN -> [SKIP][69] ([i915#4538] / [i915#5190])
[69]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg2-8/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-hflip.html
* igt@kms_big_fb@yf-tiled-64bpp-rotate-90:
- shard-rkl: NOTRUN -> [SKIP][70] +6 other tests skip
[70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-3/igt@kms_big_fb@yf-tiled-64bpp-rotate-90.html
* igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0-async-flip:
- shard-dg1: NOTRUN -> [SKIP][71] ([i915#4538])
[71]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html
* igt@kms_ccs@bad-aux-stride-4-tiled-mtl-mc-ccs@pipe-a-hdmi-a-4:
- shard-dg1: NOTRUN -> [SKIP][72] ([i915#6095]) +153 other tests skip
[72]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-16/igt@kms_ccs@bad-aux-stride-4-tiled-mtl-mc-ccs@pipe-a-hdmi-a-4.html
* igt@kms_ccs@bad-aux-stride-y-tiled-ccs@pipe-d-hdmi-a-1:
- shard-dg2: NOTRUN -> [SKIP][73] ([i915#10307] / [i915#10434] / [i915#6095]) +2 other tests skip
[73]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg2-4/igt@kms_ccs@bad-aux-stride-y-tiled-ccs@pipe-d-hdmi-a-1.html
* igt@kms_ccs@ccs-on-another-bo-4-tiled-mtl-rc-ccs-cc@pipe-a-hdmi-a-1:
- shard-dg2: NOTRUN -> [SKIP][74] ([i915#10307] / [i915#6095]) +49 other tests skip
[74]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg2-4/igt@kms_ccs@ccs-on-another-bo-4-tiled-mtl-rc-ccs-cc@pipe-a-hdmi-a-1.html
* igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-mc-ccs@pipe-c-hdmi-a-1:
- shard-dg2: NOTRUN -> [SKIP][75] ([i915#6095]) +19 other tests skip
[75]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg2-4/igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-mc-ccs@pipe-c-hdmi-a-1.html
* igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs:
- shard-dg1: NOTRUN -> [SKIP][76] ([i915#12805])
[76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html
* igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-rc-ccs-cc@pipe-b-hdmi-a-1:
- shard-tglu: NOTRUN -> [SKIP][77] ([i915#6095]) +19 other tests skip
[77]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-4/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-rc-ccs-cc@pipe-b-hdmi-a-1.html
* igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs:
- shard-glk10: NOTRUN -> [INCOMPLETE][78] ([i915#15582]) +1 other test incomplete
[78]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-glk10/igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs.html
* igt@kms_ccs@crc-sprite-planes-basic-y-tiled-ccs@pipe-c-hdmi-a-1:
- shard-rkl: NOTRUN -> [SKIP][79] ([i915#14098] / [i915#6095]) +44 other tests skip
[79]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-2/igt@kms_ccs@crc-sprite-planes-basic-y-tiled-ccs@pipe-c-hdmi-a-1.html
* igt@kms_ccs@missing-ccs-buffer-4-tiled-mtl-rc-ccs-cc@pipe-a-hdmi-a-1:
- shard-rkl: NOTRUN -> [SKIP][80] ([i915#6095]) +77 other tests skip
[80]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-2/igt@kms_ccs@missing-ccs-buffer-4-tiled-mtl-rc-ccs-cc@pipe-a-hdmi-a-1.html
* igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs:
- shard-tglu-1: NOTRUN -> [SKIP][81] ([i915#12313])
[81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs.html
* igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc:
- shard-tglu-1: NOTRUN -> [SKIP][82] ([i915#6095]) +44 other tests skip
[82]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc.html
* igt@kms_chamelium_edid@dp-mode-timings:
- shard-tglu: NOTRUN -> [SKIP][83] ([i915#11151] / [i915#7828]) +2 other tests skip
[83]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-3/igt@kms_chamelium_edid@dp-mode-timings.html
* igt@kms_chamelium_edid@hdmi-edid-read:
- shard-tglu-1: NOTRUN -> [SKIP][84] ([i915#11151] / [i915#7828]) +4 other tests skip
[84]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@kms_chamelium_edid@hdmi-edid-read.html
* igt@kms_chamelium_hpd@vga-hpd-with-enabled-mode:
- shard-rkl: NOTRUN -> [SKIP][85] ([i915#11151] / [i915#7828]) +5 other tests skip
[85]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-4/igt@kms_chamelium_hpd@vga-hpd-with-enabled-mode.html
* igt@kms_content_protection@atomic:
- shard-rkl: NOTRUN -> [SKIP][86] ([i915#6944] / [i915#7118] / [i915#9424])
[86]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-2/igt@kms_content_protection@atomic.html
* igt@kms_content_protection@atomic-hdcp14:
- shard-tglu: NOTRUN -> [SKIP][87] ([i915#6944])
[87]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-3/igt@kms_content_protection@atomic-hdcp14.html
* igt@kms_content_protection@dp-mst-lic-type-0-hdcp14:
- shard-tglu: NOTRUN -> [SKIP][88] ([i915#15330])
[88]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-4/igt@kms_content_protection@dp-mst-lic-type-0-hdcp14.html
* igt@kms_content_protection@dp-mst-lic-type-1:
- shard-tglu-1: NOTRUN -> [SKIP][89] ([i915#15330] / [i915#3116] / [i915#3299])
[89]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@kms_content_protection@dp-mst-lic-type-1.html
* igt@kms_content_protection@dp-mst-type-0-hdcp14:
- shard-rkl: NOTRUN -> [SKIP][90] ([i915#15330])
[90]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-4/igt@kms_content_protection@dp-mst-type-0-hdcp14.html
* igt@kms_content_protection@type1:
- shard-tglu-1: NOTRUN -> [SKIP][91] ([i915#6944] / [i915#7116] / [i915#7118] / [i915#9424])
[91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@kms_content_protection@type1.html
* igt@kms_content_protection@uevent-hdcp14:
- shard-dg1: NOTRUN -> [SKIP][92] ([i915#6944])
[92]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@kms_content_protection@uevent-hdcp14.html
* igt@kms_cursor_crc@cursor-offscreen-32x10:
- shard-tglu-1: NOTRUN -> [SKIP][93] ([i915#3555]) +5 other tests skip
[93]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@kms_cursor_crc@cursor-offscreen-32x10.html
* igt@kms_cursor_crc@cursor-offscreen-512x170:
- shard-dg1: NOTRUN -> [SKIP][94] ([i915#13049])
[94]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@kms_cursor_crc@cursor-offscreen-512x170.html
* igt@kms_cursor_crc@cursor-onscreen-256x85:
- shard-tglu: [PASS][95] -> [FAIL][96] ([i915#13566]) +1 other test fail
[95]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-tglu-6/igt@kms_cursor_crc@cursor-onscreen-256x85.html
[96]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-4/igt@kms_cursor_crc@cursor-onscreen-256x85.html
* igt@kms_cursor_crc@cursor-onscreen-32x32:
- shard-rkl: NOTRUN -> [SKIP][97] ([i915#3555])
[97]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-3/igt@kms_cursor_crc@cursor-onscreen-32x32.html
* igt@kms_cursor_crc@cursor-random-128x42@pipe-a-hdmi-a-1:
- shard-tglu: NOTRUN -> [FAIL][98] ([i915#13566]) +1 other test fail
[98]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-3/igt@kms_cursor_crc@cursor-random-128x42@pipe-a-hdmi-a-1.html
* igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size:
- shard-tglu-1: NOTRUN -> [SKIP][99] ([i915#4103]) +1 other test skip
[99]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size.html
* igt@kms_dirtyfb@drrs-dirtyfb-ioctl:
- shard-tglu-1: NOTRUN -> [SKIP][100] ([i915#9723])
[100]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@kms_dirtyfb@drrs-dirtyfb-ioctl.html
* igt@kms_dirtyfb@psr-dirtyfb-ioctl:
- shard-rkl: NOTRUN -> [SKIP][101] ([i915#9723])
[101]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-3/igt@kms_dirtyfb@psr-dirtyfb-ioctl.html
* igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-hdmi-a-1:
- shard-rkl: NOTRUN -> [SKIP][102] ([i915#3804])
[102]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-8/igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-hdmi-a-1.html
* igt@kms_dp_aux_dev:
- shard-tglu-1: NOTRUN -> [SKIP][103] ([i915#1257])
[103]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@kms_dp_aux_dev.html
* igt@kms_dsc@dsc-with-bpc:
- shard-tglu: NOTRUN -> [SKIP][104] ([i915#3555] / [i915#3840])
[104]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-3/igt@kms_dsc@dsc-with-bpc.html
* igt@kms_dsc@dsc-with-output-formats:
- shard-tglu-1: NOTRUN -> [SKIP][105] ([i915#3555] / [i915#3840])
[105]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@kms_dsc@dsc-with-output-formats.html
* igt@kms_feature_discovery@dp-mst:
- shard-dg2: NOTRUN -> [SKIP][106] ([i915#9337])
[106]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg2-8/igt@kms_feature_discovery@dp-mst.html
* igt@kms_feature_discovery@psr2:
- shard-tglu-1: NOTRUN -> [SKIP][107] ([i915#658])
[107]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@kms_feature_discovery@psr2.html
* igt@kms_flip@2x-flip-vs-dpms:
- shard-tglu-1: NOTRUN -> [SKIP][108] ([i915#3637] / [i915#9934]) +6 other tests skip
[108]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@kms_flip@2x-flip-vs-dpms.html
* igt@kms_flip@2x-flip-vs-suspend:
- shard-glk: NOTRUN -> [INCOMPLETE][109] ([i915#12745] / [i915#4839] / [i915#6113])
[109]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-glk3/igt@kms_flip@2x-flip-vs-suspend.html
* igt@kms_flip@2x-flip-vs-suspend-interruptible:
- shard-snb: [PASS][110] -> [TIMEOUT][111] ([i915#14033] / [i915#14350])
[110]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-snb7/igt@kms_flip@2x-flip-vs-suspend-interruptible.html
[111]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-snb5/igt@kms_flip@2x-flip-vs-suspend-interruptible.html
* igt@kms_flip@2x-flip-vs-suspend-interruptible@ab-vga1-hdmi-a1:
- shard-snb: [PASS][112] -> [TIMEOUT][113] ([i915#14033])
[112]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-snb7/igt@kms_flip@2x-flip-vs-suspend-interruptible@ab-vga1-hdmi-a1.html
[113]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-snb5/igt@kms_flip@2x-flip-vs-suspend-interruptible@ab-vga1-hdmi-a1.html
* igt@kms_flip@2x-flip-vs-suspend@ab-hdmi-a1-hdmi-a2:
- shard-glk: NOTRUN -> [INCOMPLETE][114] ([i915#4839] / [i915#6113])
[114]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-glk3/igt@kms_flip@2x-flip-vs-suspend@ab-hdmi-a1-hdmi-a2.html
* igt@kms_flip@2x-plain-flip:
- shard-dg1: NOTRUN -> [SKIP][115] ([i915#9934])
[115]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@kms_flip@2x-plain-flip.html
* igt@kms_flip@2x-plain-flip-interruptible:
- shard-rkl: NOTRUN -> [SKIP][116] ([i915#9934]) +4 other tests skip
[116]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-3/igt@kms_flip@2x-plain-flip-interruptible.html
* igt@kms_flip@flip-vs-expired-vblank@a-hdmi-a1:
- shard-snb: [PASS][117] -> [FAIL][118] ([i915#13027]) +1 other test fail
[117]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-snb5/igt@kms_flip@flip-vs-expired-vblank@a-hdmi-a1.html
[118]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-snb1/igt@kms_flip@flip-vs-expired-vblank@a-hdmi-a1.html
* igt@kms_flip@flip-vs-suspend:
- shard-glk: NOTRUN -> [INCOMPLETE][119] ([i915#12314] / [i915#12745] / [i915#4839])
[119]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-glk8/igt@kms_flip@flip-vs-suspend.html
* igt@kms_flip@flip-vs-suspend-interruptible:
- shard-rkl: [PASS][120] -> [INCOMPLETE][121] ([i915#6113])
[120]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-8/igt@kms_flip@flip-vs-suspend-interruptible.html
[121]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-3/igt@kms_flip@flip-vs-suspend-interruptible.html
* igt@kms_flip@flip-vs-suspend-interruptible@c-hdmi-a2:
- shard-rkl: NOTRUN -> [INCOMPLETE][122] ([i915#6113] / [i915#9878])
[122]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-3/igt@kms_flip@flip-vs-suspend-interruptible@c-hdmi-a2.html
* igt@kms_flip@flip-vs-suspend@a-hdmi-a1:
- shard-glk: NOTRUN -> [INCOMPLETE][123] ([i915#12314] / [i915#12745])
[123]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-glk8/igt@kms_flip@flip-vs-suspend@a-hdmi-a1.html
* igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-downscaling:
- shard-tglu: NOTRUN -> [SKIP][124] ([i915#15643]) +1 other test skip
[124]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-3/igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-downscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-upscaling:
- shard-dg1: NOTRUN -> [SKIP][125] ([i915#15643]) +1 other test skip
[125]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-upscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling:
- shard-rkl: NOTRUN -> [SKIP][126] ([i915#15643]) +2 other tests skip
[126]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-3/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-upscaling:
- shard-tglu-1: NOTRUN -> [SKIP][127] ([i915#15643]) +2 other tests skip
[127]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-upscaling.html
* igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-gtt:
- shard-dg1: NOTRUN -> [SKIP][128] ([i915#8708]) +4 other tests skip
[128]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-gtt.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-indfb-draw-mmap-gtt:
- shard-tglu: NOTRUN -> [SKIP][129] +25 other tests skip
[129]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-4/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-indfb-draw-mmap-gtt.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-shrfb-draw-mmap-wc:
- shard-dg2: NOTRUN -> [SKIP][130] ([i915#8708])
[130]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg2-8/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-shrfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-indfb-plflip-blt:
- shard-tglu: NOTRUN -> [SKIP][131] ([i915#15102]) +5 other tests skip
[131]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-3/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-indfb-plflip-blt.html
* igt@kms_frontbuffer_tracking@fbcpsr-tiling-4:
- shard-tglu: NOTRUN -> [SKIP][132] ([i915#5439])
[132]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-4/igt@kms_frontbuffer_tracking@fbcpsr-tiling-4.html
* igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-indfb-draw-mmap-gtt:
- shard-rkl: NOTRUN -> [SKIP][133] ([i915#15102])
[133]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-4/igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-indfb-draw-mmap-gtt.html
* igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-shrfb-draw-blt:
- shard-dg1: NOTRUN -> [SKIP][134] ([i915#15102])
[134]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-shrfb-draw-blt.html
* igt@kms_frontbuffer_tracking@psr-1p-pri-indfb-multidraw:
- shard-glk: NOTRUN -> [SKIP][135] +131 other tests skip
[135]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-glk1/igt@kms_frontbuffer_tracking@psr-1p-pri-indfb-multidraw.html
* igt@kms_frontbuffer_tracking@psr-2p-scndscrn-indfb-plflip-blt:
- shard-rkl: NOTRUN -> [SKIP][136] ([i915#1825]) +12 other tests skip
[136]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-2/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-indfb-plflip-blt.html
* igt@kms_frontbuffer_tracking@psr-indfb-scaledprimary:
- shard-rkl: NOTRUN -> [SKIP][137] ([i915#15102] / [i915#3023]) +7 other tests skip
[137]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-4/igt@kms_frontbuffer_tracking@psr-indfb-scaledprimary.html
* igt@kms_frontbuffer_tracking@psr-rgb101010-draw-mmap-wc:
- shard-tglu-1: NOTRUN -> [SKIP][138] ([i915#15102]) +13 other tests skip
[138]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@kms_frontbuffer_tracking@psr-rgb101010-draw-mmap-wc.html
* igt@kms_hdr@invalid-metadata-sizes:
- shard-tglu-1: NOTRUN -> [SKIP][139] ([i915#3555] / [i915#8228]) +1 other test skip
[139]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@kms_hdr@invalid-metadata-sizes.html
* igt@kms_hdr@static-toggle:
- shard-rkl: [PASS][140] -> [SKIP][141] ([i915#3555] / [i915#8228])
[140]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-6/igt@kms_hdr@static-toggle.html
[141]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-2/igt@kms_hdr@static-toggle.html
* igt@kms_joiner@basic-big-joiner:
- shard-rkl: NOTRUN -> [SKIP][142] ([i915#15460])
[142]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-3/igt@kms_joiner@basic-big-joiner.html
* igt@kms_joiner@invalid-modeset-force-big-joiner:
- shard-tglu-1: NOTRUN -> [SKIP][143] ([i915#15459])
[143]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@kms_joiner@invalid-modeset-force-big-joiner.html
* igt@kms_joiner@invalid-modeset-ultra-joiner:
- shard-tglu: NOTRUN -> [SKIP][144] ([i915#15458])
[144]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-3/igt@kms_joiner@invalid-modeset-ultra-joiner.html
* igt@kms_multipipe_modeset@basic-max-pipe-crc-check:
- shard-tglu: NOTRUN -> [SKIP][145] ([i915#1839])
[145]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-3/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html
* igt@kms_panel_fitting@atomic-fastset:
- shard-tglu-1: NOTRUN -> [SKIP][146] ([i915#6301])
[146]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@kms_panel_fitting@atomic-fastset.html
* igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-hdmi-a-1:
- shard-glk11: NOTRUN -> [INCOMPLETE][147] ([i915#12756] / [i915#13409] / [i915#13476]) +1 other test incomplete
[147]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-glk11/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-hdmi-a-1.html
* igt@kms_plane@pixel-format-4-tiled-lnl-ccs-modifier:
- shard-tglu-1: NOTRUN -> [SKIP][148] ([i915#15709]) +1 other test skip
[148]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@kms_plane@pixel-format-4-tiled-lnl-ccs-modifier.html
* igt@kms_plane@pixel-format-y-tiled-ccs-modifier:
- shard-rkl: NOTRUN -> [SKIP][149] ([i915#15709]) +2 other tests skip
[149]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-4/igt@kms_plane@pixel-format-y-tiled-ccs-modifier.html
* igt@kms_plane@pixel-format-y-tiled-gen12-rc-ccs-cc-modifier@pipe-b-plane-7:
- shard-tglu-1: NOTRUN -> [SKIP][150] ([i915#15608]) +1 other test skip
[150]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@kms_plane@pixel-format-y-tiled-gen12-rc-ccs-cc-modifier@pipe-b-plane-7.html
* igt@kms_plane@pixel-format-y-tiled-modifier@pipe-b-plane-7:
- shard-tglu: NOTRUN -> [SKIP][151] ([i915#15608]) +1 other test skip
[151]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-4/igt@kms_plane@pixel-format-y-tiled-modifier@pipe-b-plane-7.html
* igt@kms_plane@pixel-format-yf-tiled-modifier:
- shard-tglu: NOTRUN -> [SKIP][152] ([i915#15709])
[152]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-3/igt@kms_plane@pixel-format-yf-tiled-modifier.html
* igt@kms_plane_alpha_blend@alpha-basic:
- shard-glk: NOTRUN -> [FAIL][153] ([i915#12178])
[153]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-glk1/igt@kms_plane_alpha_blend@alpha-basic.html
* igt@kms_plane_alpha_blend@alpha-basic@pipe-a-hdmi-a-1:
- shard-glk: NOTRUN -> [FAIL][154] ([i915#7862]) +1 other test fail
[154]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-glk1/igt@kms_plane_alpha_blend@alpha-basic@pipe-a-hdmi-a-1.html
* igt@kms_plane_alpha_blend@constant-alpha-max:
- shard-glk11: NOTRUN -> [FAIL][155] ([i915#10647] / [i915#12169])
[155]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-glk11/igt@kms_plane_alpha_blend@constant-alpha-max.html
* igt@kms_plane_alpha_blend@constant-alpha-max@pipe-a-hdmi-a-1:
- shard-glk11: NOTRUN -> [FAIL][156] ([i915#10647]) +1 other test fail
[156]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-glk11/igt@kms_plane_alpha_blend@constant-alpha-max@pipe-a-hdmi-a-1.html
* igt@kms_plane_multiple@2x-tiling-x:
- shard-tglu: NOTRUN -> [SKIP][157] ([i915#13958])
[157]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-4/igt@kms_plane_multiple@2x-tiling-x.html
* igt@kms_plane_multiple@2x-tiling-yf:
- shard-tglu-1: NOTRUN -> [SKIP][158] ([i915#13958])
[158]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@kms_plane_multiple@2x-tiling-yf.html
* igt@kms_pm_backlight@fade-with-dpms:
- shard-rkl: NOTRUN -> [SKIP][159] ([i915#5354])
[159]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-4/igt@kms_pm_backlight@fade-with-dpms.html
* igt@kms_pm_dc@dc5-retention-flops:
- shard-tglu-1: NOTRUN -> [SKIP][160] ([i915#3828])
[160]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@kms_pm_dc@dc5-retention-flops.html
* igt@kms_pm_lpsp@kms-lpsp:
- shard-glk10: NOTRUN -> [SKIP][161] +129 other tests skip
[161]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-glk10/igt@kms_pm_lpsp@kms-lpsp.html
* igt@kms_pm_lpsp@screens-disabled:
- shard-tglu: NOTRUN -> [SKIP][162] ([i915#8430])
[162]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-3/igt@kms_pm_lpsp@screens-disabled.html
* igt@kms_pm_rpm@i2c:
- shard-dg1: [PASS][163] -> [DMESG-WARN][164] ([i915#4423]) +2 other tests dmesg-warn
[163]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-dg1-12/igt@kms_pm_rpm@i2c.html
[164]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-16/igt@kms_pm_rpm@i2c.html
* igt@kms_pm_rpm@package-g7:
- shard-rkl: NOTRUN -> [SKIP][165] ([i915#15403])
[165]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-4/igt@kms_pm_rpm@package-g7.html
* igt@kms_pm_rpm@system-suspend-idle:
- shard-dg2: [PASS][166] -> [INCOMPLETE][167] ([i915#14419])
[166]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-dg2-3/igt@kms_pm_rpm@system-suspend-idle.html
[167]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg2-4/igt@kms_pm_rpm@system-suspend-idle.html
* igt@kms_pm_rpm@system-suspend-modeset:
- shard-glk: NOTRUN -> [INCOMPLETE][168] ([i915#10553])
[168]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-glk1/igt@kms_pm_rpm@system-suspend-modeset.html
* igt@kms_prime@basic-crc-hybrid:
- shard-tglu: NOTRUN -> [SKIP][169] ([i915#6524])
[169]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-4/igt@kms_prime@basic-crc-hybrid.html
* igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-exceed-fully-sf:
- shard-rkl: NOTRUN -> [SKIP][170] ([i915#11520]) +5 other tests skip
[170]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-4/igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-exceed-fully-sf.html
* igt@kms_psr2_sf@fbc-psr2-overlay-plane-update-continuous-sf:
- shard-dg1: NOTRUN -> [SKIP][171] ([i915#11520])
[171]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@kms_psr2_sf@fbc-psr2-overlay-plane-update-continuous-sf.html
* igt@kms_psr2_sf@pr-cursor-plane-move-continuous-sf:
- shard-tglu: NOTRUN -> [SKIP][172] ([i915#11520]) +2 other tests skip
[172]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-4/igt@kms_psr2_sf@pr-cursor-plane-move-continuous-sf.html
* igt@kms_psr2_sf@psr2-cursor-plane-move-continuous-exceed-sf:
- shard-glk10: NOTRUN -> [SKIP][173] ([i915#11520]) +3 other tests skip
[173]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-glk10/igt@kms_psr2_sf@psr2-cursor-plane-move-continuous-exceed-sf.html
* igt@kms_psr2_sf@psr2-overlay-primary-update-sf-dmg-area:
- shard-glk: NOTRUN -> [SKIP][174] ([i915#11520]) +5 other tests skip
[174]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-glk1/igt@kms_psr2_sf@psr2-overlay-primary-update-sf-dmg-area.html
* igt@kms_psr2_sf@psr2-primary-plane-update-sf-dmg-area-big-fb:
- shard-tglu-1: NOTRUN -> [SKIP][175] ([i915#11520]) +3 other tests skip
[175]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@kms_psr2_sf@psr2-primary-plane-update-sf-dmg-area-big-fb.html
* igt@kms_psr@fbc-pr-sprite-render:
- shard-tglu: NOTRUN -> [SKIP][176] ([i915#9732]) +9 other tests skip
[176]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-4/igt@kms_psr@fbc-pr-sprite-render.html
* igt@kms_psr@fbc-psr2-basic:
- shard-tglu-1: NOTRUN -> [SKIP][177] ([i915#9732]) +10 other tests skip
[177]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@kms_psr@fbc-psr2-basic.html
* igt@kms_psr@psr-cursor-render:
- shard-rkl: NOTRUN -> [SKIP][178] ([i915#1072] / [i915#9732]) +9 other tests skip
[178]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-3/igt@kms_psr@psr-cursor-render.html
* igt@kms_psr@psr2-sprite-blt:
- shard-dg1: NOTRUN -> [SKIP][179] ([i915#1072] / [i915#9732]) +3 other tests skip
[179]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@kms_psr@psr2-sprite-blt.html
* igt@kms_rotation_crc@multiplane-rotation-cropping-top:
- shard-glk: NOTRUN -> [INCOMPLETE][180] ([i915#15492])
[180]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-glk1/igt@kms_rotation_crc@multiplane-rotation-cropping-top.html
* igt@kms_rotation_crc@primary-4-tiled-reflect-x-180:
- shard-tglu-1: NOTRUN -> [SKIP][181] ([i915#5289])
[181]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@kms_rotation_crc@primary-4-tiled-reflect-x-180.html
* igt@kms_scaling_modes@scaling-mode-center:
- shard-tglu: NOTRUN -> [SKIP][182] ([i915#3555]) +2 other tests skip
[182]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-4/igt@kms_scaling_modes@scaling-mode-center.html
* igt@kms_selftest@drm_framebuffer:
- shard-rkl: NOTRUN -> [ABORT][183] ([i915#13179]) +1 other test abort
[183]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-4/igt@kms_selftest@drm_framebuffer.html
* igt@kms_tiled_display@basic-test-pattern-with-chamelium:
- shard-dg1: NOTRUN -> [SKIP][184] ([i915#8623])
[184]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
* igt@kms_vblank@ts-continuation-dpms-suspend:
- shard-rkl: [PASS][185] -> [INCOMPLETE][186] ([i915#12276]) +1 other test incomplete
[185]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-4/igt@kms_vblank@ts-continuation-dpms-suspend.html
[186]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@kms_vblank@ts-continuation-dpms-suspend.html
* igt@kms_vrr@seamless-rr-switch-virtual:
- shard-dg1: NOTRUN -> [SKIP][187] ([i915#9906])
[187]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@kms_vrr@seamless-rr-switch-virtual.html
* igt@perf@mi-rpc:
- shard-dg1: NOTRUN -> [SKIP][188] ([i915#2434])
[188]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@perf@mi-rpc.html
* igt@perf@unprivileged-single-ctx-counters:
- shard-tglu-1: NOTRUN -> [SKIP][189] +31 other tests skip
[189]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-1/igt@perf@unprivileged-single-ctx-counters.html
* igt@perf_pmu@frequency:
- shard-dg1: NOTRUN -> [FAIL][190] ([i915#12549] / [i915#6806]) +1 other test fail
[190]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@perf_pmu@frequency.html
* igt@perf_pmu@semaphore-busy@vcs1:
- shard-mtlp: [PASS][191] -> [FAIL][192] ([i915#4349])
[191]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-mtlp-2/igt@perf_pmu@semaphore-busy@vcs1.html
[192]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-mtlp-5/igt@perf_pmu@semaphore-busy@vcs1.html
* igt@prime_vgem@fence-flip-hang:
- shard-rkl: NOTRUN -> [SKIP][193] ([i915#3708])
[193]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-3/igt@prime_vgem@fence-flip-hang.html
* igt@prime_vgem@fence-write-hang:
- shard-dg1: NOTRUN -> [SKIP][194] ([i915#3708])
[194]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@prime_vgem@fence-write-hang.html
* igt@sriov_basic@enable-vfs-autoprobe-off:
- shard-rkl: NOTRUN -> [SKIP][195] ([i915#9917])
[195]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-4/igt@sriov_basic@enable-vfs-autoprobe-off.html
#### Possible fixes ####
* igt@gem_ccs@suspend-resume:
- shard-dg2: [INCOMPLETE][196] ([i915#13356]) -> [PASS][197]
[196]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-dg2-5/igt@gem_ccs@suspend-resume.html
[197]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg2-8/igt@gem_ccs@suspend-resume.html
* igt@gem_ccs@suspend-resume@tile64-compressed-compfmt0-lmem0-lmem0:
- shard-dg2: [INCOMPLETE][198] ([i915#12392] / [i915#13356]) -> [PASS][199]
[198]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-dg2-5/igt@gem_ccs@suspend-resume@tile64-compressed-compfmt0-lmem0-lmem0.html
[199]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg2-8/igt@gem_ccs@suspend-resume@tile64-compressed-compfmt0-lmem0-lmem0.html
* igt@gem_exec_suspend@basic-s0:
- shard-rkl: [INCOMPLETE][200] ([i915#13356]) -> [PASS][201] +2 other tests pass
[200]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-6/igt@gem_exec_suspend@basic-s0.html
[201]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-2/igt@gem_exec_suspend@basic-s0.html
* igt@gem_lmem_swapping@smem-oom:
- shard-dg1: [FAIL][202] ([i915#15734]) -> [PASS][203]
[202]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-dg1-17/igt@gem_lmem_swapping@smem-oom.html
[203]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-13/igt@gem_lmem_swapping@smem-oom.html
* igt@gem_lmem_swapping@smem-oom@lmem0:
- shard-dg1: [CRASH][204] ([i915#5493]) -> [PASS][205]
[204]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-dg1-17/igt@gem_lmem_swapping@smem-oom@lmem0.html
[205]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-13/igt@gem_lmem_swapping@smem-oom@lmem0.html
* igt@i915_selftest@live:
- shard-mtlp: [DMESG-FAIL][206] ([i915#12061] / [i915#15560]) -> [PASS][207]
[206]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-mtlp-6/igt@i915_selftest@live.html
[207]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-mtlp-2/igt@i915_selftest@live.html
* igt@i915_selftest@live@workarounds:
- shard-mtlp: [DMESG-FAIL][208] ([i915#12061]) -> [PASS][209]
[208]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-mtlp-6/igt@i915_selftest@live@workarounds.html
[209]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-mtlp-2/igt@i915_selftest@live@workarounds.html
* igt@kms_big_fb@4-tiled-64bpp-rotate-180:
- shard-mtlp: [FAIL][210] ([i915#15733] / [i915#5138]) -> [PASS][211]
[210]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-mtlp-4/igt@kms_big_fb@4-tiled-64bpp-rotate-180.html
[211]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-mtlp-5/igt@kms_big_fb@4-tiled-64bpp-rotate-180.html
* igt@kms_cursor_crc@cursor-sliding-256x85:
- shard-tglu: [FAIL][212] ([i915#13566]) -> [PASS][213] +1 other test pass
[212]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-tglu-2/igt@kms_cursor_crc@cursor-sliding-256x85.html
[213]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-5/igt@kms_cursor_crc@cursor-sliding-256x85.html
* igt@kms_hdr@invalid-metadata-sizes:
- shard-rkl: [SKIP][214] ([i915#3555] / [i915#8228]) -> [PASS][215]
[214]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-3/igt@kms_hdr@invalid-metadata-sizes.html
[215]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@kms_hdr@invalid-metadata-sizes.html
* igt@kms_pm_rpm@dpms-mode-unset-non-lpsp:
- shard-dg2: [SKIP][216] ([i915#15073]) -> [PASS][217]
[216]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-dg2-4/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html
[217]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg2-1/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html
* igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait:
- shard-rkl: [SKIP][218] ([i915#15073]) -> [PASS][219] +3 other tests pass
[218]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-8/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html
[219]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-3/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html
* igt@kms_pm_rpm@system-suspend-modeset:
- shard-dg1: [DMESG-WARN][220] ([i915#4423]) -> [PASS][221]
[220]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-dg1-14/igt@kms_pm_rpm@system-suspend-modeset.html
[221]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-14/igt@kms_pm_rpm@system-suspend-modeset.html
* igt@perf_pmu@semaphore-busy@vecs0:
- shard-mtlp: [FAIL][222] ([i915#4349]) -> [PASS][223]
[222]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-mtlp-2/igt@perf_pmu@semaphore-busy@vecs0.html
[223]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-mtlp-5/igt@perf_pmu@semaphore-busy@vecs0.html
#### Warnings ####
* igt@api_intel_bb@crc32:
- shard-rkl: [SKIP][224] ([i915#6230]) -> [SKIP][225] ([i915#14544] / [i915#6230])
[224]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-3/igt@api_intel_bb@crc32.html
[225]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@api_intel_bb@crc32.html
* igt@api_intel_bb@object-reloc-keep-cache:
- shard-rkl: [SKIP][226] ([i915#14544] / [i915#8411]) -> [SKIP][227] ([i915#8411])
[226]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-6/igt@api_intel_bb@object-reloc-keep-cache.html
[227]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-2/igt@api_intel_bb@object-reloc-keep-cache.html
* igt@gem_basic@multigpu-create-close:
- shard-rkl: [SKIP][228] ([i915#7697]) -> [SKIP][229] ([i915#14544] / [i915#7697])
[228]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-3/igt@gem_basic@multigpu-create-close.html
[229]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@gem_basic@multigpu-create-close.html
* igt@gem_ctx_sseu@invalid-sseu:
- shard-rkl: [SKIP][230] ([i915#280]) -> [SKIP][231] ([i915#14544] / [i915#280]) +1 other test skip
[230]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-3/igt@gem_ctx_sseu@invalid-sseu.html
[231]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@gem_ctx_sseu@invalid-sseu.html
* igt@gem_exec_balancer@parallel-contexts:
- shard-rkl: [SKIP][232] ([i915#4525]) -> [SKIP][233] ([i915#14544] / [i915#4525])
[232]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-4/igt@gem_exec_balancer@parallel-contexts.html
[233]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@gem_exec_balancer@parallel-contexts.html
* igt@gem_exec_reloc@basic-gtt-read:
- shard-rkl: [SKIP][234] ([i915#3281]) -> [SKIP][235] ([i915#14544] / [i915#3281]) +3 other tests skip
[234]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-3/igt@gem_exec_reloc@basic-gtt-read.html
[235]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@gem_exec_reloc@basic-gtt-read.html
* igt@gem_exec_reloc@basic-write-wc-noreloc:
- shard-rkl: [SKIP][236] ([i915#14544] / [i915#3281]) -> [SKIP][237] ([i915#3281]) +2 other tests skip
[236]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-6/igt@gem_exec_reloc@basic-write-wc-noreloc.html
[237]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-2/igt@gem_exec_reloc@basic-write-wc-noreloc.html
* igt@gem_lmem_swapping@parallel-random-engines:
- shard-rkl: [SKIP][238] ([i915#4613]) -> [SKIP][239] ([i915#14544] / [i915#4613])
[238]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-3/igt@gem_lmem_swapping@parallel-random-engines.html
[239]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@gem_lmem_swapping@parallel-random-engines.html
* igt@gem_lmem_swapping@parallel-random-verify-ccs:
- shard-rkl: [SKIP][240] ([i915#14544] / [i915#4613]) -> [SKIP][241] ([i915#4613]) +2 other tests skip
[240]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-6/igt@gem_lmem_swapping@parallel-random-verify-ccs.html
[241]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-2/igt@gem_lmem_swapping@parallel-random-verify-ccs.html
* igt@gem_pread@bench:
- shard-rkl: [SKIP][242] ([i915#14544] / [i915#3282]) -> [SKIP][243] ([i915#3282])
[242]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-6/igt@gem_pread@bench.html
[243]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-3/igt@gem_pread@bench.html
* igt@gem_softpin@evict-snoop:
- shard-rkl: [SKIP][244] -> [SKIP][245] ([i915#14544]) +7 other tests skip
[244]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-3/igt@gem_softpin@evict-snoop.html
[245]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@gem_softpin@evict-snoop.html
* igt@gem_tiled_pread_pwrite:
- shard-rkl: [SKIP][246] ([i915#3282]) -> [SKIP][247] ([i915#14544] / [i915#3282]) +1 other test skip
[246]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-3/igt@gem_tiled_pread_pwrite.html
[247]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@gem_tiled_pread_pwrite.html
* igt@gem_userptr_blits@readonly-unsync:
- shard-rkl: [SKIP][248] ([i915#3297]) -> [SKIP][249] ([i915#14544] / [i915#3297])
[248]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-4/igt@gem_userptr_blits@readonly-unsync.html
[249]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@gem_userptr_blits@readonly-unsync.html
* igt@gem_userptr_blits@relocations:
- shard-rkl: [SKIP][250] ([i915#3281] / [i915#3297]) -> [SKIP][251] ([i915#14544] / [i915#3281] / [i915#3297])
[250]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-3/igt@gem_userptr_blits@relocations.html
[251]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@gem_userptr_blits@relocations.html
* igt@gen9_exec_parse@bb-start-far:
- shard-rkl: [SKIP][252] ([i915#2527]) -> [SKIP][253] ([i915#14544] / [i915#2527])
[252]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-3/igt@gen9_exec_parse@bb-start-far.html
[253]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@gen9_exec_parse@bb-start-far.html
* igt@gen9_exec_parse@cmd-crossing-page:
- shard-rkl: [SKIP][254] ([i915#14544] / [i915#2527]) -> [SKIP][255] ([i915#2527])
[254]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-6/igt@gen9_exec_parse@cmd-crossing-page.html
[255]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-2/igt@gen9_exec_parse@cmd-crossing-page.html
* igt@kms_big_fb@4-tiled-8bpp-rotate-180:
- shard-rkl: [SKIP][256] ([i915#5286]) -> [SKIP][257] ([i915#14544] / [i915#5286])
[256]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-3/igt@kms_big_fb@4-tiled-8bpp-rotate-180.html
[257]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@kms_big_fb@4-tiled-8bpp-rotate-180.html
* igt@kms_big_fb@4-tiled-addfb-size-overflow:
- shard-rkl: [SKIP][258] ([i915#14544] / [i915#5286]) -> [SKIP][259] ([i915#5286]) +1 other test skip
[258]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-6/igt@kms_big_fb@4-tiled-addfb-size-overflow.html
[259]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-3/igt@kms_big_fb@4-tiled-addfb-size-overflow.html
* igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-0-hflip:
- shard-rkl: [SKIP][260] ([i915#14544] / [i915#3828]) -> [SKIP][261] ([i915#3828])
[260]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-6/igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-0-hflip.html
[261]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-3/igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-0-hflip.html
* igt@kms_big_fb@y-tiled-64bpp-rotate-270:
- shard-rkl: [SKIP][262] ([i915#3638]) -> [SKIP][263] ([i915#14544] / [i915#3638])
[262]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-4/igt@kms_big_fb@y-tiled-64bpp-rotate-270.html
[263]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@kms_big_fb@y-tiled-64bpp-rotate-270.html
* igt@kms_big_fb@yf-tiled-16bpp-rotate-90:
- shard-rkl: [SKIP][264] ([i915#14544]) -> [SKIP][265] +4 other tests skip
[264]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-6/igt@kms_big_fb@yf-tiled-16bpp-rotate-90.html
[265]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-2/igt@kms_big_fb@yf-tiled-16bpp-rotate-90.html
* igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-mc-ccs:
- shard-rkl: [SKIP][266] ([i915#14098] / [i915#14544] / [i915#6095]) -> [SKIP][267] ([i915#14098] / [i915#6095]) +2 other tests skip
[266]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-6/igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-mc-ccs.html
[267]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-2/igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-mc-ccs.html
* igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs:
- shard-rkl: [SKIP][268] ([i915#14098] / [i915#6095]) -> [SKIP][269] ([i915#14098] / [i915#14544] / [i915#6095]) +9 other tests skip
[268]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-4/igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs.html
[269]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs.html
* igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs@pipe-a-hdmi-a-2:
- shard-rkl: [SKIP][270] ([i915#6095]) -> [SKIP][271] ([i915#14544] / [i915#6095]) +8 other tests skip
[270]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-4/igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs@pipe-a-hdmi-a-2.html
[271]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs@pipe-a-hdmi-a-2.html
* igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs:
- shard-rkl: [SKIP][272] ([i915#12313]) -> [SKIP][273] ([i915#12313] / [i915#14544])
[272]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-3/igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs.html
[273]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs.html
* igt@kms_ccs@random-ccs-data-y-tiled-ccs@pipe-a-hdmi-a-2:
- shard-rkl: [SKIP][274] ([i915#14544] / [i915#6095]) -> [SKIP][275] ([i915#6095]) +1 other test skip
[274]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-6/igt@kms_ccs@random-ccs-data-y-tiled-ccs@pipe-a-hdmi-a-2.html
[275]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-3/igt@kms_ccs@random-ccs-data-y-tiled-ccs@pipe-a-hdmi-a-2.html
* igt@kms_chamelium_edid@hdmi-edid-read:
- shard-rkl: [SKIP][276] ([i915#11151] / [i915#7828]) -> [SKIP][277] ([i915#11151] / [i915#14544] / [i915#7828]) +2 other tests skip
[276]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-3/igt@kms_chamelium_edid@hdmi-edid-read.html
[277]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@kms_chamelium_edid@hdmi-edid-read.html
* igt@kms_chamelium_edid@hdmi-mode-timings:
- shard-rkl: [SKIP][278] ([i915#11151] / [i915#14544] / [i915#7828]) -> [SKIP][279] ([i915#11151] / [i915#7828])
[278]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-6/igt@kms_chamelium_edid@hdmi-mode-timings.html
[279]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-2/igt@kms_chamelium_edid@hdmi-mode-timings.html
* igt@kms_content_protection@lic-type-1:
- shard-rkl: [SKIP][280] ([i915#14544] / [i915#6944] / [i915#9424]) -> [SKIP][281] ([i915#6944] / [i915#9424])
[280]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-6/igt@kms_content_protection@lic-type-1.html
[281]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-3/igt@kms_content_protection@lic-type-1.html
* igt@kms_content_protection@type1:
- shard-rkl: [SKIP][282] ([i915#6944] / [i915#7118] / [i915#9424]) -> [SKIP][283] ([i915#14544] / [i915#6944] / [i915#7118] / [i915#9424])
[282]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-3/igt@kms_content_protection@type1.html
[283]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@kms_content_protection@type1.html
* igt@kms_cursor_crc@cursor-offscreen-32x10:
- shard-rkl: [SKIP][284] ([i915#3555]) -> [SKIP][285] ([i915#14544] / [i915#3555]) +1 other test skip
[284]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-3/igt@kms_cursor_crc@cursor-offscreen-32x10.html
[285]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@kms_cursor_crc@cursor-offscreen-32x10.html
* igt@kms_cursor_crc@cursor-rapid-movement-512x512:
- shard-rkl: [SKIP][286] ([i915#13049] / [i915#14544]) -> [SKIP][287] ([i915#13049])
[286]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-6/igt@kms_cursor_crc@cursor-rapid-movement-512x512.html
[287]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-2/igt@kms_cursor_crc@cursor-rapid-movement-512x512.html
* igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size:
- shard-rkl: [SKIP][288] ([i915#4103]) -> [SKIP][289] ([i915#14544] / [i915#4103])
[288]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-3/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size.html
[289]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size.html
* igt@kms_dsc@dsc-fractional-bpp-with-bpc:
- shard-rkl: [SKIP][290] ([i915#14544] / [i915#3840]) -> [SKIP][291] ([i915#3840])
[290]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-6/igt@kms_dsc@dsc-fractional-bpp-with-bpc.html
[291]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-2/igt@kms_dsc@dsc-fractional-bpp-with-bpc.html
* igt@kms_dsc@dsc-with-output-formats:
- shard-rkl: [SKIP][292] ([i915#3555] / [i915#3840]) -> [SKIP][293] ([i915#14544] / [i915#3555] / [i915#3840]) +1 other test skip
[292]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-3/igt@kms_dsc@dsc-with-output-formats.html
[293]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@kms_dsc@dsc-with-output-formats.html
* igt@kms_flip@2x-flip-vs-dpms:
- shard-rkl: [SKIP][294] ([i915#9934]) -> [SKIP][295] ([i915#14544] / [i915#9934]) +1 other test skip
[294]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-3/igt@kms_flip@2x-flip-vs-dpms.html
[295]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@kms_flip@2x-flip-vs-dpms.html
* igt@kms_flip@2x-modeset-vs-vblank-race:
- shard-rkl: [SKIP][296] ([i915#14544] / [i915#9934]) -> [SKIP][297] ([i915#9934]) +2 other tests skip
[296]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-6/igt@kms_flip@2x-modeset-vs-vblank-race.html
[297]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-2/igt@kms_flip@2x-modeset-vs-vblank-race.html
* igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-downscaling:
- shard-rkl: [SKIP][298] ([i915#15643]) -> [SKIP][299] ([i915#14544] / [i915#15643]) +1 other test skip
[298]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-3/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-downscaling.html
[299]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-downscaling.html
* igt@kms_frontbuffer_tracking@fbcpsr-1p-offscreen-pri-indfb-draw-mmap-gtt:
- shard-rkl: [SKIP][300] ([i915#15102]) -> [SKIP][301] ([i915#14544] / [i915#15102]) +1 other test skip
[300]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-3/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscreen-pri-indfb-draw-mmap-gtt.html
[301]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscreen-pri-indfb-draw-mmap-gtt.html
* igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-pwrite:
- shard-rkl: [SKIP][302] ([i915#15102] / [i915#3023]) -> [SKIP][303] ([i915#14544] / [i915#15102] / [i915#3023]) +3 other tests skip
[302]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-3/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-pwrite.html
[303]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-pwrite.html
* igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-shrfb-draw-mmap-gtt:
- shard-rkl: [SKIP][304] ([i915#14544] / [i915#15102] / [i915#3023]) -> [SKIP][305] ([i915#15102] / [i915#3023]) +3 other tests skip
[304]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-shrfb-draw-mmap-gtt.html
[305]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-2/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-shrfb-draw-mmap-gtt.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-onoff:
- shard-rkl: [SKIP][306] ([i915#1825]) -> [SKIP][307] ([i915#14544] / [i915#1825]) +9 other tests skip
[306]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-3/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-onoff.html
[307]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-onoff.html
* igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-indfb-draw-blt:
- shard-rkl: [SKIP][308] ([i915#14544] / [i915#15102]) -> [SKIP][309] ([i915#15102]) +1 other test skip
[308]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-6/igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-indfb-draw-blt.html
[309]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-2/igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-move:
- shard-dg2: [SKIP][310] ([i915#15102] / [i915#3458]) -> [SKIP][311] ([i915#10433] / [i915#15102] / [i915#3458]) +1 other test skip
[310]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-dg2-3/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-move.html
[311]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg2-4/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-move.html
* igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-blt:
- shard-dg2: [SKIP][312] ([i915#10433] / [i915#15102] / [i915#3458]) -> [SKIP][313] ([i915#15102] / [i915#3458]) +2 other tests skip
[312]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-dg2-4/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-blt.html
[313]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg2-1/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-blt.html
* igt@kms_frontbuffer_tracking@psr-2p-primscrn-spr-indfb-draw-pwrite:
- shard-rkl: [SKIP][314] ([i915#14544] / [i915#1825]) -> [SKIP][315] ([i915#1825]) +6 other tests skip
[314]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-6/igt@kms_frontbuffer_tracking@psr-2p-primscrn-spr-indfb-draw-pwrite.html
[315]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-2/igt@kms_frontbuffer_tracking@psr-2p-primscrn-spr-indfb-draw-pwrite.html
* igt@kms_hdr@bpc-switch-suspend:
- shard-rkl: [INCOMPLETE][316] ([i915#15436]) -> [SKIP][317] ([i915#3555] / [i915#8228])
[316]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-6/igt@kms_hdr@bpc-switch-suspend.html
[317]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-3/igt@kms_hdr@bpc-switch-suspend.html
* igt@kms_plane@pixel-format-4-tiled-mtl-rc-ccs-modifier:
- shard-rkl: [SKIP][318] ([i915#15709]) -> [SKIP][319] ([i915#14544] / [i915#15709])
[318]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-3/igt@kms_plane@pixel-format-4-tiled-mtl-rc-ccs-modifier.html
[319]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@kms_plane@pixel-format-4-tiled-mtl-rc-ccs-modifier.html
* igt@kms_plane@pixel-format-y-tiled-gen12-mc-ccs-modifier:
- shard-rkl: [SKIP][320] ([i915#14544] / [i915#15709]) -> [SKIP][321] ([i915#15709]) +1 other test skip
[320]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-6/igt@kms_plane@pixel-format-y-tiled-gen12-mc-ccs-modifier.html
[321]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-2/igt@kms_plane@pixel-format-y-tiled-gen12-mc-ccs-modifier.html
* igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-rotation:
- shard-dg1: [SKIP][322] ([i915#15329] / [i915#3555]) -> [SKIP][323] ([i915#15329] / [i915#3555] / [i915#4423])
[322]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-dg1-17/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-rotation.html
[323]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-13/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-rotation.html
* igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-rotation@pipe-a:
- shard-dg1: [SKIP][324] ([i915#15329]) -> [SKIP][325] ([i915#15329] / [i915#4423])
[324]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-dg1-17/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-rotation@pipe-a.html
[325]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-dg1-13/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-rotation@pipe-a.html
* igt@kms_pm_dc@dc6-dpms:
- shard-tglu: [SKIP][326] ([i915#15128]) -> [FAIL][327] ([i915#15752])
[326]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-tglu-6/igt@kms_pm_dc@dc6-dpms.html
[327]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-tglu-4/igt@kms_pm_dc@dc6-dpms.html
* igt@kms_pm_lpsp@kms-lpsp:
- shard-rkl: [SKIP][328] ([i915#9340]) -> [SKIP][329] ([i915#3828])
[328]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-1/igt@kms_pm_lpsp@kms-lpsp.html
[329]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-2/igt@kms_pm_lpsp@kms-lpsp.html
* igt@kms_pm_lpsp@screens-disabled:
- shard-rkl: [SKIP][330] ([i915#8430]) -> [SKIP][331] ([i915#14544] / [i915#8430])
[330]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-4/igt@kms_pm_lpsp@screens-disabled.html
[331]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@kms_pm_lpsp@screens-disabled.html
* igt@kms_pm_rpm@dpms-mode-unset-lpsp:
- shard-rkl: [SKIP][332] ([i915#15073]) -> [SKIP][333] ([i915#14544] / [i915#15073])
[332]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-3/igt@kms_pm_rpm@dpms-mode-unset-lpsp.html
[333]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@kms_pm_rpm@dpms-mode-unset-lpsp.html
* igt@kms_psr2_sf@pr-overlay-plane-move-continuous-exceed-sf:
- shard-rkl: [SKIP][334] ([i915#11520]) -> [SKIP][335] ([i915#11520] / [i915#14544]) +1 other test skip
[334]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-3/igt@kms_psr2_sf@pr-overlay-plane-move-continuous-exceed-sf.html
[335]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@kms_psr2_sf@pr-overlay-plane-move-continuous-exceed-sf.html
* igt@kms_psr2_sf@psr2-overlay-primary-update-sf-dmg-area:
- shard-rkl: [SKIP][336] ([i915#11520] / [i915#14544]) -> [SKIP][337] ([i915#11520])
[336]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-6/igt@kms_psr2_sf@psr2-overlay-primary-update-sf-dmg-area.html
[337]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-2/igt@kms_psr2_sf@psr2-overlay-primary-update-sf-dmg-area.html
* igt@kms_psr@fbc-pr-sprite-plane-onoff:
- shard-rkl: [SKIP][338] ([i915#1072] / [i915#14544] / [i915#9732]) -> [SKIP][339] ([i915#1072] / [i915#9732]) +4 other tests skip
[338]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-6/igt@kms_psr@fbc-pr-sprite-plane-onoff.html
[339]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-2/igt@kms_psr@fbc-pr-sprite-plane-onoff.html
* igt@kms_psr@fbc-pr-suspend:
- shard-rkl: [SKIP][340] ([i915#1072] / [i915#9732]) -> [SKIP][341] ([i915#1072] / [i915#14544] / [i915#9732]) +8 other tests skip
[340]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-3/igt@kms_psr@fbc-pr-suspend.html
[341]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@kms_psr@fbc-pr-suspend.html
* igt@prime_vgem@basic-read:
- shard-rkl: [SKIP][342] ([i915#3291] / [i915#3708]) -> [SKIP][343] ([i915#14544] / [i915#3291] / [i915#3708])
[342]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18104/shard-rkl-3/igt@prime_vgem@basic-read.html
[343]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/shard-rkl-6/igt@prime_vgem@basic-read.html
[i915#10307]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10307
[i915#10433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10433
[i915#10434]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10434
[i915#10553]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10553
[i915#10647]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10647
[i915#1072]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1072
[i915#11078]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11078
[i915#11151]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11151
[i915#11520]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11520
[i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
[i915#12169]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12169
[i915#12178]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12178
[i915#12276]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12276
[i915#12313]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12313
[i915#12314]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12314
[i915#12392]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12392
[i915#12549]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12549
[i915#1257]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1257
[i915#12745]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12745
[i915#12756]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12756
[i915#12805]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12805
[i915#13008]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13008
[i915#13027]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13027
[i915#13049]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13049
[i915#13179]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13179
[i915#13356]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13356
[i915#13398]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13398
[i915#13409]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13409
[i915#13476]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13476
[i915#13566]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13566
[i915#13729]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13729
[i915#13790]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13790
[i915#13820]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13820
[i915#13821]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13821
[i915#13958]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13958
[i915#14033]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14033
[i915#14098]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14098
[i915#14350]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14350
[i915#14419]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14419
[i915#14498]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14498
[i915#14544]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14544
[i915#15073]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15073
[i915#15102]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15102
[i915#15128]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15128
[i915#15172]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15172
[i915#15329]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15329
[i915#15330]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15330
[i915#15342]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15342
[i915#15403]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15403
[i915#15436]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15436
[i915#15458]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15458
[i915#15459]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15459
[i915#15460]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15460
[i915#15479]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15479
[i915#15492]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15492
[i915#15560]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15560
[i915#15582]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15582
[i915#15608]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15608
[i915#15643]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15643
[i915#15709]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15709
[i915#15733]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15733
[i915#15734]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15734
[i915#15752]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15752
[i915#1825]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1825
[i915#1839]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1839
[i915#2434]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2434
[i915#2527]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2527
[i915#2658]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2658
[i915#2681]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2681
[i915#280]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/280
[i915#284]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/284
[i915#2856]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2856
[i915#3023]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3023
[i915#3116]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3116
[i915#3281]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3281
[i915#3282]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3282
[i915#3291]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3291
[i915#3297]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3297
[i915#3299]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3299
[i915#3323]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3323
[i915#3458]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3458
[i915#3539]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3539
[i915#3555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3555
[i915#3637]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3637
[i915#3638]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3638
[i915#3708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3708
[i915#3804]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3804
[i915#3828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3828
[i915#3840]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3840
[i915#4077]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4077
[i915#4083]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4083
[i915#4103]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4103
[i915#4349]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4349
[i915#4387]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4387
[i915#4391]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4391
[i915#4423]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4423
[i915#4525]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4525
[i915#4538]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4538
[i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613
[i915#4771]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4771
[i915#4812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4812
[i915#4817]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4817
[i915#4839]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4839
[i915#4852]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4852
[i915#5138]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5138
[i915#5190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5190
[i915#5286]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5286
[i915#5289]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5289
[i915#5354]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5354
[i915#5439]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5439
[i915#5493]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5493
[i915#5956]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5956
[i915#6095]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6095
[i915#6113]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6113
[i915#6230]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6230
[i915#6301]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6301
[i915#6334]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6334
[i915#6335]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6335
[i915#6524]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6524
[i915#658]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/658
[i915#6806]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6806
[i915#6944]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6944
[i915#7116]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7116
[i915#7118]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7118
[i915#7443]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7443
[i915#7697]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7697
[i915#7828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7828
[i915#7862]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7862
[i915#8228]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8228
[i915#8399]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8399
[i915#8411]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8411
[i915#8430]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8430
[i915#8555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8555
[i915#8623]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8623
[i915#8708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8708
[i915#9323]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9323
[i915#9337]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9337
[i915#9340]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9340
[i915#9424]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9424
[i915#9723]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9723
[i915#9732]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9732
[i915#9878]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9878
[i915#9906]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9906
[i915#9917]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9917
[i915#9934]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9934
Build changes
-------------
* Linux: CI_DRM_18104 -> Patchwork_161587v3
CI-20190529: 20190529
CI_DRM_18104: a48305e6a2e6a1ed90df374101dd29542c105d8f @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_8782: eac3b04d1f76b82ac3a183fb293c44e9185d8dba @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
Patchwork_161587v3: a48305e6a2e6a1ed90df374101dd29542c105d8f @ git://anongit.freedesktop.org/gfx-ci/linux
piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v3/index.html
[-- Attachment #2: Type: text/html, Size: 119918 bytes --]
^ permalink raw reply [flat|nested] 62+ messages in thread
* RE: [PATCH v2 01/24] drm/i915/lt_phy: Dump missing PLL state parameters
2026-03-04 13:14 ` [PATCH v2 01/24] drm/i915/lt_phy: Dump missing PLL state parameters Mika Kahola
@ 2026-03-10 2:57 ` Kandpal, Suraj
2026-03-10 3:10 ` Kandpal, Suraj
0 siblings, 1 reply; 62+ messages in thread
From: Kandpal, Suraj @ 2026-03-10 2:57 UTC (permalink / raw)
To: Kahola, Mika, intel-gfx@lists.freedesktop.org,
intel-xe@lists.freedesktop.org
Cc: Kahola, Mika
> Subject: [PATCH v2 01/24] drm/i915/lt_phy: Dump missing PLL state
> parameters
>
> Dump missing PLL structure members ssc_enabled and tbt_mode in order to
> enhance debugging.
>
> v2: Drop addr_lsb and addr_msb printouts
>
> Signed-off-by: Mika Kahola <mika.kahola@intel.com>
LGTM,
Reviewed-by : Suraj Kandpal <suraj.kandpal@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_lt_phy.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> index eced8493e566..f768804122c1 100644
> --- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> @@ -2141,7 +2141,9 @@ void intel_lt_phy_dump_hw_state(struct
> intel_display *display, {
> int i, j;
>
> - drm_dbg_kms(display->drm, "lt_phy_pll_hw_state:\n");
> + drm_dbg_kms(display->drm, "lt_phy_pll_hw_state: ssc enabled: %d,
> tbt mode: %d\n",
> + hw_state->ssc_enabled, hw_state->tbt_mode);
> +
> for (i = 0; i < 3; i++) {
> drm_dbg_kms(display->drm, "config[%d] = 0x%.4x,\n",
> i, hw_state->config[i]);
> --
> 2.43.0
^ permalink raw reply [flat|nested] 62+ messages in thread
* RE: [PATCH v2 02/24] drm/i915/lt_phy: Add check if PLL is enabled
2026-03-04 13:14 ` [PATCH v2 02/24] drm/i915/lt_phy: Add check if PLL is enabled Mika Kahola
@ 2026-03-10 3:09 ` Kandpal, Suraj
0 siblings, 0 replies; 62+ messages in thread
From: Kandpal, Suraj @ 2026-03-10 3:09 UTC (permalink / raw)
To: Kahola, Mika, intel-gfx@lists.freedesktop.org,
intel-xe@lists.freedesktop.org
Cc: Kahola, Mika
> Subject: [PATCH v2 02/24] drm/i915/lt_phy: Add check if PLL is enabled
>
> Add check for PLL enabling and return early if PLL is not enabled.
>
> v2: Use PCLK PLL request to check if PLL is enabled (Suraj)
>
> Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_lt_phy.c | 24 +++++++++++++++++++++
> 1 file changed, 24 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> index f768804122c1..8fe61cfdb706 100644
> --- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> @@ -2176,6 +2176,27 @@ intel_lt_phy_pll_compare_hw_state(const struct
> intel_lt_phy_pll_state *a,
> return false;
> }
>
> +static u32 intel_lt_phy_get_pclk_pll_ack(u8 lane_mask) {
> + u32 val = 0;
> + int lane = 0;
> +
> + for_each_lt_phy_lane_in_mask(lane_mask, lane)
> + val |= XELPDP_LANE_PCLK_PLL_ACK(lane);
> +
I think you forgot to implement the changes here they patch looks identical to previous one.
Maybe I wasn't able to get my point across properly.
Leaving the same comment again
unlike CX0 PHY where we the step is
Set PORT_CLOCK_CTL register PCLK PLL Request LN<Lane for maxPCLK**> to "1" to enable PLL.
That is not the case for LT PHY there we request and wait for ACK on Lane 0
Program PORT_CLOCK_CTL[PCLK PLL Request LN0] = 1. This will assert the MacCLK Request.
Poll for PORT_CLOCK_CTL[PCLK PLL Ack LN0]= 1. This is the MacCLKAck assertion. Expected MACCLK_TURNON_LATENCY is 100 us.
So all we need to do is check PCLK PLL ACK on LN0
Regards,
Suraj Kandpal
> + return val;
> +}
> +
> +static bool intel_lt_phy_pll_is_enabled(struct intel_encoder *encoder)
> +{
> + struct intel_display *display = to_intel_display(encoder);
> + struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
> + u8 lane = dig_port->lane_reversal ? INTEL_LT_PHY_LANE1 :
> +INTEL_LT_PHY_LANE0;
> +
> + return intel_de_read(display, XELPDP_PORT_CLOCK_CTL(display,
> encoder->port)) &
> + intel_lt_phy_get_pclk_pll_ack(lane);
> +}
> +
> void intel_lt_phy_pll_readout_hw_state(struct intel_encoder *encoder,
> const struct intel_crtc_state *crtc_state,
> struct intel_lt_phy_pll_state *pll_state)
> @@ -2185,6 +2206,9 @@ void intel_lt_phy_pll_readout_hw_state(struct
> intel_encoder *encoder,
> struct ref_tracker *wakeref;
> int i, j, k;
>
> + if (!intel_lt_phy_pll_is_enabled(encoder))
> + return;
> +
> pll_state->tbt_mode =
> intel_tc_port_in_tbt_alt_mode(enc_to_dig_port(encoder));
> if (pll_state->tbt_mode)
> return;
> --
> 2.43.0
^ permalink raw reply [flat|nested] 62+ messages in thread
* RE: [PATCH v2 01/24] drm/i915/lt_phy: Dump missing PLL state parameters
2026-03-10 2:57 ` Kandpal, Suraj
@ 2026-03-10 3:10 ` Kandpal, Suraj
0 siblings, 0 replies; 62+ messages in thread
From: Kandpal, Suraj @ 2026-03-10 3:10 UTC (permalink / raw)
To: Kahola, Mika, intel-gfx@lists.freedesktop.org,
intel-xe@lists.freedesktop.org
Cc: Kahola, Mika
>
> > Subject: [PATCH v2 01/24] drm/i915/lt_phy: Dump missing PLL state
> > parameters
> >
> > Dump missing PLL structure members ssc_enabled and tbt_mode in order
> > to enhance debugging.
> >
> > v2: Drop addr_lsb and addr_msb printouts
> >
> > Signed-off-by: Mika Kahola <mika.kahola@intel.com>
>
> LGTM,
> Reviewed-by : Suraj Kandpal <suraj.kandpal@intel.com>
>
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
> > ---
> > drivers/gpu/drm/i915/display/intel_lt_phy.c | 4 +++-
> > 1 file changed, 3 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > index eced8493e566..f768804122c1 100644
> > --- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > @@ -2141,7 +2141,9 @@ void intel_lt_phy_dump_hw_state(struct
> > intel_display *display, {
> > int i, j;
> >
> > - drm_dbg_kms(display->drm, "lt_phy_pll_hw_state:\n");
> > + drm_dbg_kms(display->drm, "lt_phy_pll_hw_state: ssc enabled: %d,
> > tbt mode: %d\n",
> > + hw_state->ssc_enabled, hw_state->tbt_mode);
> > +
> > for (i = 0; i < 3; i++) {
> > drm_dbg_kms(display->drm, "config[%d] = 0x%.4x,\n",
> > i, hw_state->config[i]);
> > --
> > 2.43.0
^ permalink raw reply [flat|nested] 62+ messages in thread
* RE: [PATCH v2 03/24] drm/i915/lt_phy: Add PLL information for xe3plpd
2026-03-04 13:14 ` [PATCH v2 03/24] drm/i915/lt_phy: Add PLL information for xe3plpd Mika Kahola
@ 2026-03-10 3:54 ` Kandpal, Suraj
0 siblings, 0 replies; 62+ messages in thread
From: Kandpal, Suraj @ 2026-03-10 3:54 UTC (permalink / raw)
To: Kahola, Mika, intel-gfx@lists.freedesktop.org,
intel-xe@lists.freedesktop.org
Cc: Kahola, Mika
> Subject: [PATCH v2 03/24] drm/i915/lt_phy: Add PLL information for xe3plpd
>
> Start bringing in xe3plpd as part of dpll framework. The work is started by
> adding PLL information and related function hooks.
>
> v2: Fix xe3plpd type (Suraj)
> Remove empty line between BSpec link and Signed-off-by (Suraj)
>
> BSpec: 74304
> Signed-off-by: Mika Kahola <mika.kahola@intel.com>
LGTM,
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> index f35a9252f4e1..4185c8e136da 100644
> --- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> +++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> @@ -4571,6 +4571,25 @@ static const struct intel_dpll_mgr mtl_pll_mgr = {
> .compare_hw_state = mtl_compare_hw_state, };
>
> +static const struct intel_dpll_funcs xe3plpd_pll_funcs = { };
> +
> +static const struct dpll_info xe3plpd_plls[] = {
> + { .name = "DPLL 0", .funcs = &xe3plpd_pll_funcs, .id =
> DPLL_ID_ICL_DPLL0, },
> + { .name = "DPLL 1", .funcs = &xe3plpd_pll_funcs, .id =
> DPLL_ID_ICL_DPLL1, },
> + /* TODO: Add TBT */
> + { .name = "TC PLL 1", .funcs = &xe3plpd_pll_funcs, .id =
> DPLL_ID_ICL_MGPLL1, },
> + { .name = "TC PLL 2", .funcs = &xe3plpd_pll_funcs, .id =
> DPLL_ID_ICL_MGPLL2, },
> + { .name = "TC PLL 3", .funcs = &xe3plpd_pll_funcs, .id =
> DPLL_ID_ICL_MGPLL3, },
> + { .name = "TC PLL 4", .funcs = &xe3plpd_pll_funcs, .id =
> DPLL_ID_ICL_MGPLL4, },
> + {}
> +};
> +
> +__maybe_unused
> +static const struct intel_dpll_mgr xe3plpd_pll_mgr = {
> + .dpll_info = xe3plpd_plls,
> +};
> +
> /**
> * intel_dpll_init - Initialize DPLLs
> * @display: intel_display device
> --
> 2.43.0
^ permalink raw reply [flat|nested] 62+ messages in thread
* RE: [PATCH v2 04/24] drm/i915/lt_phy: Refactor LT PHY PLL handling to use explicit PLL state
2026-03-05 8:19 ` Kahola, Mika
@ 2026-03-10 4:02 ` Kandpal, Suraj
2026-03-10 7:36 ` Kahola, Mika
0 siblings, 1 reply; 62+ messages in thread
From: Kandpal, Suraj @ 2026-03-10 4:02 UTC (permalink / raw)
To: Kahola, Mika, Deak, Imre
Cc: intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org
> Subject: RE: [PATCH v2 04/24] drm/i915/lt_phy: Refactor LT PHY PLL handling
> to use explicit PLL state
>
> > -----Original Message-----
> > From: Deak, Imre <imre.deak@intel.com>
> > Sent: Wednesday, 4 March 2026 16.05
> > To: Kahola, Mika <mika.kahola@intel.com>
> > Cc: intel-gfx@lists.freedesktop.org; intel-xe@lists.freedesktop.org
> > Subject: Re: [PATCH v2 04/24] drm/i915/lt_phy: Refactor LT PHY PLL
> > handling to use explicit PLL state
> >
> > On Wed, Mar 04, 2026 at 01:14:03PM +0000, Mika Kahola wrote:
> > > The LT PHY implementation currently pulls PLL and port_clock
> > > information directly from the CRTC state. This ties the PHY
> > > programming logic too tightly to the CRTC state and makes it harder
> > > to clearly express the PHY’s own PLL configuration.
> > >
> > > Introduce an explicit "struct intel_lt_phy_pll_state" argument for
> > > the PHY functions and update callers accordingly.
> > >
> > > No functional change is intended — this is a preparatory cleanup for
> > > to bring LT PHY PLL handling as part of PLL framework.
> > >
> > > Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> > > ---
> > > drivers/gpu/drm/i915/display/intel_lt_phy.c | 48
> > > ++++++++++++---------
> > > 1 file changed, 27 insertions(+), 21 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > > b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > > index 8fe61cfdb706..ebdcab58df4a 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > > @@ -1178,7 +1178,8 @@ intel_lt_phy_lane_reset(struct intel_encoder
> > > *encoder,
> > >
> > > static void
> > > intel_lt_phy_program_port_clock_ctl(struct intel_encoder *encoder,
> > > - const struct intel_crtc_state *crtc_state,
> > > + const struct intel_lt_phy_pll_state *ltpll,
> > > + int port_clock,
> > > bool lane_reversal)
> > > {
> > > struct intel_display *display = to_intel_display(encoder); @@
> > > -1195,17 +1196,17 @@ intel_lt_phy_program_port_clock_ctl(struct
> intel_encoder *encoder,
> > > * but since the register bits still remain the same we use
> > > * the same definition
> > > */
> > > - if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI) &&
> > > - intel_hdmi_is_frl(crtc_state->port_clock))
> > > + if (encoder->type == INTEL_OUTPUT_HDMI &&
> >
> > This was discussed already elsewhere: encoder->type can't be used to
> > determine if the encoder is in HDMI or DP mode. In fact on LT PHY
> > platforms encoder->type will be never INTEL_OUTPUT_HDMI, rather it's
> INTEL_OUTPUT_DDI, where the actual mode of the DDI encoder could be
> either HDMI or DP.
> >
> > The ideal would be to deduct the DP/HDMI mode from the
> > intel_lt_phy_pll_state instead. AFAICS ltpll->config[0] is explicitly
> > set to
> > 0x84 for both the computed and table-specified HDMI PLL configurations
> and config[0] is not 0x84 for any DP PLL configurations.
> > Could be used that instead to distinguish the HDMI and DP configs?
>
> Right. I keep forgetting this that "encoder->type" can be both DP and HDMI.
> The naming to me seems a bit misleading and hence I keep forgetting this.
> Anyway, this approach cannot be used here but I must come up with better
> solution.
>
> I could switch to use config[0] to distinguish HDMI.
We could also use intel_encoder_is_dp() that makes sure we skip HDMI connectors in that case.
Otherwise,
mode = REG_FIELD_GET8(LT_PHY_VDR_MODE_ENCODING_MASK, val);
mode & MODE_DP will also work
Regards,
Suraj Kandpal
>
> Thanks for a review!
>
> -Mika-
>
> >
> > > + intel_hdmi_is_frl(port_clock))
> > > val |= XELPDP_DDI_CLOCK_SELECT_PREP(display,
> XELPDP_DDI_CLOCK_SELECT_DIV18CLK);
> > > else
> > > val |= XELPDP_DDI_CLOCK_SELECT_PREP(display,
> > > XELPDP_DDI_CLOCK_SELECT_MAXPCLK);
> > >
> > > /* DP2.0 10G and 20G rates enable MPLLA*/
> > > - if (crtc_state->port_clock == 1000000 || crtc_state->port_clock ==
> 2000000)
> > > + if (port_clock == 1000000 || port_clock == 2000000)
> > > val |= XELPDP_SSC_ENABLE_PLLA;
> > > else
> > > - val |= crtc_state->dpll_hw_state.ltpll.ssc_enabled ?
> XELPDP_SSC_ENABLE_PLLB : 0;
> > > + val |= ltpll->ssc_enabled ? XELPDP_SSC_ENABLE_PLLB : 0;
> > >
> > > intel_de_rmw(display, XELPDP_PORT_CLOCK_CTL(display, encoder-
> >port),
> > > XELPDP_LANE1_PHY_CLOCK_SELECT |
> XELPDP_FORWARD_CLOCK_UNGATE
> > > | @@ -1248,10 +1249,12 @@ static u32 intel_lt_phy_get_dp_clock(u8
> > > rate)
> > >
> > > static bool
> > > intel_lt_phy_config_changed(struct intel_encoder *encoder,
> > > - const struct intel_crtc_state *crtc_state)
> > > + const struct intel_lt_phy_pll_state *ltpll)
> > > {
> > > + struct intel_display *display = to_intel_display(encoder);
> > > u8 val, rate;
> > > u32 clock;
> > > + u32 port_clock = intel_lt_phy_calc_port_clock(display, ltpll);
> > >
> > > val = intel_lt_phy_read(encoder, INTEL_LT_PHY_LANE0,
> > > LT_PHY_VDR_0_CONFIG);
> > > @@ -1262,9 +1265,10 @@ intel_lt_phy_config_changed(struct
> intel_encoder *encoder,
> > > * using 1.62 Gbps clock since PHY PLL defaults to that
> > > * otherwise we always need to reconfigure it.
> > > */
> > > - if (intel_crtc_has_dp_encoder(crtc_state)) {
> > > + if (encoder->type == INTEL_OUTPUT_DP ||
> > > + encoder->type == INTEL_OUTPUT_EDP) {
> >
> > Same as above, encoder->type can't be used here.
> >
> > > clock = intel_lt_phy_get_dp_clock(rate);
> > > - if (crtc_state->port_clock == 1620000 && crtc_state-
> >port_clock == clock)
> > > + if (port_clock == 1620000 && port_clock == clock)
> > > return false;
> > > }
> > >
> > > @@ -1759,41 +1763,41 @@ intel_lt_phy_pll_calc_state(struct
> > > intel_crtc_state *crtc_state,
> > >
> > > static void
> > > intel_lt_phy_program_pll(struct intel_encoder *encoder,
> > > - const struct intel_crtc_state *crtc_state)
> > > + const struct intel_lt_phy_pll_state *ltpll)
> > > {
> > > u8 owned_lane_mask =
> intel_lt_phy_get_owned_lane_mask(encoder);
> > > int i, j, k;
> > >
> > > intel_lt_phy_write(encoder, owned_lane_mask,
> LT_PHY_VDR_0_CONFIG,
> > > - crtc_state->dpll_hw_state.ltpll.config[0],
> MB_WRITE_COMMITTED);
> > > + ltpll->config[0], MB_WRITE_COMMITTED);
> > > intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0,
> LT_PHY_VDR_1_CONFIG,
> > > - crtc_state->dpll_hw_state.ltpll.config[1],
> MB_WRITE_COMMITTED);
> > > + ltpll->config[1], MB_WRITE_COMMITTED);
> > > intel_lt_phy_write(encoder, owned_lane_mask,
> LT_PHY_VDR_2_CONFIG,
> > > - crtc_state->dpll_hw_state.ltpll.config[2],
> MB_WRITE_COMMITTED);
> > > + ltpll->config[2], MB_WRITE_COMMITTED);
> > >
> > > for (i = 0; i <= 12; i++) {
> > > intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0,
> LT_PHY_VDR_X_ADDR_MSB(i),
> > > - crtc_state->dpll_hw_state.ltpll.addr_msb[i],
> > > + ltpll->addr_msb[i],
> > > MB_WRITE_COMMITTED);
> > > intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0,
> LT_PHY_VDR_X_ADDR_LSB(i),
> > > - crtc_state->dpll_hw_state.ltpll.addr_lsb[i],
> > > + ltpll->addr_lsb[i],
> > > MB_WRITE_COMMITTED);
> > >
> > > for (j = 3, k = 0; j >= 0; j--, k++)
> > > intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0,
> > > LT_PHY_VDR_X_DATAY(i, j),
> > > - crtc_state-
> >dpll_hw_state.ltpll.data[i][k],
> > > + ltpll->data[i][k],
> > > MB_WRITE_COMMITTED);
> > > }
> > > }
> > >
> > > static void
> > > intel_lt_phy_enable_disable_tx(struct intel_encoder *encoder,
> > > - const struct intel_crtc_state *crtc_state)
> > > + const struct intel_lt_phy_pll_state *ltpll,
> > > + u8 lane_count)
> > > {
> > > struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
> > > bool lane_reversal = dig_port->lane_reversal;
> > > - u8 lane_count = crtc_state->lane_count;
> > > bool is_dp_alt =
> > > intel_tc_port_in_dp_alt_mode(dig_port);
> > > enum intel_tc_pin_assignment tc_pin = @@ -1895,7 +1899,8 @@
> void
> > > intel_lt_phy_pll_enable(struct intel_encoder *encoder,
> > > intel_lt_phy_lane_reset(encoder, crtc_state->lane_count);
> > >
> > > /* 2. Program PORT_CLOCK_CTL register to configure clock muxes,
> gating, and SSC. */
> > > - intel_lt_phy_program_port_clock_ctl(encoder, crtc_state,
> lane_reversal);
> > > + intel_lt_phy_program_port_clock_ctl(encoder, &crtc_state-
> >dpll_hw_state.ltpll,
> > > + crtc_state->port_clock,
> lane_reversal);
> > >
> > > /* 3. Change owned PHY lanes power to Ready state. */
> > > intel_lt_phy_powerdown_change_sequence(encoder,
> owned_lane_mask,
> > > @@
> > > -1905,12 +1910,12 @@ void intel_lt_phy_pll_enable(struct intel_encoder
> *encoder,
> > > * 4. Read the PHY message bus VDR register PHY_VDR_0_Config
> check enabled PLL type,
> > > * encoded rate and encoded mode.
> > > */
> > > - if (intel_lt_phy_config_changed(encoder, crtc_state)) {
> > > + if (intel_lt_phy_config_changed(encoder,
> > > +&crtc_state->dpll_hw_state.ltpll)) {
> > > /*
> > > * 5. Program the PHY internal PLL registers over PHY
> message bus for the desired
> > > * frequency and protocol type
> > > */
> > > - intel_lt_phy_program_pll(encoder, crtc_state);
> > > + intel_lt_phy_program_pll(encoder,
> > > +&crtc_state->dpll_hw_state.ltpll);
> > >
> > > /* 6. Use the P2P transaction flow */
> > > /*
> > > @@ -2001,7 +2006,8 @@ void intel_lt_phy_pll_enable(struct
> intel_encoder *encoder,
> > > intel_lt_phy_powerdown_change_sequence(encoder,
> owned_lane_mask,
> > > XELPDP_P0_STATE_ACTIVE);
> > >
> > > - intel_lt_phy_enable_disable_tx(encoder, crtc_state);
> > > + intel_lt_phy_enable_disable_tx(encoder, &crtc_state-
> >dpll_hw_state.ltpll,
> > > + crtc_state->lane_count);
> > > intel_lt_phy_transaction_end(encoder, wakeref); }
> > >
> > > --
> > > 2.43.0
> > >
^ permalink raw reply [flat|nested] 62+ messages in thread
* RE: [PATCH v2 05/24] drm/i915/lt_phy: Add lane_count to PLL state
2026-03-04 13:14 ` [PATCH v2 05/24] drm/i915/lt_phy: Add lane_count to " Mika Kahola
@ 2026-03-10 4:05 ` Kandpal, Suraj
0 siblings, 0 replies; 62+ messages in thread
From: Kandpal, Suraj @ 2026-03-10 4:05 UTC (permalink / raw)
To: Kahola, Mika, intel-gfx@lists.freedesktop.org,
intel-xe@lists.freedesktop.org
Cc: Kahola, Mika
> Subject: [PATCH v2 05/24] drm/i915/lt_phy: Add lane_count to PLL state
>
> Cache lane count as part of PLL state.
>
> Signed-off-by: Mika Kahola <mika.kahola@intel.com>
LGTM,
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_dpll_mgr.h | 1 +
> drivers/gpu/drm/i915/display/intel_lt_phy.c | 9 +++++----
> 2 files changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.h
> b/drivers/gpu/drm/i915/display/intel_dpll_mgr.h
> index 4cc14ce5eebe..d408ccf6f902 100644
> --- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.h
> +++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.h
> @@ -278,6 +278,7 @@ struct intel_lt_phy_pll_state {
> u8 config[3];
> bool ssc_enabled;
> bool tbt_mode;
> + int lane_count;
> };
>
> struct intel_dpll_hw_state {
> diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> index ebdcab58df4a..07eab4d7bcff 100644
> --- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> @@ -1749,11 +1749,13 @@ intel_lt_phy_pll_calc_state(struct
> intel_crtc_state *crtc_state,
> }
> crtc_state->dpll_hw_state.ltpll.ssc_enabled =
> intel_lt_phy_pll_is_ssc_enabled(crtc_state,
> encoder);
> + crtc_state->dpll_hw_state.ltpll.lane_count =
> crtc_state->lane_count;
> return 0;
> }
> }
>
> if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) {
> + crtc_state->dpll_hw_state.ltpll.lane_count = crtc_state-
> >lane_count;
> return intel_lt_phy_calculate_hdmi_state(&crtc_state-
> >dpll_hw_state.ltpll,
> crtc_state-
> >port_clock);
> }
> @@ -1793,11 +1795,11 @@ intel_lt_phy_program_pll(struct intel_encoder
> *encoder,
>
> static void
> intel_lt_phy_enable_disable_tx(struct intel_encoder *encoder,
> - const struct intel_lt_phy_pll_state *ltpll,
> - u8 lane_count)
> + const struct intel_lt_phy_pll_state *ltpll)
> {
> struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
> bool lane_reversal = dig_port->lane_reversal;
> + u8 lane_count = ltpll->lane_count;
> bool is_dp_alt =
> intel_tc_port_in_dp_alt_mode(dig_port);
> enum intel_tc_pin_assignment tc_pin =
> @@ -2006,8 +2008,7 @@ void intel_lt_phy_pll_enable(struct intel_encoder
> *encoder,
> intel_lt_phy_powerdown_change_sequence(encoder,
> owned_lane_mask,
> XELPDP_P0_STATE_ACTIVE);
>
> - intel_lt_phy_enable_disable_tx(encoder, &crtc_state-
> >dpll_hw_state.ltpll,
> - crtc_state->lane_count);
> + intel_lt_phy_enable_disable_tx(encoder,
> +&crtc_state->dpll_hw_state.ltpll);
> intel_lt_phy_transaction_end(encoder, wakeref); }
>
> --
> 2.43.0
^ permalink raw reply [flat|nested] 62+ messages in thread
* RE: [PATCH v2 06/24] drm/i915/lt_phy: Add xe3plpd .compute_dplls hook
2026-03-04 13:14 ` [PATCH v2 06/24] drm/i915/lt_phy: Add xe3plpd .compute_dplls hook Mika Kahola
@ 2026-03-10 5:02 ` Kandpal, Suraj
0 siblings, 0 replies; 62+ messages in thread
From: Kandpal, Suraj @ 2026-03-10 5:02 UTC (permalink / raw)
To: Kahola, Mika, intel-gfx@lists.freedesktop.org,
intel-xe@lists.freedesktop.org
Cc: Kahola, Mika
> Subject: [PATCH v2 06/24] drm/i915/lt_phy: Add xe3plpd .compute_dplls hook
>
> Add compute dpll hook for xe3plpd platform and bring PLL state calculation to
> support PLL framework.
>
> Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_dpll.c | 2 +-
> drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 65 +++++++++++++++++++
> drivers/gpu/drm/i915/display/intel_lt_phy.c | 17 +++--
> drivers/gpu/drm/i915/display/intel_lt_phy.h | 3 +-
> 4 files changed, 78 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dpll.c
> b/drivers/gpu/drm/i915/display/intel_dpll.c
> index 8433e3ff0319..147baa777856 100644
> --- a/drivers/gpu/drm/i915/display/intel_dpll.c
> +++ b/drivers/gpu/drm/i915/display/intel_dpll.c
> @@ -1222,7 +1222,7 @@ static int xe3plpd_crtc_compute_clock(struct
> intel_atomic_state *state,
> struct intel_display *display = to_intel_display(encoder);
> int ret;
>
> - ret = intel_lt_phy_pll_calc_state(crtc_state, encoder);
> + ret = intel_lt_phy_pll_calc_state(crtc_state, encoder,
> +&crtc_state->dpll_hw_state);
> if (ret)
> return ret;
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> index 4185c8e136da..58c24e2164ca 100644
> --- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> +++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> @@ -4585,9 +4585,74 @@ static const struct dpll_info xe3plpd_plls[] = {
> {}
> };
>
> +static int xe3plpd_compute_non_tc_phy_dpll(struct intel_atomic_state
> *state,
> + struct intel_crtc *crtc,
> + struct intel_encoder *encoder)
> +{
> + struct intel_display *display = to_intel_display(encoder);
> + struct intel_crtc_state *crtc_state =
> + intel_atomic_get_new_crtc_state(state, crtc);
> + struct icl_port_dpll *port_dpll =
> + &crtc_state->icl_port_dplls[ICL_PORT_DPLL_DEFAULT];
> + int ret;
> +
> + ret = intel_lt_phy_pll_calc_state(crtc_state, encoder, &port_dpll-
> >hw_state);
> + if (ret)
> + return ret;
> +
> + /* this is mainly for the fastset check */
> + icl_set_active_port_dpll(crtc_state, ICL_PORT_DPLL_DEFAULT);
> +
> + crtc_state->port_clock = intel_lt_phy_calc_port_clock(display,
> +&port_dpll->hw_state.ltpll);
> +
> + return 0;
> +}
> +
> +static int xe3plpd_compute_tc_phy_dplls(struct intel_atomic_state *state,
> + struct intel_crtc *crtc,
> + struct intel_encoder *encoder)
> +{
> + struct intel_display *display = to_intel_display(encoder);
> + struct intel_crtc_state *crtc_state =
> + intel_atomic_get_new_crtc_state(state, crtc);
> + const struct intel_crtc_state *old_crtc_state =
> + intel_atomic_get_old_crtc_state(state, crtc);
> + struct icl_port_dpll *port_dpll;
> + int ret;
> +
> + /* TODO: Add state calculation for TBT PLL */
> +
> + port_dpll = &crtc_state->icl_port_dplls[ICL_PORT_DPLL_MG_PHY];
> + ret = intel_lt_phy_pll_calc_state(crtc_state, encoder, &port_dpll-
> >hw_state);
> + if (ret)
> + return ret;
> +
> + /* this is mainly for the fastset check */
> + if (old_crtc_state->intel_dpll &&
> + old_crtc_state->intel_dpll->info->id == DPLL_ID_ICL_TBTPLL)
> + icl_set_active_port_dpll(crtc_state,
> ICL_PORT_DPLL_DEFAULT);
> + else
> + icl_set_active_port_dpll(crtc_state,
> ICL_PORT_DPLL_MG_PHY);
> +
> + crtc_state->port_clock = intel_lt_phy_calc_port_clock(display,
> +&port_dpll->hw_state.ltpll);
> +
> + return 0;
> +}
> +
> +static int xe3plpd_compute_dplls(struct intel_atomic_state *state,
> + struct intel_crtc *crtc,
> + struct intel_encoder *encoder)
> +{
> + if (intel_encoder_is_tc(encoder))
> + return xe3plpd_compute_tc_phy_dplls(state, crtc, encoder);
> + else
> + return xe3plpd_compute_non_tc_phy_dpll(state, crtc,
> encoder); }
> +
> __maybe_unused
> static const struct intel_dpll_mgr xe3plpd_pll_mgr = {
> .dpll_info = xe3plpd_plls,
> + .compute_dplls = xe3plpd_compute_dplls,
> };
>
> /**
> diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> index 07eab4d7bcff..ca31b3c1440c 100644
> --- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> @@ -1727,12 +1727,15 @@ intel_lt_phy_calc_port_clock(struct intel_display
> *display,
>
> int
> intel_lt_phy_pll_calc_state(struct intel_crtc_state *crtc_state,
> - struct intel_encoder *encoder)
> + struct intel_encoder *encoder,
> + struct intel_dpll_hw_state *hw_state)
I would rather this be named dpll_state
But I do see everywhere else it is name hw_state so I am okay either way
LGTM
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
> {
> struct intel_display *display = to_intel_display(crtc_state);
> const struct intel_lt_phy_pll_params *tables;
> int i;
>
> + memset(hw_state, 0, sizeof(*hw_state));
> +
> tables = intel_lt_phy_pll_tables_get(crtc_state, encoder);
> if (!tables)
> return -EINVAL;
> @@ -1742,21 +1745,21 @@ intel_lt_phy_pll_calc_state(struct
> intel_crtc_state *crtc_state,
>
> drm_WARN_ON(display->drm,
> !intel_dpll_clock_matches(clock, tables[i].clock_rate));
> if (intel_dpll_clock_matches(crtc_state->port_clock, clock)) {
> - crtc_state->dpll_hw_state.ltpll = *tables[i].state;
> + hw_state->ltpll = *tables[i].state;
> if (intel_crtc_has_dp_encoder(crtc_state)) {
> if (intel_crtc_has_type(crtc_state,
> INTEL_OUTPUT_EDP))
> - crtc_state-
> >dpll_hw_state.ltpll.config[2] = 1;
> + hw_state->ltpll.config[2] = 1;
> }
> - crtc_state->dpll_hw_state.ltpll.ssc_enabled =
> + hw_state->ltpll.ssc_enabled =
> intel_lt_phy_pll_is_ssc_enabled(crtc_state,
> encoder);
> - crtc_state->dpll_hw_state.ltpll.lane_count =
> crtc_state->lane_count;
> + hw_state->ltpll.lane_count = crtc_state->lane_count;
> return 0;
> }
> }
>
> if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) {
> - crtc_state->dpll_hw_state.ltpll.lane_count = crtc_state-
> >lane_count;
> - return intel_lt_phy_calculate_hdmi_state(&crtc_state-
> >dpll_hw_state.ltpll,
> + hw_state->ltpll.lane_count = crtc_state->lane_count;
> + return intel_lt_phy_calculate_hdmi_state(&hw_state->ltpll,
> crtc_state-
> >port_clock);
> }
>
> diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.h
> b/drivers/gpu/drm/i915/display/intel_lt_phy.h
> index db905668f86d..61ec0e5d8888 100644
> --- a/drivers/gpu/drm/i915/display/intel_lt_phy.h
> +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.h
> @@ -20,7 +20,8 @@ void intel_lt_phy_pll_enable(struct intel_encoder
> *encoder, void intel_lt_phy_pll_disable(struct intel_encoder *encoder); int
> intel_lt_phy_pll_calc_state(struct intel_crtc_state *crtc_state,
> - struct intel_encoder *encoder);
> + struct intel_encoder *encoder,
> + struct intel_dpll_hw_state *hw_state);
> int intel_lt_phy_calc_port_clock(struct intel_display *display,
> const struct intel_lt_phy_pll_state *lt_state);
> void intel_lt_phy_set_signal_levels(struct intel_encoder *encoder,
> --
> 2.43.0
^ permalink raw reply [flat|nested] 62+ messages in thread
* RE: [PATCH v2 11/24] drm/i915/lt_phy: Add xe3plpd .dump_hw_state hook
2026-03-04 13:14 ` [PATCH v2 11/24] drm/i915/lt_phy: Add xe3plpd .dump_hw_state hook Mika Kahola
@ 2026-03-10 6:19 ` Kandpal, Suraj
2026-03-10 6:32 ` Kandpal, Suraj
0 siblings, 1 reply; 62+ messages in thread
From: Kandpal, Suraj @ 2026-03-10 6:19 UTC (permalink / raw)
To: Kahola, Mika, intel-gfx@lists.freedesktop.org,
intel-xe@lists.freedesktop.org
Cc: Kahola, Mika
> Subject: [PATCH v2 11/24] drm/i915/lt_phy: Add xe3plpd .dump_hw_state
> hook
>
> Add .dump_hw_state function pointer for xe3plpd platform to support dpll
> framework. While at it, switch to use drm_printer structure to print hw state
> information.
>
> Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_display.c | 5 ++---
> drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 7 +++++++
> drivers/gpu/drm/i915/display/intel_lt_phy.c | 16 ++++++++--------
> drivers/gpu/drm/i915/display/intel_lt_phy.h | 3 ++-
> 4 files changed, 19 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c
> b/drivers/gpu/drm/i915/display/intel_display.c
> index 27354585ba92..d67ec81c0b01 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -5065,15 +5065,14 @@ pipe_config_lt_phy_pll_mismatch(struct
> drm_printer *p, bool fastset,
> const struct intel_lt_phy_pll_state *a,
> const struct intel_lt_phy_pll_state *b) {
> - struct intel_display *display = to_intel_display(crtc);
> char *chipname = "LTPHY";
>
> pipe_config_mismatch(p, fastset, crtc, name, chipname);
>
> drm_printf(p, "expected:\n");
> - intel_lt_phy_dump_hw_state(display, a);
> + intel_lt_phy_dump_hw_state(p, a);
> drm_printf(p, "found:\n");
> - intel_lt_phy_dump_hw_state(display, b);
> + intel_lt_phy_dump_hw_state(p, b);
> }
>
> bool
> diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> index b50f02303356..26b78063dd94 100644
> --- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> +++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> @@ -4649,6 +4649,12 @@ static int xe3plpd_compute_dplls(struct
> intel_atomic_state *state,
> return xe3plpd_compute_non_tc_phy_dpll(state, crtc,
> encoder); }
>
> +static void xe3plpd_dump_hw_state(struct drm_printer *p,
> + const struct intel_dpll_hw_state
> *dpll_hw_state) {
> + intel_lt_phy_dump_hw_state(p, &dpll_hw_state->ltpll); }
> +
> __maybe_unused
> static const struct intel_dpll_mgr xe3plpd_pll_mgr = {
> .dpll_info = xe3plpd_plls,
> @@ -4657,6 +4663,7 @@ static const struct intel_dpll_mgr xe3plpd_pll_mgr = {
> .put_dplls = icl_put_dplls,
> .update_active_dpll = icl_update_active_dpll,
> .update_ref_clks = icl_update_dpll_ref_clks,
> + .dump_hw_state = xe3plpd_dump_hw_state,
> };
>
> /**
> diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> index ca31b3c1440c..923ee132ec3c 100644
> --- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> @@ -2146,23 +2146,23 @@ void intel_lt_phy_set_signal_levels(struct
> intel_encoder *encoder,
> intel_lt_phy_transaction_end(encoder, wakeref); }
>
> -void intel_lt_phy_dump_hw_state(struct intel_display *display,
> +void intel_lt_phy_dump_hw_state(struct drm_printer *p,
> const struct intel_lt_phy_pll_state *hw_state)
> {
> int i, j;
>
> - drm_dbg_kms(display->drm, "lt_phy_pll_hw_state: ssc enabled: %d,
> tbt mode: %d\n",
> - hw_state->ssc_enabled, hw_state->tbt_mode);
> + drm_printf(p, "lt_phy_pll_hw_state: ssc enabled: %d, tbt mode: %d\n",
> + hw_state->ssc_enabled, hw_state->tbt_mode);
Maybe not something for this patch to fix but a separate patch adding debug print for
Lane_count since we cache it now
Otherwise,
LGTM,
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
>
> for (i = 0; i < 3; i++) {
> - drm_dbg_kms(display->drm, "config[%d] = 0x%.4x,\n",
> - i, hw_state->config[i]);
> + drm_printf(p, "config[%d] = 0x%.4x,\n",
> + i, hw_state->config[i]);
> }
>
> for (i = 0; i <= 12; i++)
> for (j = 3; j >= 0; j--)
> - drm_dbg_kms(display->drm, "vdr_data[%d][%d] =
> 0x%.4x,\n",
> - i, j, hw_state->data[i][j]);
> + drm_printf(p, "vdr_data[%d][%d] = 0x%.4x,\n",
> + i, j, hw_state->data[i][j]);
> }
>
> bool
> @@ -2330,7 +2330,7 @@ static void intel_lt_phy_pll_verify_clock(struct
> intel_display *display,
> drm_printf(&p, "PLL state %s (%s):\n",
> pll_state_name,
> is_precomputed_state ? "precomputed" : "computed");
> - intel_lt_phy_dump_hw_state(display, pll_state);
> + intel_lt_phy_dump_hw_state(&p, pll_state);
> }
>
> static void intel_lt_phy_pll_verify_params(struct intel_display *display, diff --git
> a/drivers/gpu/drm/i915/display/intel_lt_phy.h
> b/drivers/gpu/drm/i915/display/intel_lt_phy.h
> index 61ec0e5d8888..b208bbd6f8ca 100644
> --- a/drivers/gpu/drm/i915/display/intel_lt_phy.h
> +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.h
> @@ -8,6 +8,7 @@
>
> #include <linux/types.h>
>
> +struct drm_printer;
> struct intel_atomic_state;
> struct intel_display;
> struct intel_encoder;
> @@ -26,7 +27,7 @@ int intel_lt_phy_calc_port_clock(struct intel_display
> *display,
> const struct intel_lt_phy_pll_state *lt_state);
> void intel_lt_phy_set_signal_levels(struct intel_encoder *encoder,
> const struct intel_crtc_state *crtc_state); -
> void intel_lt_phy_dump_hw_state(struct intel_display *display,
> +void intel_lt_phy_dump_hw_state(struct drm_printer *p,
> const struct intel_lt_phy_pll_state *hw_state);
> bool intel_lt_phy_pll_compare_hw_state(const struct intel_lt_phy_pll_state *a,
> --
> 2.43.0
^ permalink raw reply [flat|nested] 62+ messages in thread
* RE: [PATCH v2 12/24] drm/i915/lt_phy: Add xe3plpd .compare_hw_state hook
2026-03-04 13:14 ` [PATCH v2 12/24] drm/i915/lt_phy: Add xe3plpd .compare_hw_state hook Mika Kahola
@ 2026-03-10 6:23 ` Kandpal, Suraj
0 siblings, 0 replies; 62+ messages in thread
From: Kandpal, Suraj @ 2026-03-10 6:23 UTC (permalink / raw)
To: Kahola, Mika, intel-gfx@lists.freedesktop.org,
intel-xe@lists.freedesktop.org
Cc: Kahola, Mika
> Subject: [PATCH v2 12/24] drm/i915/lt_phy: Add xe3plpd .compare_hw_state
> hook
>
> Add .compare_hw_state function pointer for xe3plpd platform to support dpll
> framework.
>
> Signed-off-by: Mika Kahola <mika.kahola@intel.com>
LGTM,
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> index 26b78063dd94..c1d7d9909544 100644
> --- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> +++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> @@ -4655,6 +4655,15 @@ static void xe3plpd_dump_hw_state(struct
> drm_printer *p,
> intel_lt_phy_dump_hw_state(p, &dpll_hw_state->ltpll); }
>
> +static bool xe3plpd_compare_hw_state(const struct intel_dpll_hw_state *_a,
> + const struct intel_dpll_hw_state *_b) {
> + const struct intel_lt_phy_pll_state *a = &_a->ltpll;
> + const struct intel_lt_phy_pll_state *b = &_b->ltpll;
> +
> + return intel_lt_phy_pll_compare_hw_state(a, b); }
> +
> __maybe_unused
> static const struct intel_dpll_mgr xe3plpd_pll_mgr = {
> .dpll_info = xe3plpd_plls,
> @@ -4664,6 +4673,7 @@ static const struct intel_dpll_mgr xe3plpd_pll_mgr
> = {
> .update_active_dpll = icl_update_active_dpll,
> .update_ref_clks = icl_update_dpll_ref_clks,
> .dump_hw_state = xe3plpd_dump_hw_state,
> + .compare_hw_state = xe3plpd_compare_hw_state,
> };
>
> /**
> --
> 2.43.0
^ permalink raw reply [flat|nested] 62+ messages in thread
* RE: [PATCH v2 11/24] drm/i915/lt_phy: Add xe3plpd .dump_hw_state hook
2026-03-10 6:19 ` Kandpal, Suraj
@ 2026-03-10 6:32 ` Kandpal, Suraj
0 siblings, 0 replies; 62+ messages in thread
From: Kandpal, Suraj @ 2026-03-10 6:32 UTC (permalink / raw)
To: Kandpal, Suraj, Kahola, Mika, intel-gfx@lists.freedesktop.org,
intel-xe@lists.freedesktop.org
Cc: Kahola, Mika
> Subject: RE: [PATCH v2 11/24] drm/i915/lt_phy: Add xe3plpd .dump_hw_state
> hook
>
> > Subject: [PATCH v2 11/24] drm/i915/lt_phy: Add xe3plpd .dump_hw_state
> > hook
> >
> > Add .dump_hw_state function pointer for xe3plpd platform to support
> > dpll framework. While at it, switch to use drm_printer structure to
> > print hw state information.
> >
Ahh ohkay so you do the change here,
Maybe move the patch right after the patch where you introduce drm_printer
Otherwise,
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
> > Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> > ---
> > drivers/gpu/drm/i915/display/intel_display.c | 5 ++---
> > drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 7 +++++++
> > drivers/gpu/drm/i915/display/intel_lt_phy.c | 16 ++++++++--------
> > drivers/gpu/drm/i915/display/intel_lt_phy.h | 3 ++-
> > 4 files changed, 19 insertions(+), 12 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_display.c
> > b/drivers/gpu/drm/i915/display/intel_display.c
> > index 27354585ba92..d67ec81c0b01 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display.c
> > +++ b/drivers/gpu/drm/i915/display/intel_display.c
> > @@ -5065,15 +5065,14 @@ pipe_config_lt_phy_pll_mismatch(struct
> > drm_printer *p, bool fastset,
> > const struct intel_lt_phy_pll_state *a,
> > const struct intel_lt_phy_pll_state *b) {
> > - struct intel_display *display = to_intel_display(crtc);
> > char *chipname = "LTPHY";
> >
> > pipe_config_mismatch(p, fastset, crtc, name, chipname);
> >
> > drm_printf(p, "expected:\n");
> > - intel_lt_phy_dump_hw_state(display, a);
> > + intel_lt_phy_dump_hw_state(p, a);
> > drm_printf(p, "found:\n");
> > - intel_lt_phy_dump_hw_state(display, b);
> > + intel_lt_phy_dump_hw_state(p, b);
> > }
> >
> > bool
> > diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> > b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> > index b50f02303356..26b78063dd94 100644
> > --- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> > +++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> > @@ -4649,6 +4649,12 @@ static int xe3plpd_compute_dplls(struct
> > intel_atomic_state *state,
> > return xe3plpd_compute_non_tc_phy_dpll(state, crtc,
> encoder); }
> >
> > +static void xe3plpd_dump_hw_state(struct drm_printer *p,
> > + const struct intel_dpll_hw_state
> > *dpll_hw_state) {
> > + intel_lt_phy_dump_hw_state(p, &dpll_hw_state->ltpll); }
> > +
> > __maybe_unused
> > static const struct intel_dpll_mgr xe3plpd_pll_mgr = {
> > .dpll_info = xe3plpd_plls,
> > @@ -4657,6 +4663,7 @@ static const struct intel_dpll_mgr
> xe3plpd_pll_mgr = {
> > .put_dplls = icl_put_dplls,
> > .update_active_dpll = icl_update_active_dpll,
> > .update_ref_clks = icl_update_dpll_ref_clks,
> > + .dump_hw_state = xe3plpd_dump_hw_state,
> > };
> >
> > /**
> > diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > index ca31b3c1440c..923ee132ec3c 100644
> > --- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > @@ -2146,23 +2146,23 @@ void intel_lt_phy_set_signal_levels(struct
> > intel_encoder *encoder,
> > intel_lt_phy_transaction_end(encoder, wakeref); }
> >
> > -void intel_lt_phy_dump_hw_state(struct intel_display *display,
> > +void intel_lt_phy_dump_hw_state(struct drm_printer *p,
> > const struct intel_lt_phy_pll_state *hw_state)
> {
> > int i, j;
> >
> > - drm_dbg_kms(display->drm, "lt_phy_pll_hw_state: ssc enabled: %d,
> > tbt mode: %d\n",
> > - hw_state->ssc_enabled, hw_state->tbt_mode);
> > + drm_printf(p, "lt_phy_pll_hw_state: ssc enabled: %d, tbt mode:
> %d\n",
> > + hw_state->ssc_enabled, hw_state->tbt_mode);
>
> Maybe not something for this patch to fix but a separate patch adding debug
> print for Lane_count since we cache it now
>
> Otherwise,
> LGTM,
> Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
>
> >
> > for (i = 0; i < 3; i++) {
> > - drm_dbg_kms(display->drm, "config[%d] = 0x%.4x,\n",
> > - i, hw_state->config[i]);
> > + drm_printf(p, "config[%d] = 0x%.4x,\n",
> > + i, hw_state->config[i]);
> > }
> >
> > for (i = 0; i <= 12; i++)
> > for (j = 3; j >= 0; j--)
> > - drm_dbg_kms(display->drm, "vdr_data[%d][%d] =
> > 0x%.4x,\n",
> > - i, j, hw_state->data[i][j]);
> > + drm_printf(p, "vdr_data[%d][%d] = 0x%.4x,\n",
> > + i, j, hw_state->data[i][j]);
> > }
> >
> > bool
> > @@ -2330,7 +2330,7 @@ static void intel_lt_phy_pll_verify_clock(struct
> > intel_display *display,
> > drm_printf(&p, "PLL state %s (%s):\n",
> > pll_state_name,
> > is_precomputed_state ? "precomputed" : "computed");
> > - intel_lt_phy_dump_hw_state(display, pll_state);
> > + intel_lt_phy_dump_hw_state(&p, pll_state);
> > }
> >
> > static void intel_lt_phy_pll_verify_params(struct intel_display
> > *display, diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.h
> > b/drivers/gpu/drm/i915/display/intel_lt_phy.h
> > index 61ec0e5d8888..b208bbd6f8ca 100644
> > --- a/drivers/gpu/drm/i915/display/intel_lt_phy.h
> > +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.h
> > @@ -8,6 +8,7 @@
> >
> > #include <linux/types.h>
> >
> > +struct drm_printer;
> > struct intel_atomic_state;
> > struct intel_display;
> > struct intel_encoder;
> > @@ -26,7 +27,7 @@ int intel_lt_phy_calc_port_clock(struct
> > intel_display *display,
> > const struct intel_lt_phy_pll_state *lt_state);
> void
> > intel_lt_phy_set_signal_levels(struct intel_encoder *encoder,
> > const struct intel_crtc_state *crtc_state); -
> void
> > intel_lt_phy_dump_hw_state(struct intel_display *display,
> > +void intel_lt_phy_dump_hw_state(struct drm_printer *p,
> > const struct intel_lt_phy_pll_state
> *hw_state); bool
> > intel_lt_phy_pll_compare_hw_state(const struct intel_lt_phy_pll_state
> > *a,
> > --
> > 2.43.0
^ permalink raw reply [flat|nested] 62+ messages in thread
* RE: [PATCH v2 04/24] drm/i915/lt_phy: Refactor LT PHY PLL handling to use explicit PLL state
2026-03-10 4:02 ` Kandpal, Suraj
@ 2026-03-10 7:36 ` Kahola, Mika
2026-03-10 8:33 ` Kandpal, Suraj
0 siblings, 1 reply; 62+ messages in thread
From: Kahola, Mika @ 2026-03-10 7:36 UTC (permalink / raw)
To: Kandpal, Suraj, Deak, Imre
Cc: intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org
> -----Original Message-----
> From: Kandpal, Suraj <suraj.kandpal@intel.com>
> Sent: Tuesday, 10 March 2026 6.03
> To: Kahola, Mika <mika.kahola@intel.com>; Deak, Imre <imre.deak@intel.com>
> Cc: intel-gfx@lists.freedesktop.org; intel-xe@lists.freedesktop.org
> Subject: RE: [PATCH v2 04/24] drm/i915/lt_phy: Refactor LT PHY PLL handling to use explicit PLL state
>
> > Subject: RE: [PATCH v2 04/24] drm/i915/lt_phy: Refactor LT PHY PLL
> > handling to use explicit PLL state
> >
> > > -----Original Message-----
> > > From: Deak, Imre <imre.deak@intel.com>
> > > Sent: Wednesday, 4 March 2026 16.05
> > > To: Kahola, Mika <mika.kahola@intel.com>
> > > Cc: intel-gfx@lists.freedesktop.org; intel-xe@lists.freedesktop.org
> > > Subject: Re: [PATCH v2 04/24] drm/i915/lt_phy: Refactor LT PHY PLL
> > > handling to use explicit PLL state
> > >
> > > On Wed, Mar 04, 2026 at 01:14:03PM +0000, Mika Kahola wrote:
> > > > The LT PHY implementation currently pulls PLL and port_clock
> > > > information directly from the CRTC state. This ties the PHY
> > > > programming logic too tightly to the CRTC state and makes it
> > > > harder to clearly express the PHY’s own PLL configuration.
> > > >
> > > > Introduce an explicit "struct intel_lt_phy_pll_state" argument for
> > > > the PHY functions and update callers accordingly.
> > > >
> > > > No functional change is intended — this is a preparatory cleanup
> > > > for to bring LT PHY PLL handling as part of PLL framework.
> > > >
> > > > Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> > > > ---
> > > > drivers/gpu/drm/i915/display/intel_lt_phy.c | 48
> > > > ++++++++++++---------
> > > > 1 file changed, 27 insertions(+), 21 deletions(-)
> > > >
> > > > diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > > > b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > > > index 8fe61cfdb706..ebdcab58df4a 100644
> > > > --- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > > > +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > > > @@ -1178,7 +1178,8 @@ intel_lt_phy_lane_reset(struct intel_encoder
> > > > *encoder,
> > > >
> > > > static void
> > > > intel_lt_phy_program_port_clock_ctl(struct intel_encoder *encoder,
> > > > - const struct intel_crtc_state *crtc_state,
> > > > + const struct intel_lt_phy_pll_state *ltpll,
> > > > + int port_clock,
> > > > bool lane_reversal)
> > > > {
> > > > struct intel_display *display = to_intel_display(encoder); @@
> > > > -1195,17 +1196,17 @@ intel_lt_phy_program_port_clock_ctl(struct
> > intel_encoder *encoder,
> > > > * but since the register bits still remain the same we use
> > > > * the same definition
> > > > */
> > > > - if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI) &&
> > > > - intel_hdmi_is_frl(crtc_state->port_clock))
> > > > + if (encoder->type == INTEL_OUTPUT_HDMI &&
> > >
> > > This was discussed already elsewhere: encoder->type can't be used to
> > > determine if the encoder is in HDMI or DP mode. In fact on LT PHY
> > > platforms encoder->type will be never INTEL_OUTPUT_HDMI, rather it's
> > INTEL_OUTPUT_DDI, where the actual mode of the DDI encoder could be
> > either HDMI or DP.
> > >
> > > The ideal would be to deduct the DP/HDMI mode from the
> > > intel_lt_phy_pll_state instead. AFAICS ltpll->config[0] is
> > > explicitly set to
> > > 0x84 for both the computed and table-specified HDMI PLL
> > > configurations
> > and config[0] is not 0x84 for any DP PLL configurations.
> > > Could be used that instead to distinguish the HDMI and DP configs?
> >
> > Right. I keep forgetting this that "encoder->type" can be both DP and HDMI.
> > The naming to me seems a bit misleading and hence I keep forgetting this.
> > Anyway, this approach cannot be used here but I must come up with
> > better solution.
> >
> > I could switch to use config[0] to distinguish HDMI.
>
> We could also use intel_encoder_is_dp() that makes sure we skip HDMI connectors in that case.
>
> Otherwise,
> mode = REG_FIELD_GET8(LT_PHY_VDR_MODE_ENCODING_MASK, val); mode & MODE_DP will also work
I have this latter one implemented but I haven't sent this patch to mailing list yet. It seems that for VDR configuration 0 register the bits 2:0 define the mode and for HDMI we either have 0x4 for HDMI and 0x5 for HDMI FRL.
-Mika-
>
> Regards,
> Suraj Kandpal
>
> >
> > Thanks for a review!
> >
> > -Mika-
> >
> > >
> > > > + intel_hdmi_is_frl(port_clock))
> > > > val |= XELPDP_DDI_CLOCK_SELECT_PREP(display,
> > XELPDP_DDI_CLOCK_SELECT_DIV18CLK);
> > > > else
> > > > val |= XELPDP_DDI_CLOCK_SELECT_PREP(display,
> > > > XELPDP_DDI_CLOCK_SELECT_MAXPCLK);
> > > >
> > > > /* DP2.0 10G and 20G rates enable MPLLA*/
> > > > - if (crtc_state->port_clock == 1000000 || crtc_state->port_clock ==
> > 2000000)
> > > > + if (port_clock == 1000000 || port_clock == 2000000)
> > > > val |= XELPDP_SSC_ENABLE_PLLA;
> > > > else
> > > > - val |= crtc_state->dpll_hw_state.ltpll.ssc_enabled ?
> > XELPDP_SSC_ENABLE_PLLB : 0;
> > > > + val |= ltpll->ssc_enabled ? XELPDP_SSC_ENABLE_PLLB : 0;
> > > >
> > > > intel_de_rmw(display, XELPDP_PORT_CLOCK_CTL(display, encoder-
> > >port),
> > > > XELPDP_LANE1_PHY_CLOCK_SELECT |
> > XELPDP_FORWARD_CLOCK_UNGATE
> > > > | @@ -1248,10 +1249,12 @@ static u32 intel_lt_phy_get_dp_clock(u8
> > > > rate)
> > > >
> > > > static bool
> > > > intel_lt_phy_config_changed(struct intel_encoder *encoder,
> > > > - const struct intel_crtc_state *crtc_state)
> > > > + const struct intel_lt_phy_pll_state *ltpll)
> > > > {
> > > > + struct intel_display *display = to_intel_display(encoder);
> > > > u8 val, rate;
> > > > u32 clock;
> > > > + u32 port_clock = intel_lt_phy_calc_port_clock(display, ltpll);
> > > >
> > > > val = intel_lt_phy_read(encoder, INTEL_LT_PHY_LANE0,
> > > > LT_PHY_VDR_0_CONFIG);
> > > > @@ -1262,9 +1265,10 @@ intel_lt_phy_config_changed(struct
> > intel_encoder *encoder,
> > > > * using 1.62 Gbps clock since PHY PLL defaults to that
> > > > * otherwise we always need to reconfigure it.
> > > > */
> > > > - if (intel_crtc_has_dp_encoder(crtc_state)) {
> > > > + if (encoder->type == INTEL_OUTPUT_DP ||
> > > > + encoder->type == INTEL_OUTPUT_EDP) {
> > >
> > > Same as above, encoder->type can't be used here.
> > >
> > > > clock = intel_lt_phy_get_dp_clock(rate);
> > > > - if (crtc_state->port_clock == 1620000 && crtc_state-
> > >port_clock == clock)
> > > > + if (port_clock == 1620000 && port_clock == clock)
> > > > return false;
> > > > }
> > > >
> > > > @@ -1759,41 +1763,41 @@ intel_lt_phy_pll_calc_state(struct
> > > > intel_crtc_state *crtc_state,
> > > >
> > > > static void
> > > > intel_lt_phy_program_pll(struct intel_encoder *encoder,
> > > > - const struct intel_crtc_state *crtc_state)
> > > > + const struct intel_lt_phy_pll_state *ltpll)
> > > > {
> > > > u8 owned_lane_mask =
> > intel_lt_phy_get_owned_lane_mask(encoder);
> > > > int i, j, k;
> > > >
> > > > intel_lt_phy_write(encoder, owned_lane_mask,
> > LT_PHY_VDR_0_CONFIG,
> > > > - crtc_state->dpll_hw_state.ltpll.config[0],
> > MB_WRITE_COMMITTED);
> > > > + ltpll->config[0], MB_WRITE_COMMITTED);
> > > > intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0,
> > LT_PHY_VDR_1_CONFIG,
> > > > - crtc_state->dpll_hw_state.ltpll.config[1],
> > MB_WRITE_COMMITTED);
> > > > + ltpll->config[1], MB_WRITE_COMMITTED);
> > > > intel_lt_phy_write(encoder, owned_lane_mask,
> > LT_PHY_VDR_2_CONFIG,
> > > > - crtc_state->dpll_hw_state.ltpll.config[2],
> > MB_WRITE_COMMITTED);
> > > > + ltpll->config[2], MB_WRITE_COMMITTED);
> > > >
> > > > for (i = 0; i <= 12; i++) {
> > > > intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0,
> > LT_PHY_VDR_X_ADDR_MSB(i),
> > > > - crtc_state->dpll_hw_state.ltpll.addr_msb[i],
> > > > + ltpll->addr_msb[i],
> > > > MB_WRITE_COMMITTED);
> > > > intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0,
> > LT_PHY_VDR_X_ADDR_LSB(i),
> > > > - crtc_state->dpll_hw_state.ltpll.addr_lsb[i],
> > > > + ltpll->addr_lsb[i],
> > > > MB_WRITE_COMMITTED);
> > > >
> > > > for (j = 3, k = 0; j >= 0; j--, k++)
> > > > intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0,
> > > > LT_PHY_VDR_X_DATAY(i, j),
> > > > - crtc_state-
> > >dpll_hw_state.ltpll.data[i][k],
> > > > + ltpll->data[i][k],
> > > > MB_WRITE_COMMITTED);
> > > > }
> > > > }
> > > >
> > > > static void
> > > > intel_lt_phy_enable_disable_tx(struct intel_encoder *encoder,
> > > > - const struct intel_crtc_state *crtc_state)
> > > > + const struct intel_lt_phy_pll_state *ltpll,
> > > > + u8 lane_count)
> > > > {
> > > > struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
> > > > bool lane_reversal = dig_port->lane_reversal;
> > > > - u8 lane_count = crtc_state->lane_count;
> > > > bool is_dp_alt =
> > > > intel_tc_port_in_dp_alt_mode(dig_port);
> > > > enum intel_tc_pin_assignment tc_pin = @@ -1895,7 +1899,8 @@
> > void
> > > > intel_lt_phy_pll_enable(struct intel_encoder *encoder,
> > > > intel_lt_phy_lane_reset(encoder, crtc_state->lane_count);
> > > >
> > > > /* 2. Program PORT_CLOCK_CTL register to configure clock muxes,
> > gating, and SSC. */
> > > > - intel_lt_phy_program_port_clock_ctl(encoder, crtc_state,
> > lane_reversal);
> > > > + intel_lt_phy_program_port_clock_ctl(encoder, &crtc_state-
> > >dpll_hw_state.ltpll,
> > > > + crtc_state->port_clock,
> > lane_reversal);
> > > >
> > > > /* 3. Change owned PHY lanes power to Ready state. */
> > > > intel_lt_phy_powerdown_change_sequence(encoder,
> > owned_lane_mask,
> > > > @@
> > > > -1905,12 +1910,12 @@ void intel_lt_phy_pll_enable(struct
> > > > intel_encoder
> > *encoder,
> > > > * 4. Read the PHY message bus VDR register PHY_VDR_0_Config
> > check enabled PLL type,
> > > > * encoded rate and encoded mode.
> > > > */
> > > > - if (intel_lt_phy_config_changed(encoder, crtc_state)) {
> > > > + if (intel_lt_phy_config_changed(encoder,
> > > > +&crtc_state->dpll_hw_state.ltpll)) {
> > > > /*
> > > > * 5. Program the PHY internal PLL registers over PHY
> > message bus for the desired
> > > > * frequency and protocol type
> > > > */
> > > > - intel_lt_phy_program_pll(encoder, crtc_state);
> > > > + intel_lt_phy_program_pll(encoder,
> > > > +&crtc_state->dpll_hw_state.ltpll);
> > > >
> > > > /* 6. Use the P2P transaction flow */
> > > > /*
> > > > @@ -2001,7 +2006,8 @@ void intel_lt_phy_pll_enable(struct
> > intel_encoder *encoder,
> > > > intel_lt_phy_powerdown_change_sequence(encoder,
> > owned_lane_mask,
> > > > XELPDP_P0_STATE_ACTIVE);
> > > >
> > > > - intel_lt_phy_enable_disable_tx(encoder, crtc_state);
> > > > + intel_lt_phy_enable_disable_tx(encoder, &crtc_state-
> > >dpll_hw_state.ltpll,
> > > > + crtc_state->lane_count);
> > > > intel_lt_phy_transaction_end(encoder, wakeref); }
> > > >
> > > > --
> > > > 2.43.0
> > > >
^ permalink raw reply [flat|nested] 62+ messages in thread
* RE: [PATCH v2 04/24] drm/i915/lt_phy: Refactor LT PHY PLL handling to use explicit PLL state
2026-03-10 7:36 ` Kahola, Mika
@ 2026-03-10 8:33 ` Kandpal, Suraj
0 siblings, 0 replies; 62+ messages in thread
From: Kandpal, Suraj @ 2026-03-10 8:33 UTC (permalink / raw)
To: Kahola, Mika, Deak, Imre
Cc: intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org
>
>
>
> > -----Original Message-----
> > From: Kandpal, Suraj <suraj.kandpal@intel.com>
> > Sent: Tuesday, 10 March 2026 6.03
> > To: Kahola, Mika <mika.kahola@intel.com>; Deak, Imre
> > <imre.deak@intel.com>
> > Cc: intel-gfx@lists.freedesktop.org; intel-xe@lists.freedesktop.org
> > Subject: RE: [PATCH v2 04/24] drm/i915/lt_phy: Refactor LT PHY PLL
> > handling to use explicit PLL state
> >
> > > Subject: RE: [PATCH v2 04/24] drm/i915/lt_phy: Refactor LT PHY PLL
> > > handling to use explicit PLL state
> > >
> > > > -----Original Message-----
> > > > From: Deak, Imre <imre.deak@intel.com>
> > > > Sent: Wednesday, 4 March 2026 16.05
> > > > To: Kahola, Mika <mika.kahola@intel.com>
> > > > Cc: intel-gfx@lists.freedesktop.org;
> > > > intel-xe@lists.freedesktop.org
> > > > Subject: Re: [PATCH v2 04/24] drm/i915/lt_phy: Refactor LT PHY PLL
> > > > handling to use explicit PLL state
> > > >
> > > > On Wed, Mar 04, 2026 at 01:14:03PM +0000, Mika Kahola wrote:
> > > > > The LT PHY implementation currently pulls PLL and port_clock
> > > > > information directly from the CRTC state. This ties the PHY
> > > > > programming logic too tightly to the CRTC state and makes it
> > > > > harder to clearly express the PHY’s own PLL configuration.
> > > > >
> > > > > Introduce an explicit "struct intel_lt_phy_pll_state" argument
> > > > > for the PHY functions and update callers accordingly.
> > > > >
> > > > > No functional change is intended — this is a preparatory cleanup
> > > > > for to bring LT PHY PLL handling as part of PLL framework.
> > > > >
> > > > > Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> > > > > ---
> > > > > drivers/gpu/drm/i915/display/intel_lt_phy.c | 48
> > > > > ++++++++++++---------
> > > > > 1 file changed, 27 insertions(+), 21 deletions(-)
> > > > >
> > > > > diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > > > > b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > > > > index 8fe61cfdb706..ebdcab58df4a 100644
> > > > > --- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > > > > +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > > > > @@ -1178,7 +1178,8 @@ intel_lt_phy_lane_reset(struct
> > > > > intel_encoder *encoder,
> > > > >
> > > > > static void
> > > > > intel_lt_phy_program_port_clock_ctl(struct intel_encoder *encoder,
> > > > > - const struct intel_crtc_state *crtc_state,
> > > > > + const struct intel_lt_phy_pll_state
> *ltpll,
> > > > > + int port_clock,
> > > > > bool lane_reversal)
> > > > > {
> > > > > struct intel_display *display = to_intel_display(encoder); @@
> > > > > -1195,17 +1196,17 @@ intel_lt_phy_program_port_clock_ctl(struct
> > > intel_encoder *encoder,
> > > > > * but since the register bits still remain the same we use
> > > > > * the same definition
> > > > > */
> > > > > - if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI) &&
> > > > > - intel_hdmi_is_frl(crtc_state->port_clock))
> > > > > + if (encoder->type == INTEL_OUTPUT_HDMI &&
> > > >
> > > > This was discussed already elsewhere: encoder->type can't be used
> > > > to determine if the encoder is in HDMI or DP mode. In fact on LT
> > > > PHY platforms encoder->type will be never INTEL_OUTPUT_HDMI,
> > > > rather it's
> > > INTEL_OUTPUT_DDI, where the actual mode of the DDI encoder could be
> > > either HDMI or DP.
> > > >
> > > > The ideal would be to deduct the DP/HDMI mode from the
> > > > intel_lt_phy_pll_state instead. AFAICS ltpll->config[0] is
> > > > explicitly set to
> > > > 0x84 for both the computed and table-specified HDMI PLL
> > > > configurations
> > > and config[0] is not 0x84 for any DP PLL configurations.
> > > > Could be used that instead to distinguish the HDMI and DP configs?
> > >
> > > Right. I keep forgetting this that "encoder->type" can be both DP and HDMI.
> > > The naming to me seems a bit misleading and hence I keep forgetting this.
> > > Anyway, this approach cannot be used here but I must come up with
> > > better solution.
> > >
> > > I could switch to use config[0] to distinguish HDMI.
> >
> > We could also use intel_encoder_is_dp() that makes sure we skip HDMI
> connectors in that case.
> >
> > Otherwise,
> > mode = REG_FIELD_GET8(LT_PHY_VDR_MODE_ENCODING_MASK, val); mode
> &
> > MODE_DP will also work
>
> I have this latter one implemented but I haven't sent this patch to mailing list
> yet. It seems that for VDR configuration 0 register the bits 2:0 define the mode
> and for HDMI we either have 0x4 for HDMI and 0x5 for HDMI FRL.
Yes and 3 for DP/EDP which makes life easier was actually added for this same purpose in LT PHY.
Regards,
Suraj Kandpal
>
> -Mika-
>
> >
> > Regards,
> > Suraj Kandpal
> >
> > >
> > > Thanks for a review!
> > >
> > > -Mika-
> > >
> > > >
> > > > > + intel_hdmi_is_frl(port_clock))
> > > > > val |= XELPDP_DDI_CLOCK_SELECT_PREP(display,
> > > XELPDP_DDI_CLOCK_SELECT_DIV18CLK);
> > > > > else
> > > > > val |= XELPDP_DDI_CLOCK_SELECT_PREP(display,
> > > > > XELPDP_DDI_CLOCK_SELECT_MAXPCLK);
> > > > >
> > > > > /* DP2.0 10G and 20G rates enable MPLLA*/
> > > > > - if (crtc_state->port_clock == 1000000 || crtc_state->port_clock ==
> > > 2000000)
> > > > > + if (port_clock == 1000000 || port_clock == 2000000)
> > > > > val |= XELPDP_SSC_ENABLE_PLLA;
> > > > > else
> > > > > - val |= crtc_state->dpll_hw_state.ltpll.ssc_enabled ?
> > > XELPDP_SSC_ENABLE_PLLB : 0;
> > > > > + val |= ltpll->ssc_enabled ? XELPDP_SSC_ENABLE_PLLB :
> 0;
> > > > >
> > > > > intel_de_rmw(display, XELPDP_PORT_CLOCK_CTL(display, encoder-
> > > >port),
> > > > > XELPDP_LANE1_PHY_CLOCK_SELECT |
> > > XELPDP_FORWARD_CLOCK_UNGATE
> > > > > | @@ -1248,10 +1249,12 @@ static u32
> > > > > | intel_lt_phy_get_dp_clock(u8
> > > > > rate)
> > > > >
> > > > > static bool
> > > > > intel_lt_phy_config_changed(struct intel_encoder *encoder,
> > > > > - const struct intel_crtc_state *crtc_state)
> > > > > + const struct intel_lt_phy_pll_state *ltpll)
> > > > > {
> > > > > + struct intel_display *display = to_intel_display(encoder);
> > > > > u8 val, rate;
> > > > > u32 clock;
> > > > > + u32 port_clock = intel_lt_phy_calc_port_clock(display, ltpll);
> > > > >
> > > > > val = intel_lt_phy_read(encoder, INTEL_LT_PHY_LANE0,
> > > > > LT_PHY_VDR_0_CONFIG);
> > > > > @@ -1262,9 +1265,10 @@ intel_lt_phy_config_changed(struct
> > > intel_encoder *encoder,
> > > > > * using 1.62 Gbps clock since PHY PLL defaults to that
> > > > > * otherwise we always need to reconfigure it.
> > > > > */
> > > > > - if (intel_crtc_has_dp_encoder(crtc_state)) {
> > > > > + if (encoder->type == INTEL_OUTPUT_DP ||
> > > > > + encoder->type == INTEL_OUTPUT_EDP) {
> > > >
> > > > Same as above, encoder->type can't be used here.
> > > >
> > > > > clock = intel_lt_phy_get_dp_clock(rate);
> > > > > - if (crtc_state->port_clock == 1620000 && crtc_state-
> > > >port_clock == clock)
> > > > > + if (port_clock == 1620000 && port_clock == clock)
> > > > > return false;
> > > > > }
> > > > >
> > > > > @@ -1759,41 +1763,41 @@ intel_lt_phy_pll_calc_state(struct
> > > > > intel_crtc_state *crtc_state,
> > > > >
> > > > > static void
> > > > > intel_lt_phy_program_pll(struct intel_encoder *encoder,
> > > > > - const struct intel_crtc_state *crtc_state)
> > > > > + const struct intel_lt_phy_pll_state *ltpll)
> > > > > {
> > > > > u8 owned_lane_mask =
> > > intel_lt_phy_get_owned_lane_mask(encoder);
> > > > > int i, j, k;
> > > > >
> > > > > intel_lt_phy_write(encoder, owned_lane_mask,
> > > LT_PHY_VDR_0_CONFIG,
> > > > > - crtc_state->dpll_hw_state.ltpll.config[0],
> > > MB_WRITE_COMMITTED);
> > > > > + ltpll->config[0], MB_WRITE_COMMITTED);
> > > > > intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0,
> > > LT_PHY_VDR_1_CONFIG,
> > > > > - crtc_state->dpll_hw_state.ltpll.config[1],
> > > MB_WRITE_COMMITTED);
> > > > > + ltpll->config[1], MB_WRITE_COMMITTED);
> > > > > intel_lt_phy_write(encoder, owned_lane_mask,
> > > LT_PHY_VDR_2_CONFIG,
> > > > > - crtc_state->dpll_hw_state.ltpll.config[2],
> > > MB_WRITE_COMMITTED);
> > > > > + ltpll->config[2], MB_WRITE_COMMITTED);
> > > > >
> > > > > for (i = 0; i <= 12; i++) {
> > > > > intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0,
> > > LT_PHY_VDR_X_ADDR_MSB(i),
> > > > > - crtc_state->dpll_hw_state.ltpll.addr_msb[i],
> > > > > + ltpll->addr_msb[i],
> > > > > MB_WRITE_COMMITTED);
> > > > > intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0,
> > > LT_PHY_VDR_X_ADDR_LSB(i),
> > > > > - crtc_state->dpll_hw_state.ltpll.addr_lsb[i],
> > > > > + ltpll->addr_lsb[i],
> > > > > MB_WRITE_COMMITTED);
> > > > >
> > > > > for (j = 3, k = 0; j >= 0; j--, k++)
> > > > > intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0,
> > > > > LT_PHY_VDR_X_DATAY(i, j),
> > > > > - crtc_state-
> > > >dpll_hw_state.ltpll.data[i][k],
> > > > > + ltpll->data[i][k],
> > > > > MB_WRITE_COMMITTED);
> > > > > }
> > > > > }
> > > > >
> > > > > static void
> > > > > intel_lt_phy_enable_disable_tx(struct intel_encoder *encoder,
> > > > > - const struct intel_crtc_state *crtc_state)
> > > > > + const struct intel_lt_phy_pll_state *ltpll,
> > > > > + u8 lane_count)
> > > > > {
> > > > > struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
> > > > > bool lane_reversal = dig_port->lane_reversal;
> > > > > - u8 lane_count = crtc_state->lane_count;
> > > > > bool is_dp_alt =
> > > > > intel_tc_port_in_dp_alt_mode(dig_port);
> > > > > enum intel_tc_pin_assignment tc_pin = @@ -1895,7 +1899,8 @@
> > > void
> > > > > intel_lt_phy_pll_enable(struct intel_encoder *encoder,
> > > > > intel_lt_phy_lane_reset(encoder, crtc_state->lane_count);
> > > > >
> > > > > /* 2. Program PORT_CLOCK_CTL register to configure clock
> > > > > muxes,
> > > gating, and SSC. */
> > > > > - intel_lt_phy_program_port_clock_ctl(encoder, crtc_state,
> > > lane_reversal);
> > > > > + intel_lt_phy_program_port_clock_ctl(encoder, &crtc_state-
> > > >dpll_hw_state.ltpll,
> > > > > + crtc_state->port_clock,
> > > lane_reversal);
> > > > >
> > > > > /* 3. Change owned PHY lanes power to Ready state. */
> > > > > intel_lt_phy_powerdown_change_sequence(encoder,
> > > owned_lane_mask,
> > > > > @@
> > > > > -1905,12 +1910,12 @@ void intel_lt_phy_pll_enable(struct
> > > > > intel_encoder
> > > *encoder,
> > > > > * 4. Read the PHY message bus VDR register PHY_VDR_0_Config
> > > check enabled PLL type,
> > > > > * encoded rate and encoded mode.
> > > > > */
> > > > > - if (intel_lt_phy_config_changed(encoder, crtc_state)) {
> > > > > + if (intel_lt_phy_config_changed(encoder,
> > > > > +&crtc_state->dpll_hw_state.ltpll)) {
> > > > > /*
> > > > > * 5. Program the PHY internal PLL registers over PHY
> > > message bus for the desired
> > > > > * frequency and protocol type
> > > > > */
> > > > > - intel_lt_phy_program_pll(encoder, crtc_state);
> > > > > + intel_lt_phy_program_pll(encoder,
> > > > > +&crtc_state->dpll_hw_state.ltpll);
> > > > >
> > > > > /* 6. Use the P2P transaction flow */
> > > > > /*
> > > > > @@ -2001,7 +2006,8 @@ void intel_lt_phy_pll_enable(struct
> > > intel_encoder *encoder,
> > > > > intel_lt_phy_powerdown_change_sequence(encoder,
> > > owned_lane_mask,
> > > > > XELPDP_P0_STATE_ACTIVE);
> > > > >
> > > > > - intel_lt_phy_enable_disable_tx(encoder, crtc_state);
> > > > > + intel_lt_phy_enable_disable_tx(encoder, &crtc_state-
> > > >dpll_hw_state.ltpll,
> > > > > + crtc_state->lane_count);
> > > > > intel_lt_phy_transaction_end(encoder, wakeref); }
> > > > >
> > > > > --
> > > > > 2.43.0
> > > > >
^ permalink raw reply [flat|nested] 62+ messages in thread
* RE: [PATCH v3 23/24] drm/i915/lt_phy: Remove LT PHY specific state verification
2026-03-06 11:43 ` [PATCH v3 " Mika Kahola
@ 2026-03-10 8:40 ` Kandpal, Suraj
0 siblings, 0 replies; 62+ messages in thread
From: Kandpal, Suraj @ 2026-03-10 8:40 UTC (permalink / raw)
To: Kahola, Mika, intel-gfx@lists.freedesktop.org,
intel-xe@lists.freedesktop.org
Cc: Kahola, Mika
> Subject: [PATCH v3 23/24] drm/i915/lt_phy: Remove LT PHY specific state
> verification
>
> Remove LT PHY specific state verification as DPLL framework has state
> verification check.
>
> v2: Reuse intel_lt_phy_pll_compare_hw_state() as only config[0]
> and config[0] parameters are reliable with LT PHY (Suraj)
> v3: Rephrase handling of LT PHY case when verifying the state (CI)
>
LGTM,
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
> Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 14 +++++--
> drivers/gpu/drm/i915/display/intel_lt_phy.c | 39 -------------------
> drivers/gpu/drm/i915/display/intel_lt_phy.h | 2 -
> .../drm/i915/display/intel_modeset_verify.c | 1 -
> 4 files changed, 11 insertions(+), 45 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> index 534cc691979f..c3f35250f192 100644
> --- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> +++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> @@ -5075,6 +5075,7 @@ verify_single_dpll_state(struct intel_display *display,
> const struct intel_crtc_state *new_crtc_state) {
> struct intel_dpll_hw_state dpll_hw_state = {};
> + bool pll_mismatch = false;
> u8 pipe_mask;
> bool active;
>
> @@ -5116,9 +5117,16 @@ verify_single_dpll_state(struct intel_display
> *display,
> "%s: pll enabled crtcs mismatch (expected
> 0x%x in 0x%x)\n",
> pll->info->name, pipe_mask, pll-
> >state.pipe_mask);
>
> - if (INTEL_DISPLAY_STATE_WARN(display,
> - pll->on && memcmp(&pll->state.hw_state,
> &dpll_hw_state,
> - sizeof(dpll_hw_state)),
> + if (pll->on) {
> + const struct intel_dpll_mgr *dpll_mgr = display->dpll.mgr;
> +
> + if (HAS_LT_PHY(display))
> + pll_mismatch = !dpll_mgr->compare_hw_state(&pll-
> >state.hw_state, &dpll_hw_state);
> + else
> + pll_mismatch = memcmp(&pll->state.hw_state,
> &dpll_hw_state, sizeof(dpll_hw_state));
> + }
> +
> + if (INTEL_DISPLAY_STATE_WARN(display, pll_mismatch,
> "%s: pll hw state mismatch\n",
> pll->info->name)) {
> struct drm_printer p = drm_dbg_printer(display->drm,
> DRM_UT_KMS, NULL); diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> index 746b0182362a..032fd80664c6 100644
> --- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> @@ -2263,45 +2263,6 @@ bool intel_lt_phy_pll_readout_hw_state(struct
> intel_encoder *encoder,
> return true;
> }
>
> -void intel_lt_phy_pll_state_verify(struct intel_atomic_state *state,
> - struct intel_crtc *crtc)
> -{
> - struct intel_display *display = to_intel_display(state);
> - struct intel_digital_port *dig_port;
> - const struct intel_crtc_state *new_crtc_state =
> - intel_atomic_get_new_crtc_state(state, crtc);
> - struct intel_encoder *encoder;
> - struct intel_lt_phy_pll_state pll_hw_state = {};
> - const struct intel_lt_phy_pll_state *pll_sw_state = &new_crtc_state-
> >dpll_hw_state.ltpll;
> -
> - if (DISPLAY_VER(display) < 35)
> - return;
> -
> - if (!new_crtc_state->hw.active)
> - return;
> -
> - /* intel_get_crtc_new_encoder() only works for modeset/fastset
> commits */
> - if (!intel_crtc_needs_modeset(new_crtc_state) &&
> - !intel_crtc_needs_fastset(new_crtc_state))
> - return;
> -
> - encoder = intel_get_crtc_new_encoder(state, new_crtc_state);
> - intel_lt_phy_pll_readout_hw_state(encoder, &pll_hw_state);
> -
> - dig_port = enc_to_dig_port(encoder);
> - if (intel_tc_port_in_tbt_alt_mode(dig_port))
> - return;
> -
> - INTEL_DISPLAY_STATE_WARN(display, pll_hw_state.config[0] !=
> pll_sw_state->config[0],
> - "[CRTC:%d:%s] mismatch in LT PHY PLL
> CONFIG 0: (expected 0x%04x, found 0x%04x)",
> - crtc->base.base.id, crtc->base.name,
> - pll_sw_state->config[0],
> pll_hw_state.config[0]);
> - INTEL_DISPLAY_STATE_WARN(display, pll_hw_state.config[2] !=
> pll_sw_state->config[2],
> - "[CRTC:%d:%s] mismatch in LT PHY PLL
> CONFIG 2: (expected 0x%04x, found 0x%04x)",
> - crtc->base.base.id, crtc->base.name,
> - pll_sw_state->config[2],
> pll_hw_state.config[2]);
> -}
> -
> void intel_xe3plpd_pll_enable(struct intel_encoder *encoder,
> struct intel_dpll *pll,
> const struct intel_dpll_hw_state *dpll_hw_state)
> diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.h
> b/drivers/gpu/drm/i915/display/intel_lt_phy.h
> index 1c2ec438cd10..8b98997b3107 100644
> --- a/drivers/gpu/drm/i915/display/intel_lt_phy.h
> +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.h
> @@ -41,8 +41,6 @@ bool intel_lt_phy_tbt_pll_readout_hw_state(struct
> intel_display *display,
> struct intel_dpll_hw_state
> *hw_state); bool intel_lt_phy_pll_readout_hw_state(struct intel_encoder
> *encoder,
> struct intel_lt_phy_pll_state *pll_state); -
> void intel_lt_phy_pll_state_verify(struct intel_atomic_state *state,
> - struct intel_crtc *crtc);
> int
> intel_lt_phy_calculate_hdmi_state(struct intel_lt_phy_pll_state *lt_state,
> u32 frequency_khz);
> diff --git a/drivers/gpu/drm/i915/display/intel_modeset_verify.c
> b/drivers/gpu/drm/i915/display/intel_modeset_verify.c
> index 12a00121c274..2ec17c2bfe0f 100644
> --- a/drivers/gpu/drm/i915/display/intel_modeset_verify.c
> +++ b/drivers/gpu/drm/i915/display/intel_modeset_verify.c
> @@ -246,7 +246,6 @@ void intel_modeset_verify_crtc(struct
> intel_atomic_state *state,
> verify_crtc_state(state, crtc);
> intel_dpll_state_verify(state, crtc);
> intel_mpllb_state_verify(state, crtc);
> - intel_lt_phy_pll_state_verify(state, crtc);
> }
>
> void intel_modeset_verify_disabled(struct intel_atomic_state *state)
> --
> 2.43.0
^ permalink raw reply [flat|nested] 62+ messages in thread
* [PATCH v3 03/24] drm/i915/lt_phy: Refactor LT PHY PLL handling to use explicit PLL state
2026-03-04 13:14 ` [PATCH v2 04/24] drm/i915/lt_phy: Refactor LT PHY PLL handling to use explicit PLL state Mika Kahola
2026-03-04 14:04 ` Imre Deak
@ 2026-03-10 13:36 ` Mika Kahola
2026-03-10 15:38 ` [PATCH v3 04/24] " Mika Kahola
1 sibling, 1 reply; 62+ messages in thread
From: Mika Kahola @ 2026-03-10 13:36 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Mika Kahola
The LT PHY implementation currently pulls PLL and port_clock
information directly from the CRTC state. This ties the PHY
programming logic too tightly to the CRTC state and makes it
harder to clearly express the PHY’s own PLL configuration.
Introduce an explicit "struct intel_lt_phy_pll_state" argument
for the PHY functions and update callers accordingly.
No functional change is intended — this is a preparatory cleanup for
to bring LT PHY PLL handling as part of PLL framework.
v2: DP, HDMI 2.0, and HDMI FRL modes are port of the VDR configuration 0
register. These modes are defined by bits 2:0. Decode these to
differentiate DP and HDMI modes when programming PLL's. (Imre, Suraj)
BSpec: 744921
Signed-off-by: Mika Kahola <mika.kahola@intel.com>
---
drivers/gpu/drm/i915/display/intel_lt_phy.c | 67 ++++++++++++++-------
1 file changed, 46 insertions(+), 21 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c b/drivers/gpu/drm/i915/display/intel_lt_phy.c
index f173d1788af8..06d83282c495 100644
--- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
+++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
@@ -33,6 +33,7 @@
#define PCLK_PLL_ACK_LN0 REG_BIT(30)
#define MODE_DP 3
#define MODE_HDMI_20 4
+#define MODE_HDMI_FRL 5
#define Q32_TO_INT(x) ((x) >> 32)
#define Q32_TO_FRAC(x) ((x) & 0xFFFFFFFF)
#define DCO_MIN_FREQ_MHZ 11850
@@ -1177,9 +1178,30 @@ intel_lt_phy_lane_reset(struct intel_encoder *encoder,
intel_de_rmw(display, XELPDP_PORT_BUF_CTL2(display, port), lane_phy_pulse_status, 0);
}
+static bool intel_lt_phy_is_hdmi(const struct intel_lt_phy_pll_state *ltpll)
+{
+ u8 mode = REG_FIELD_GET8(LT_PHY_VDR_MODE_ENCODING_MASK, ltpll->config[0]);
+
+ if (mode == MODE_HDMI_20 || mode == MODE_HDMI_FRL)
+ return true;
+
+ return false;
+}
+
+static bool intel_lt_phy_is_dp(const struct intel_lt_phy_pll_state *ltpll)
+{
+ u8 mode = REG_FIELD_GET8(LT_PHY_VDR_MODE_ENCODING_MASK, ltpll->config[0]);
+
+ if (mode == MODE_DP)
+ return true;
+
+ return false;
+}
+
static void
intel_lt_phy_program_port_clock_ctl(struct intel_encoder *encoder,
- const struct intel_crtc_state *crtc_state,
+ const struct intel_lt_phy_pll_state *ltpll,
+ int port_clock,
bool lane_reversal)
{
struct intel_display *display = to_intel_display(encoder);
@@ -1196,17 +1218,16 @@ intel_lt_phy_program_port_clock_ctl(struct intel_encoder *encoder,
* but since the register bits still remain the same we use
* the same definition
*/
- if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI) &&
- intel_hdmi_is_frl(crtc_state->port_clock))
+ if (intel_lt_phy_is_hdmi(ltpll) && intel_hdmi_is_frl(port_clock))
val |= XELPDP_DDI_CLOCK_SELECT_PREP(display, XELPDP_DDI_CLOCK_SELECT_DIV18CLK);
else
val |= XELPDP_DDI_CLOCK_SELECT_PREP(display, XELPDP_DDI_CLOCK_SELECT_MAXPCLK);
/* DP2.0 10G and 20G rates enable MPLLA*/
- if (crtc_state->port_clock == 1000000 || crtc_state->port_clock == 2000000)
+ if (port_clock == 1000000 || port_clock == 2000000)
val |= XELPDP_SSC_ENABLE_PLLA;
else
- val |= crtc_state->dpll_hw_state.ltpll.ssc_enabled ? XELPDP_SSC_ENABLE_PLLB : 0;
+ val |= ltpll->ssc_enabled ? XELPDP_SSC_ENABLE_PLLB : 0;
intel_de_rmw(display, XELPDP_PORT_CLOCK_CTL(display, encoder->port),
XELPDP_LANE1_PHY_CLOCK_SELECT | XELPDP_FORWARD_CLOCK_UNGATE |
@@ -1249,10 +1270,12 @@ static u32 intel_lt_phy_get_dp_clock(u8 rate)
static bool
intel_lt_phy_config_changed(struct intel_encoder *encoder,
- const struct intel_crtc_state *crtc_state)
+ const struct intel_lt_phy_pll_state *ltpll)
{
+ struct intel_display *display = to_intel_display(encoder);
u8 val, rate;
u32 clock;
+ u32 port_clock = intel_lt_phy_calc_port_clock(display, ltpll);
val = intel_lt_phy_read(encoder, INTEL_LT_PHY_LANE0,
LT_PHY_VDR_0_CONFIG);
@@ -1263,9 +1286,9 @@ intel_lt_phy_config_changed(struct intel_encoder *encoder,
* using 1.62 Gbps clock since PHY PLL defaults to that
* otherwise we always need to reconfigure it.
*/
- if (intel_crtc_has_dp_encoder(crtc_state)) {
+ if (intel_lt_phy_is_dp(ltpll)) {
clock = intel_lt_phy_get_dp_clock(rate);
- if (crtc_state->port_clock == 1620000 && crtc_state->port_clock == clock)
+ if (port_clock == 1620000 && port_clock == clock)
return false;
}
@@ -1760,41 +1783,41 @@ intel_lt_phy_pll_calc_state(struct intel_crtc_state *crtc_state,
static void
intel_lt_phy_program_pll(struct intel_encoder *encoder,
- const struct intel_crtc_state *crtc_state)
+ const struct intel_lt_phy_pll_state *ltpll)
{
u8 owned_lane_mask = intel_lt_phy_get_owned_lane_mask(encoder);
int i, j, k;
intel_lt_phy_write(encoder, owned_lane_mask, LT_PHY_VDR_0_CONFIG,
- crtc_state->dpll_hw_state.ltpll.config[0], MB_WRITE_COMMITTED);
+ ltpll->config[0], MB_WRITE_COMMITTED);
intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0, LT_PHY_VDR_1_CONFIG,
- crtc_state->dpll_hw_state.ltpll.config[1], MB_WRITE_COMMITTED);
+ ltpll->config[1], MB_WRITE_COMMITTED);
intel_lt_phy_write(encoder, owned_lane_mask, LT_PHY_VDR_2_CONFIG,
- crtc_state->dpll_hw_state.ltpll.config[2], MB_WRITE_COMMITTED);
+ ltpll->config[2], MB_WRITE_COMMITTED);
for (i = 0; i <= 12; i++) {
intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0, LT_PHY_VDR_X_ADDR_MSB(i),
- crtc_state->dpll_hw_state.ltpll.addr_msb[i],
+ ltpll->addr_msb[i],
MB_WRITE_COMMITTED);
intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0, LT_PHY_VDR_X_ADDR_LSB(i),
- crtc_state->dpll_hw_state.ltpll.addr_lsb[i],
+ ltpll->addr_lsb[i],
MB_WRITE_COMMITTED);
for (j = 3, k = 0; j >= 0; j--, k++)
intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0,
LT_PHY_VDR_X_DATAY(i, j),
- crtc_state->dpll_hw_state.ltpll.data[i][k],
+ ltpll->data[i][k],
MB_WRITE_COMMITTED);
}
}
static void
intel_lt_phy_enable_disable_tx(struct intel_encoder *encoder,
- const struct intel_crtc_state *crtc_state)
+ const struct intel_lt_phy_pll_state *ltpll,
+ u8 lane_count)
{
struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
bool lane_reversal = dig_port->lane_reversal;
- u8 lane_count = crtc_state->lane_count;
bool is_dp_alt =
intel_tc_port_in_dp_alt_mode(dig_port);
enum intel_tc_pin_assignment tc_pin =
@@ -1896,7 +1919,8 @@ void intel_lt_phy_pll_enable(struct intel_encoder *encoder,
intel_lt_phy_lane_reset(encoder, crtc_state->lane_count);
/* 2. Program PORT_CLOCK_CTL register to configure clock muxes, gating, and SSC. */
- intel_lt_phy_program_port_clock_ctl(encoder, crtc_state, lane_reversal);
+ intel_lt_phy_program_port_clock_ctl(encoder, &crtc_state->dpll_hw_state.ltpll,
+ crtc_state->port_clock, lane_reversal);
/* 3. Change owned PHY lanes power to Ready state. */
intel_lt_phy_powerdown_change_sequence(encoder, owned_lane_mask,
@@ -1906,12 +1930,12 @@ void intel_lt_phy_pll_enable(struct intel_encoder *encoder,
* 4. Read the PHY message bus VDR register PHY_VDR_0_Config check enabled PLL type,
* encoded rate and encoded mode.
*/
- if (intel_lt_phy_config_changed(encoder, crtc_state)) {
+ if (intel_lt_phy_config_changed(encoder, &crtc_state->dpll_hw_state.ltpll)) {
/*
* 5. Program the PHY internal PLL registers over PHY message bus for the desired
* frequency and protocol type
*/
- intel_lt_phy_program_pll(encoder, crtc_state);
+ intel_lt_phy_program_pll(encoder, &crtc_state->dpll_hw_state.ltpll);
/* 6. Use the P2P transaction flow */
/*
@@ -2002,7 +2026,8 @@ void intel_lt_phy_pll_enable(struct intel_encoder *encoder,
intel_lt_phy_powerdown_change_sequence(encoder, owned_lane_mask,
XELPDP_P0_STATE_ACTIVE);
- intel_lt_phy_enable_disable_tx(encoder, crtc_state);
+ intel_lt_phy_enable_disable_tx(encoder, &crtc_state->dpll_hw_state.ltpll,
+ crtc_state->lane_count);
intel_lt_phy_transaction_end(encoder, wakeref);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* ✗ Fi.CI.BUILD: failure for Refactor LT PHY PLL handling to use DPLL framework (rev4)
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
` (26 preceding siblings ...)
2026-03-07 14:27 ` ✗ i915.CI.Full: failure " Patchwork
@ 2026-03-10 13:53 ` Patchwork
2026-03-10 17:26 ` ✗ i915.CI.BAT: failure for Refactor LT PHY PLL handling to use DPLL framework (rev5) Patchwork
28 siblings, 0 replies; 62+ messages in thread
From: Patchwork @ 2026-03-10 13:53 UTC (permalink / raw)
To: Mika Kahola; +Cc: intel-gfx
== Series Details ==
Series: Refactor LT PHY PLL handling to use DPLL framework (rev4)
URL : https://patchwork.freedesktop.org/series/161587/
State : failure
== Summary ==
Error: patch https://patchwork.freedesktop.org/api/1.0/series/161587/revisions/4/mbox/ not applied
Applying: drm/i915/lt_phy: Dump missing PLL state parameters
Applying: drm/i915/lt_phy: Add check if PLL is enabled
Applying: drm/i915/lt_phy: Add PLL information for xe3plpd
Applying: drm/i915/lt_phy: Refactor LT PHY PLL handling to use explicit PLL state
error: sha1 information is lacking or useless (drivers/gpu/drm/i915/display/intel_lt_phy.c).
error: could not build fake ancestor
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0004 drm/i915/lt_phy: Refactor LT PHY PLL handling to use explicit PLL state
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
Build failed, no error log produced
^ permalink raw reply [flat|nested] 62+ messages in thread
* [PATCH v3 04/24] drm/i915/lt_phy: Refactor LT PHY PLL handling to use explicit PLL state
2026-03-10 13:36 ` [PATCH v3 03/24] " Mika Kahola
@ 2026-03-10 15:38 ` Mika Kahola
2026-03-11 4:18 ` Kandpal, Suraj
0 siblings, 1 reply; 62+ messages in thread
From: Mika Kahola @ 2026-03-10 15:38 UTC (permalink / raw)
To: intel-gfx, intel-xe; +Cc: Mika Kahola
The LT PHY implementation currently pulls PLL and port_clock
information directly from the CRTC state. This ties the PHY
programming logic too tightly to the CRTC state and makes it
harder to clearly express the PHY’s own PLL configuration.
Introduce an explicit "struct intel_lt_phy_pll_state" argument
for the PHY functions and update callers accordingly.
No functional change is intended — this is a preparatory cleanup for
to bring LT PHY PLL handling as part of PLL framework.
v2: DP, HDMI 2.0, and HDMI FRL modes are port of the VDR configuration 0
register. These modes are defined by bits 2:0. Decode these to
differentiate DP and HDMI modes when programming PLL's. (Imre, Suraj)
BSpec: 744921
Signed-off-by: Mika Kahola <mika.kahola@intel.com>
---
drivers/gpu/drm/i915/display/intel_lt_phy.c | 67 ++++++++++++++-------
1 file changed, 46 insertions(+), 21 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c b/drivers/gpu/drm/i915/display/intel_lt_phy.c
index 8fe61cfdb706..76acffb2e840 100644
--- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
+++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
@@ -32,6 +32,7 @@
INTEL_LT_PHY_LANE0)
#define MODE_DP 3
#define MODE_HDMI_20 4
+#define MODE_HDMI_FRL 5
#define Q32_TO_INT(x) ((x) >> 32)
#define Q32_TO_FRAC(x) ((x) & 0xFFFFFFFF)
#define DCO_MIN_FREQ_MHZ 11850
@@ -1176,9 +1177,30 @@ intel_lt_phy_lane_reset(struct intel_encoder *encoder,
intel_de_rmw(display, XELPDP_PORT_BUF_CTL2(display, port), lane_phy_pulse_status, 0);
}
+static bool intel_lt_phy_is_hdmi(const struct intel_lt_phy_pll_state *ltpll)
+{
+ u8 mode = REG_FIELD_GET8(LT_PHY_VDR_MODE_ENCODING_MASK, ltpll->config[0]);
+
+ if (mode == MODE_HDMI_20 || mode == MODE_HDMI_FRL)
+ return true;
+
+ return false;
+}
+
+static bool intel_lt_phy_is_dp(const struct intel_lt_phy_pll_state *ltpll)
+{
+ u8 mode = REG_FIELD_GET8(LT_PHY_VDR_MODE_ENCODING_MASK, ltpll->config[0]);
+
+ if (mode == MODE_DP)
+ return true;
+
+ return false;
+}
+
static void
intel_lt_phy_program_port_clock_ctl(struct intel_encoder *encoder,
- const struct intel_crtc_state *crtc_state,
+ const struct intel_lt_phy_pll_state *ltpll,
+ int port_clock,
bool lane_reversal)
{
struct intel_display *display = to_intel_display(encoder);
@@ -1195,17 +1217,16 @@ intel_lt_phy_program_port_clock_ctl(struct intel_encoder *encoder,
* but since the register bits still remain the same we use
* the same definition
*/
- if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI) &&
- intel_hdmi_is_frl(crtc_state->port_clock))
+ if (intel_lt_phy_is_hdmi(ltpll) && intel_hdmi_is_frl(port_clock))
val |= XELPDP_DDI_CLOCK_SELECT_PREP(display, XELPDP_DDI_CLOCK_SELECT_DIV18CLK);
else
val |= XELPDP_DDI_CLOCK_SELECT_PREP(display, XELPDP_DDI_CLOCK_SELECT_MAXPCLK);
/* DP2.0 10G and 20G rates enable MPLLA*/
- if (crtc_state->port_clock == 1000000 || crtc_state->port_clock == 2000000)
+ if (port_clock == 1000000 || port_clock == 2000000)
val |= XELPDP_SSC_ENABLE_PLLA;
else
- val |= crtc_state->dpll_hw_state.ltpll.ssc_enabled ? XELPDP_SSC_ENABLE_PLLB : 0;
+ val |= ltpll->ssc_enabled ? XELPDP_SSC_ENABLE_PLLB : 0;
intel_de_rmw(display, XELPDP_PORT_CLOCK_CTL(display, encoder->port),
XELPDP_LANE1_PHY_CLOCK_SELECT | XELPDP_FORWARD_CLOCK_UNGATE |
@@ -1248,10 +1269,12 @@ static u32 intel_lt_phy_get_dp_clock(u8 rate)
static bool
intel_lt_phy_config_changed(struct intel_encoder *encoder,
- const struct intel_crtc_state *crtc_state)
+ const struct intel_lt_phy_pll_state *ltpll)
{
+ struct intel_display *display = to_intel_display(encoder);
u8 val, rate;
u32 clock;
+ u32 port_clock = intel_lt_phy_calc_port_clock(display, ltpll);
val = intel_lt_phy_read(encoder, INTEL_LT_PHY_LANE0,
LT_PHY_VDR_0_CONFIG);
@@ -1262,9 +1285,9 @@ intel_lt_phy_config_changed(struct intel_encoder *encoder,
* using 1.62 Gbps clock since PHY PLL defaults to that
* otherwise we always need to reconfigure it.
*/
- if (intel_crtc_has_dp_encoder(crtc_state)) {
+ if (intel_lt_phy_is_dp(ltpll)) {
clock = intel_lt_phy_get_dp_clock(rate);
- if (crtc_state->port_clock == 1620000 && crtc_state->port_clock == clock)
+ if (port_clock == 1620000 && port_clock == clock)
return false;
}
@@ -1759,41 +1782,41 @@ intel_lt_phy_pll_calc_state(struct intel_crtc_state *crtc_state,
static void
intel_lt_phy_program_pll(struct intel_encoder *encoder,
- const struct intel_crtc_state *crtc_state)
+ const struct intel_lt_phy_pll_state *ltpll)
{
u8 owned_lane_mask = intel_lt_phy_get_owned_lane_mask(encoder);
int i, j, k;
intel_lt_phy_write(encoder, owned_lane_mask, LT_PHY_VDR_0_CONFIG,
- crtc_state->dpll_hw_state.ltpll.config[0], MB_WRITE_COMMITTED);
+ ltpll->config[0], MB_WRITE_COMMITTED);
intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0, LT_PHY_VDR_1_CONFIG,
- crtc_state->dpll_hw_state.ltpll.config[1], MB_WRITE_COMMITTED);
+ ltpll->config[1], MB_WRITE_COMMITTED);
intel_lt_phy_write(encoder, owned_lane_mask, LT_PHY_VDR_2_CONFIG,
- crtc_state->dpll_hw_state.ltpll.config[2], MB_WRITE_COMMITTED);
+ ltpll->config[2], MB_WRITE_COMMITTED);
for (i = 0; i <= 12; i++) {
intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0, LT_PHY_VDR_X_ADDR_MSB(i),
- crtc_state->dpll_hw_state.ltpll.addr_msb[i],
+ ltpll->addr_msb[i],
MB_WRITE_COMMITTED);
intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0, LT_PHY_VDR_X_ADDR_LSB(i),
- crtc_state->dpll_hw_state.ltpll.addr_lsb[i],
+ ltpll->addr_lsb[i],
MB_WRITE_COMMITTED);
for (j = 3, k = 0; j >= 0; j--, k++)
intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0,
LT_PHY_VDR_X_DATAY(i, j),
- crtc_state->dpll_hw_state.ltpll.data[i][k],
+ ltpll->data[i][k],
MB_WRITE_COMMITTED);
}
}
static void
intel_lt_phy_enable_disable_tx(struct intel_encoder *encoder,
- const struct intel_crtc_state *crtc_state)
+ const struct intel_lt_phy_pll_state *ltpll,
+ u8 lane_count)
{
struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
bool lane_reversal = dig_port->lane_reversal;
- u8 lane_count = crtc_state->lane_count;
bool is_dp_alt =
intel_tc_port_in_dp_alt_mode(dig_port);
enum intel_tc_pin_assignment tc_pin =
@@ -1895,7 +1918,8 @@ void intel_lt_phy_pll_enable(struct intel_encoder *encoder,
intel_lt_phy_lane_reset(encoder, crtc_state->lane_count);
/* 2. Program PORT_CLOCK_CTL register to configure clock muxes, gating, and SSC. */
- intel_lt_phy_program_port_clock_ctl(encoder, crtc_state, lane_reversal);
+ intel_lt_phy_program_port_clock_ctl(encoder, &crtc_state->dpll_hw_state.ltpll,
+ crtc_state->port_clock, lane_reversal);
/* 3. Change owned PHY lanes power to Ready state. */
intel_lt_phy_powerdown_change_sequence(encoder, owned_lane_mask,
@@ -1905,12 +1929,12 @@ void intel_lt_phy_pll_enable(struct intel_encoder *encoder,
* 4. Read the PHY message bus VDR register PHY_VDR_0_Config check enabled PLL type,
* encoded rate and encoded mode.
*/
- if (intel_lt_phy_config_changed(encoder, crtc_state)) {
+ if (intel_lt_phy_config_changed(encoder, &crtc_state->dpll_hw_state.ltpll)) {
/*
* 5. Program the PHY internal PLL registers over PHY message bus for the desired
* frequency and protocol type
*/
- intel_lt_phy_program_pll(encoder, crtc_state);
+ intel_lt_phy_program_pll(encoder, &crtc_state->dpll_hw_state.ltpll);
/* 6. Use the P2P transaction flow */
/*
@@ -2001,7 +2025,8 @@ void intel_lt_phy_pll_enable(struct intel_encoder *encoder,
intel_lt_phy_powerdown_change_sequence(encoder, owned_lane_mask,
XELPDP_P0_STATE_ACTIVE);
- intel_lt_phy_enable_disable_tx(encoder, crtc_state);
+ intel_lt_phy_enable_disable_tx(encoder, &crtc_state->dpll_hw_state.ltpll,
+ crtc_state->lane_count);
intel_lt_phy_transaction_end(encoder, wakeref);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 62+ messages in thread
* ✗ i915.CI.BAT: failure for Refactor LT PHY PLL handling to use DPLL framework (rev5)
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
` (27 preceding siblings ...)
2026-03-10 13:53 ` ✗ Fi.CI.BUILD: failure for Refactor LT PHY PLL handling to use DPLL framework (rev4) Patchwork
@ 2026-03-10 17:26 ` Patchwork
28 siblings, 0 replies; 62+ messages in thread
From: Patchwork @ 2026-03-10 17:26 UTC (permalink / raw)
To: Mika Kahola; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 3554 bytes --]
== Series Details ==
Series: Refactor LT PHY PLL handling to use DPLL framework (rev5)
URL : https://patchwork.freedesktop.org/series/161587/
State : failure
== Summary ==
CI Bug Log - changes from CI_DRM_18118 -> Patchwork_161587v5
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with Patchwork_161587v5 absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in Patchwork_161587v5, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v5/index.html
Participating hosts (41 -> 38)
------------------------------
Missing (3): bat-dg2-13 bat-mtlp-9 fi-snb-2520m
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in Patchwork_161587v5:
### IGT changes ###
#### Possible regressions ####
* igt@i915_selftest@live:
- fi-hsw-4770: [PASS][1] -> [INCOMPLETE][2] +1 other test incomplete
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18118/fi-hsw-4770/igt@i915_selftest@live.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v5/fi-hsw-4770/igt@i915_selftest@live.html
Known issues
------------
Here are the changes found in Patchwork_161587v5 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@i915_module_load@load:
- bat-apl-1: [PASS][3] -> [DMESG-WARN][4] ([i915#15498])
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18118/bat-apl-1/igt@i915_module_load@load.html
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v5/bat-apl-1/igt@i915_module_load@load.html
* igt@i915_selftest@live:
- bat-mtlp-8: [PASS][5] -> [DMESG-FAIL][6] ([i915#12061]) +1 other test dmesg-fail
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18118/bat-mtlp-8/igt@i915_selftest@live.html
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v5/bat-mtlp-8/igt@i915_selftest@live.html
- bat-dg2-8: [PASS][7] -> [DMESG-FAIL][8] ([i915#12061]) +1 other test dmesg-fail
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18118/bat-dg2-8/igt@i915_selftest@live.html
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v5/bat-dg2-8/igt@i915_selftest@live.html
* igt@i915_selftest@live@workarounds:
- bat-arlh-3: [PASS][9] -> [DMESG-FAIL][10] ([i915#12061]) +1 other test dmesg-fail
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18118/bat-arlh-3/igt@i915_selftest@live@workarounds.html
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v5/bat-arlh-3/igt@i915_selftest@live@workarounds.html
[i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
[i915#15498]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15498
Build changes
-------------
* Linux: CI_DRM_18118 -> Patchwork_161587v5
CI-20190529: 20190529
CI_DRM_18118: 7282a0941df77adea4aeae319d4ff11358c98584 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_8790: 4626b8c809cf894b9f512d9a17d5ce0f8682a235 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
Patchwork_161587v5: 7282a0941df77adea4aeae319d4ff11358c98584 @ git://anongit.freedesktop.org/gfx-ci/linux
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_161587v5/index.html
[-- Attachment #2: Type: text/html, Size: 4403 bytes --]
^ permalink raw reply [flat|nested] 62+ messages in thread
* RE: [PATCH v3 04/24] drm/i915/lt_phy: Refactor LT PHY PLL handling to use explicit PLL state
2026-03-10 15:38 ` [PATCH v3 04/24] " Mika Kahola
@ 2026-03-11 4:18 ` Kandpal, Suraj
2026-03-11 6:15 ` Kandpal, Suraj
0 siblings, 1 reply; 62+ messages in thread
From: Kandpal, Suraj @ 2026-03-11 4:18 UTC (permalink / raw)
To: Kahola, Mika, intel-gfx@lists.freedesktop.org,
intel-xe@lists.freedesktop.org
Cc: Kahola, Mika
> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Mika
> Kahola
> Sent: Tuesday, March 10, 2026 9:08 PM
> To: intel-gfx@lists.freedesktop.org; intel-xe@lists.freedesktop.org
> Cc: Kahola, Mika <mika.kahola@intel.com>
> Subject: [PATCH v3 04/24] drm/i915/lt_phy: Refactor LT PHY PLL handling to use
> explicit PLL state
>
> The LT PHY implementation currently pulls PLL and port_clock information
> directly from the CRTC state. This ties the PHY programming logic too tightly to
> the CRTC state and makes it harder to clearly express the PHY’s own PLL
> configuration.
>
> Introduce an explicit "struct intel_lt_phy_pll_state" argument for the PHY
> functions and update callers accordingly.
>
> No functional change is intended — this is a preparatory cleanup for to bring LT
> PHY PLL handling as part of PLL framework.
>
> v2: DP, HDMI 2.0, and HDMI FRL modes are port of the VDR configuration 0
> register. These modes are defined by bits 2:0. Decode these to
> differentiate DP and HDMI modes when programming PLL's. (Imre, Suraj)
>
> BSpec: 744921
No new line needed here
>
> Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_lt_phy.c | 67 ++++++++++++++-------
> 1 file changed, 46 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> index 8fe61cfdb706..76acffb2e840 100644
> --- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> @@ -32,6 +32,7 @@
> INTEL_LT_PHY_LANE0)
> #define MODE_DP 3
> #define MODE_HDMI_20 4
> +#define MODE_HDMI_FRL 5
> #define Q32_TO_INT(x) ((x) >> 32)
> #define Q32_TO_FRAC(x) ((x) & 0xFFFFFFFF)
> #define DCO_MIN_FREQ_MHZ 11850
> @@ -1176,9 +1177,30 @@ intel_lt_phy_lane_reset(struct intel_encoder
> *encoder,
> intel_de_rmw(display, XELPDP_PORT_BUF_CTL2(display, port),
> lane_phy_pulse_status, 0); }
>
> +static bool intel_lt_phy_is_hdmi(const struct intel_lt_phy_pll_state
> +*ltpll) {
> + u8 mode = REG_FIELD_GET8(LT_PHY_VDR_MODE_ENCODING_MASK,
> +ltpll->config[0]);
> +
> + if (mode == MODE_HDMI_20 || mode == MODE_HDMI_FRL)
> + return true;
> +
> + return false;
> +}
> +
> +static bool intel_lt_phy_is_dp(const struct intel_lt_phy_pll_state
> +*ltpll) {
> + u8 mode = REG_FIELD_GET8(LT_PHY_VDR_MODE_ENCODING_MASK,
> +ltpll->config[0]);
> +
> + if (mode == MODE_DP)
> + return true;
> +
> + return false;
> +}
> +
> static void
> intel_lt_phy_program_port_clock_ctl(struct intel_encoder *encoder,
> - const struct intel_crtc_state *crtc_state,
> + const struct intel_lt_phy_pll_state *ltpll,
> + int port_clock,
> bool lane_reversal)
> {
> struct intel_display *display = to_intel_display(encoder); @@ -1195,17
> +1217,16 @@ intel_lt_phy_program_port_clock_ctl(struct intel_encoder
> *encoder,
> * but since the register bits still remain the same we use
> * the same definition
> */
> - if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI) &&
> - intel_hdmi_is_frl(crtc_state->port_clock))
> + if (intel_lt_phy_is_hdmi(ltpll) && intel_hdmi_is_frl(port_clock))
> val |= XELPDP_DDI_CLOCK_SELECT_PREP(display,
> XELPDP_DDI_CLOCK_SELECT_DIV18CLK);
> else
> val |= XELPDP_DDI_CLOCK_SELECT_PREP(display,
> XELPDP_DDI_CLOCK_SELECT_MAXPCLK);
>
> /* DP2.0 10G and 20G rates enable MPLLA*/
> - if (crtc_state->port_clock == 1000000 || crtc_state->port_clock ==
> 2000000)
> + if (port_clock == 1000000 || port_clock == 2000000)
> val |= XELPDP_SSC_ENABLE_PLLA;
> else
> - val |= crtc_state->dpll_hw_state.ltpll.ssc_enabled ?
> XELPDP_SSC_ENABLE_PLLB : 0;
> + val |= ltpll->ssc_enabled ? XELPDP_SSC_ENABLE_PLLB : 0;
>
> intel_de_rmw(display, XELPDP_PORT_CLOCK_CTL(display, encoder-
> >port),
> XELPDP_LANE1_PHY_CLOCK_SELECT |
> XELPDP_FORWARD_CLOCK_UNGATE | @@ -1248,10 +1269,12 @@ static u32
> intel_lt_phy_get_dp_clock(u8 rate)
>
> static bool
> intel_lt_phy_config_changed(struct intel_encoder *encoder,
> - const struct intel_crtc_state *crtc_state)
> + const struct intel_lt_phy_pll_state *ltpll)
Why are we changing this?
> {
> + struct intel_display *display = to_intel_display(encoder);
> u8 val, rate;
> u32 clock;
> + u32 port_clock = intel_lt_phy_calc_port_clock(display, ltpll);
No need to have this recalculated again
If we really want to change the arguments to send ltpll state
Then I recommend sending the crtc_state->port_clock as an argument
Otherwise rest looks good to me here
Regards,
Suraj Kandpal
>
> val = intel_lt_phy_read(encoder, INTEL_LT_PHY_LANE0,
> LT_PHY_VDR_0_CONFIG);
> @@ -1262,9 +1285,9 @@ intel_lt_phy_config_changed(struct intel_encoder
> *encoder,
> * using 1.62 Gbps clock since PHY PLL defaults to that
> * otherwise we always need to reconfigure it.
> */
> - if (intel_crtc_has_dp_encoder(crtc_state)) {
> + if (intel_lt_phy_is_dp(ltpll)) {
> clock = intel_lt_phy_get_dp_clock(rate);
> - if (crtc_state->port_clock == 1620000 && crtc_state-
> >port_clock == clock)
> + if (port_clock == 1620000 && port_clock == clock)
> return false;
> }
>
> @@ -1759,41 +1782,41 @@ intel_lt_phy_pll_calc_state(struct intel_crtc_state
> *crtc_state,
>
> static void
> intel_lt_phy_program_pll(struct intel_encoder *encoder,
> - const struct intel_crtc_state *crtc_state)
> + const struct intel_lt_phy_pll_state *ltpll)
> {
> u8 owned_lane_mask = intel_lt_phy_get_owned_lane_mask(encoder);
> int i, j, k;
>
> intel_lt_phy_write(encoder, owned_lane_mask,
> LT_PHY_VDR_0_CONFIG,
> - crtc_state->dpll_hw_state.ltpll.config[0],
> MB_WRITE_COMMITTED);
> + ltpll->config[0], MB_WRITE_COMMITTED);
> intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0,
> LT_PHY_VDR_1_CONFIG,
> - crtc_state->dpll_hw_state.ltpll.config[1],
> MB_WRITE_COMMITTED);
> + ltpll->config[1], MB_WRITE_COMMITTED);
> intel_lt_phy_write(encoder, owned_lane_mask,
> LT_PHY_VDR_2_CONFIG,
> - crtc_state->dpll_hw_state.ltpll.config[2],
> MB_WRITE_COMMITTED);
> + ltpll->config[2], MB_WRITE_COMMITTED);
>
> for (i = 0; i <= 12; i++) {
> intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0,
> LT_PHY_VDR_X_ADDR_MSB(i),
> - crtc_state->dpll_hw_state.ltpll.addr_msb[i],
> + ltpll->addr_msb[i],
> MB_WRITE_COMMITTED);
> intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0,
> LT_PHY_VDR_X_ADDR_LSB(i),
> - crtc_state->dpll_hw_state.ltpll.addr_lsb[i],
> + ltpll->addr_lsb[i],
> MB_WRITE_COMMITTED);
>
> for (j = 3, k = 0; j >= 0; j--, k++)
> intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0,
> LT_PHY_VDR_X_DATAY(i, j),
> - crtc_state-
> >dpll_hw_state.ltpll.data[i][k],
> + ltpll->data[i][k],
> MB_WRITE_COMMITTED);
> }
> }
>
> static void
> intel_lt_phy_enable_disable_tx(struct intel_encoder *encoder,
> - const struct intel_crtc_state *crtc_state)
> + const struct intel_lt_phy_pll_state *ltpll,
> + u8 lane_count)
> {
> struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
> bool lane_reversal = dig_port->lane_reversal;
> - u8 lane_count = crtc_state->lane_count;
> bool is_dp_alt =
> intel_tc_port_in_dp_alt_mode(dig_port);
> enum intel_tc_pin_assignment tc_pin =
> @@ -1895,7 +1918,8 @@ void intel_lt_phy_pll_enable(struct intel_encoder
> *encoder,
> intel_lt_phy_lane_reset(encoder, crtc_state->lane_count);
>
> /* 2. Program PORT_CLOCK_CTL register to configure clock muxes,
> gating, and SSC. */
> - intel_lt_phy_program_port_clock_ctl(encoder, crtc_state,
> lane_reversal);
> + intel_lt_phy_program_port_clock_ctl(encoder, &crtc_state-
> >dpll_hw_state.ltpll,
> + crtc_state->port_clock,
> lane_reversal);
>
> /* 3. Change owned PHY lanes power to Ready state. */
> intel_lt_phy_powerdown_change_sequence(encoder,
> owned_lane_mask, @@ -1905,12 +1929,12 @@ void
> intel_lt_phy_pll_enable(struct intel_encoder *encoder,
> * 4. Read the PHY message bus VDR register PHY_VDR_0_Config check
> enabled PLL type,
> * encoded rate and encoded mode.
> */
> - if (intel_lt_phy_config_changed(encoder, crtc_state)) {
> + if (intel_lt_phy_config_changed(encoder,
> +&crtc_state->dpll_hw_state.ltpll)) {
> /*
> * 5. Program the PHY internal PLL registers over PHY message
> bus for the desired
> * frequency and protocol type
> */
> - intel_lt_phy_program_pll(encoder, crtc_state);
> + intel_lt_phy_program_pll(encoder, &crtc_state-
> >dpll_hw_state.ltpll);
>
> /* 6. Use the P2P transaction flow */
> /*
> @@ -2001,7 +2025,8 @@ void intel_lt_phy_pll_enable(struct intel_encoder
> *encoder,
> intel_lt_phy_powerdown_change_sequence(encoder,
> owned_lane_mask,
> XELPDP_P0_STATE_ACTIVE);
>
> - intel_lt_phy_enable_disable_tx(encoder, crtc_state);
> + intel_lt_phy_enable_disable_tx(encoder, &crtc_state-
> >dpll_hw_state.ltpll,
> + crtc_state->lane_count);
> intel_lt_phy_transaction_end(encoder, wakeref); }
>
> --
> 2.43.0
^ permalink raw reply [flat|nested] 62+ messages in thread
* RE: [PATCH v2 14/24] drm/i915/lt_phy: Add xe3plpd .get_freq hook
2026-03-04 13:14 ` [PATCH v2 14/24] drm/i915/lt_phy: Add xe3plpd .get_freq hook Mika Kahola
@ 2026-03-11 4:24 ` Kandpal, Suraj
2026-03-11 13:32 ` Kahola, Mika
0 siblings, 1 reply; 62+ messages in thread
From: Kandpal, Suraj @ 2026-03-11 4:24 UTC (permalink / raw)
To: Kahola, Mika, intel-gfx@lists.freedesktop.org,
intel-xe@lists.freedesktop.org
Cc: Kahola, Mika
> Subject: [PATCH v2 14/24] drm/i915/lt_phy: Add xe3plpd .get_freq hook
>
> Add .get_freq function hook to support dpll framework for xe3plpd platform.
>
> Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_dpll.c | 5 -----
> drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 13 +++++++++++++
> 2 files changed, 13 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dpll.c
> b/drivers/gpu/drm/i915/display/intel_dpll.c
> index 147baa777856..88f11cb8c5e1 100644
> --- a/drivers/gpu/drm/i915/display/intel_dpll.c
> +++ b/drivers/gpu/drm/i915/display/intel_dpll.c
> @@ -1219,17 +1219,12 @@ static int xe3plpd_crtc_compute_clock(struct
> intel_atomic_state *state,
> intel_atomic_get_new_crtc_state(state, crtc);
> struct intel_encoder *encoder =
> intel_get_crtc_new_encoder(state, crtc_state);
> - struct intel_display *display = to_intel_display(encoder);
> int ret;
>
> ret = intel_lt_phy_pll_calc_state(crtc_state, encoder, &crtc_state-
> >dpll_hw_state);
> if (ret)
> return ret;
>
> - /* TODO: Do the readback via intel_compute_shared_dplls() */
> - crtc_state->port_clock =
> - intel_lt_phy_calc_port_clock(display, &crtc_state-
> >dpll_hw_state.ltpll);
> -
Don't remove this here in this patch right now
xe3plpd_pll_get_freq won't get called till we totally enable dpll framework
breaking the functionality in between.
Just keep the function definition and assignment to respective hook here.
Ill go through all the patches and identify the best place to remove it to
Preserve bisectability
Regards,
Suraj Kandpal
> crtc_state->hw.adjusted_mode.crtc_clock =
> intel_crtc_dotclock(crtc_state);
>
> return 0;
> diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> index 6502916793f5..412582e29ca6 100644
> --- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> +++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> @@ -4583,8 +4583,21 @@ static bool xe3plpd_pll_get_hw_state(struct
> intel_display *display,
> return intel_lt_phy_pll_readout_hw_state(encoder, &dpll_hw_state-
> >ltpll); }
>
> +static int xe3plpd_pll_get_freq(struct intel_display *display,
> + const struct intel_dpll *pll,
> + const struct intel_dpll_hw_state
> *dpll_hw_state) {
> + struct intel_encoder *encoder = get_intel_encoder(display, pll);
> +
> + if (drm_WARN_ON(display->drm, !encoder))
> + return -EINVAL;
> +
> + return intel_lt_phy_calc_port_clock(display, &dpll_hw_state->ltpll); }
> +
> static const struct intel_dpll_funcs xe3plpd_pll_funcs = {
> .get_hw_state = xe3plpd_pll_get_hw_state,
> + .get_freq = xe3plpd_pll_get_freq,
> };
>
> static const struct dpll_info xe3plpd_plls[] = {
> --
> 2.43.0
^ permalink raw reply [flat|nested] 62+ messages in thread
* RE: [PATCH v2 16/24] drm/i915/lt_phy: Replace crtc compute clock
2026-03-04 13:14 ` [PATCH v2 16/24] drm/i915/lt_phy: Replace crtc compute clock Mika Kahola
@ 2026-03-11 4:30 ` Kandpal, Suraj
0 siblings, 0 replies; 62+ messages in thread
From: Kandpal, Suraj @ 2026-03-11 4:30 UTC (permalink / raw)
To: Kahola, Mika, intel-gfx@lists.freedesktop.org,
intel-xe@lists.freedesktop.org
Cc: Kahola, Mika
> Subject: [PATCH v2 16/24] drm/i915/lt_phy: Replace crtc compute clock
>
> The existing DPLL compute clock callback for the XE3PLPD platform
> (`xe3plpd_crtc_compute_clock`) was specific to that platform. Replace it with
> the more generic Haswell (`hsw_crtc_compute_clock`) implementation so that
> the compute clock path does not rely on the XE3PLPD hook.
>
Patch looks good mostly but does not belong here.
This breaks bisectability reason being dpll_mgr is currently null for LT PHY
And it will never do the compute_dpll call without warning.
Still going through patches will call out where it can be added.
Regards,
Suraj Kandpal
> Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_dpll.c | 20 +-------------------
> 1 file changed, 1 insertion(+), 19 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dpll.c
> b/drivers/gpu/drm/i915/display/intel_dpll.c
> index abc85ee9b832..c7d37e74fbe9 100644
> --- a/drivers/gpu/drm/i915/display/intel_dpll.c
> +++ b/drivers/gpu/drm/i915/display/intel_dpll.c
> @@ -1212,24 +1212,6 @@ static int dg2_crtc_compute_clock(struct
> intel_atomic_state *state,
> return 0;
> }
>
> -static int xe3plpd_crtc_compute_clock(struct intel_atomic_state *state,
> - struct intel_crtc *crtc)
> -{
> - struct intel_crtc_state *crtc_state =
> - intel_atomic_get_new_crtc_state(state, crtc);
> - struct intel_encoder *encoder =
> - intel_get_crtc_new_encoder(state, crtc_state);
> - int ret;
> -
> - ret = intel_lt_phy_pll_calc_state(crtc_state, encoder, &crtc_state-
> >dpll_hw_state);
> - if (ret)
> - return ret;
> -
> - crtc_state->hw.adjusted_mode.crtc_clock =
> intel_crtc_dotclock(crtc_state);
> -
> - return 0;
> -}
> -
> static int ilk_fb_cb_factor(const struct intel_crtc_state *crtc_state) {
> struct intel_display *display = to_intel_display(crtc_state); @@ -
> 1690,7 +1672,7 @@ static int i8xx_crtc_compute_clock(struct
> intel_atomic_state *state, }
>
> static const struct intel_dpll_global_funcs xe3plpd_dpll_funcs = {
> - .crtc_compute_clock = xe3plpd_crtc_compute_clock,
> + .crtc_compute_clock = hsw_crtc_compute_clock,
> .crtc_get_dpll = hsw_crtc_get_dpll,
> };
>
> --
> 2.43.0
^ permalink raw reply [flat|nested] 62+ messages in thread
* RE: [PATCH v2 17/24] drm/i915/lt_phy: Add .enable_clock hook on DDI
2026-03-04 13:14 ` [PATCH v2 17/24] drm/i915/lt_phy: Add .enable_clock hook on DDI Mika Kahola
@ 2026-03-11 4:48 ` Kandpal, Suraj
0 siblings, 0 replies; 62+ messages in thread
From: Kandpal, Suraj @ 2026-03-11 4:48 UTC (permalink / raw)
To: Kahola, Mika, intel-gfx@lists.freedesktop.org,
intel-xe@lists.freedesktop.org
Cc: Kahola, Mika
> Subject: [PATCH v2 17/24] drm/i915/lt_phy: Add .enable_clock hook on DDI
>
> Enable PLL clock on DDI by moving part of the PLL enabling sequence into a
> DDI clock enabling function.
>
> Signed-off-by: Mika Kahola <mika.kahola@intel.com>
LGTM,
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_ddi.c | 2 +-
> drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 13 ++++++++
> drivers/gpu/drm/i915/display/intel_lt_phy.c | 33 ++++++++++++-------
> drivers/gpu/drm/i915/display/intel_lt_phy.h | 10 ++++--
> 4 files changed, 43 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c
> b/drivers/gpu/drm/i915/display/intel_ddi.c
> index 76ba308f32ad..51403d09c477 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> @@ -5298,7 +5298,7 @@ void intel_ddi_init(struct intel_display *display,
> encoder->pipe_mask = ~0;
>
> if (HAS_LT_PHY(display)) {
> - encoder->enable_clock = intel_xe3plpd_pll_enable;
> + encoder->enable_clock = intel_xe3plpd_pll_enable_clock;
> encoder->disable_clock = intel_xe3plpd_pll_disable;
> encoder->port_pll_type = intel_mtl_port_pll_type;
> encoder->get_config = xe3plpd_ddi_get_config; diff --git
> a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> index 412582e29ca6..54c7a255b3a5 100644
> --- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> +++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> @@ -4595,7 +4595,20 @@ static int xe3plpd_pll_get_freq(struct intel_display
> *display,
> return intel_lt_phy_calc_port_clock(display, &dpll_hw_state->ltpll); }
>
> +static void xe3plpd_pll_enable(struct intel_display *display,
> + struct intel_dpll *pll,
> + const struct intel_dpll_hw_state *dpll_hw_state) {
> + struct intel_encoder *encoder = get_intel_encoder(display, pll);
> +
> + if (drm_WARN_ON(display->drm, !encoder))
> + return;
> +
> + intel_xe3plpd_pll_enable(encoder, pll, dpll_hw_state); }
> +
> static const struct intel_dpll_funcs xe3plpd_pll_funcs = {
> + .enable = xe3plpd_pll_enable,
> .get_hw_state = xe3plpd_pll_get_hw_state,
> .get_freq = xe3plpd_pll_get_freq,
> };
> diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> index c3686ac6adc9..6bc32d1734a7 100644
> --- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> @@ -1883,9 +1883,11 @@ intel_lt_phy_enable_disable_tx(struct
> intel_encoder *encoder, }
>
> void intel_lt_phy_pll_enable(struct intel_encoder *encoder,
> - const struct intel_crtc_state *crtc_state)
> + struct intel_dpll *pll,
> + const struct intel_dpll_hw_state *dpll_hw_state)
> {
> struct intel_display *display = to_intel_display(encoder);
> + int port_clock = intel_lt_phy_calc_port_clock(display,
> +&dpll_hw_state->ltpll);
> struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
> bool lane_reversal = dig_port->lane_reversal;
> u8 owned_lane_mask =
> intel_lt_phy_get_owned_lane_mask(encoder);
> @@ -1901,11 +1903,11 @@ void intel_lt_phy_pll_enable(struct
> intel_encoder *encoder,
> wakeref = intel_lt_phy_transaction_begin(encoder);
>
> /* 1. Enable MacCLK at default 162 MHz frequency. */
> - intel_lt_phy_lane_reset(encoder, crtc_state->lane_count);
> + intel_lt_phy_lane_reset(encoder, dpll_hw_state->ltpll.lane_count);
>
> /* 2. Program PORT_CLOCK_CTL register to configure clock muxes,
> gating, and SSC. */
> - intel_lt_phy_program_port_clock_ctl(encoder, &crtc_state-
> >dpll_hw_state.ltpll,
> - crtc_state->port_clock,
> lane_reversal);
> + intel_lt_phy_program_port_clock_ctl(encoder, &dpll_hw_state->ltpll,
> + port_clock, lane_reversal);
>
> /* 3. Change owned PHY lanes power to Ready state. */
> intel_lt_phy_powerdown_change_sequence(encoder,
> owned_lane_mask, @@ -1915,12 +1917,12 @@ void
> intel_lt_phy_pll_enable(struct intel_encoder *encoder,
> * 4. Read the PHY message bus VDR register PHY_VDR_0_Config
> check enabled PLL type,
> * encoded rate and encoded mode.
> */
> - if (intel_lt_phy_config_changed(encoder, &crtc_state-
> >dpll_hw_state.ltpll)) {
> + if (intel_lt_phy_config_changed(encoder, &dpll_hw_state->ltpll)) {
> /*
> * 5. Program the PHY internal PLL registers over PHY
> message bus for the desired
> * frequency and protocol type
> */
> - intel_lt_phy_program_pll(encoder, &crtc_state-
> >dpll_hw_state.ltpll);
> + intel_lt_phy_program_pll(encoder, &dpll_hw_state->ltpll);
>
> /* 6. Use the P2P transaction flow */
> /*
> @@ -1952,8 +1954,7 @@ void intel_lt_phy_pll_enable(struct intel_encoder
> *encoder,
> * Change. We handle this step in bxt_set_cdclk().
> */
> /* 10. Program DDI_CLK_VALFREQ to match intended DDI
> clock frequency. */
> - intel_de_write(display, DDI_CLK_VALFREQ(encoder->port),
> - crtc_state->port_clock);
> + intel_de_write(display, DDI_CLK_VALFREQ(encoder->port),
> port_clock);
>
> /* 11. Program PORT_CLOCK_CTL[PCLK PLL Request LN0] =
> 1. */
> intel_de_rmw(display, XELPDP_PORT_CLOCK_CTL(display,
> port), @@ -2000,7 +2001,7 @@ void intel_lt_phy_pll_enable(struct
> intel_encoder *encoder,
> lane_phy_pulse_status,
> lane_phy_pulse_status);
> } else {
> - intel_de_write(display, DDI_CLK_VALFREQ(encoder->port),
> crtc_state->port_clock);
> + intel_de_write(display, DDI_CLK_VALFREQ(encoder->port),
> port_clock);
> }
>
> /*
> @@ -2011,7 +2012,7 @@ void intel_lt_phy_pll_enable(struct intel_encoder
> *encoder,
> intel_lt_phy_powerdown_change_sequence(encoder,
> owned_lane_mask,
> XELPDP_P0_STATE_ACTIVE);
>
> - intel_lt_phy_enable_disable_tx(encoder, &crtc_state-
> >dpll_hw_state.ltpll);
> + intel_lt_phy_enable_disable_tx(encoder, &dpll_hw_state->ltpll);
> intel_lt_phy_transaction_end(encoder, wakeref); }
>
> @@ -2282,14 +2283,22 @@ void intel_lt_phy_pll_state_verify(struct
> intel_atomic_state *state, }
>
> void intel_xe3plpd_pll_enable(struct intel_encoder *encoder,
> - const struct intel_crtc_state *crtc_state)
> + struct intel_dpll *pll,
> + const struct intel_dpll_hw_state *dpll_hw_state) {
> + intel_lt_phy_pll_enable(encoder, pll, dpll_hw_state); }
> +
> +void intel_xe3plpd_pll_enable_clock(struct intel_encoder *encoder,
> + const struct intel_crtc_state *crtc_state)
> {
> struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
>
> if (intel_tc_port_in_tbt_alt_mode(dig_port))
> intel_mtl_tbt_pll_enable_clock(encoder, crtc_state-
> >port_clock);
> else
> - intel_lt_phy_pll_enable(encoder, crtc_state);
> + /* TODO: remove when PLL mgr is in place. */
> + intel_xe3plpd_pll_enable(encoder, NULL, &crtc_state-
> >dpll_hw_state);
> }
>
> void intel_xe3plpd_pll_disable(struct intel_encoder *encoder) diff --git
> a/drivers/gpu/drm/i915/display/intel_lt_phy.h
> b/drivers/gpu/drm/i915/display/intel_lt_phy.h
> index 0053bb5489e5..9188ce980119 100644
> --- a/drivers/gpu/drm/i915/display/intel_lt_phy.h
> +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.h
> @@ -11,13 +11,16 @@
> struct drm_printer;
> struct intel_atomic_state;
> struct intel_display;
> +struct intel_dpll;
> +struct intel_dpll_hw_state;
> struct intel_encoder;
> struct intel_crtc_state;
> struct intel_crtc;
> struct intel_lt_phy_pll_state;
>
> void intel_lt_phy_pll_enable(struct intel_encoder *encoder,
> - const struct intel_crtc_state *crtc_state);
> + struct intel_dpll *pll,
> + const struct intel_dpll_hw_state *dpll_hw_state);
> void intel_lt_phy_pll_disable(struct intel_encoder *encoder); int
> intel_lt_phy_pll_calc_state(struct intel_crtc_state *crtc_state, @@ -40,8
> +43,11 @@ int intel_lt_phy_calculate_hdmi_state(struct
> intel_lt_phy_pll_state *lt_state,
> u32 frequency_khz);
> void intel_xe3plpd_pll_enable(struct intel_encoder *encoder,
> - const struct intel_crtc_state *crtc_state);
> + struct intel_dpll *pll,
> + const struct intel_dpll_hw_state *dpll_hw_state);
> void intel_xe3plpd_pll_disable(struct intel_encoder *encoder); void
> intel_lt_phy_verify_plls(struct intel_display *display);
> +void intel_xe3plpd_pll_enable_clock(struct intel_encoder *encoder,
> + const struct intel_crtc_state *crtc_state);
>
> #endif /* __INTEL_LT_PHY_H__ */
> --
> 2.43.0
^ permalink raw reply [flat|nested] 62+ messages in thread
* RE: [PATCH v2 18/24] drm/i915/lt_phy: Add .disable_clock hook on DDI
2026-03-04 13:14 ` [PATCH v2 18/24] drm/i915/lt_phy: Add .disable_clock " Mika Kahola
@ 2026-03-11 5:31 ` Kandpal, Suraj
2026-03-11 5:59 ` Kandpal, Suraj
0 siblings, 1 reply; 62+ messages in thread
From: Kandpal, Suraj @ 2026-03-11 5:31 UTC (permalink / raw)
To: Kahola, Mika, intel-gfx@lists.freedesktop.org,
intel-xe@lists.freedesktop.org
Cc: Kahola, Mika
> Subject: [PATCH v2 18/24] drm/i915/lt_phy: Add .disable_clock hook on DDI
>
> Disable PLL clock on DDI by moving part of the PLL disabling sequence into a
> DDI clock disabling function.
>
Commit message needs to be something like
"Add new pll_disable_clock functions so that they can be hooked up to dpll->disable.
This is just a wrapper over the exitisting intel_xe3plpd_pll_disable to make it compatible
With dpll->disable function"
> Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_ddi.c | 2 +-
> drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 12 ++++++++++++
> drivers/gpu/drm/i915/display/intel_lt_phy.c | 11 +++++++++++
> drivers/gpu/drm/i915/display/intel_lt_phy.h | 1 +
> 4 files changed, 25 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c
> b/drivers/gpu/drm/i915/display/intel_ddi.c
> index 51403d09c477..191ae7cf81fb 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> @@ -5299,7 +5299,7 @@ void intel_ddi_init(struct intel_display *display,
>
> if (HAS_LT_PHY(display)) {
> encoder->enable_clock = intel_xe3plpd_pll_enable_clock;
> - encoder->disable_clock = intel_xe3plpd_pll_disable;
> + encoder->disable_clock = intel_xe3plpd_pll_disable_clock;
> encoder->port_pll_type = intel_mtl_port_pll_type;
> encoder->get_config = xe3plpd_ddi_get_config;
> } else if (DISPLAY_VER(display) >= 14) { diff --git
> a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> index 54c7a255b3a5..28c560417409 100644
> --- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> +++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> @@ -4607,8 +4607,20 @@ static void xe3plpd_pll_enable(struct intel_display
> *display,
> intel_xe3plpd_pll_enable(encoder, pll, dpll_hw_state); }
>
> +static void xe3plpd_pll_disable(struct intel_display *display,
> + struct intel_dpll *pll)
> +{
> + struct intel_encoder *encoder = get_intel_encoder(display, pll);
> +
> + if (drm_WARN_ON(display->drm, !encoder))
> + return;
> +
> + intel_xe3plpd_pll_disable(encoder);
> +}
> +
> static const struct intel_dpll_funcs xe3plpd_pll_funcs = {
> .enable = xe3plpd_pll_enable,
> + .disable = xe3plpd_pll_disable,
> .get_hw_state = xe3plpd_pll_get_hw_state,
> .get_freq = xe3plpd_pll_get_freq,
> };
> diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> index 6bc32d1734a7..3230d2e28d9c 100644
> --- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> @@ -2309,6 +2309,17 @@ void intel_xe3plpd_pll_disable(struct
> intel_encoder *encoder)
> intel_mtl_tbt_pll_disable_clock(encoder);
> else
> intel_lt_phy_pll_disable(encoder);
> +}
> +
> +void intel_xe3plpd_pll_disable_clock(struct intel_encoder *encoder) {
> + struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
> +
> + if (intel_tc_port_in_tbt_alt_mode(dig_port))
> + intel_mtl_tbt_pll_disable_clock(encoder);
This is already called inside intel_mtl_tbt_pll_disable clock.
Is there any specific reason to add a wrapper around this other than naming if not
You can drop this wrapper and proceed without the below change
- encoder->disable_clock = intel_xe3plpd_pll_disable;
+ encoder->disable_clock = intel_xe3plpd_pll_disable_clock;
Regards,
Suraj Kandpal
> + else
> + /* TODO: remove when PLL mgr is in place. */
> + intel_xe3plpd_pll_disable(encoder);
>
> }
>
> diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.h
> b/drivers/gpu/drm/i915/display/intel_lt_phy.h
> index 9188ce980119..3838e9326773 100644
> --- a/drivers/gpu/drm/i915/display/intel_lt_phy.h
> +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.h
> @@ -49,5 +49,6 @@ void intel_xe3plpd_pll_disable(struct intel_encoder
> *encoder); void intel_lt_phy_verify_plls(struct intel_display *display); void
> intel_xe3plpd_pll_enable_clock(struct intel_encoder *encoder,
> const struct intel_crtc_state *crtc_state);
> +void intel_xe3plpd_pll_disable_clock(struct intel_encoder *encoder);
>
> #endif /* __INTEL_LT_PHY_H__ */
> --
> 2.43.0
^ permalink raw reply [flat|nested] 62+ messages in thread
* RE: [PATCH v2 19/24] drm/i915/lt_phy: Dump lane count for HW state
2026-03-04 13:14 ` [PATCH v2 19/24] drm/i915/lt_phy: Dump lane count for HW state Mika Kahola
@ 2026-03-11 5:46 ` Kandpal, Suraj
0 siblings, 0 replies; 62+ messages in thread
From: Kandpal, Suraj @ 2026-03-11 5:46 UTC (permalink / raw)
To: Kahola, Mika, intel-gfx@lists.freedesktop.org,
intel-xe@lists.freedesktop.org
Cc: Kahola, Mika
> Subject: [PATCH v2 19/24] drm/i915/lt_phy: Dump lane count for HW state
>
> Add lane count as part of HW state dump.
Nit: Add " To increase debuggability"
Otherwise LGTM,
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
>
> Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_lt_phy.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> index 3230d2e28d9c..066e2f16791c 100644
> --- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> @@ -2152,8 +2152,8 @@ void intel_lt_phy_dump_hw_state(struct drm_printer
> *p, {
> int i, j;
>
> - drm_printf(p, "lt_phy_pll_hw_state: ssc enabled: %d, tbt mode: %d\n",
> - hw_state->ssc_enabled, hw_state->tbt_mode);
> + drm_printf(p, "lt_phy_pll_hw_state: lane count: %d, ssc enabled: %d,
> tbt mode: %d\n",
> + hw_state->lane_count, hw_state->ssc_enabled, hw_state-
> >tbt_mode);
>
> for (i = 0; i < 3; i++) {
> drm_printf(p, "config[%d] = 0x%.4x,\n",
> --
> 2.43.0
^ permalink raw reply [flat|nested] 62+ messages in thread
* RE: [PATCH v2 21/24] drm/i915/lt_phy: Get encoder configuration for xe3plpd platform
2026-03-04 13:14 ` [PATCH v2 21/24] drm/i915/lt_phy: Get encoder configuration for xe3plpd platform Mika Kahola
@ 2026-03-11 5:55 ` Kandpal, Suraj
0 siblings, 0 replies; 62+ messages in thread
From: Kandpal, Suraj @ 2026-03-11 5:55 UTC (permalink / raw)
To: Kahola, Mika, intel-gfx@lists.freedesktop.org,
intel-xe@lists.freedesktop.org
Cc: Kahola, Mika
> Subject: [PATCH v2 21/24] drm/i915/lt_phy: Get encoder configuration for
> xe3plpd platform
>
> For DDI initialization get encoder configuration by reusing
> MTL+ configuration.
Reframe commit message
" Reuse mtl_ddi_*_get_config functions now that all hooks are in place"
With that fixed LGTM,
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
>
> Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_ddi.c | 20 ++++----------------
> 1 file changed, 4 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c
> b/drivers/gpu/drm/i915/display/intel_ddi.c
> index 191ae7cf81fb..385d6b26693d 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> @@ -4243,21 +4243,6 @@ void intel_ddi_get_clock(struct intel_encoder
> *encoder,
> &crtc_state-
> >dpll_hw_state); }
>
> -static void xe3plpd_ddi_get_config(struct intel_encoder *encoder,
> - struct intel_crtc_state *crtc_state)
> -{
> - struct intel_display *display = to_intel_display(encoder);
> -
> - intel_lt_phy_pll_readout_hw_state(encoder, &crtc_state-
> >dpll_hw_state.ltpll);
> -
> - if (crtc_state->dpll_hw_state.ltpll.tbt_mode)
> - crtc_state->port_clock =
> intel_mtl_tbt_calc_port_clock(encoder);
> - else
> - crtc_state->port_clock =
> - intel_lt_phy_calc_port_clock(display, &crtc_state-
> >dpll_hw_state.ltpll);
> - intel_ddi_get_config(encoder, crtc_state);
> -}
> -
> static bool icl_ddi_tc_pll_is_tbt(const struct intel_dpll *pll) {
> return pll->info->id == DPLL_ID_ICL_TBTPLL; @@ -5301,7 +5286,10
> @@ void intel_ddi_init(struct intel_display *display,
> encoder->enable_clock = intel_xe3plpd_pll_enable_clock;
> encoder->disable_clock = intel_xe3plpd_pll_disable_clock;
> encoder->port_pll_type = intel_mtl_port_pll_type;
> - encoder->get_config = xe3plpd_ddi_get_config;
> + if (intel_encoder_is_tc(encoder))
> + encoder->get_config = mtl_ddi_tc_phy_get_config;
> + else
> + encoder->get_config =
> mtl_ddi_non_tc_phy_get_config;
> } else if (DISPLAY_VER(display) >= 14) {
> encoder->enable_clock = intel_mtl_pll_enable_clock;
> encoder->disable_clock = intel_mtl_pll_disable_clock;
> --
> 2.43.0
^ permalink raw reply [flat|nested] 62+ messages in thread
* RE: [PATCH v2 18/24] drm/i915/lt_phy: Add .disable_clock hook on DDI
2026-03-11 5:31 ` Kandpal, Suraj
@ 2026-03-11 5:59 ` Kandpal, Suraj
2026-03-11 11:34 ` Kahola, Mika
0 siblings, 1 reply; 62+ messages in thread
From: Kandpal, Suraj @ 2026-03-11 5:59 UTC (permalink / raw)
To: Kandpal, Suraj, Kahola, Mika, intel-gfx@lists.freedesktop.org,
intel-xe@lists.freedesktop.org
Cc: Kahola, Mika
> Subject: RE: [PATCH v2 18/24] drm/i915/lt_phy: Add .disable_clock hook on
> DDI
>
> > Subject: [PATCH v2 18/24] drm/i915/lt_phy: Add .disable_clock hook on
> > DDI
> >
> > Disable PLL clock on DDI by moving part of the PLL disabling sequence
> > into a DDI clock disabling function.
> >
>
> Commit message needs to be something like "Add new pll_disable_clock
> functions so that they can be hooked up to dpll->disable.
> This is just a wrapper over the exitisting intel_xe3plpd_pll_disable to make it
> compatible With dpll->disable function"
>
>
> > Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> > ---
> > drivers/gpu/drm/i915/display/intel_ddi.c | 2 +-
> > drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 12 ++++++++++++
> > drivers/gpu/drm/i915/display/intel_lt_phy.c | 11 +++++++++++
> > drivers/gpu/drm/i915/display/intel_lt_phy.h | 1 +
> > 4 files changed, 25 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c
> > b/drivers/gpu/drm/i915/display/intel_ddi.c
> > index 51403d09c477..191ae7cf81fb 100644
> > --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> > +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> > @@ -5299,7 +5299,7 @@ void intel_ddi_init(struct intel_display
> > *display,
> >
> > if (HAS_LT_PHY(display)) {
> > encoder->enable_clock = intel_xe3plpd_pll_enable_clock;
> > - encoder->disable_clock = intel_xe3plpd_pll_disable;
> > + encoder->disable_clock = intel_xe3plpd_pll_disable_clock;
> > encoder->port_pll_type = intel_mtl_port_pll_type;
> > encoder->get_config = xe3plpd_ddi_get_config;
> > } else if (DISPLAY_VER(display) >= 14) { diff --git
> > a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> > b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> > index 54c7a255b3a5..28c560417409 100644
> > --- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> > +++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> > @@ -4607,8 +4607,20 @@ static void xe3plpd_pll_enable(struct
> > intel_display *display,
> > intel_xe3plpd_pll_enable(encoder, pll, dpll_hw_state); }
> >
> > +static void xe3plpd_pll_disable(struct intel_display *display,
> > + struct intel_dpll *pll)
> > +{
> > + struct intel_encoder *encoder = get_intel_encoder(display, pll);
> > +
> > + if (drm_WARN_ON(display->drm, !encoder))
> > + return;
> > +
> > + intel_xe3plpd_pll_disable(encoder);
> > +}
> > +
> > static const struct intel_dpll_funcs xe3plpd_pll_funcs = {
> > .enable = xe3plpd_pll_enable,
> > + .disable = xe3plpd_pll_disable,
> > .get_hw_state = xe3plpd_pll_get_hw_state,
> > .get_freq = xe3plpd_pll_get_freq,
> > };
> > diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > index 6bc32d1734a7..3230d2e28d9c 100644
> > --- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > @@ -2309,6 +2309,17 @@ void intel_xe3plpd_pll_disable(struct
> > intel_encoder *encoder)
> > intel_mtl_tbt_pll_disable_clock(encoder);
> > else
> > intel_lt_phy_pll_disable(encoder);
> > +}
> > +
> > +void intel_xe3plpd_pll_disable_clock(struct intel_encoder *encoder) {
> > + struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
> > +
> > + if (intel_tc_port_in_tbt_alt_mode(dig_port))
> > + intel_mtl_tbt_pll_disable_clock(encoder);
>
> This is already called inside intel_mtl_tbt_pll_disable clock.
> Is there any specific reason to add a wrapper around this other than naming if
> not You can drop this wrapper and proceed without the below change
> - encoder->disable_clock = intel_xe3plpd_pll_disable;
> + encoder->disable_clock = intel_xe3plpd_pll_disable_clock;
>
> Regards,
> Suraj Kandpal
>
> > + else
> > + /* TODO: remove when PLL mgr is in place. */
> > + intel_xe3plpd_pll_disable(encoder);
> >
> > }
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.h
> > b/drivers/gpu/drm/i915/display/intel_lt_phy.h
> > index 9188ce980119..3838e9326773 100644
> > --- a/drivers/gpu/drm/i915/display/intel_lt_phy.h
> > +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.h
> > @@ -49,5 +49,6 @@ void intel_xe3plpd_pll_disable(struct intel_encoder
> > *encoder); void intel_lt_phy_verify_plls(struct intel_display
> > *display); void intel_xe3plpd_pll_enable_clock(struct intel_encoder
> *encoder,
> > const struct intel_crtc_state *crtc_state);
> > +void intel_xe3plpd_pll_disable_clock(struct intel_encoder *encoder);
Also rearrange in ASCIIBETICAL order
Regards,
Suraj Kandpal
> >
> > #endif /* __INTEL_LT_PHY_H__ */
> > --
> > 2.43.0
^ permalink raw reply [flat|nested] 62+ messages in thread
* RE: [PATCH v2 22/24] drm/i915/lt_phy: Add xe3plpd Thunderbolt pll hooks
2026-03-04 13:14 ` [PATCH v2 22/24] drm/i915/lt_phy: Add xe3plpd Thunderbolt pll hooks Mika Kahola
@ 2026-03-11 6:05 ` Kandpal, Suraj
0 siblings, 0 replies; 62+ messages in thread
From: Kandpal, Suraj @ 2026-03-11 6:05 UTC (permalink / raw)
To: Kahola, Mika, intel-gfx@lists.freedesktop.org,
intel-xe@lists.freedesktop.org
Cc: Kahola, Mika
> Subject: [PATCH v2 22/24] drm/i915/lt_phy: Add xe3plpd Thunderbolt pll
> hooks
* PLL
>
> Add the PLL hooks for the TBT PLL on xe3plpd. These are simple stubs similarly
* similar to the ...
> to the TBT PLL on earlier platforms, since this PLL is always on from the display
> POV - so no PLL enable/disable programming is required as opposed to the
> non-TBT PLLs - and the clocks for different link rates are enabled/disabled at a
> different level, via the
> intel_encoder::enable_clock()/disable_clock() interface.
>
With above fixed LGTM
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
> Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 13 +++++++++++--
> drivers/gpu/drm/i915/display/intel_lt_phy.c | 18 ++++++++++++++++++
> drivers/gpu/drm/i915/display/intel_lt_phy.h | 4 ++++
> 3 files changed, 33 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> index 28c560417409..534cc691979f 100644
> --- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> +++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> @@ -4618,6 +4618,13 @@ static void xe3plpd_pll_disable(struct intel_display
> *display,
> intel_xe3plpd_pll_disable(encoder);
> }
>
> +static const struct intel_dpll_funcs xe3plpd_tbt_pll_funcs = {
> + .enable = mtl_tbt_pll_enable,
> + .disable = mtl_tbt_pll_disable,
> + .get_hw_state = intel_lt_phy_tbt_pll_readout_hw_state,
> + .get_freq = mtl_tbt_pll_get_freq,
> +};
> +
> static const struct intel_dpll_funcs xe3plpd_pll_funcs = {
> .enable = xe3plpd_pll_enable,
> .disable = xe3plpd_pll_disable,
> @@ -4628,7 +4635,8 @@ static const struct intel_dpll_funcs
> xe3plpd_pll_funcs = { static const struct dpll_info xe3plpd_plls[] = {
> { .name = "DPLL 0", .funcs = &xe3plpd_pll_funcs, .id =
> DPLL_ID_ICL_DPLL0, },
> { .name = "DPLL 1", .funcs = &xe3plpd_pll_funcs, .id =
> DPLL_ID_ICL_DPLL1, },
> - /* TODO: Add TBT */
> + { .name = "TBT PLL", .funcs = &xe3plpd_tbt_pll_funcs, .id =
> DPLL_ID_ICL_TBTPLL,
> + .is_alt_port_dpll = true, .always_on = true },
> { .name = "TC PLL 1", .funcs = &xe3plpd_pll_funcs, .id =
> DPLL_ID_ICL_MGPLL1, },
> { .name = "TC PLL 2", .funcs = &xe3plpd_pll_funcs, .id =
> DPLL_ID_ICL_MGPLL2, },
> { .name = "TC PLL 3", .funcs = &xe3plpd_pll_funcs, .id =
> DPLL_ID_ICL_MGPLL3, }, @@ -4671,7 +4679,8 @@ static int
> xe3plpd_compute_tc_phy_dplls(struct intel_atomic_state *state,
> struct icl_port_dpll *port_dpll;
> int ret;
>
> - /* TODO: Add state calculation for TBT PLL */
> + port_dpll = &crtc_state->icl_port_dplls[ICL_PORT_DPLL_DEFAULT];
> + intel_lt_phy_tbt_pll_calc_state(&port_dpll->hw_state);
>
> port_dpll = &crtc_state->icl_port_dplls[ICL_PORT_DPLL_MG_PHY];
> ret = intel_lt_phy_pll_calc_state(crtc_state, encoder, &port_dpll-
> >hw_state); diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> index 232f14d69ec8..746b0182362a 100644
> --- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> @@ -1766,6 +1766,13 @@ intel_lt_phy_pll_calc_state(struct intel_crtc_state
> *crtc_state,
> return -EINVAL;
> }
>
> +void intel_lt_phy_tbt_pll_calc_state(struct intel_dpll_hw_state
> +*hw_state) {
> + memset(hw_state, 0, sizeof(*hw_state));
> +
> + hw_state->ltpll.tbt_mode = true;
> +}
> +
> static void
> intel_lt_phy_program_pll(struct intel_encoder *encoder,
> const struct intel_lt_phy_pll_state *ltpll) @@ -2208,6
> +2215,17 @@ static bool intel_lt_phy_pll_is_enabled(struct intel_encoder
> *encoder)
> intel_lt_phy_get_pclk_pll_ack(lane);
> }
>
> +bool intel_lt_phy_tbt_pll_readout_hw_state(struct intel_display *display,
> + struct intel_dpll *pll,
> + struct intel_dpll_hw_state
> *hw_state) {
> + memset(hw_state, 0, sizeof(*hw_state));
> +
> + hw_state->ltpll.tbt_mode = true;
> +
> + return true;
> +}
> +
> bool intel_lt_phy_pll_readout_hw_state(struct intel_encoder *encoder,
> struct intel_lt_phy_pll_state *pll_state) {
> diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.h
> b/drivers/gpu/drm/i915/display/intel_lt_phy.h
> index 3838e9326773..1c2ec438cd10 100644
> --- a/drivers/gpu/drm/i915/display/intel_lt_phy.h
> +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.h
> @@ -26,6 +26,7 @@ int
> intel_lt_phy_pll_calc_state(struct intel_crtc_state *crtc_state,
> struct intel_encoder *encoder,
> struct intel_dpll_hw_state *hw_state);
> +void intel_lt_phy_tbt_pll_calc_state(struct intel_dpll_hw_state
> +*hw_state);
> int intel_lt_phy_calc_port_clock(struct intel_display *display,
> const struct intel_lt_phy_pll_state *lt_state);
> void intel_lt_phy_set_signal_levels(struct intel_encoder *encoder, @@ -35,6
> +36,9 @@ void intel_lt_phy_dump_hw_state(struct drm_printer *p, bool
> intel_lt_phy_pll_compare_hw_state(const struct intel_lt_phy_pll_state *a,
> const struct intel_lt_phy_pll_state *b);
> +bool intel_lt_phy_tbt_pll_readout_hw_state(struct intel_display *display,
> + struct intel_dpll *pll,
> + struct intel_dpll_hw_state
> *hw_state);
> bool intel_lt_phy_pll_readout_hw_state(struct intel_encoder *encoder,
> struct intel_lt_phy_pll_state *pll_state);
> void intel_lt_phy_pll_state_verify(struct intel_atomic_state *state,
> --
> 2.43.0
^ permalink raw reply [flat|nested] 62+ messages in thread
* RE: [PATCH v2 24/24] drm/i915/lt_phy: Enable dpll framework for xe3plpd
2026-03-04 13:14 ` [PATCH v2 24/24] drm/i915/lt_phy: Enable dpll framework for xe3plpd Mika Kahola
@ 2026-03-11 6:12 ` Kandpal, Suraj
0 siblings, 0 replies; 62+ messages in thread
From: Kandpal, Suraj @ 2026-03-11 6:12 UTC (permalink / raw)
To: Kahola, Mika, intel-gfx@lists.freedesktop.org,
intel-xe@lists.freedesktop.org
Cc: Kahola, Mika
> Subject: [PATCH v2 24/24] drm/i915/lt_phy: Enable dpll framework for
> xe3plpd
>
> xe3plpd platform is supported by dpll framework remove a separate check for
> hw comparison and rely solely on dpll framework hw comparison.
>
> Finally, all required hooks are now in place so initialize PLL manager for
> xe3plpd platform and remove the redirections to the legacy code paths for
> clock enable/disable as well as state mismatch checks that are no longer
> needed.
>
> Signed-off-by: Mika Kahola <mika.kahola@intel.com>
Patch 16 need to be moved after this patch according to me
While also making sure that the change in patch 14 where we drop
- /* TODO: Do the readback via intel_compute_shared_dplls() */
- crtc_state->port_clock =
- intel_lt_phy_calc_port_clock(display, &crtc_state->dpll_hw_state.ltpll);
-
Is not done in that patch
Rest looks good to me
Regards,
Suraj Kandpal
> ---
> drivers/gpu/drm/i915/display/intel_ddi.c | 2 +-
> drivers/gpu/drm/i915/display/intel_display.c | 31 -------------------
> drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 7 +++--
> drivers/gpu/drm/i915/display/intel_lt_phy.c | 8 +----
> 4 files changed, 6 insertions(+), 42 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c
> b/drivers/gpu/drm/i915/display/intel_ddi.c
> index 385d6b26693d..c3cceaf781ab 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> @@ -5285,7 +5285,7 @@ void intel_ddi_init(struct intel_display *display,
> if (HAS_LT_PHY(display)) {
> encoder->enable_clock = intel_xe3plpd_pll_enable_clock;
> encoder->disable_clock = intel_xe3plpd_pll_disable_clock;
> - encoder->port_pll_type = intel_mtl_port_pll_type;
> + encoder->port_pll_type = icl_ddi_tc_port_pll_type;
> if (intel_encoder_is_tc(encoder))
> encoder->get_config = mtl_ddi_tc_phy_get_config;
> else
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c
> b/drivers/gpu/drm/i915/display/intel_display.c
> index d67ec81c0b01..af02a666c3a1 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -5058,23 +5058,6 @@ static bool allow_vblank_delay_fastset(const
> struct intel_crtc_state *old_crtc_s
> !intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DSI); }
>
> -static void
> -pipe_config_lt_phy_pll_mismatch(struct drm_printer *p, bool fastset,
> - const struct intel_crtc *crtc,
> - const char *name,
> - const struct intel_lt_phy_pll_state *a,
> - const struct intel_lt_phy_pll_state *b)
> -{
> - char *chipname = "LTPHY";
> -
> - pipe_config_mismatch(p, fastset, crtc, name, chipname);
> -
> - drm_printf(p, "expected:\n");
> - intel_lt_phy_dump_hw_state(p, a);
> - drm_printf(p, "found:\n");
> - intel_lt_phy_dump_hw_state(p, b);
> -}
> -
> bool
> intel_pipe_config_compare(const struct intel_crtc_state *current_config,
> const struct intel_crtc_state *pipe_config, @@ -
> 5189,16 +5172,6 @@ intel_pipe_config_compare(const struct intel_crtc_state
> *current_config,
> } \
> } while (0)
>
> -#define PIPE_CONF_CHECK_PLL_LT(name) do { \
> - if (!intel_lt_phy_pll_compare_hw_state(¤t_config->name, \
> - &pipe_config->name)) { \
> - pipe_config_lt_phy_pll_mismatch(&p, fastset, crtc,
> __stringify(name), \
> - ¤t_config->name, \
> - &pipe_config->name); \
> - ret = false; \
> - } \
> -} while (0)
> -
> #define PIPE_CONF_CHECK_TIMINGS(name) do { \
> PIPE_CONF_CHECK_I(name.crtc_hdisplay); \
> PIPE_CONF_CHECK_I(name.crtc_htotal); \ @@ -5425,10 +5398,6
> @@ intel_pipe_config_compare(const struct intel_crtc_state *current_config,
> if (display->dpll.mgr || HAS_GMCH(display))
> PIPE_CONF_CHECK_PLL(dpll_hw_state);
>
> - /* FIXME convert MTL+ platforms over to dpll_mgr */
> - if (HAS_LT_PHY(display))
> - PIPE_CONF_CHECK_PLL_LT(dpll_hw_state.ltpll);
> -
> PIPE_CONF_CHECK_X(dsi_pll.ctrl);
> PIPE_CONF_CHECK_X(dsi_pll.div);
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> index 63a0469d4e65..c4add325d8d6 100644
> --- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> +++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> @@ -4724,7 +4724,6 @@ static bool xe3plpd_compare_hw_state(const
> struct intel_dpll_hw_state *_a,
> return intel_lt_phy_pll_compare_hw_state(a, b); }
>
> -__maybe_unused
> static const struct intel_dpll_mgr xe3plpd_pll_mgr = {
> .dpll_info = xe3plpd_plls,
> .compute_dplls = xe3plpd_compute_dplls, @@ -4750,9 +4749,11 @@
> void intel_dpll_init(struct intel_display *display)
>
> mutex_init(&display->dpll.lock);
>
> - if (DISPLAY_VER(display) >= 35 || display->platform.dg2)
> - /* No shared DPLLs on NVL or DG2; port PLLs are part of the
> PHY */
> + if (display->platform.dg2)
> + /* No shared DPLLs on DG2; port PLLs are part of the PHY */
> dpll_mgr = NULL;
> + else if (DISPLAY_VER(display) >= 35)
> + dpll_mgr = &xe3plpd_pll_mgr;
> else if (DISPLAY_VER(display) >= 14)
> dpll_mgr = &mtl_pll_mgr;
> else if (display->platform.alderlake_p) diff --git
> a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> index 032fd80664c6..31669a435582 100644
> --- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> @@ -11,6 +11,7 @@
> #include "intel_ddi_buf_trans.h"
> #include "intel_de.h"
> #include "intel_display.h"
> +#include "intel_display_regs.h"
> #include "intel_display_types.h"
> #include "intel_display_utils.h"
> #include "intel_dpll.h"
> @@ -2277,9 +2278,6 @@ void intel_xe3plpd_pll_enable_clock(struct
> intel_encoder *encoder,
>
> if (intel_tc_port_in_tbt_alt_mode(dig_port))
> intel_mtl_tbt_pll_enable_clock(encoder, crtc_state-
> >port_clock);
> - else
> - /* TODO: remove when PLL mgr is in place. */
> - intel_xe3plpd_pll_enable(encoder, NULL, &crtc_state-
> >dpll_hw_state);
> }
>
> void intel_xe3plpd_pll_disable(struct intel_encoder *encoder) @@ -2298,10
> +2296,6 @@ void intel_xe3plpd_pll_disable_clock(struct intel_encoder
> *encoder)
>
> if (intel_tc_port_in_tbt_alt_mode(dig_port))
> intel_mtl_tbt_pll_disable_clock(encoder);
> - else
> - /* TODO: remove when PLL mgr is in place. */
> - intel_xe3plpd_pll_disable(encoder);
> -
> }
>
> static void intel_lt_phy_pll_verify_clock(struct intel_display *display,
> --
> 2.43.0
^ permalink raw reply [flat|nested] 62+ messages in thread
* RE: [PATCH v3 04/24] drm/i915/lt_phy: Refactor LT PHY PLL handling to use explicit PLL state
2026-03-11 4:18 ` Kandpal, Suraj
@ 2026-03-11 6:15 ` Kandpal, Suraj
2026-03-11 8:12 ` Kahola, Mika
0 siblings, 1 reply; 62+ messages in thread
From: Kandpal, Suraj @ 2026-03-11 6:15 UTC (permalink / raw)
To: Kandpal, Suraj, Kahola, Mika, intel-gfx@lists.freedesktop.org,
intel-xe@lists.freedesktop.org
Cc: Kahola, Mika
> > Subject: [PATCH v3 04/24] drm/i915/lt_phy: Refactor LT PHY PLL
> > handling to use explicit PLL state
> >
> > The LT PHY implementation currently pulls PLL and port_clock
> > information directly from the CRTC state. This ties the PHY
> > programming logic too tightly to the CRTC state and makes it harder to
> > clearly express the PHY’s own PLL configuration.
> >
> > Introduce an explicit "struct intel_lt_phy_pll_state" argument for the
> > PHY functions and update callers accordingly.
> >
> > No functional change is intended — this is a preparatory cleanup for
> > to bring LT PHY PLL handling as part of PLL framework.
> >
> > v2: DP, HDMI 2.0, and HDMI FRL modes are port of the VDR configuration 0
> > register. These modes are defined by bits 2:0. Decode these to
> > differentiate DP and HDMI modes when programming PLL's. (Imre,
> > Suraj)
> >
> > BSpec: 744921
>
> No new line needed here
>
> >
> > Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> > ---
> > drivers/gpu/drm/i915/display/intel_lt_phy.c | 67
> > ++++++++++++++-------
> > 1 file changed, 46 insertions(+), 21 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > index 8fe61cfdb706..76acffb2e840 100644
> > --- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > @@ -32,6 +32,7 @@
> > INTEL_LT_PHY_LANE0)
> > #define MODE_DP 3
> > #define MODE_HDMI_20 4
> > +#define MODE_HDMI_FRL 5
> > #define Q32_TO_INT(x) ((x) >> 32)
> > #define Q32_TO_FRAC(x) ((x) & 0xFFFFFFFF)
> > #define DCO_MIN_FREQ_MHZ 11850
> > @@ -1176,9 +1177,30 @@ intel_lt_phy_lane_reset(struct intel_encoder
> > *encoder,
> > intel_de_rmw(display, XELPDP_PORT_BUF_CTL2(display, port),
> > lane_phy_pulse_status, 0); }
> >
> > +static bool intel_lt_phy_is_hdmi(const struct intel_lt_phy_pll_state
> > +*ltpll) {
> > + u8 mode =
> REG_FIELD_GET8(LT_PHY_VDR_MODE_ENCODING_MASK,
> > +ltpll->config[0]);
> > +
> > + if (mode == MODE_HDMI_20 || mode == MODE_HDMI_FRL)
> > + return true;
> > +
> > + return false;
> > +}
> > +
> > +static bool intel_lt_phy_is_dp(const struct intel_lt_phy_pll_state
> > +*ltpll) {
> > + u8 mode =
> REG_FIELD_GET8(LT_PHY_VDR_MODE_ENCODING_MASK,
> > +ltpll->config[0]);
> > +
> > + if (mode == MODE_DP)
> > + return true;
> > +
> > + return false;
> > +}
> > +
> > static void
> > intel_lt_phy_program_port_clock_ctl(struct intel_encoder *encoder,
> > - const struct intel_crtc_state *crtc_state,
> > + const struct intel_lt_phy_pll_state *ltpll,
> > + int port_clock,
> > bool lane_reversal)
> > {
> > struct intel_display *display = to_intel_display(encoder); @@
> > -1195,17
> > +1217,16 @@ intel_lt_phy_program_port_clock_ctl(struct intel_encoder
> > *encoder,
> > * but since the register bits still remain the same we use
> > * the same definition
> > */
> > - if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI) &&
> > - intel_hdmi_is_frl(crtc_state->port_clock))
> > + if (intel_lt_phy_is_hdmi(ltpll) && intel_hdmi_is_frl(port_clock))
> > val |= XELPDP_DDI_CLOCK_SELECT_PREP(display,
> > XELPDP_DDI_CLOCK_SELECT_DIV18CLK);
> > else
> > val |= XELPDP_DDI_CLOCK_SELECT_PREP(display,
> > XELPDP_DDI_CLOCK_SELECT_MAXPCLK);
> >
> > /* DP2.0 10G and 20G rates enable MPLLA*/
> > - if (crtc_state->port_clock == 1000000 || crtc_state->port_clock ==
> > 2000000)
> > + if (port_clock == 1000000 || port_clock == 2000000)
> > val |= XELPDP_SSC_ENABLE_PLLA;
> > else
> > - val |= crtc_state->dpll_hw_state.ltpll.ssc_enabled ?
> > XELPDP_SSC_ENABLE_PLLB : 0;
> > + val |= ltpll->ssc_enabled ? XELPDP_SSC_ENABLE_PLLB : 0;
> >
> > intel_de_rmw(display, XELPDP_PORT_CLOCK_CTL(display, encoder-
> > >port),
> > XELPDP_LANE1_PHY_CLOCK_SELECT |
> XELPDP_FORWARD_CLOCK_UNGATE |
> > @@ -1248,10 +1269,12 @@ static u32
> > intel_lt_phy_get_dp_clock(u8 rate)
> >
> > static bool
> > intel_lt_phy_config_changed(struct intel_encoder *encoder,
> > - const struct intel_crtc_state *crtc_state)
> > + const struct intel_lt_phy_pll_state *ltpll)
>
> Why are we changing this?
>
> > {
> > + struct intel_display *display = to_intel_display(encoder);
> > u8 val, rate;
> > u32 clock;
> > + u32 port_clock = intel_lt_phy_calc_port_clock(display, ltpll);
>
> No need to have this recalculated again
> If we really want to change the arguments to send ltpll state Then I
> recommend sending the crtc_state->port_clock as an argument
Had a look at this part seems like you need it in later patches when you switch to the dpll framework since
Crtc_state is not available so then it makes sense to recalculate.
But please move the calculation right after intel_display declaration.
Regards,
Suraj Kandpal
>
> Otherwise rest looks good to me here
>
> Regards,
> Suraj Kandpal
>
> >
> > val = intel_lt_phy_read(encoder, INTEL_LT_PHY_LANE0,
> > LT_PHY_VDR_0_CONFIG);
> > @@ -1262,9 +1285,9 @@ intel_lt_phy_config_changed(struct
> intel_encoder
> > *encoder,
> > * using 1.62 Gbps clock since PHY PLL defaults to that
> > * otherwise we always need to reconfigure it.
> > */
> > - if (intel_crtc_has_dp_encoder(crtc_state)) {
> > + if (intel_lt_phy_is_dp(ltpll)) {
> > clock = intel_lt_phy_get_dp_clock(rate);
> > - if (crtc_state->port_clock == 1620000 && crtc_state-
> > >port_clock == clock)
> > + if (port_clock == 1620000 && port_clock == clock)
> > return false;
> > }
> >
> > @@ -1759,41 +1782,41 @@ intel_lt_phy_pll_calc_state(struct
> > intel_crtc_state *crtc_state,
> >
> > static void
> > intel_lt_phy_program_pll(struct intel_encoder *encoder,
> > - const struct intel_crtc_state *crtc_state)
> > + const struct intel_lt_phy_pll_state *ltpll)
> > {
> > u8 owned_lane_mask =
> intel_lt_phy_get_owned_lane_mask(encoder);
> > int i, j, k;
> >
> > intel_lt_phy_write(encoder, owned_lane_mask,
> LT_PHY_VDR_0_CONFIG,
> > - crtc_state->dpll_hw_state.ltpll.config[0],
> > MB_WRITE_COMMITTED);
> > + ltpll->config[0], MB_WRITE_COMMITTED);
> > intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0,
> LT_PHY_VDR_1_CONFIG,
> > - crtc_state->dpll_hw_state.ltpll.config[1],
> > MB_WRITE_COMMITTED);
> > + ltpll->config[1], MB_WRITE_COMMITTED);
> > intel_lt_phy_write(encoder, owned_lane_mask,
> LT_PHY_VDR_2_CONFIG,
> > - crtc_state->dpll_hw_state.ltpll.config[2],
> > MB_WRITE_COMMITTED);
> > + ltpll->config[2], MB_WRITE_COMMITTED);
> >
> > for (i = 0; i <= 12; i++) {
> > intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0,
> > LT_PHY_VDR_X_ADDR_MSB(i),
> > - crtc_state->dpll_hw_state.ltpll.addr_msb[i],
> > + ltpll->addr_msb[i],
> > MB_WRITE_COMMITTED);
> > intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0,
> > LT_PHY_VDR_X_ADDR_LSB(i),
> > - crtc_state->dpll_hw_state.ltpll.addr_lsb[i],
> > + ltpll->addr_lsb[i],
> > MB_WRITE_COMMITTED);
> >
> > for (j = 3, k = 0; j >= 0; j--, k++)
> > intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0,
> > LT_PHY_VDR_X_DATAY(i, j),
> > - crtc_state-
> > >dpll_hw_state.ltpll.data[i][k],
> > + ltpll->data[i][k],
> > MB_WRITE_COMMITTED);
> > }
> > }
> >
> > static void
> > intel_lt_phy_enable_disable_tx(struct intel_encoder *encoder,
> > - const struct intel_crtc_state *crtc_state)
> > + const struct intel_lt_phy_pll_state *ltpll,
> > + u8 lane_count)
> > {
> > struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
> > bool lane_reversal = dig_port->lane_reversal;
> > - u8 lane_count = crtc_state->lane_count;
> > bool is_dp_alt =
> > intel_tc_port_in_dp_alt_mode(dig_port);
> > enum intel_tc_pin_assignment tc_pin = @@ -1895,7 +1918,8 @@
> void
> > intel_lt_phy_pll_enable(struct intel_encoder *encoder,
> > intel_lt_phy_lane_reset(encoder, crtc_state->lane_count);
> >
> > /* 2. Program PORT_CLOCK_CTL register to configure clock muxes,
> > gating, and SSC. */
> > - intel_lt_phy_program_port_clock_ctl(encoder, crtc_state,
> > lane_reversal);
> > + intel_lt_phy_program_port_clock_ctl(encoder, &crtc_state-
> > >dpll_hw_state.ltpll,
> > + crtc_state->port_clock,
> > lane_reversal);
> >
> > /* 3. Change owned PHY lanes power to Ready state. */
> > intel_lt_phy_powerdown_change_sequence(encoder,
> > owned_lane_mask, @@ -1905,12 +1929,12 @@ void
> > intel_lt_phy_pll_enable(struct intel_encoder *encoder,
> > * 4. Read the PHY message bus VDR register PHY_VDR_0_Config
> check
> > enabled PLL type,
> > * encoded rate and encoded mode.
> > */
> > - if (intel_lt_phy_config_changed(encoder, crtc_state)) {
> > + if (intel_lt_phy_config_changed(encoder,
> > +&crtc_state->dpll_hw_state.ltpll)) {
> > /*
> > * 5. Program the PHY internal PLL registers over PHY
> message bus
> > for the desired
> > * frequency and protocol type
> > */
> > - intel_lt_phy_program_pll(encoder, crtc_state);
> > + intel_lt_phy_program_pll(encoder, &crtc_state-
> > >dpll_hw_state.ltpll);
> >
> > /* 6. Use the P2P transaction flow */
> > /*
> > @@ -2001,7 +2025,8 @@ void intel_lt_phy_pll_enable(struct
> > intel_encoder *encoder,
> > intel_lt_phy_powerdown_change_sequence(encoder,
> > owned_lane_mask,
> > XELPDP_P0_STATE_ACTIVE);
> >
> > - intel_lt_phy_enable_disable_tx(encoder, crtc_state);
> > + intel_lt_phy_enable_disable_tx(encoder, &crtc_state-
> > >dpll_hw_state.ltpll,
> > + crtc_state->lane_count);
> > intel_lt_phy_transaction_end(encoder, wakeref); }
> >
> > --
> > 2.43.0
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH v3 04/24] drm/i915/lt_phy: Refactor LT PHY PLL handling to use explicit PLL state
2026-03-11 6:15 ` Kandpal, Suraj
@ 2026-03-11 8:12 ` Kahola, Mika
0 siblings, 0 replies; 62+ messages in thread
From: Kahola, Mika @ 2026-03-11 8:12 UTC (permalink / raw)
To: Kandpal, Suraj, intel-gfx@lists.freedesktop.org,
intel-xe@lists.freedesktop.org
________________________________________
From: Kandpal, Suraj <suraj.kandpal@intel.com>
Sent: Wednesday, March 11, 2026 8:15 AM
To: Kandpal, Suraj; Kahola, Mika; intel-gfx@lists.freedesktop.org; intel-xe@lists.freedesktop.org
Cc: Kahola, Mika
Subject: RE: [PATCH v3 04/24] drm/i915/lt_phy: Refactor LT PHY PLL handling to use explicit PLL state
> > Subject: [PATCH v3 04/24] drm/i915/lt_phy: Refactor LT PHY PLL
> > handling to use explicit PLL state
> >
> > The LT PHY implementation currently pulls PLL and port_clock
> > information directly from the CRTC state. This ties the PHY
> > programming logic too tightly to the CRTC state and makes it harder to
> > clearly express the PHY’s own PLL configuration.
> >
> > Introduce an explicit "struct intel_lt_phy_pll_state" argument for the
> > PHY functions and update callers accordingly.
> >
> > No functional change is intended — this is a preparatory cleanup for
> > to bring LT PHY PLL handling as part of PLL framework.
> >
> > v2: DP, HDMI 2.0, and HDMI FRL modes are port of the VDR configuration 0
> > register. These modes are defined by bits 2:0. Decode these to
> > differentiate DP and HDMI modes when programming PLL's. (Imre,
> > Suraj)
> >
> > BSpec: 744921
>
> No new line needed here
Right, I will remove the new line.
>
> >
> > Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> > ---
> > drivers/gpu/drm/i915/display/intel_lt_phy.c | 67
> > ++++++++++++++-------
> > 1 file changed, 46 insertions(+), 21 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > index 8fe61cfdb706..76acffb2e840 100644
> > --- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > @@ -32,6 +32,7 @@
> > INTEL_LT_PHY_LANE0)
> > #define MODE_DP 3
> > #define MODE_HDMI_20 4
> > +#define MODE_HDMI_FRL 5
> > #define Q32_TO_INT(x) ((x) >> 32)
> > #define Q32_TO_FRAC(x) ((x) & 0xFFFFFFFF)
> > #define DCO_MIN_FREQ_MHZ 11850
> > @@ -1176,9 +1177,30 @@ intel_lt_phy_lane_reset(struct intel_encoder
> > *encoder,
> > intel_de_rmw(display, XELPDP_PORT_BUF_CTL2(display, port),
> > lane_phy_pulse_status, 0); }
> >
> > +static bool intel_lt_phy_is_hdmi(const struct intel_lt_phy_pll_state
> > +*ltpll) {
> > + u8 mode =
> REG_FIELD_GET8(LT_PHY_VDR_MODE_ENCODING_MASK,
> > +ltpll->config[0]);
> > +
> > + if (mode == MODE_HDMI_20 || mode == MODE_HDMI_FRL)
> > + return true;
> > +
> > + return false;
> > +}
> > +
> > +static bool intel_lt_phy_is_dp(const struct intel_lt_phy_pll_state
> > +*ltpll) {
> > + u8 mode =
> REG_FIELD_GET8(LT_PHY_VDR_MODE_ENCODING_MASK,
> > +ltpll->config[0]);
> > +
> > + if (mode == MODE_DP)
> > + return true;
> > +
> > + return false;
> > +}
> > +
> > static void
> > intel_lt_phy_program_port_clock_ctl(struct intel_encoder *encoder,
> > - const struct intel_crtc_state *crtc_state,
> > + const struct intel_lt_phy_pll_state *ltpll,
> > + int port_clock,
> > bool lane_reversal)
> > {
> > struct intel_display *display = to_intel_display(encoder); @@
> > -1195,17
> > +1217,16 @@ intel_lt_phy_program_port_clock_ctl(struct intel_encoder
> > *encoder,
> > * but since the register bits still remain the same we use
> > * the same definition
> > */
> > - if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI) &&
> > - intel_hdmi_is_frl(crtc_state->port_clock))
> > + if (intel_lt_phy_is_hdmi(ltpll) && intel_hdmi_is_frl(port_clock))
> > val |= XELPDP_DDI_CLOCK_SELECT_PREP(display,
> > XELPDP_DDI_CLOCK_SELECT_DIV18CLK);
> > else
> > val |= XELPDP_DDI_CLOCK_SELECT_PREP(display,
> > XELPDP_DDI_CLOCK_SELECT_MAXPCLK);
> >
> > /* DP2.0 10G and 20G rates enable MPLLA*/
> > - if (crtc_state->port_clock == 1000000 || crtc_state->port_clock ==
> > 2000000)
> > + if (port_clock == 1000000 || port_clock == 2000000)
> > val |= XELPDP_SSC_ENABLE_PLLA;
> > else
> > - val |= crtc_state->dpll_hw_state.ltpll.ssc_enabled ?
> > XELPDP_SSC_ENABLE_PLLB : 0;
> > + val |= ltpll->ssc_enabled ? XELPDP_SSC_ENABLE_PLLB : 0;
> >
> > intel_de_rmw(display, XELPDP_PORT_CLOCK_CTL(display, encoder-
> > >port),
> > XELPDP_LANE1_PHY_CLOCK_SELECT |
> XELPDP_FORWARD_CLOCK_UNGATE |
> > @@ -1248,10 +1269,12 @@ static u32
> > intel_lt_phy_get_dp_clock(u8 rate)
> >
> > static bool
> > intel_lt_phy_config_changed(struct intel_encoder *encoder,
> > - const struct intel_crtc_state *crtc_state)
> > + const struct intel_lt_phy_pll_state *ltpll)
>
> Why are we changing this?
crtc_state is removed just that we don't need to pass around this large structure. We did similarly with the Cx0 series.
>
> > {
> > + struct intel_display *display = to_intel_display(encoder);
> > u8 val, rate;
> > u32 clock;
> > + u32 port_clock = intel_lt_phy_calc_port_clock(display, ltpll);
>
> No need to have this recalculated again
> If we really want to change the arguments to send ltpll state Then I
> recommend sending the crtc_state->port_clock as an argument
>
> Had a look at this part seems like you need it in later patches when you switch to the dpll framework since
> Crtc_state is not available so then it makes sense to recalculate.
Port clock could still be passed as argument. Maybe that would be a cleaner solution rather than recalculate port clock.
Thanks!
-Mika-
>
> But please move the calculation right after intel_display declaration.
>
>Regards,
>Suraj Kandpal
>
> Otherwise rest looks good to me here
>
> Regards,
> Suraj Kandpal
>
> >
> > val = intel_lt_phy_read(encoder, INTEL_LT_PHY_LANE0,
> > LT_PHY_VDR_0_CONFIG);
> > @@ -1262,9 +1285,9 @@ intel_lt_phy_config_changed(struct
> intel_encoder
> > *encoder,
> > * using 1.62 Gbps clock since PHY PLL defaults to that
> > * otherwise we always need to reconfigure it.
> > */
> > - if (intel_crtc_has_dp_encoder(crtc_state)) {
> > + if (intel_lt_phy_is_dp(ltpll)) {
> > clock = intel_lt_phy_get_dp_clock(rate);
> > - if (crtc_state->port_clock == 1620000 && crtc_state-
> > >port_clock == clock)
> > + if (port_clock == 1620000 && port_clock == clock)
> > return false;
> > }
> >
> > @@ -1759,41 +1782,41 @@ intel_lt_phy_pll_calc_state(struct
> > intel_crtc_state *crtc_state,
> >
> > static void
> > intel_lt_phy_program_pll(struct intel_encoder *encoder,
> > - const struct intel_crtc_state *crtc_state)
> > + const struct intel_lt_phy_pll_state *ltpll)
> > {
> > u8 owned_lane_mask =
> intel_lt_phy_get_owned_lane_mask(encoder);
> > int i, j, k;
> >
> > intel_lt_phy_write(encoder, owned_lane_mask,
> LT_PHY_VDR_0_CONFIG,
> > - crtc_state->dpll_hw_state.ltpll.config[0],
> > MB_WRITE_COMMITTED);
> > + ltpll->config[0], MB_WRITE_COMMITTED);
> > intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0,
> LT_PHY_VDR_1_CONFIG,
> > - crtc_state->dpll_hw_state.ltpll.config[1],
> > MB_WRITE_COMMITTED);
> > + ltpll->config[1], MB_WRITE_COMMITTED);
> > intel_lt_phy_write(encoder, owned_lane_mask,
> LT_PHY_VDR_2_CONFIG,
> > - crtc_state->dpll_hw_state.ltpll.config[2],
> > MB_WRITE_COMMITTED);
> > + ltpll->config[2], MB_WRITE_COMMITTED);
> >
> > for (i = 0; i <= 12; i++) {
> > intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0,
> > LT_PHY_VDR_X_ADDR_MSB(i),
> > - crtc_state->dpll_hw_state.ltpll.addr_msb[i],
> > + ltpll->addr_msb[i],
> > MB_WRITE_COMMITTED);
> > intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0,
> > LT_PHY_VDR_X_ADDR_LSB(i),
> > - crtc_state->dpll_hw_state.ltpll.addr_lsb[i],
> > + ltpll->addr_lsb[i],
> > MB_WRITE_COMMITTED);
> >
> > for (j = 3, k = 0; j >= 0; j--, k++)
> > intel_lt_phy_write(encoder, INTEL_LT_PHY_LANE0,
> > LT_PHY_VDR_X_DATAY(i, j),
> > - crtc_state-
> > >dpll_hw_state.ltpll.data[i][k],
> > + ltpll->data[i][k],
> > MB_WRITE_COMMITTED);
> > }
> > }
> >
> > static void
> > intel_lt_phy_enable_disable_tx(struct intel_encoder *encoder,
> > - const struct intel_crtc_state *crtc_state)
> > + const struct intel_lt_phy_pll_state *ltpll,
> > + u8 lane_count)
> > {
> > struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
> > bool lane_reversal = dig_port->lane_reversal;
> > - u8 lane_count = crtc_state->lane_count;
> > bool is_dp_alt =
> > intel_tc_port_in_dp_alt_mode(dig_port);
> > enum intel_tc_pin_assignment tc_pin = @@ -1895,7 +1918,8 @@
> void
> > intel_lt_phy_pll_enable(struct intel_encoder *encoder,
> > intel_lt_phy_lane_reset(encoder, crtc_state->lane_count);
> >
> > /* 2. Program PORT_CLOCK_CTL register to configure clock muxes,
> > gating, and SSC. */
> > - intel_lt_phy_program_port_clock_ctl(encoder, crtc_state,
> > lane_reversal);
> > + intel_lt_phy_program_port_clock_ctl(encoder, &crtc_state-
> > >dpll_hw_state.ltpll,
> > + crtc_state->port_clock,
> > lane_reversal);
> >
> > /* 3. Change owned PHY lanes power to Ready state. */
> > intel_lt_phy_powerdown_change_sequence(encoder,
> > owned_lane_mask, @@ -1905,12 +1929,12 @@ void
> > intel_lt_phy_pll_enable(struct intel_encoder *encoder,
> > * 4. Read the PHY message bus VDR register PHY_VDR_0_Config
> check
> > enabled PLL type,
> > * encoded rate and encoded mode.
> > */
> > - if (intel_lt_phy_config_changed(encoder, crtc_state)) {
> > + if (intel_lt_phy_config_changed(encoder,
> > +&crtc_state->dpll_hw_state.ltpll)) {
> > /*
> > * 5. Program the PHY internal PLL registers over PHY
> message bus
> > for the desired
> > * frequency and protocol type
> > */
> > - intel_lt_phy_program_pll(encoder, crtc_state);
> > + intel_lt_phy_program_pll(encoder, &crtc_state-
> > >dpll_hw_state.ltpll);
> >
> > /* 6. Use the P2P transaction flow */
> > /*
> > @@ -2001,7 +2025,8 @@ void intel_lt_phy_pll_enable(struct
> > intel_encoder *encoder,
> > intel_lt_phy_powerdown_change_sequence(encoder,
> > owned_lane_mask,
> > XELPDP_P0_STATE_ACTIVE);
> >
> > - intel_lt_phy_enable_disable_tx(encoder, crtc_state);
> > + intel_lt_phy_enable_disable_tx(encoder, &crtc_state-
> > >dpll_hw_state.ltpll,
> > + crtc_state->lane_count);
> > intel_lt_phy_transaction_end(encoder, wakeref); }
> >
> > --
> > 2.43.0
^ permalink raw reply [flat|nested] 62+ messages in thread
* RE: [PATCH v2 18/24] drm/i915/lt_phy: Add .disable_clock hook on DDI
2026-03-11 5:59 ` Kandpal, Suraj
@ 2026-03-11 11:34 ` Kahola, Mika
0 siblings, 0 replies; 62+ messages in thread
From: Kahola, Mika @ 2026-03-11 11:34 UTC (permalink / raw)
To: Kandpal, Suraj, intel-gfx@lists.freedesktop.org,
intel-xe@lists.freedesktop.org
> -----Original Message-----
> From: Kandpal, Suraj <suraj.kandpal@intel.com>
> Sent: Wednesday, 11 March 2026 8.00
> To: Kandpal, Suraj <suraj.kandpal@intel.com>; Kahola, Mika <mika.kahola@intel.com>; intel-gfx@lists.freedesktop.org; intel-
> xe@lists.freedesktop.org
> Cc: Kahola, Mika <mika.kahola@intel.com>
> Subject: RE: [PATCH v2 18/24] drm/i915/lt_phy: Add .disable_clock hook on DDI
>
> > Subject: RE: [PATCH v2 18/24] drm/i915/lt_phy: Add .disable_clock hook
> > on DDI
> >
> > > Subject: [PATCH v2 18/24] drm/i915/lt_phy: Add .disable_clock hook
> > > on DDI
> > >
> > > Disable PLL clock on DDI by moving part of the PLL disabling
> > > sequence into a DDI clock disabling function.
> > >
> >
> > Commit message needs to be something like "Add new pll_disable_clock
> > functions so that they can be hooked up to dpll->disable.
> > This is just a wrapper over the exitisting intel_xe3plpd_pll_disable
> > to make it compatible With dpll->disable function"
> >
> >
> > > Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> > > ---
> > > drivers/gpu/drm/i915/display/intel_ddi.c | 2 +-
> > > drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 12 ++++++++++++
> > > drivers/gpu/drm/i915/display/intel_lt_phy.c | 11 +++++++++++
> > > drivers/gpu/drm/i915/display/intel_lt_phy.h | 1 +
> > > 4 files changed, 25 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c
> > > b/drivers/gpu/drm/i915/display/intel_ddi.c
> > > index 51403d09c477..191ae7cf81fb 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> > > @@ -5299,7 +5299,7 @@ void intel_ddi_init(struct intel_display
> > > *display,
> > >
> > > if (HAS_LT_PHY(display)) {
> > > encoder->enable_clock = intel_xe3plpd_pll_enable_clock;
> > > - encoder->disable_clock = intel_xe3plpd_pll_disable;
> > > + encoder->disable_clock = intel_xe3plpd_pll_disable_clock;
> > > encoder->port_pll_type = intel_mtl_port_pll_type;
> > > encoder->get_config = xe3plpd_ddi_get_config;
> > > } else if (DISPLAY_VER(display) >= 14) { diff --git
> > > a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> > > b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> > > index 54c7a255b3a5..28c560417409 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> > > @@ -4607,8 +4607,20 @@ static void xe3plpd_pll_enable(struct
> > > intel_display *display,
> > > intel_xe3plpd_pll_enable(encoder, pll, dpll_hw_state); }
> > >
> > > +static void xe3plpd_pll_disable(struct intel_display *display,
> > > + struct intel_dpll *pll)
> > > +{
> > > + struct intel_encoder *encoder = get_intel_encoder(display, pll);
> > > +
> > > + if (drm_WARN_ON(display->drm, !encoder))
> > > + return;
> > > +
> > > + intel_xe3plpd_pll_disable(encoder);
> > > +}
> > > +
> > > static const struct intel_dpll_funcs xe3plpd_pll_funcs = {
> > > .enable = xe3plpd_pll_enable,
> > > + .disable = xe3plpd_pll_disable,
> > > .get_hw_state = xe3plpd_pll_get_hw_state,
> > > .get_freq = xe3plpd_pll_get_freq,
> > > };
> > > diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > > b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > > index 6bc32d1734a7..3230d2e28d9c 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.c
> > > @@ -2309,6 +2309,17 @@ void intel_xe3plpd_pll_disable(struct
> > > intel_encoder *encoder)
> > > intel_mtl_tbt_pll_disable_clock(encoder);
> > > else
> > > intel_lt_phy_pll_disable(encoder);
> > > +}
> > > +
> > > +void intel_xe3plpd_pll_disable_clock(struct intel_encoder *encoder) {
> > > + struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
> > > +
> > > + if (intel_tc_port_in_tbt_alt_mode(dig_port))
> > > + intel_mtl_tbt_pll_disable_clock(encoder);
> >
> > This is already called inside intel_mtl_tbt_pll_disable clock.
> > Is there any specific reason to add a wrapper around this other than
> > naming if not You can drop this wrapper and proceed without the below change
> > - encoder->disable_clock = intel_xe3plpd_pll_disable;
> > + encoder->disable_clock = intel_xe3plpd_pll_disable_clock;
This was just a naming to have TBT mode as a separate as it's PLL handling is different.
I can drop this for the next revision.
> >
> > Regards,
> > Suraj Kandpal
> >
> > > + else
> > > + /* TODO: remove when PLL mgr is in place. */
> > > + intel_xe3plpd_pll_disable(encoder);
> > >
> > > }
> > >
> > > diff --git a/drivers/gpu/drm/i915/display/intel_lt_phy.h
> > > b/drivers/gpu/drm/i915/display/intel_lt_phy.h
> > > index 9188ce980119..3838e9326773 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_lt_phy.h
> > > +++ b/drivers/gpu/drm/i915/display/intel_lt_phy.h
> > > @@ -49,5 +49,6 @@ void intel_xe3plpd_pll_disable(struct
> > > intel_encoder *encoder); void intel_lt_phy_verify_plls(struct
> > > intel_display *display); void intel_xe3plpd_pll_enable_clock(struct
> > > intel_encoder
> > *encoder,
> > > const struct intel_crtc_state *crtc_state);
> > > +void intel_xe3plpd_pll_disable_clock(struct intel_encoder
> > > +*encoder);
>
> Also rearrange in ASCIIBETICAL order
Yes!
Thanks for the review!
-Mika-
>
> Regards,
> Suraj Kandpal
>
> > >
> > > #endif /* __INTEL_LT_PHY_H__ */
> > > --
> > > 2.43.0
^ permalink raw reply [flat|nested] 62+ messages in thread
* RE: [PATCH v2 14/24] drm/i915/lt_phy: Add xe3plpd .get_freq hook
2026-03-11 4:24 ` Kandpal, Suraj
@ 2026-03-11 13:32 ` Kahola, Mika
0 siblings, 0 replies; 62+ messages in thread
From: Kahola, Mika @ 2026-03-11 13:32 UTC (permalink / raw)
To: Kandpal, Suraj, intel-gfx@lists.freedesktop.org,
intel-xe@lists.freedesktop.org
> -----Original Message-----
> From: Kandpal, Suraj <suraj.kandpal@intel.com>
> Sent: Wednesday, 11 March 2026 6.25
> To: Kahola, Mika <mika.kahola@intel.com>; intel-gfx@lists.freedesktop.org; intel-xe@lists.freedesktop.org
> Cc: Kahola, Mika <mika.kahola@intel.com>
> Subject: RE: [PATCH v2 14/24] drm/i915/lt_phy: Add xe3plpd .get_freq hook
>
> > Subject: [PATCH v2 14/24] drm/i915/lt_phy: Add xe3plpd .get_freq hook
> >
> > Add .get_freq function hook to support dpll framework for xe3plpd platform.
> >
> > Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> > ---
> > drivers/gpu/drm/i915/display/intel_dpll.c | 5 -----
> > drivers/gpu/drm/i915/display/intel_dpll_mgr.c | 13 +++++++++++++
> > 2 files changed, 13 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_dpll.c
> > b/drivers/gpu/drm/i915/display/intel_dpll.c
> > index 147baa777856..88f11cb8c5e1 100644
> > --- a/drivers/gpu/drm/i915/display/intel_dpll.c
> > +++ b/drivers/gpu/drm/i915/display/intel_dpll.c
> > @@ -1219,17 +1219,12 @@ static int xe3plpd_crtc_compute_clock(struct
> > intel_atomic_state *state,
> > intel_atomic_get_new_crtc_state(state, crtc);
> > struct intel_encoder *encoder =
> > intel_get_crtc_new_encoder(state, crtc_state);
> > - struct intel_display *display = to_intel_display(encoder);
> > int ret;
> >
> > ret = intel_lt_phy_pll_calc_state(crtc_state, encoder, &crtc_state-
> > >dpll_hw_state);
> > if (ret)
> > return ret;
> >
> > - /* TODO: Do the readback via intel_compute_shared_dplls() */
> > - crtc_state->port_clock =
> > - intel_lt_phy_calc_port_clock(display, &crtc_state-
> > >dpll_hw_state.ltpll);
> > -
>
> Don’t remove this here in this patch right now xe3plpd_pll_get_freq won't get called till we totally enable dpll framework
> breaking the functionality in between.
> Just keep the function definition and assignment to respective hook here.
> Ill go through all the patches and identify the best place to remove it to Preserve bisectability
Ok, I will keep these lines here for now.
Thanks!
-Mika-
>
> Regards,
> Suraj Kandpal
>
> > crtc_state->hw.adjusted_mode.crtc_clock =
> > intel_crtc_dotclock(crtc_state);
> >
> > return 0;
> > diff --git a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> > b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> > index 6502916793f5..412582e29ca6 100644
> > --- a/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> > +++ b/drivers/gpu/drm/i915/display/intel_dpll_mgr.c
> > @@ -4583,8 +4583,21 @@ static bool xe3plpd_pll_get_hw_state(struct
> > intel_display *display,
> > return intel_lt_phy_pll_readout_hw_state(encoder, &dpll_hw_state-
> > >ltpll); }
> >
> > +static int xe3plpd_pll_get_freq(struct intel_display *display,
> > + const struct intel_dpll *pll,
> > + const struct intel_dpll_hw_state
> > *dpll_hw_state) {
> > + struct intel_encoder *encoder = get_intel_encoder(display, pll);
> > +
> > + if (drm_WARN_ON(display->drm, !encoder))
> > + return -EINVAL;
> > +
> > + return intel_lt_phy_calc_port_clock(display, &dpll_hw_state->ltpll);
> > +}
> > +
> > static const struct intel_dpll_funcs xe3plpd_pll_funcs = {
> > .get_hw_state = xe3plpd_pll_get_hw_state,
> > + .get_freq = xe3plpd_pll_get_freq,
> > };
> >
> > static const struct dpll_info xe3plpd_plls[] = {
> > --
> > 2.43.0
^ permalink raw reply [flat|nested] 62+ messages in thread
end of thread, other threads:[~2026-03-11 13:32 UTC | newest]
Thread overview: 62+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-04 13:13 [PATCH v2 00/24] Refactor LT PHY PLL handling to use DPLL framework Mika Kahola
2026-03-04 13:14 ` [PATCH v2 01/24] drm/i915/lt_phy: Dump missing PLL state parameters Mika Kahola
2026-03-10 2:57 ` Kandpal, Suraj
2026-03-10 3:10 ` Kandpal, Suraj
2026-03-04 13:14 ` [PATCH v2 02/24] drm/i915/lt_phy: Add check if PLL is enabled Mika Kahola
2026-03-10 3:09 ` Kandpal, Suraj
2026-03-04 13:14 ` [PATCH v2 03/24] drm/i915/lt_phy: Add PLL information for xe3plpd Mika Kahola
2026-03-10 3:54 ` Kandpal, Suraj
2026-03-04 13:14 ` [PATCH v2 04/24] drm/i915/lt_phy: Refactor LT PHY PLL handling to use explicit PLL state Mika Kahola
2026-03-04 14:04 ` Imre Deak
2026-03-05 8:19 ` Kahola, Mika
2026-03-10 4:02 ` Kandpal, Suraj
2026-03-10 7:36 ` Kahola, Mika
2026-03-10 8:33 ` Kandpal, Suraj
2026-03-10 13:36 ` [PATCH v3 03/24] " Mika Kahola
2026-03-10 15:38 ` [PATCH v3 04/24] " Mika Kahola
2026-03-11 4:18 ` Kandpal, Suraj
2026-03-11 6:15 ` Kandpal, Suraj
2026-03-11 8:12 ` Kahola, Mika
2026-03-04 13:14 ` [PATCH v2 05/24] drm/i915/lt_phy: Add lane_count to " Mika Kahola
2026-03-10 4:05 ` Kandpal, Suraj
2026-03-04 13:14 ` [PATCH v2 06/24] drm/i915/lt_phy: Add xe3plpd .compute_dplls hook Mika Kahola
2026-03-10 5:02 ` Kandpal, Suraj
2026-03-04 13:14 ` [PATCH v2 07/24] drm/i915/lt_phy: Add xe3plpd .get_dplls hook Mika Kahola
2026-03-04 13:14 ` [PATCH v2 08/24] drm/i915/lt_phy: Add xe3plpd .put_dplls hook Mika Kahola
2026-03-04 13:14 ` [PATCH v2 09/24] drm/i915/lt_phy: Add xe3plpd .update_active_dpll hook Mika Kahola
2026-03-04 13:14 ` [PATCH v2 10/24] drm/i915/lt_phy: Add xe3plpd .update_dpll_ref_clks hook Mika Kahola
2026-03-04 13:14 ` [PATCH v2 11/24] drm/i915/lt_phy: Add xe3plpd .dump_hw_state hook Mika Kahola
2026-03-10 6:19 ` Kandpal, Suraj
2026-03-10 6:32 ` Kandpal, Suraj
2026-03-04 13:14 ` [PATCH v2 12/24] drm/i915/lt_phy: Add xe3plpd .compare_hw_state hook Mika Kahola
2026-03-10 6:23 ` Kandpal, Suraj
2026-03-04 13:14 ` [PATCH v2 13/24] drm/i915/lt_phy: Add xe3plpd .get_hw_state hook Mika Kahola
2026-03-04 13:14 ` [PATCH v2 14/24] drm/i915/lt_phy: Add xe3plpd .get_freq hook Mika Kahola
2026-03-11 4:24 ` Kandpal, Suraj
2026-03-11 13:32 ` Kahola, Mika
2026-03-04 13:14 ` [PATCH v2 15/24] drm/i915/lt_phy: Add xe3plpd .crtc_get_dpll Mika Kahola
2026-03-04 13:14 ` [PATCH v2 16/24] drm/i915/lt_phy: Replace crtc compute clock Mika Kahola
2026-03-11 4:30 ` Kandpal, Suraj
2026-03-04 13:14 ` [PATCH v2 17/24] drm/i915/lt_phy: Add .enable_clock hook on DDI Mika Kahola
2026-03-11 4:48 ` Kandpal, Suraj
2026-03-04 13:14 ` [PATCH v2 18/24] drm/i915/lt_phy: Add .disable_clock " Mika Kahola
2026-03-11 5:31 ` Kandpal, Suraj
2026-03-11 5:59 ` Kandpal, Suraj
2026-03-11 11:34 ` Kahola, Mika
2026-03-04 13:14 ` [PATCH v2 19/24] drm/i915/lt_phy: Dump lane count for HW state Mika Kahola
2026-03-11 5:46 ` Kandpal, Suraj
2026-03-04 13:14 ` [PATCH v2 20/24] drm/i915/lt_phy: Readout lane count Mika Kahola
2026-03-04 13:14 ` [PATCH v2 21/24] drm/i915/lt_phy: Get encoder configuration for xe3plpd platform Mika Kahola
2026-03-11 5:55 ` Kandpal, Suraj
2026-03-04 13:14 ` [PATCH v2 22/24] drm/i915/lt_phy: Add xe3plpd Thunderbolt pll hooks Mika Kahola
2026-03-11 6:05 ` Kandpal, Suraj
2026-03-04 13:14 ` [PATCH v2 23/24] drm/i915/lt_phy: Remove LT PHY specific state verification Mika Kahola
2026-03-06 11:43 ` [PATCH v3 " Mika Kahola
2026-03-10 8:40 ` Kandpal, Suraj
2026-03-04 13:14 ` [PATCH v2 24/24] drm/i915/lt_phy: Enable dpll framework for xe3plpd Mika Kahola
2026-03-11 6:12 ` Kandpal, Suraj
2026-03-04 19:58 ` ✗ i915.CI.BAT: failure for Refactor LT PHY PLL handling to use DPLL framework (rev2) Patchwork
2026-03-06 13:18 ` ✓ i915.CI.BAT: success for Refactor LT PHY PLL handling to use DPLL framework (rev3) Patchwork
2026-03-07 14:27 ` ✗ i915.CI.Full: failure " Patchwork
2026-03-10 13:53 ` ✗ Fi.CI.BUILD: failure for Refactor LT PHY PLL handling to use DPLL framework (rev4) Patchwork
2026-03-10 17:26 ` ✗ i915.CI.BAT: failure for Refactor LT PHY PLL handling to use DPLL framework (rev5) Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox