* [PATCH v6 00/13] Add support for Common SDP Transmission Line
@ 2026-09-13 14:56 Ankit Nautiyal
2026-09-13 14:56 ` [PATCH v6 01/13] drm/i915/dip: Add new file to handle Data Island Packet hardware Ankit Nautiyal
` (13 more replies)
0 siblings, 14 replies; 18+ messages in thread
From: Ankit Nautiyal @ 2026-09-13 14:56 UTC (permalink / raw)
To: intel-gfx, intel-xe
Cc: ville.syrjala, arun.r.murthy, jani.nikula, suraj.kandpal,
Ankit Nautiyal
Xe3p_lpd introduces new register bits to program a common SDP
Transmission line that will be used by the Hardware to position the
SDPs. Along with this, another new register is also added to stagger
the different SDPs.
This series adds support for programming the Common SDP Transmission Line
(CMN_SDP_TL) and its stagger control registers.
Rev2:
- Add tracking for AS SDP Transmission line first. Instead of directly
programming it in the register, compute the state during
compute_config_late() and write the value from crtc_state.
Readout from the register through a vrr helper, since the register is
defined in context of VRR and will be used for both DP and HDMI VRR
packets.
- Add support to track other SDP transmission lines, instead of stagger
values.
- Compute the transmission lines in compute_config_late path and add
readout.
- Always write the Common SDP Transmission line and other stagger
values, whether the packets are sent or not.
- Dump SDP transmission lines in crtc_state.
Rev3:
- Introduce new files for handling the Data Island Packets (DIPs)
programming in one place. (Ville)
- Extract the Transmission Line programming for
HDMI Extended Metadata Packet (EMP) and Adaptive Sync SDP (AS SDP)
i.e. EMP_AS_SDP_TL in the new file.
- Add programming for Common Base SDP Transmission lines and other
stagger offsets in the new file.
- Add a #TODO to extract other helpers that deal with Data Island Packets
and VIDEO_DIP registers.
- Place the HAS_* Macros related to DIP in the intel_dip.h file
instead of intel_display_devices.h (Jani)
- Make function names more descriptive and avoid overuse of multiple
acronyms. (Jani)
Note:
- Though I have fixed the naming as suggested in most places, I
have retained HAS_EMP_AS_SDP_TL for the following reasons:
1) Lack of an apt name that avoids the acronym for
'Extended Metadata Packet Adaptive Sync Secondary Packet Transmission
Line'.
2) Keeping this name makes it easier to find and map with the exact name
for such a complex register name.
However, I am open to suggestions for a better name.
Rev4:
- Drop the patch to check for DP encoder before writing EMP_AS_SDP_TL
register. Instead reset the register to 0 for non DP encoder case.
Rev5:
- Rebase
- Address review comments from Suraj:
- Drop some redundant checks, and fix few commit messages.
Rev6:
- Move the new struct in intel_display_types.h from intel_dip.h (Jani)
- Check for CMN_SDP_TL restriction and Warn if not followed. (Suraj)
- Use HAS_CMN_SDP_TL() instead of checking if cmn_sdp_tl is set or not.
(Sashiko)
- Make sure that the guardband is sufficient as per CMN_SDP_TL while
optiminzing the guardband.
Ankit Nautiyal (11):
drm/i915/dip: Add new file to handle Data Island Packet hardware
drm/i915/vrr: Use the helper to write EMP_AS_SDP_TL register
drm/i915/intel_dip: Add check for DP encoder
drm/i915/dip: Add helper to get AS SDP Transmission Line
drm/i915/display: Add crtc state for DIP transmission lines
drm/i915/dip: Store and use AS SDP transmission line from crtc state
drm/i915/dip: Add HAS_COMMON_SDP_TL macro
drm/i915/dp: Store SDP transmission lines in crtc_state
drm/i915/dp: Introduce helpers to enable/disable CMN SDP Transmission
line
drm/i915/dip: Enable Common SDP Transmission line
drm/i915/display: Dump DIP Transmission lines
Ankit Nautiyal (12):
drm/i915/dip: Add new file to handle Data Island Packet hardware
drm/i915/vrr: Use the helper to write EMP_AS_SDP_TL register
drm/i915/intel_dip: Add check for DP encoder
drm/i915/dip: Add helper to get AS SDP Transmission Line
drm/i915/display: Add crtc state for DIP transmission lines
drm/i915/dip: Store and use AS SDP transmission line from crtc state
drm/i915/dip: Add HAS_COMMON_SDP_TL macro
drm/i915/dip: Store SDP transmission lines in crtc_state
drm/i915/dp: Introduce helpers to enable/disable CMN SDP Transmission
line
drm/i915/dip: Enable Common SDP Transmission line
drm/i915/dp: Adjust SDP guardband requirement for CMN_SDP_TL
drm/i915/display: Dump DIP Transmission lines
Arun R Murthy (1):
drm/i915/dip_regs: Add register definitions for common SDP
Transmission Line
drivers/gpu/drm/i915/Makefile | 1 +
.../drm/i915/display/intel_crtc_state_dump.c | 9 +
drivers/gpu/drm/i915/display/intel_ddi.c | 5 +
drivers/gpu/drm/i915/display/intel_dip.c | 215 ++++++++++++++++++
drivers/gpu/drm/i915/display/intel_dip.h | 53 +++++
drivers/gpu/drm/i915/display/intel_dip_regs.h | 36 +++
drivers/gpu/drm/i915/display/intel_display.c | 6 +
.../drm/i915/display/intel_display_types.h | 16 ++
drivers/gpu/drm/i915/display/intel_dp.c | 52 ++++-
drivers/gpu/drm/i915/display/intel_vrr.c | 14 +-
drivers/gpu/drm/i915/display/intel_vrr_regs.h | 6 -
drivers/gpu/drm/xe/Makefile | 1 +
12 files changed, 395 insertions(+), 19 deletions(-)
create mode 100644 drivers/gpu/drm/i915/display/intel_dip.c
create mode 100644 drivers/gpu/drm/i915/display/intel_dip.h
create mode 100644 drivers/gpu/drm/i915/display/intel_dip_regs.h
--
2.50.1
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH v6 01/13] drm/i915/dip: Add new file to handle Data Island Packet hardware
2026-09-13 14:56 [PATCH v6 00/13] Add support for Common SDP Transmission Line Ankit Nautiyal
@ 2026-09-13 14:56 ` Ankit Nautiyal
2026-09-13 14:56 ` [PATCH v6 02/13] drm/i915/vrr: Use the helper to write EMP_AS_SDP_TL register Ankit Nautiyal
` (12 subsequent siblings)
13 siblings, 0 replies; 18+ messages in thread
From: Ankit Nautiyal @ 2026-09-13 14:56 UTC (permalink / raw)
To: intel-gfx, intel-xe
Cc: ville.syrjala, arun.r.murthy, jani.nikula, suraj.kandpal,
Ankit Nautiyal
Add new files intel_dip.c, intel_dip.h, and intel_dip_regs.h to handle
low level hardware programming related to Data Island Packets.
Currently only programming of the Transmission Line for HDMI 2.1
Extended Metadata Packet (EMP) and DP Adaptive-Sync Secondary Data
Packet (SDP) is added (MMIO register EMP_AS_SDP_TL).
This will serve as a common place for DIP related code, which is currently
scattered across DP and HDMI files. A TODO has been added for extracting
the remaining DIP helpers.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
---
drivers/gpu/drm/i915/Makefile | 1 +
drivers/gpu/drm/i915/display/intel_dip.c | 39 +++++++++++++++++++
drivers/gpu/drm/i915/display/intel_dip.h | 38 ++++++++++++++++++
drivers/gpu/drm/i915/display/intel_dip_regs.h | 17 ++++++++
drivers/gpu/drm/i915/display/intel_vrr.c | 1 +
drivers/gpu/drm/i915/display/intel_vrr_regs.h | 6 ---
drivers/gpu/drm/xe/Makefile | 1 +
7 files changed, 97 insertions(+), 6 deletions(-)
create mode 100644 drivers/gpu/drm/i915/display/intel_dip.c
create mode 100644 drivers/gpu/drm/i915/display/intel_dip.h
create mode 100644 drivers/gpu/drm/i915/display/intel_dip_regs.h
diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
index a83fa8be0aba..d4e7764621e1 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -349,6 +349,7 @@ i915-y += \
display/intel_cx0_phy.o \
display/intel_ddi.o \
display/intel_ddi_buf_trans.o \
+ display/intel_dip.o \
display/intel_display_device.o \
display/intel_display_trace.o \
display/intel_dkl_phy.o \
diff --git a/drivers/gpu/drm/i915/display/intel_dip.c b/drivers/gpu/drm/i915/display/intel_dip.c
new file mode 100644
index 000000000000..2e2bdb2b199c
--- /dev/null
+++ b/drivers/gpu/drm/i915/display/intel_dip.c
@@ -0,0 +1,39 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2026 Intel Corporation
+ *
+ */
+
+#include "intel_de.h"
+#include "intel_dip.h"
+#include "intel_dip_regs.h"
+#include "intel_display_types.h"
+
+u16 intel_dip_read_emp_as_sdp_tl(const struct intel_crtc_state *crtc_state)
+{
+ struct intel_display *display = to_intel_display(crtc_state);
+ enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
+ u32 val;
+
+ if (!HAS_EMP_AS_SDP_TL(display))
+ return 0;
+
+ val = intel_de_read(display, EMP_AS_SDP_TL(display, cpu_transcoder));
+ return REG_FIELD_GET(EMP_AS_SDP_DB_TL_MASK, val);
+}
+
+void intel_dip_write_emp_as_sdp_tl(const struct intel_crtc_state *crtc_state)
+{
+ struct intel_display *display = to_intel_display(crtc_state);
+ enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
+
+ if (!HAS_EMP_AS_SDP_TL(display))
+ return;
+ /*
+ * Since currently we support VRR only for DP/eDP, so this is programmed
+ * only for Adaptive Sync SDP to Vsync start.
+ */
+ intel_de_write(display,
+ EMP_AS_SDP_TL(display, cpu_transcoder),
+ EMP_AS_SDP_DB_TL(crtc_state->vrr.vsync_start));
+}
diff --git a/drivers/gpu/drm/i915/display/intel_dip.h b/drivers/gpu/drm/i915/display/intel_dip.h
new file mode 100644
index 000000000000..25bae4a04d6b
--- /dev/null
+++ b/drivers/gpu/drm/i915/display/intel_dip.h
@@ -0,0 +1,38 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2026 Intel Corporation
+ */
+
+#ifndef __INTEL_DIP_H__
+#define __INTEL_DIP_H__
+
+#include "intel_display_device.h"
+
+/*
+ * Video DIP (Data Island Packet) helpers.
+ *
+ * This file contains helpers for programming video DIP related hardware.
+ *
+ * TODO: Currently, this is only used for programming EMP_AS_SDP_TL i.e. to
+ * program Transmission Line for HDMI 2.1 Extended Metadata Packet (EMP) and
+ * DP Adaptive Sync (AS) Secondary Data Packet (SDP). However, all low level
+ * DIP buffer read/write and related helpers should be extracted here later.
+ */
+
+struct intel_crtc_state;
+
+/*
+ * EMP AS SDP TL: Extended Metadata Packet (EMP) Adaptive Sync (AS)
+ * Secondary Data Packet (SDP) Transmission Line (TL).
+ *
+ * Starting with BMG (display ver 14.01) and LNL+ (display ver 20+),
+ * the AS SDP transmission line is programmable via the EMP AS SDP TL
+ * register.
+ */
+#define HAS_EMP_AS_SDP_TL(__display) (DISPLAY_VERx100(__display) == 1401 || \
+ DISPLAY_VER(__display) >= 20)
+
+u16 intel_dip_read_emp_as_sdp_tl(const struct intel_crtc_state *crtc_state);
+void intel_dip_write_emp_as_sdp_tl(const struct intel_crtc_state *crtc_state);
+
+#endif /* __INTEL_DIP_H__ */
diff --git a/drivers/gpu/drm/i915/display/intel_dip_regs.h b/drivers/gpu/drm/i915/display/intel_dip_regs.h
new file mode 100644
index 000000000000..85dcbf42e77d
--- /dev/null
+++ b/drivers/gpu/drm/i915/display/intel_dip_regs.h
@@ -0,0 +1,17 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2026 Intel Corporation
+ */
+
+#ifndef __INTEL_DIP_REGS_H__
+#define __INTEL_DIP_REGS_H__
+
+#include "intel_display_reg_defs.h"
+
+/* EMP (Extended Metadata Packet) AS (Adaptive Sync) SDP Transmission Line */
+#define _EMP_AS_SDP_TL_A 0x60204
+#define EMP_AS_SDP_TL(display, trans) _MMIO_TRANS2((display), (trans), _EMP_AS_SDP_TL_A)
+#define EMP_AS_SDP_DB_TL_MASK REG_GENMASK(12, 0)
+#define EMP_AS_SDP_DB_TL(db_transmit_line) REG_FIELD_PREP(EMP_AS_SDP_DB_TL_MASK, (db_transmit_line))
+
+#endif /* __INTEL_DIP_REGS_H__ */
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index e36db1174440..fd8b6f829cfe 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -17,6 +17,7 @@
#include "intel_cmtg.h"
#include "intel_crtc.h"
#include "intel_de.h"
+#include "intel_dip_regs.h"
#include "intel_display_limits.h"
#include "intel_display_regs.h"
#include "intel_display_types.h"
diff --git a/drivers/gpu/drm/i915/display/intel_vrr_regs.h b/drivers/gpu/drm/i915/display/intel_vrr_regs.h
index 9d4d6573a149..ba8631cbc672 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr_regs.h
+++ b/drivers/gpu/drm/i915/display/intel_vrr_regs.h
@@ -174,12 +174,6 @@
#define VRR_VSYNC_START_MASK REG_GENMASK(12, 0)
#define VRR_VSYNC_START(vsync_start) REG_FIELD_PREP(VRR_VSYNC_START_MASK, (vsync_start))
-/* Common register for HDMI EMP and DP AS SDP */
-#define _EMP_AS_SDP_TL_A 0x60204
-#define EMP_AS_SDP_TL(display, trans) _MMIO_TRANS2((display), (trans), _EMP_AS_SDP_TL_A)
-#define EMP_AS_SDP_DB_TL_MASK REG_GENMASK(12, 0)
-#define EMP_AS_SDP_DB_TL(db_transmit_line) REG_FIELD_PREP(EMP_AS_SDP_DB_TL_MASK, (db_transmit_line))
-
#define _TRANS_CMRR_M_LO_A 0x604F0
#define TRANS_CMRR_M_LO(display, trans) _MMIO_TRANS2((display), (trans), _TRANS_CMRR_M_LO_A)
diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index 67b8b5477639..ba4404896f2f 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -259,6 +259,7 @@ xe-$(CONFIG_DRM_XE_DISPLAY) += \
i915-display/intel_ddi.o \
i915-display/intel_ddi_buf_trans.o \
i915-display/intel_de.o \
+ i915-display/intel_dip.o \
i915-display/intel_display.o \
i915-display/intel_display_conversion.o \
i915-display/intel_display_device.o \
--
2.50.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v6 02/13] drm/i915/vrr: Use the helper to write EMP_AS_SDP_TL register
2026-09-13 14:56 [PATCH v6 00/13] Add support for Common SDP Transmission Line Ankit Nautiyal
2026-09-13 14:56 ` [PATCH v6 01/13] drm/i915/dip: Add new file to handle Data Island Packet hardware Ankit Nautiyal
@ 2026-09-13 14:56 ` Ankit Nautiyal
2026-09-13 14:56 ` [PATCH v6 03/13] drm/i915/intel_dip: Add check for DP encoder Ankit Nautiyal
` (11 subsequent siblings)
13 siblings, 0 replies; 18+ messages in thread
From: Ankit Nautiyal @ 2026-09-13 14:56 UTC (permalink / raw)
To: intel-gfx, intel-xe
Cc: ville.syrjala, arun.r.murthy, jani.nikula, suraj.kandpal,
Ankit Nautiyal
Now that intel_dip_write_emp_as_sdp_tl() exists, use it instead of
the open-coded EMP_AS_SDP_TL programming sequence in
intel_vrr_set_transcoder_timings().
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
---
drivers/gpu/drm/i915/display/intel_vrr.c | 13 ++-----------
1 file changed, 2 insertions(+), 11 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
index fd8b6f829cfe..a516ba34e0d0 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -17,6 +17,7 @@
#include "intel_cmtg.h"
#include "intel_crtc.h"
#include "intel_de.h"
+#include "intel_dip.h"
#include "intel_dip_regs.h"
#include "intel_display_limits.h"
#include "intel_display_regs.h"
@@ -711,17 +712,7 @@ void intel_vrr_set_transcoder_timings(const struct intel_crtc_state *crtc_state)
VRR_VSYNC_END(crtc_state->vrr.vsync_end) |
VRR_VSYNC_START(crtc_state->vrr.vsync_start));
- /*
- * For BMG and LNL+ onwards the EMP_AS_SDP_TL is used for programming
- * double buffering point and transmission line for VRR packets for
- * HDMI2.1/DP/eDP/DP->HDMI2.1 PCON.
- * Since currently we support VRR only for DP/eDP, so this is programmed
- * to for Adaptive Sync SDP to Vsync start.
- */
- if (DISPLAY_VERx100(display) == 1401 || DISPLAY_VER(display) >= 20)
- intel_de_write(display,
- EMP_AS_SDP_TL(display, cpu_transcoder),
- EMP_AS_SDP_DB_TL(crtc_state->vrr.vsync_start));
+ intel_dip_write_emp_as_sdp_tl(crtc_state);
}
void
--
2.50.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v6 03/13] drm/i915/intel_dip: Add check for DP encoder
2026-09-13 14:56 [PATCH v6 00/13] Add support for Common SDP Transmission Line Ankit Nautiyal
2026-09-13 14:56 ` [PATCH v6 01/13] drm/i915/dip: Add new file to handle Data Island Packet hardware Ankit Nautiyal
2026-09-13 14:56 ` [PATCH v6 02/13] drm/i915/vrr: Use the helper to write EMP_AS_SDP_TL register Ankit Nautiyal
@ 2026-09-13 14:56 ` Ankit Nautiyal
2026-09-13 14:56 ` [PATCH v6 04/13] drm/i915/dip: Add helper to get AS SDP Transmission Line Ankit Nautiyal
` (10 subsequent siblings)
13 siblings, 0 replies; 18+ messages in thread
From: Ankit Nautiyal @ 2026-09-13 14:56 UTC (permalink / raw)
To: intel-gfx, intel-xe
Cc: ville.syrjala, arun.r.murthy, jani.nikula, suraj.kandpal,
Ankit Nautiyal
At the moment, the common register for programming Transmission line for
Extended Metadata Packet and Adaptive-Sync Secondary Data Packet
(EMP_AS_SDP_TL) is only used to program Adaptive-Sync SDP (AS SDP).
Since VRR and Video Timing Extended Metadat Packet (VTEMP) are not yet
implemented for HDMI, add an explicit check to write the register only
for DP encoders (that may use AS SDP) and reset the register for non-DP
encoders.
In subsequent changes, instead of directly writing the value,
appropriate helpers will be called, that will supply the transmission line
for these packets.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
---
drivers/gpu/drm/i915/display/intel_dip.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dip.c b/drivers/gpu/drm/i915/display/intel_dip.c
index 2e2bdb2b199c..b28352a9e23f 100644
--- a/drivers/gpu/drm/i915/display/intel_dip.c
+++ b/drivers/gpu/drm/i915/display/intel_dip.c
@@ -26,14 +26,19 @@ void intel_dip_write_emp_as_sdp_tl(const struct intel_crtc_state *crtc_state)
{
struct intel_display *display = to_intel_display(crtc_state);
enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
+ u32 transmission_line = 0;
if (!HAS_EMP_AS_SDP_TL(display))
return;
/*
- * Since currently we support VRR only for DP/eDP, so this is programmed
- * only for Adaptive Sync SDP to Vsync start.
+ * Since we currently support VRR only for DP/eDP, program the register
+ * for Adaptive Sync SDP using vsync start. For non-DP encoders,
+ * the register is reset to 0.
*/
+ if (intel_crtc_has_dp_encoder(crtc_state))
+ transmission_line = crtc_state->vrr.vsync_start;
+
intel_de_write(display,
EMP_AS_SDP_TL(display, cpu_transcoder),
- EMP_AS_SDP_DB_TL(crtc_state->vrr.vsync_start));
+ EMP_AS_SDP_DB_TL(transmission_line));
}
--
2.50.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v6 04/13] drm/i915/dip: Add helper to get AS SDP Transmission Line
2026-09-13 14:56 [PATCH v6 00/13] Add support for Common SDP Transmission Line Ankit Nautiyal
` (2 preceding siblings ...)
2026-09-13 14:56 ` [PATCH v6 03/13] drm/i915/intel_dip: Add check for DP encoder Ankit Nautiyal
@ 2026-09-13 14:56 ` Ankit Nautiyal
2026-09-13 14:56 ` [PATCH v6 05/13] drm/i915/display: Add crtc state for DIP transmission lines Ankit Nautiyal
` (9 subsequent siblings)
13 siblings, 0 replies; 18+ messages in thread
From: Ankit Nautiyal @ 2026-09-13 14:56 UTC (permalink / raw)
To: intel-gfx, intel-xe
Cc: ville.syrjala, arun.r.murthy, jani.nikula, suraj.kandpal,
Ankit Nautiyal
Introduce a DIP helper to compute the Adaptive Sync SDP transmission line
and use it when programming the EMP_AS_SDP_TL register.
Currently the AS SDP transmission line is programmed to the T1 position.
This can be extended in the future to support programming the T2 position
as well.
While at it, improve the documentation: the AS SDP transmission line
corresponds to the T1 position, which maps to the start of the VSYNC
pulse.
v2:
- Move the helper into intel_dip.c and make it static, since intel_dip.c
is its only caller.
- Drop the now unused prototype from intel_dp.h.
- Add the check HAS_EMP_AS_SDP_TL(). (Suraj)
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com> (#v1)
---
drivers/gpu/drm/i915/display/intel_dip.c | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dip.c b/drivers/gpu/drm/i915/display/intel_dip.c
index b28352a9e23f..0277b15e1c82 100644
--- a/drivers/gpu/drm/i915/display/intel_dip.c
+++ b/drivers/gpu/drm/i915/display/intel_dip.c
@@ -9,6 +9,23 @@
#include "intel_dip_regs.h"
#include "intel_display_types.h"
+static int intel_dip_get_as_sdp_transmission_line(const struct intel_crtc_state *crtc_state)
+{
+ struct intel_display *display = to_intel_display(crtc_state);
+
+ if (!HAS_EMP_AS_SDP_TL(display))
+ return 0;
+
+ /*
+ * EMP_AS_SDP_TL defines the T1 position as the default AS SDP
+ * Transmission Line, which corresponds to the start of the
+ * VSYNC pulse.
+ *
+ * Use the T1 position for now.
+ */
+ return crtc_state->vrr.vsync_start;
+}
+
u16 intel_dip_read_emp_as_sdp_tl(const struct intel_crtc_state *crtc_state)
{
struct intel_display *display = to_intel_display(crtc_state);
@@ -36,7 +53,7 @@ void intel_dip_write_emp_as_sdp_tl(const struct intel_crtc_state *crtc_state)
* the register is reset to 0.
*/
if (intel_crtc_has_dp_encoder(crtc_state))
- transmission_line = crtc_state->vrr.vsync_start;
+ transmission_line = intel_dip_get_as_sdp_transmission_line(crtc_state);
intel_de_write(display,
EMP_AS_SDP_TL(display, cpu_transcoder),
--
2.50.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v6 05/13] drm/i915/display: Add crtc state for DIP transmission lines
2026-09-13 14:56 [PATCH v6 00/13] Add support for Common SDP Transmission Line Ankit Nautiyal
` (3 preceding siblings ...)
2026-09-13 14:56 ` [PATCH v6 04/13] drm/i915/dip: Add helper to get AS SDP Transmission Line Ankit Nautiyal
@ 2026-09-13 14:56 ` Ankit Nautiyal
2026-09-13 14:56 ` [PATCH v6 06/13] drm/i915/dip: Store and use AS SDP transmission line from crtc state Ankit Nautiyal
` (8 subsequent siblings)
13 siblings, 0 replies; 18+ messages in thread
From: Ankit Nautiyal @ 2026-09-13 14:56 UTC (permalink / raw)
To: intel-gfx, intel-xe
Cc: ville.syrjala, arun.r.murthy, jani.nikula, suraj.kandpal,
Ankit Nautiyal
The Adaptive Sync SDP is currently the only packet with a programmable
transmission line.
Make a structure struct intel_dip for Data Island Packets. Add a member to
track Adaptive-Sync SDP transmission line. Include the new member in the
pipe configuration comparison.
This will pave the way for supporting more packets' programmable
transmission lines, including the common base SDP transmission line
introduced with Xe3p_lpd.
v2:
- Move struct intel_dip from intel_dip.h to intel_display_types.h (Jani)
- Move PIPE_CONF_CHECK for emp_as_sdp_tl in !fastset block. (Sashiko)
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com> (#v1)
---
drivers/gpu/drm/i915/display/intel_display.c | 1 +
drivers/gpu/drm/i915/display/intel_display_types.h | 10 ++++++++++
2 files changed, 11 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 9151ea6c15ab..5e8f2e48e95b 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -5602,6 +5602,7 @@ intel_pipe_config_compare(const struct intel_crtc_state *current_config,
PIPE_CONF_CHECK_I(vrr.dc_balance.max_increase);
PIPE_CONF_CHECK_I(vrr.dc_balance.max_decrease);
PIPE_CONF_CHECK_I(vrr.dc_balance.vblank_target);
+ PIPE_CONF_CHECK_I(dip.emp_as_sdp_tl);
}
if (!fastset || intel_vrr_always_use_vrr_tg(display)) {
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
index 9016be52c7ea..bcaf42cefa17 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -1006,6 +1006,14 @@ struct intel_casf {
bool enable;
};
+struct intel_dip {
+ /*
+ * DIP Transmission line, relative to the Vtotal.
+ * The programmed transmit line is (Vtotal - value)
+ */
+ u16 emp_as_sdp_tl;
+};
+
struct intel_crtc_state {
/*
* uapi (drm) state. This is the software state shown to userspace.
@@ -1312,6 +1320,8 @@ struct intel_crtc_state {
struct drm_dp_as_sdp as_sdp;
} infoframes;
+ struct intel_dip dip;
+
u8 eld[MAX_ELD_BYTES];
/* HDMI scrambling status */
--
2.50.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v6 06/13] drm/i915/dip: Store and use AS SDP transmission line from crtc state
2026-09-13 14:56 [PATCH v6 00/13] Add support for Common SDP Transmission Line Ankit Nautiyal
` (4 preceding siblings ...)
2026-09-13 14:56 ` [PATCH v6 05/13] drm/i915/display: Add crtc state for DIP transmission lines Ankit Nautiyal
@ 2026-09-13 14:56 ` Ankit Nautiyal
2026-09-13 15:30 ` sashiko-bot
2026-09-13 14:56 ` [PATCH v6 07/13] drm/i915/dip_regs: Add register definitions for common SDP Transmission Line Ankit Nautiyal
` (7 subsequent siblings)
13 siblings, 1 reply; 18+ messages in thread
From: Ankit Nautiyal @ 2026-09-13 14:56 UTC (permalink / raw)
To: intel-gfx, intel-xe
Cc: ville.syrjala, arun.r.murthy, jani.nikula, suraj.kandpal,
Ankit Nautiyal
The driver currently computes the Adaptive Sync SDP transmission line
directly at programming time. Instead, compute and store the
AS SDP transmission line in the crtc state and use it when programming the
EMP_AS_SDP_TL register.
We get the clear picture about the SDPs and guardband only in
intel_dp_sdp_compute_config_late() therefore we must configure the
AS SDP transmission line at this point when AS SDP is enabled in
crtc_state.
This prepares the ground for supporting programmable transmission lines
for additional DP SDPs.
While moving the helper into intel_dip.c, drop the
intel_crtc_has_dp_encoder() check instead of relocating it. It was
needed in the old VRR write path shared by other encoderes as well, but
intel_dip_sdp_tl_compute_config_late() is only reached via DP, so HDMI
never sets crtc_state->dip.emp_as_sdp_tl and it stays 0 by default.
v2:
- Move the helper into intel_dip.c and drop the
intel_crtc_has_dp_encoder() check.
- Drop the redundant checks. (Suraj)
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_ddi.c | 2 ++
drivers/gpu/drm/i915/display/intel_dip.c | 20 +++++++++++---------
drivers/gpu/drm/i915/display/intel_dip.h | 3 +++
drivers/gpu/drm/i915/display/intel_dp.c | 3 +++
4 files changed, 19 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index 9b3b526e5e55..dacb4b7588a0 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -49,6 +49,7 @@
#include "intel_ddi.h"
#include "intel_ddi_buf_trans.h"
#include "intel_de.h"
+#include "intel_dip.h"
#include "intel_display_power.h"
#include "intel_display_regs.h"
#include "intel_display_types.h"
@@ -4235,6 +4236,7 @@ static void intel_ddi_get_config(struct intel_encoder *encoder,
intel_read_dp_sdp(encoder, pipe_config, HDMI_PACKET_TYPE_GAMUT_METADATA);
intel_read_dp_sdp(encoder, pipe_config, DP_SDP_VSC);
intel_read_dp_sdp(encoder, pipe_config, DP_SDP_ADAPTIVE_SYNC);
+ intel_dip_sdp_transmission_line_get_config(pipe_config);
intel_audio_codec_get_config(encoder, pipe_config);
}
diff --git a/drivers/gpu/drm/i915/display/intel_dip.c b/drivers/gpu/drm/i915/display/intel_dip.c
index 0277b15e1c82..d1acc7eb5a39 100644
--- a/drivers/gpu/drm/i915/display/intel_dip.c
+++ b/drivers/gpu/drm/i915/display/intel_dip.c
@@ -43,19 +43,21 @@ void intel_dip_write_emp_as_sdp_tl(const struct intel_crtc_state *crtc_state)
{
struct intel_display *display = to_intel_display(crtc_state);
enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
- u32 transmission_line = 0;
if (!HAS_EMP_AS_SDP_TL(display))
return;
- /*
- * Since we currently support VRR only for DP/eDP, program the register
- * for Adaptive Sync SDP using vsync start. For non-DP encoders,
- * the register is reset to 0.
- */
- if (intel_crtc_has_dp_encoder(crtc_state))
- transmission_line = intel_dip_get_as_sdp_transmission_line(crtc_state);
intel_de_write(display,
EMP_AS_SDP_TL(display, cpu_transcoder),
- EMP_AS_SDP_DB_TL(transmission_line));
+ EMP_AS_SDP_DB_TL(crtc_state->dip.emp_as_sdp_tl));
+}
+
+void intel_dip_sdp_tl_compute_config_late(struct intel_crtc_state *crtc_state)
+{
+ crtc_state->dip.emp_as_sdp_tl = intel_dip_get_as_sdp_transmission_line(crtc_state);
+}
+
+void intel_dip_sdp_transmission_line_get_config(struct intel_crtc_state *crtc_state)
+{
+ crtc_state->dip.emp_as_sdp_tl = intel_dip_read_emp_as_sdp_tl(crtc_state);
}
diff --git a/drivers/gpu/drm/i915/display/intel_dip.h b/drivers/gpu/drm/i915/display/intel_dip.h
index 25bae4a04d6b..20f9aeb85c39 100644
--- a/drivers/gpu/drm/i915/display/intel_dip.h
+++ b/drivers/gpu/drm/i915/display/intel_dip.h
@@ -35,4 +35,7 @@ struct intel_crtc_state;
u16 intel_dip_read_emp_as_sdp_tl(const struct intel_crtc_state *crtc_state);
void intel_dip_write_emp_as_sdp_tl(const struct intel_crtc_state *crtc_state);
+void intel_dip_sdp_tl_compute_config_late(struct intel_crtc_state *crtc_state);
+void intel_dip_sdp_transmission_line_get_config(struct intel_crtc_state *crtc_state);
+
#endif /* __INTEL_DIP_H__ */
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 0cd5e6b5034c..8c3a324e164e 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -61,6 +61,7 @@
#include "intel_cx0_phy.h"
#include "intel_ddi.h"
#include "intel_de.h"
+#include "intel_dip.h"
#include "intel_display_driver.h"
#include "intel_display_jiffies.h"
#include "intel_display_utils.h"
@@ -7324,6 +7325,8 @@ int intel_dp_sdp_compute_config_late(struct intel_crtc_state *crtc_state)
return -EINVAL;
}
+ intel_dip_sdp_tl_compute_config_late(crtc_state);
+
return 0;
}
--
2.50.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v6 07/13] drm/i915/dip_regs: Add register definitions for common SDP Transmission Line
2026-09-13 14:56 [PATCH v6 00/13] Add support for Common SDP Transmission Line Ankit Nautiyal
` (5 preceding siblings ...)
2026-09-13 14:56 ` [PATCH v6 06/13] drm/i915/dip: Store and use AS SDP transmission line from crtc state Ankit Nautiyal
@ 2026-09-13 14:56 ` Ankit Nautiyal
2026-09-13 14:56 ` [PATCH v6 08/13] drm/i915/dip: Add HAS_COMMON_SDP_TL macro Ankit Nautiyal
` (6 subsequent siblings)
13 siblings, 0 replies; 18+ messages in thread
From: Ankit Nautiyal @ 2026-09-13 14:56 UTC (permalink / raw)
To: intel-gfx, intel-xe
Cc: ville.syrjala, arun.r.murthy, jani.nikula, suraj.kandpal,
Ankit Nautiyal
From: Arun R Murthy <arun.r.murthy@intel.com>
Add registers definitions for common SDP transmission line CMN_SDP_TL
and CMN_SDP_TL_STGR_CTL.
v2: Move all registers to intel_dip_regs.h (Ankit)
Bspec: 74384
Signed-off-by: Arun R Murthy <arun.r.murthy@intel.com>
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
---
drivers/gpu/drm/i915/display/intel_dip_regs.h | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_dip_regs.h b/drivers/gpu/drm/i915/display/intel_dip_regs.h
index 85dcbf42e77d..7e69c5cf63da 100644
--- a/drivers/gpu/drm/i915/display/intel_dip_regs.h
+++ b/drivers/gpu/drm/i915/display/intel_dip_regs.h
@@ -14,4 +14,23 @@
#define EMP_AS_SDP_DB_TL_MASK REG_GENMASK(12, 0)
#define EMP_AS_SDP_DB_TL(db_transmit_line) REG_FIELD_PREP(EMP_AS_SDP_DB_TL_MASK, (db_transmit_line))
+/* COMMON SDP TRANSMISSION LINE */
+#define _CMN_SDP_TL_A 0x6020c
+#define CMN_SDP_TL(display, trans) _MMIO_TRANS2(display, (trans), _CMN_SDP_TL_A)
+#define TRANSMISSION_LINE_ENABLE REG_BIT(31)
+#define BASE_TRANSMISSION_LINE_MASK REG_GENMASK(12, 0)
+#define BASE_TRANSMISSION_LINE(x) REG_FIELD_PREP(BASE_TRANSMISSION_LINE_MASK, x)
+
+#define _CMN_SDP_TL_STGR_CTL_A 0x60214
+#define CMN_SDP_TL_STGR_CTL(display, trans) _MMIO_TRANS2(display, (trans), _CMN_SDP_TL_STGR_CTL_A)
+#define VSC_EXT_STAGGER_MASK REG_GENMASK(11, 8)
+#define VSC_EXT_STAGGER(x) REG_FIELD_PREP(VSC_EXT_STAGGER_MASK, x)
+#define VSC_EXT_STAGGER_DEFAULT 0x2
+#define PPS_STAGGER_MASK REG_GENMASK(7, 4)
+#define PPS_STAGGER(x) REG_FIELD_PREP(PPS_STAGGER_MASK, x)
+#define PPS_STAGGER_DEFAULT 0x1
+#define GMP_STAGGER_MASK REG_GENMASK(3, 0)
+#define GMP_STAGGER(x) REG_FIELD_PREP(GMP_STAGGER_MASK, x)
+#define GMP_STAGGER_DEFAULT 0x0
+
#endif /* __INTEL_DIP_REGS_H__ */
--
2.50.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v6 08/13] drm/i915/dip: Add HAS_COMMON_SDP_TL macro
2026-09-13 14:56 [PATCH v6 00/13] Add support for Common SDP Transmission Line Ankit Nautiyal
` (6 preceding siblings ...)
2026-09-13 14:56 ` [PATCH v6 07/13] drm/i915/dip_regs: Add register definitions for common SDP Transmission Line Ankit Nautiyal
@ 2026-09-13 14:56 ` Ankit Nautiyal
2026-09-13 14:56 ` [PATCH v6 09/13] drm/i915/dip: Store SDP transmission lines in crtc_state Ankit Nautiyal
` (5 subsequent siblings)
13 siblings, 0 replies; 18+ messages in thread
From: Ankit Nautiyal @ 2026-09-13 14:56 UTC (permalink / raw)
To: intel-gfx, intel-xe
Cc: ville.syrjala, arun.r.murthy, jani.nikula, suraj.kandpal,
Ankit Nautiyal
Add a helper macro to detect CMN SDP TL support on platforms with display
version 35 and above.
v2: Use prefix drm/i915/dip. (Suraj)
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
---
drivers/gpu/drm/i915/display/intel_dip.h | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_dip.h b/drivers/gpu/drm/i915/display/intel_dip.h
index 20f9aeb85c39..8ff22eb5663b 100644
--- a/drivers/gpu/drm/i915/display/intel_dip.h
+++ b/drivers/gpu/drm/i915/display/intel_dip.h
@@ -32,6 +32,16 @@ struct intel_crtc_state;
#define HAS_EMP_AS_SDP_TL(__display) (DISPLAY_VERx100(__display) == 1401 || \
DISPLAY_VER(__display) >= 20)
+/*
+ * CMN SDP TL: Common Secondary Data Packet Transmission Line.
+ *
+ * Xe3p_lpd introduces new register CMN_SDP_TL to program a common SDP
+ * Transmission line that will be used by the Hardware to position the
+ * SDPs. Along with this, another new register CMN_SDP_TL_STGR_CTL is
+ * also added to stagger the different SDPs.
+ */
+#define HAS_COMMON_SDP_TL(__display) (DISPLAY_VER(__display) >= 35)
+
u16 intel_dip_read_emp_as_sdp_tl(const struct intel_crtc_state *crtc_state);
void intel_dip_write_emp_as_sdp_tl(const struct intel_crtc_state *crtc_state);
--
2.50.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v6 09/13] drm/i915/dip: Store SDP transmission lines in crtc_state
2026-09-13 14:56 [PATCH v6 00/13] Add support for Common SDP Transmission Line Ankit Nautiyal
` (7 preceding siblings ...)
2026-09-13 14:56 ` [PATCH v6 08/13] drm/i915/dip: Add HAS_COMMON_SDP_TL macro Ankit Nautiyal
@ 2026-09-13 14:56 ` Ankit Nautiyal
2026-09-13 14:56 ` [PATCH v6 10/13] drm/i915/dp: Introduce helpers to enable/disable CMN SDP Transmission line Ankit Nautiyal
` (4 subsequent siblings)
13 siblings, 0 replies; 18+ messages in thread
From: Ankit Nautiyal @ 2026-09-13 14:56 UTC (permalink / raw)
To: intel-gfx, intel-xe
Cc: ville.syrjala, arun.r.murthy, jani.nikula, suraj.kandpal,
Ankit Nautiyal
Currently the driver only programs the transmission line for the
Adaptive-Sync SDP, while the hardware controls the transmission lines for
other SDPs.
Starting with Xe3p_lpd, the hardware allows the driver to program
transmission lines for additional DP SDPs. Prepare for this by adding
fields to struct intel_crtc_state to store SDP transmission lines, and
include them in pipe config comparison.
The SDP transmission line fields track vrr.vsync_start/vtotal, which are
allowed to change during a seamless LRR fastset. Guard their pipe config
comparison under !fastset, same as vrr.vsync_start/vsync_end, so a fastset
is not unnecessarily turned into a full modeset.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
---
drivers/gpu/drm/i915/display/intel_display.c | 5 +++++
drivers/gpu/drm/i915/display/intel_display_types.h | 6 ++++++
2 files changed, 11 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 5e8f2e48e95b..e052c5ad99d9 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -5603,6 +5603,11 @@ intel_pipe_config_compare(const struct intel_crtc_state *current_config,
PIPE_CONF_CHECK_I(vrr.dc_balance.max_decrease);
PIPE_CONF_CHECK_I(vrr.dc_balance.vblank_target);
PIPE_CONF_CHECK_I(dip.emp_as_sdp_tl);
+ PIPE_CONF_CHECK_I(dip.gmp_sdp_tl);
+ PIPE_CONF_CHECK_I(dip.pps_sdp_tl);
+ PIPE_CONF_CHECK_I(dip.vsc_sdp_tl);
+ PIPE_CONF_CHECK_I(dip.vsc_ext_sdp_tl);
+ PIPE_CONF_CHECK_I(dip.cmn_sdp_tl);
}
if (!fastset || intel_vrr_always_use_vrr_tg(display)) {
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
index bcaf42cefa17..105d25123db3 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -1012,6 +1012,12 @@ struct intel_dip {
* The programmed transmit line is (Vtotal - value)
*/
u16 emp_as_sdp_tl;
+ u16 gmp_sdp_tl;
+ u16 pps_sdp_tl;
+ u16 vsc_sdp_tl;
+ u16 vsc_ext_sdp_tl;
+ /* Common SDP Base transmission line (Xe3p_lpd+) */
+ u16 cmn_sdp_tl;
};
struct intel_crtc_state {
--
2.50.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v6 10/13] drm/i915/dp: Introduce helpers to enable/disable CMN SDP Transmission line
2026-09-13 14:56 [PATCH v6 00/13] Add support for Common SDP Transmission Line Ankit Nautiyal
` (8 preceding siblings ...)
2026-09-13 14:56 ` [PATCH v6 09/13] drm/i915/dip: Store SDP transmission lines in crtc_state Ankit Nautiyal
@ 2026-09-13 14:56 ` Ankit Nautiyal
2026-09-13 14:56 ` [PATCH v6 11/13] drm/i915/dip: Enable Common " Ankit Nautiyal
` (3 subsequent siblings)
13 siblings, 0 replies; 18+ messages in thread
From: Ankit Nautiyal @ 2026-09-13 14:56 UTC (permalink / raw)
To: intel-gfx, intel-xe
Cc: ville.syrjala, arun.r.murthy, jani.nikula, suraj.kandpal,
Ankit Nautiyal
Introduce helpers to program or disable CMN_SDP_TL and stagger registers
using the state stored in crtc_state.
v2:
- Use HAS_COMMON_SDP_TL(display) instead of checking crtc_state->dip.cmn_sdp_tl,
since 0 is a valid transmission line value. (Sashiko)
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_dip.c | 56 ++++++++++++++++++++++++
drivers/gpu/drm/i915/display/intel_dip.h | 2 +
2 files changed, 58 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_dip.c b/drivers/gpu/drm/i915/display/intel_dip.c
index d1acc7eb5a39..f8e8577b2755 100644
--- a/drivers/gpu/drm/i915/display/intel_dip.c
+++ b/drivers/gpu/drm/i915/display/intel_dip.c
@@ -4,6 +4,8 @@
*
*/
+#include <drm/drm_print.h>
+
#include "intel_de.h"
#include "intel_dip.h"
#include "intel_dip_regs.h"
@@ -61,3 +63,57 @@ void intel_dip_sdp_transmission_line_get_config(struct intel_crtc_state *crtc_st
{
crtc_state->dip.emp_as_sdp_tl = intel_dip_read_emp_as_sdp_tl(crtc_state);
}
+
+static int intel_dip_sdp_tl_to_stagger(const struct intel_crtc_state *crtc_state,
+ u16 sdp_transmission_line)
+{
+ return sdp_transmission_line - crtc_state->dip.cmn_sdp_tl;
+}
+
+void intel_dip_cmn_sdp_transmission_line_enable(const struct intel_crtc_state *crtc_state)
+{
+ struct intel_display *display = to_intel_display(crtc_state);
+ enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
+ int gmp_stagger;
+ int pps_stagger;
+ int vsc_ext_stagger;
+
+ if (!HAS_COMMON_SDP_TL(display))
+ return;
+
+ gmp_stagger = intel_dip_sdp_tl_to_stagger(crtc_state,
+ crtc_state->dip.gmp_sdp_tl);
+
+ pps_stagger = intel_dip_sdp_tl_to_stagger(crtc_state,
+ crtc_state->dip.pps_sdp_tl);
+
+ vsc_ext_stagger = intel_dip_sdp_tl_to_stagger(crtc_state,
+ crtc_state->dip.vsc_ext_sdp_tl);
+
+ if (drm_WARN_ON(display->drm, gmp_stagger < 0))
+ return;
+ if (drm_WARN_ON(display->drm, pps_stagger < 0))
+ return;
+ if (drm_WARN_ON(display->drm, vsc_ext_stagger < 0))
+ return;
+
+ intel_de_write(display, CMN_SDP_TL_STGR_CTL(display, cpu_transcoder),
+ GMP_STAGGER(gmp_stagger) |
+ PPS_STAGGER(pps_stagger) |
+ VSC_EXT_STAGGER(vsc_ext_stagger));
+
+ intel_de_write(display, CMN_SDP_TL(display, cpu_transcoder),
+ TRANSMISSION_LINE_ENABLE |
+ BASE_TRANSMISSION_LINE(crtc_state->dip.cmn_sdp_tl));
+}
+
+void intel_dip_cmn_sdp_transmission_line_disable(const struct intel_crtc_state *old_crtc_state)
+{
+ struct intel_display *display = to_intel_display(old_crtc_state);
+ enum transcoder cpu_transcoder = old_crtc_state->cpu_transcoder;
+
+ if (!HAS_COMMON_SDP_TL(display))
+ return;
+
+ intel_de_write(display, CMN_SDP_TL(display, cpu_transcoder), 0);
+}
diff --git a/drivers/gpu/drm/i915/display/intel_dip.h b/drivers/gpu/drm/i915/display/intel_dip.h
index 8ff22eb5663b..7c64c84cb1be 100644
--- a/drivers/gpu/drm/i915/display/intel_dip.h
+++ b/drivers/gpu/drm/i915/display/intel_dip.h
@@ -47,5 +47,7 @@ void intel_dip_write_emp_as_sdp_tl(const struct intel_crtc_state *crtc_state);
void intel_dip_sdp_tl_compute_config_late(struct intel_crtc_state *crtc_state);
void intel_dip_sdp_transmission_line_get_config(struct intel_crtc_state *crtc_state);
+void intel_dip_cmn_sdp_transmission_line_enable(const struct intel_crtc_state *crtc_state);
+void intel_dip_cmn_sdp_transmission_line_disable(const struct intel_crtc_state *old_crtc_state);
#endif /* __INTEL_DIP_H__ */
--
2.50.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v6 11/13] drm/i915/dip: Enable Common SDP Transmission line
2026-09-13 14:56 [PATCH v6 00/13] Add support for Common SDP Transmission Line Ankit Nautiyal
` (9 preceding siblings ...)
2026-09-13 14:56 ` [PATCH v6 10/13] drm/i915/dp: Introduce helpers to enable/disable CMN SDP Transmission line Ankit Nautiyal
@ 2026-09-13 14:56 ` Ankit Nautiyal
2026-09-13 15:33 ` sashiko-bot
2026-09-13 14:56 ` [PATCH v6 12/13] drm/i915/dp: Adjust SDP guardband requirement for CMN_SDP_TL Ankit Nautiyal
` (2 subsequent siblings)
13 siblings, 1 reply; 18+ messages in thread
From: Ankit Nautiyal @ 2026-09-13 14:56 UTC (permalink / raw)
To: intel-gfx, intel-xe
Cc: ville.syrjala, arun.r.murthy, jani.nikula, suraj.kandpal,
Ankit Nautiyal
Enable programming of the common SDP transmission line on platforms that
support it. Compute and program the common base transmission line and
per-SDP stagger values from the crtc state during modeset, and disable the
feature on pipe disable.
Currently, the stagger values are set as per the default policy of the
Hardware. This can be optimized later if we come up with a specific driver
policy to sequence the SDPs better.
v2: Add WARN if the Common Transmission Line is more than Guardband +
SCL. (Suraj)
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_ddi.c | 3 +
drivers/gpu/drm/i915/display/intel_dip.c | 96 ++++++++++++++++++++++++
2 files changed, 99 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index dacb4b7588a0..3cdb06e81130 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -2737,6 +2737,8 @@ static void mtl_ddi_pre_enable_dp(struct intel_atomic_state *state,
/* 6.o Configure and enable FEC if needed */
intel_ddi_enable_fec(encoder, crtc_state);
+ intel_dip_cmn_sdp_transmission_line_enable(crtc_state);
+
/* 7.a 128b/132b SST. */
if (!is_mst && intel_dp_is_uhbr(crtc_state)) {
/* VCPID 1, start slot 0 for 128b/132b, tu slots */
@@ -3124,6 +3126,7 @@ static void intel_ddi_buf_disable(struct intel_encoder *encoder,
DP_TP_CTL_ENABLE, 0);
}
+ intel_dip_cmn_sdp_transmission_line_disable(crtc_state);
intel_ddi_disable_fec(encoder, crtc_state);
if (DISPLAY_VER(display) < 14)
diff --git a/drivers/gpu/drm/i915/display/intel_dip.c b/drivers/gpu/drm/i915/display/intel_dip.c
index f8e8577b2755..f447150ff7bc 100644
--- a/drivers/gpu/drm/i915/display/intel_dip.c
+++ b/drivers/gpu/drm/i915/display/intel_dip.c
@@ -10,6 +10,7 @@
#include "intel_dip.h"
#include "intel_dip_regs.h"
#include "intel_display_types.h"
+#include "intel_hdmi.h"
static int intel_dip_get_as_sdp_transmission_line(const struct intel_crtc_state *crtc_state)
{
@@ -54,14 +55,109 @@ void intel_dip_write_emp_as_sdp_tl(const struct intel_crtc_state *crtc_state)
EMP_AS_SDP_DB_TL(crtc_state->dip.emp_as_sdp_tl));
}
+static int intel_dip_sdp_stagger_to_tl(struct intel_crtc_state *crtc_state,
+ int stagger)
+{
+ return crtc_state->dip.cmn_sdp_tl + stagger;
+}
+
+static
+void intel_dip_cmn_sdp_tl_compute_config_late(struct intel_crtc_state *crtc_state)
+{
+ struct intel_display *display = to_intel_display(crtc_state);
+ bool as_sdp;
+
+ if (!HAS_COMMON_SDP_TL(display))
+ return;
+
+ as_sdp = crtc_state->infoframes.enable &
+ intel_hdmi_infoframe_enable(DP_SDP_ADAPTIVE_SYNC);
+ /*
+ * When AS SDP is enabled :
+ * - The common SDP Transmission Line matches the EMP SDP Transmission Line.
+ *
+ * When AS SDP is disabled:
+ * - Bspec mentions the positions as lines of delayed vblank.
+ * - Guardband = 1st line of delayed vblank
+ * - Common SDP Transmission line is set to 2nd line of delayed vblank.
+ */
+
+ if (as_sdp)
+ crtc_state->dip.cmn_sdp_tl = crtc_state->dip.emp_as_sdp_tl;
+ else
+ crtc_state->dip.cmn_sdp_tl = crtc_state->vrr.guardband - 1;
+
+ if (drm_WARN_ON(display->drm,
+ crtc_state->dip.cmn_sdp_tl >=
+ crtc_state->vrr.guardband + crtc_state->set_context_latency))
+ return;
+
+ /*
+ * Currently we are programming the default stagger values, but these
+ * can be optimized if required, based on number of SDPs enabled.
+ *
+ * Default values of the Transmission lines for SDPs other than AS SDP:
+ * VSC : CMN SDP Transmission line
+ * GMP : CMN SDP Transmission line
+ * PPS : CMN SDP Transmission line + 1
+ * VSC_EXT: CMN SDP Transmission line + 2
+ */
+ crtc_state->dip.vsc_sdp_tl = crtc_state->dip.cmn_sdp_tl;
+ crtc_state->dip.gmp_sdp_tl =
+ intel_dip_sdp_stagger_to_tl(crtc_state, GMP_STAGGER_DEFAULT);
+ crtc_state->dip.pps_sdp_tl =
+ intel_dip_sdp_stagger_to_tl(crtc_state, PPS_STAGGER_DEFAULT);
+ crtc_state->dip.vsc_ext_sdp_tl =
+ intel_dip_sdp_stagger_to_tl(crtc_state, VSC_EXT_STAGGER_DEFAULT);
+}
+
void intel_dip_sdp_tl_compute_config_late(struct intel_crtc_state *crtc_state)
{
crtc_state->dip.emp_as_sdp_tl = intel_dip_get_as_sdp_transmission_line(crtc_state);
+
+ intel_dip_cmn_sdp_tl_compute_config_late(crtc_state);
+}
+
+static
+void intel_dip_cmn_sdp_transmission_line_get_config(struct intel_crtc_state *crtc_state)
+{
+ struct intel_display *display = to_intel_display(crtc_state);
+ enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
+ u16 vsc_ext_stagger, pps_stagger, gmp_stagger;
+ u32 val;
+
+ if (!HAS_COMMON_SDP_TL(display))
+ return;
+
+ val = intel_de_read(display, CMN_SDP_TL(display, cpu_transcoder));
+
+ if (!(val & TRANSMISSION_LINE_ENABLE))
+ return;
+
+ crtc_state->dip.cmn_sdp_tl = REG_FIELD_GET(BASE_TRANSMISSION_LINE_MASK, val);
+
+ /* SDP VSC uses same transmission line as CMN base transmission line */
+ crtc_state->dip.vsc_sdp_tl = crtc_state->dip.cmn_sdp_tl;
+
+ val = intel_de_read(display, CMN_SDP_TL_STGR_CTL(display, cpu_transcoder));
+
+ vsc_ext_stagger = REG_FIELD_GET(VSC_EXT_STAGGER_MASK, val);
+ pps_stagger = REG_FIELD_GET(PPS_STAGGER_MASK, val);
+ gmp_stagger = REG_FIELD_GET(GMP_STAGGER_MASK, val);
+
+ crtc_state->dip.vsc_ext_sdp_tl =
+ intel_dip_sdp_stagger_to_tl(crtc_state, vsc_ext_stagger);
+ crtc_state->dip.pps_sdp_tl =
+ intel_dip_sdp_stagger_to_tl(crtc_state, pps_stagger);
+ crtc_state->dip.gmp_sdp_tl =
+ intel_dip_sdp_stagger_to_tl(crtc_state, gmp_stagger);
}
void intel_dip_sdp_transmission_line_get_config(struct intel_crtc_state *crtc_state)
{
crtc_state->dip.emp_as_sdp_tl = intel_dip_read_emp_as_sdp_tl(crtc_state);
+
+ intel_dip_cmn_sdp_transmission_line_get_config(crtc_state);
}
static int intel_dip_sdp_tl_to_stagger(const struct intel_crtc_state *crtc_state,
--
2.50.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v6 12/13] drm/i915/dp: Adjust SDP guardband requirement for CMN_SDP_TL
2026-09-13 14:56 [PATCH v6 00/13] Add support for Common SDP Transmission Line Ankit Nautiyal
` (10 preceding siblings ...)
2026-09-13 14:56 ` [PATCH v6 11/13] drm/i915/dip: Enable Common " Ankit Nautiyal
@ 2026-09-13 14:56 ` Ankit Nautiyal
2026-09-13 15:25 ` sashiko-bot
2026-09-13 14:56 ` [PATCH v6 13/13] drm/i915/display: Dump DIP Transmission lines Ankit Nautiyal
2026-09-13 16:12 ` ✗ i915.CI.BAT: failure for Add support for Common SDP Transmission Line (rev6) Patchwork
13 siblings, 1 reply; 18+ messages in thread
From: Ankit Nautiyal @ 2026-09-13 14:56 UTC (permalink / raw)
To: intel-gfx, intel-xe
Cc: ville.syrjala, arun.r.murthy, jani.nikula, suraj.kandpal,
Ankit Nautiyal
Once CMN_SDP_TL is enabled, GMP/PPS/VSC/VSC_EXT/AS SDPs are no longer
positioned relative to the guardband: they are anchored via
CMN_SDP_TL/CMN_SDP_TL_STGR_CTL instead. As per Bspec 68921, SDP Setup is
0 in this mode, so the old per-packet guardband sizing (based on
GMP/PPS/AS-SDP being enabled) no longer applies for GMP/PPS/VSC/VSC_EXT.
Since we are using the default stagger values for now, size the guardband
such that the max default transmission line can be supported, similar to
when CMN SDP TL is not set:
base : 2nd line of delayed vblank
GMP : 2 + GMP_STAGGER
VSC_EXT: 2 + VSC_EXT_STAGGER
VSC : 2
PPS : 2 + PPS_STAGGER
SDP Setup = 1 + MAX(GMP, VSC_EXT, VSC, PPS setup lines)
Add intel_dp_get_lines_for_cmn_sdp_tl() and route it via the existing
intel_dp_get_lines_for_sdp().
The AS SDP check in intel_dp_sdp_min_guardband() still adds
vrr.vsync_start + 1 to the guardband, since AS SDP positioning is
unaffected by CMN_SDP_TL.
Bspec: 68921
Assisted-by: Copilot:claude-sonnet-4.5
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_dp.c | 49 ++++++++++++++++++++++++-
1 file changed, 47 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 8c3a324e164e..02e73ae9e34a 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -62,6 +62,7 @@
#include "intel_ddi.h"
#include "intel_de.h"
#include "intel_dip.h"
+#include "intel_dip_regs.h"
#include "intel_display_driver.h"
#include "intel_display_jiffies.h"
#include "intel_display_utils.h"
@@ -7348,9 +7349,55 @@ int intel_dp_compute_config_late(struct intel_encoder *encoder,
return 0;
}
+static
+int intel_dp_get_lines_for_cmn_sdp_tl(u32 type)
+{
+ u32 stagger_val;
+
+ /*
+ * Since we are using default stagger values similar to the case
+ * where CMN SDP TL is not set, the different SDP transmission
+ * lines are:
+ * base : 2nd line of delayed vblank:
+ * GMP : 2 + GMP_STAGGER
+ * VSC_EXT: 2 + VSC_EXT_STAGGER
+ * VSC : 2
+ * PPS : 2 + PPS_STAGGER
+ *
+ * SDP Setup = 1 + MAX(GMP, VSC_EXT, VSC, PPS setup lines)
+ *
+ * For EMP_AS_SDP_TL guardband should be more than vrr.vsync_start.
+ */
+
+ switch (type) {
+ case DP_SDP_VSC_EXT_VESA:
+ case DP_SDP_VSC_EXT_CEA:
+ stagger_val = VSC_EXT_STAGGER_DEFAULT;
+ break;
+ case HDMI_PACKET_TYPE_GAMUT_METADATA:
+ stagger_val = GMP_STAGGER_DEFAULT;
+ break;
+ case DP_SDP_PPS:
+ stagger_val = PPS_STAGGER_DEFAULT;
+ break;
+ default:
+ return 0;
+ }
+
+ return 1 + 2 + stagger_val;
+}
+
static
int intel_dp_get_lines_for_sdp(const struct intel_crtc_state *crtc_state, u32 type)
{
+ struct intel_display *display = to_intel_display(crtc_state);
+
+ if (type == DP_SDP_ADAPTIVE_SYNC)
+ return crtc_state->vrr.vsync_start + 1;
+
+ if (HAS_COMMON_SDP_TL(display))
+ return intel_dp_get_lines_for_cmn_sdp_tl(type);
+
switch (type) {
case DP_SDP_VSC_EXT_VESA:
case DP_SDP_VSC_EXT_CEA:
@@ -7359,8 +7406,6 @@ int intel_dp_get_lines_for_sdp(const struct intel_crtc_state *crtc_state, u32 ty
return 8;
case DP_SDP_PPS:
return 7;
- case DP_SDP_ADAPTIVE_SYNC:
- return crtc_state->vrr.vsync_start + 1;
default:
break;
}
--
2.50.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v6 13/13] drm/i915/display: Dump DIP Transmission lines
2026-09-13 14:56 [PATCH v6 00/13] Add support for Common SDP Transmission Line Ankit Nautiyal
` (11 preceding siblings ...)
2026-09-13 14:56 ` [PATCH v6 12/13] drm/i915/dp: Adjust SDP guardband requirement for CMN_SDP_TL Ankit Nautiyal
@ 2026-09-13 14:56 ` Ankit Nautiyal
2026-09-13 16:12 ` ✗ i915.CI.BAT: failure for Add support for Common SDP Transmission Line (rev6) Patchwork
13 siblings, 0 replies; 18+ messages in thread
From: Ankit Nautiyal @ 2026-09-13 14:56 UTC (permalink / raw)
To: intel-gfx, intel-xe
Cc: ville.syrjala, arun.r.murthy, jani.nikula, suraj.kandpal,
Ankit Nautiyal
Add DIP transmission lines to the CRTC state dump.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
---
drivers/gpu/drm/i915/display/intel_crtc_state_dump.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_crtc_state_dump.c b/drivers/gpu/drm/i915/display/intel_crtc_state_dump.c
index ad4f362e0c09..92675a88b969 100644
--- a/drivers/gpu/drm/i915/display/intel_crtc_state_dump.c
+++ b/drivers/gpu/drm/i915/display/intel_crtc_state_dump.c
@@ -251,6 +251,15 @@ void intel_crtc_state_dump(const struct intel_crtc_state *pipe_config,
str_enabled_disabled(pipe_config->has_panel_replay),
str_enabled_disabled(pipe_config->enable_psr2_sel_fetch));
drm_printf(&p, "minimum hblank: %d\n", pipe_config->min_hblank);
+
+ drm_printf(&p, "DIP Transmission Lines: EMP/AS SDP: %u\n",
+ pipe_config->dip.emp_as_sdp_tl);
+ drm_printf(&p, "DIP Transmission Lines: Common Base SDP: %u, GMP SDP: %u, PPS SDP: %u, VSC SDP: %u, VSC_EXT SDP: %u\n",
+ pipe_config->dip.cmn_sdp_tl,
+ pipe_config->dip.gmp_sdp_tl,
+ pipe_config->dip.pps_sdp_tl,
+ pipe_config->dip.vsc_sdp_tl,
+ pipe_config->dip.vsc_ext_sdp_tl);
}
drm_printf(&p, "audio: %i, infoframes: %i, infoframes enabled: 0x%x\n",
--
2.50.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH v6 12/13] drm/i915/dp: Adjust SDP guardband requirement for CMN_SDP_TL
2026-09-13 14:56 ` [PATCH v6 12/13] drm/i915/dp: Adjust SDP guardband requirement for CMN_SDP_TL Ankit Nautiyal
@ 2026-09-13 15:25 ` sashiko-bot
0 siblings, 0 replies; 18+ messages in thread
From: sashiko-bot @ 2026-09-13 15:25 UTC (permalink / raw)
To: Ankit Nautiyal; +Cc: intel-xe, intel-gfx
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
New issues:
- [Medium] intel_dp_get_lines_for_cmn_sdp_tl() fails to handle DP_SDP_VSC, returning 0 instead of the documented 3 setup lines.
Pre-existing issues:
- [High] intel_dp_sdp_min_guardband() fails to query guardband requirements for DP_SDP_VSC and DP_SDP_VSC_EXT_VESA/CEA.
--
commit 9c43291671903e078a3be3eca84c33bbdb51d4ac
Author: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
drm/i915/dp: Adjust SDP guardband requirement for CMN_SDP_TL
This commit adjusts the SDP guardband requirements when CMN_SDP_TL is enabled.
It introduces intel_dp_get_lines_for_cmn_sdp_tl() to anchor SDPs like GMP, PPS,
VSC, and VSC_EXT relative to CMN_SDP_TL instead of the old per-packet sizing.
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
> index 8c3a324e164ec..02e73ae9e34a0 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
[ ... ]
> @@ -7348,9 +7349,55 @@ int intel_dp_compute_config_late(struct intel_encoder *encoder,
> return 0;
> }
>
> +static
> +int intel_dp_get_lines_for_cmn_sdp_tl(u32 type)
> +{
> + u32 stagger_val;
> +
> + /*
> + * Since we are using default stagger values similar to the case
> + * where CMN SDP TL is not set, the different SDP transmission
> + * lines are:
> + * base : 2nd line of delayed vblank:
> + * GMP : 2 + GMP_STAGGER
> + * VSC_EXT: 2 + VSC_EXT_STAGGER
> + * VSC : 2
> + * PPS : 2 + PPS_STAGGER
> + *
> + * SDP Setup = 1 + MAX(GMP, VSC_EXT, VSC, PPS setup lines)
> + *
> + * For EMP_AS_SDP_TL guardband should be more than vrr.vsync_start.
> + */
> +
> + switch (type) {
> + case DP_SDP_VSC_EXT_VESA:
> + case DP_SDP_VSC_EXT_CEA:
> + stagger_val = VSC_EXT_STAGGER_DEFAULT;
> + break;
> + case HDMI_PACKET_TYPE_GAMUT_METADATA:
> + stagger_val = GMP_STAGGER_DEFAULT;
> + break;
> + case DP_SDP_PPS:
> + stagger_val = PPS_STAGGER_DEFAULT;
> + break;
> + default:
> + return 0;
> + }
[Severity: Medium]
Does this switch statement intentionally omit a case for DP_SDP_VSC?
The comment block above explicitly lists VSC as requiring 2 lines, but
because it is missing from the switch cases, this function falls through to
the default case and returns 0. Returning 0 instead of the documented 3
setup lines (1 + 2 + 0 stagger) for the DP_SDP_VSC guardband requirement
leads to an incorrectly calculated guardband when VSC SDPs are evaluated,
which could potentially cause missing SDPs or display corruption.
> +
> + return 1 + 2 + stagger_val;
> +}
> +
> static
> int intel_dp_get_lines_for_sdp(const struct intel_crtc_state *crtc_state, u32 type)
> {
> + struct intel_display *display = to_intel_display(crtc_state);
> +
> + if (type == DP_SDP_ADAPTIVE_SYNC)
> + return crtc_state->vrr.vsync_start + 1;
> +
> + if (HAS_COMMON_SDP_TL(display))
> + return intel_dp_get_lines_for_cmn_sdp_tl(type);
> +
> switch (type) {
> case DP_SDP_VSC_EXT_VESA:
> case DP_SDP_VSC_EXT_CEA:
> @@ -7359,8 +7406,6 @@ int intel_dp_get_lines_for_sdp(const struct intel_crtc_state *crtc_state, u32 ty
> return 8;
> case DP_SDP_PPS:
> return 7;
[Severity: High]
This is a pre-existing issue, but I noticed that intel_dp_sdp_min_guardband()
never actually queries DP_SDP_VSC or DP_SDP_VSC_EXT_VESA/CEA.
While this patch explicitly adds logic to handle VSC_EXT and VSC sizes (both
in the new CMN mode and legacy paths), intel_dp_sdp_min_guardband() only
queries GMP, PPS, and AS SDPs when calculating the maximum guardband:
drivers/gpu/drm/i915/display/intel_dp.c:intel_dp_sdp_min_guardband() {
...
if (assume_all_enabled ||
crtc_state->infoframes.enable &
intel_hdmi_infoframe_enable(HDMI_PACKET_TYPE_GAMUT_METADATA))
sdp_guardband = max(sdp_guardband,
intel_dp_get_lines_for_sdp(crtc_state,
HDMI_PACKET_TYPE_GAMUT_METADATA));
if (assume_all_enabled ||
crtc_state->dsc.compression_enable)
sdp_guardband = max(sdp_guardband,
intel_dp_get_lines_for_sdp(crtc_state, DP_SDP_PPS));
...
}
Does this leave the VSC_EXT switch cases in intel_dp_get_lines_for_sdp() and
intel_dp_get_lines_for_cmn_sdp_tl() as dead code? Since the guardband
calculation completely ignores the setup line requirements for VSC and
VSC_EXT packets, could programming a guardband smaller than the required
SDP transmission time lead to hardware failures or corrupted VBLANK timing?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260913145649.3240904-1-ankit.k.nautiyal@intel.com?part=12
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v6 06/13] drm/i915/dip: Store and use AS SDP transmission line from crtc state
2026-09-13 14:56 ` [PATCH v6 06/13] drm/i915/dip: Store and use AS SDP transmission line from crtc state Ankit Nautiyal
@ 2026-09-13 15:30 ` sashiko-bot
0 siblings, 0 replies; 18+ messages in thread
From: sashiko-bot @ 2026-09-13 15:30 UTC (permalink / raw)
To: Ankit Nautiyal; +Cc: intel-gfx, intel-xe
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Medium] Spurious state mismatch warning due to un-cleared EMP_AS_SDP_TL register for non-VRR and HDMI modesets.
- [Low] AS SDP transmission line is computed unconditionally for DP, contradicting the commit message claim.
--
commit 058f1f7445f91002d16b429b35d8a7cd903b86af
Author: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
drm/i915/dip: Store and use AS SDP transmission line from crtc state
Computes and stores the Adaptive Sync SDP transmission line in the
crtc state rather than computing it at programming time.
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
> index 9b3b526e5e55b..dacb4b7588a02 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
[ ... ]
> @@ -4235,6 +4236,7 @@ static void intel_ddi_get_config(struct intel_encoder *encoder,
> intel_read_dp_sdp(encoder, pipe_config, HDMI_PACKET_TYPE_GAMUT_METADATA);
> intel_read_dp_sdp(encoder, pipe_config, DP_SDP_VSC);
> intel_read_dp_sdp(encoder, pipe_config, DP_SDP_ADAPTIVE_SYNC);
> + intel_dip_sdp_transmission_line_get_config(pipe_config);
[Severity: Medium]
Will this lead to a state mismatch warning on non-VRR or HDMI modesets?
When transitioning from a DP monitor with VRR enabled to an HDMI monitor or DP
with VRR disabled, intel_vrr_possible() returns false. This causes
intel_vrr_set_transcoder_timings() to return early without calling
intel_dip_write_emp_as_sdp_tl():
drivers/gpu/drm/i915/display/intel_vrr.c:intel_vrr_set_transcoder_timings() {
if (!intel_vrr_possible(crtc_state)) {
intel_de_write(display,
TRANS_VRR_CTL(display, cpu_transcoder), 0);
return;
}
...
intel_dip_write_emp_as_sdp_tl(crtc_state);
}
Since intel_dip_write_emp_as_sdp_tl() is skipped, the EMP_AS_SDP_TL hardware
register is left with a stale non-zero value.
Will intel_pipe_config_compare() now throw a state mismatch error because the
software state is computed as 0 for HDMI, but the hardware register retains
the stale VRR value read here?
>
> intel_audio_codec_get_config(encoder, pipe_config);
> }
[ ... ]
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
> index 0cd5e6b5034cf..8c3a324e164ec 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
[ ... ]
> @@ -7324,6 +7325,8 @@ int intel_dp_sdp_compute_config_late(struct intel_crtc_state *crtc_state)
> return -EINVAL;
> }
>
> + intel_dip_sdp_tl_compute_config_late(crtc_state);
[Severity: Low]
Does this execute unconditionally for DP, contradicting the commit message?
The commit message states: "we must configure the AS SDP transmission line at
this point when AS SDP is enabled in crtc_state."
However, this is called without checking if DP_SDP_ADAPTIVE_SYNC is actually
present in crtc_state->infoframes.enable, which populates the software state
variable with vsync_start even when AS SDP is not enabled. Should this have a
conditional check?
> +
> return 0;
> }
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260913145649.3240904-1-ankit.k.nautiyal@intel.com?part=6
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH v6 11/13] drm/i915/dip: Enable Common SDP Transmission line
2026-09-13 14:56 ` [PATCH v6 11/13] drm/i915/dip: Enable Common " Ankit Nautiyal
@ 2026-09-13 15:33 ` sashiko-bot
0 siblings, 0 replies; 18+ messages in thread
From: sashiko-bot @ 2026-09-13 15:33 UTC (permalink / raw)
To: Ankit Nautiyal; +Cc: intel-xe, intel-gfx
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Medium] Common SDP transmission line is incorrectly programmed for MST streams due to missing computation and mismatched transcoder programming scopes.
- [Medium] Integer underflow when computing cmn_sdp_tl for display modes where VRR is disabled or unsupported, leading to spurious warnings and aborted hardware programming.
--
commit 0717b28db12af360a6f11ccd09e4a25272022976
Author: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
drm/i915/dip: Enable Common SDP Transmission line
This commit computes and programs the common base transmission line and
per-SDP stagger values during modesets. It also disables the feature upon
pipe disable.
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
> index dacb4b7588a02..3cdb06e81130b 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
[ ... ]
> @@ -2737,6 +2737,8 @@ static void mtl_ddi_pre_enable_dp(struct intel_atomic_state *state,
> /* 6.o Configure and enable FEC if needed */
> intel_ddi_enable_fec(encoder, crtc_state);
>
> + intel_dip_cmn_sdp_transmission_line_enable(crtc_state);
> +
> /* 7.a 128b/132b SST. */
[Severity: Medium]
Does hooking this transcoder-specific transmission line programming here
correctly handle MST streams?
Since mtl_ddi_pre_enable_dp() operates at the link level, it appears this
might only be called once for the first active MST stream. This could leave
subsequent transcoders in the MST topology uninitialized, causing their SDP
packets to use incorrect default transmission lines.
Additionally, should the transmission line computation be added to
mst_stream_compute_config_late() in intel_dp_mst.c? It looks like it is
currently omitted during the MST encoder's late compute configuration.
[ ... ]
> @@ -3124,6 +3126,7 @@ static void intel_ddi_buf_disable(struct intel_encoder *encoder,
> DP_TP_CTL_ENABLE, 0);
> }
>
> + intel_dip_cmn_sdp_transmission_line_disable(crtc_state);
> intel_ddi_disable_fec(encoder, crtc_state);
[Severity: Medium]
Similar to the pre-enable hook, does placing the disable sequence in this
link-level function cause it to only apply to the transcoder of the last
active MST stream?
> diff --git a/drivers/gpu/drm/i915/display/intel_dip.c b/drivers/gpu/drm/i915/display/intel_dip.c
> index f8e8577b27558..f447150ff7bc0 100644
> --- a/drivers/gpu/drm/i915/display/intel_dip.c
> +++ b/drivers/gpu/drm/i915/display/intel_dip.c
[ ... ]
> @@ -54,14 +55,109 @@ void intel_dip_write_emp_as_sdp_tl(const struct intel_crtc_state *crtc_state)
[ ... ]
> +static
> +void intel_dip_cmn_sdp_tl_compute_config_late(struct intel_crtc_state *crtc_state)
> +{
[ ... ]
> + if (as_sdp)
> + crtc_state->dip.cmn_sdp_tl = crtc_state->dip.emp_as_sdp_tl;
> + else
> + crtc_state->dip.cmn_sdp_tl = crtc_state->vrr.guardband - 1;
[Severity: Medium]
Can this subtraction underflow if the display mode does not support VRR?
If an interlaced mode is set, for example, intel_vrr_compute_config() can
bail out early and leave vrr.guardband at 0. This would cause the
computation to evaluate to a large unsigned value (or a negative value that
is later evaluated as unsigned).
If this underflow happens, it appears it would cascade into the following
bounds check:
> + if (drm_WARN_ON(display->drm,
> + crtc_state->dip.cmn_sdp_tl >=
> + crtc_state->vrr.guardband + crtc_state->set_context_latency))
> + return;
This could trigger a spurious kernel warning and unexpectedly abort the
rest of the hardware programming sequence for the transmission line.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260913145649.3240904-1-ankit.k.nautiyal@intel.com?part=11
^ permalink raw reply [flat|nested] 18+ messages in thread
* ✗ i915.CI.BAT: failure for Add support for Common SDP Transmission Line (rev6)
2026-09-13 14:56 [PATCH v6 00/13] Add support for Common SDP Transmission Line Ankit Nautiyal
` (12 preceding siblings ...)
2026-09-13 14:56 ` [PATCH v6 13/13] drm/i915/display: Dump DIP Transmission lines Ankit Nautiyal
@ 2026-09-13 16:12 ` Patchwork
13 siblings, 0 replies; 18+ messages in thread
From: Patchwork @ 2026-09-13 16:12 UTC (permalink / raw)
To: Nautiyal, Ankit K; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 1931 bytes --]
== Series Details ==
Series: Add support for Common SDP Transmission Line (rev6)
URL : https://patchwork.freedesktop.org/series/162622/
State : failure
== Summary ==
CI Bug Log - changes from CI_DRM_19136 -> Patchwork_162622v6
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with Patchwork_162622v6 absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in Patchwork_162622v6, 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_162622v6/index.html
Participating hosts (38 -> 36)
------------------------------
Missing (2): bat-dg2-13 fi-glk-j4005
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in Patchwork_162622v6:
### IGT changes ###
#### Possible regressions ####
* igt@i915_selftest@live@late_gt_pm:
- bat-dg2-14: [PASS][1] -> [ABORT][2] +1 other test abort
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19136/bat-dg2-14/igt@i915_selftest@live@late_gt_pm.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162622v6/bat-dg2-14/igt@i915_selftest@live@late_gt_pm.html
Build changes
-------------
* Linux: CI_DRM_19136 -> Patchwork_162622v6
CI-20190529: 20190529
CI_DRM_19136: d0f49187686a810b5b83216805c07814ad7542dc @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_9093: 932327f15c92ecb52266ced8c0fbe72931a75880 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
Patchwork_162622v6: d0f49187686a810b5b83216805c07814ad7542dc @ git://anongit.freedesktop.org/gfx-ci/linux
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_162622v6/index.html
[-- Attachment #2: Type: text/html, Size: 2533 bytes --]
^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2026-09-13 16:12 UTC | newest]
Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-13 14:56 [PATCH v6 00/13] Add support for Common SDP Transmission Line Ankit Nautiyal
2026-09-13 14:56 ` [PATCH v6 01/13] drm/i915/dip: Add new file to handle Data Island Packet hardware Ankit Nautiyal
2026-09-13 14:56 ` [PATCH v6 02/13] drm/i915/vrr: Use the helper to write EMP_AS_SDP_TL register Ankit Nautiyal
2026-09-13 14:56 ` [PATCH v6 03/13] drm/i915/intel_dip: Add check for DP encoder Ankit Nautiyal
2026-09-13 14:56 ` [PATCH v6 04/13] drm/i915/dip: Add helper to get AS SDP Transmission Line Ankit Nautiyal
2026-09-13 14:56 ` [PATCH v6 05/13] drm/i915/display: Add crtc state for DIP transmission lines Ankit Nautiyal
2026-09-13 14:56 ` [PATCH v6 06/13] drm/i915/dip: Store and use AS SDP transmission line from crtc state Ankit Nautiyal
2026-09-13 15:30 ` sashiko-bot
2026-09-13 14:56 ` [PATCH v6 07/13] drm/i915/dip_regs: Add register definitions for common SDP Transmission Line Ankit Nautiyal
2026-09-13 14:56 ` [PATCH v6 08/13] drm/i915/dip: Add HAS_COMMON_SDP_TL macro Ankit Nautiyal
2026-09-13 14:56 ` [PATCH v6 09/13] drm/i915/dip: Store SDP transmission lines in crtc_state Ankit Nautiyal
2026-09-13 14:56 ` [PATCH v6 10/13] drm/i915/dp: Introduce helpers to enable/disable CMN SDP Transmission line Ankit Nautiyal
2026-09-13 14:56 ` [PATCH v6 11/13] drm/i915/dip: Enable Common " Ankit Nautiyal
2026-09-13 15:33 ` sashiko-bot
2026-09-13 14:56 ` [PATCH v6 12/13] drm/i915/dp: Adjust SDP guardband requirement for CMN_SDP_TL Ankit Nautiyal
2026-09-13 15:25 ` sashiko-bot
2026-09-13 14:56 ` [PATCH v6 13/13] drm/i915/display: Dump DIP Transmission lines Ankit Nautiyal
2026-09-13 16:12 ` ✗ i915.CI.BAT: failure for Add support for Common SDP Transmission Line (rev6) Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox