public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
* [RFC PATCH v3 0/2] Enable seamless boot (fastboot) for PTL
@ 2026-01-21 20:46 Juasheem Sultan
  2026-01-21 20:46 ` [RFC PATCH v3 1/2] drm/xe/display: Fix reading the framebuffer from stolen memory Juasheem Sultan
                   ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: Juasheem Sultan @ 2026-01-21 20:46 UTC (permalink / raw)
  To: intel-gfx, intel_xe
  Cc: Jani Nikula, Rodrigo Vivi, Manasi Navare, Drew Davenport,
	Sean Paul, Samuel Jacob, Rajat Jain, Juasheem Sultan

Resending with cover letter from v2. There were no significant code
changes. Only resending due to mail failure.

This patch series is the second revision of a series of patches meant
to add support for seamless framebuffer handoff within the Xe driver.
It was tested on Panther Lake platforms.

The goal of this series is to achieve a flicker-free transition from
the bootloader (BIOS/UEFI) to the kernel driver by strictly adhering
to the hardware state established by the firmware.

Thank you for the feedback on the previous revision.

This new patch series was created with that feedback in mind. That
revision was too rough of an implementation that had a considerable
amount of useless code and fixed problems that it unecessarily
introduced. Because of that, I completely reworked and rewrote the
solution into a much smaller, efficient version that properly makes
use of the existing infrastructure. This patch series has two specific
focal points. It enables Xe to properly adopt a framebuffer from bios
by fixing how we read stolen memory and it synchronizes an inherited
crtc state with the new state so that we can perform an initial commit.
This allows us to achieve seamless handoff between the firmware and
kernel with minimal changes required.

---
Changes since v1
- v2 Complete rewrite of the code
- v3 Resending due to failure of patches to send

Juasheem Sultan (2):
  drm/xe/display: Fix reading the framebuffer from stolen memory
  drm/i915/display: Synchronize crtc_state for initial commit

 drivers/gpu/drm/i915/display/intel_display.c  | 19 ++++++++++++++++
 drivers/gpu/drm/xe/display/xe_plane_initial.c | 22 ++++++++++++++++++-
 2 files changed, 40 insertions(+), 1 deletion(-)

-- 
2.52.0.457.g6b5491de43-goog


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [RFC PATCH v3 1/2] drm/xe/display: Fix reading the framebuffer from stolen memory
  2026-01-21 20:46 [RFC PATCH v3 0/2] Enable seamless boot (fastboot) for PTL Juasheem Sultan
@ 2026-01-21 20:46 ` Juasheem Sultan
  2026-01-21 20:46 ` [RFC PATCH v3 2/2] drm/i915/display: Synchronize crtc_state for initial commit Juasheem Sultan
  2026-01-21 21:29 ` ✗ Fi.CI.BUILD: failure for Enable seamless boot (fastboot) for PTL Patchwork
  2 siblings, 0 replies; 13+ messages in thread
From: Juasheem Sultan @ 2026-01-21 20:46 UTC (permalink / raw)
  To: intel-gfx, intel_xe
  Cc: Jani Nikula, Rodrigo Vivi, Manasi Navare, Drew Davenport,
	Sean Paul, Samuel Jacob, Rajat Jain, Juasheem Sultan

Currently, we attempt to pin stolen memory using the ggtt address. This
doesn't appear to actually read the framebuffer that was setup by the
bios. Instead, we have to use the underlying physical address offset
within stolen memory.

Signed-off-by: Juasheem Sultan <jdsultan@google.com>
---
 drivers/gpu/drm/xe/display/xe_plane_initial.c | 22 ++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/xe/display/xe_plane_initial.c b/drivers/gpu/drm/xe/display/xe_plane_initial.c
index 94f00def811b..2b84d0cc97e3 100644
--- a/drivers/gpu/drm/xe/display/xe_plane_initial.c
+++ b/drivers/gpu/drm/xe/display/xe_plane_initial.c
@@ -22,6 +22,7 @@
 #include "intel_plane.h"
 #include "intel_plane_initial.h"
 #include "xe_bo.h"
+#include "xe_ttm_stolen_mgr.h"
 #include "xe_vram_types.h"
 #include "xe_wa.h"
 
@@ -120,7 +121,26 @@ initial_plane_bo(struct xe_device *xe,
 
 		if (!stolen)
 			return NULL;
-		phys_base = base;
+
+		/* Read PTE to find physical address backing the GGTT address */
+		u64 pte = xe_ggtt_read_pte(tile0->mem.ggtt, base);
+		u64 phys_addr = pte & ~(page_size - 1);
+
+		u64 stolen_base = xe_ttm_stolen_gpu_offset(xe);
+
+		drm_dbg_kms(&xe->drm,
+			"Stolen Framebuffer base=%x pte=%llx phys_addr=%llx stolen_base=%llx\n",
+			 base, pte, phys_addr, stolen_base);
+
+		/* Make sure that the physical address is in the range of stolen memory */
+		if (phys_addr >= stolen_base) {
+			phys_base = phys_addr - stolen_base;
+		} else {
+			drm_err(&xe->drm, "Stolen memory outside of stolen range phys_base=%pa\n",
+				&phys_base);
+			return NULL;
+		}
+
 		flags |= XE_BO_FLAG_STOLEN;
 
 		if (XE_GT_WA(xe_root_mmio_gt(xe), 22019338487_display))
-- 
2.52.0.457.g6b5491de43-goog


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [RFC PATCH v3 2/2] drm/i915/display: Synchronize crtc_state for initial commit
  2026-01-21 20:46 [RFC PATCH v3 0/2] Enable seamless boot (fastboot) for PTL Juasheem Sultan
  2026-01-21 20:46 ` [RFC PATCH v3 1/2] drm/xe/display: Fix reading the framebuffer from stolen memory Juasheem Sultan
@ 2026-01-21 20:46 ` Juasheem Sultan
  2026-01-21 22:02   ` Manasi Navare
  2026-01-22 15:29   ` Jani Nikula
  2026-01-21 21:29 ` ✗ Fi.CI.BUILD: failure for Enable seamless boot (fastboot) for PTL Patchwork
  2 siblings, 2 replies; 13+ messages in thread
From: Juasheem Sultan @ 2026-01-21 20:46 UTC (permalink / raw)
  To: intel-gfx, intel_xe
  Cc: Jani Nikula, Rodrigo Vivi, Manasi Navare, Drew Davenport,
	Sean Paul, Samuel Jacob, Rajat Jain, Juasheem Sultan

When attempting the initial commit, there is a mismatch between
the new crtc_state and the old crtc_state. This causes us to fail the
pipe_config comparison and force a modeset. In the case where we are
inheriting an initialized state, we can sync the new and the old state
to pass the comparison and allow us to do a fastset and achieve an
uninterrupted handoff to userspace.

Signed-off-by: Juasheem Sultan <jdsultan@google.com>
---
 drivers/gpu/drm/i915/display/intel_display.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 0d527cf22866..6eef4bd2e251 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -5736,6 +5736,25 @@ static void intel_crtc_check_fastset(const struct intel_crtc_state *old_crtc_sta
 	if (old_crtc_state->vrr.in_range != new_crtc_state->vrr.in_range)
 		new_crtc_state->update_lrr = false;
 
+	/* Copying crtc state if inheriting an old state for commit */
+	if (old_crtc_state->inherited) {
+		new_crtc_state->hw = old_crtc_state->hw;
+
+		new_crtc_state->port_clock = old_crtc_state->port_clock;
+		new_crtc_state->pipe_bpp = old_crtc_state->pipe_bpp;
+		new_crtc_state->cpu_transcoder = old_crtc_state->cpu_transcoder;
+		new_crtc_state->lane_count = old_crtc_state->lane_count;
+		new_crtc_state->output_types = old_crtc_state->output_types;
+		new_crtc_state->dp_m_n = old_crtc_state->dp_m_n;
+		new_crtc_state->framestart_delay = old_crtc_state->framestart_delay;
+		new_crtc_state->pixel_multiplier = old_crtc_state->pixel_multiplier;
+		new_crtc_state->pixel_rate = old_crtc_state->pixel_rate;
+		new_crtc_state->enhanced_framing = old_crtc_state->enhanced_framing;
+		new_crtc_state->dpll_hw_state = old_crtc_state->dpll_hw_state;
+		new_crtc_state->intel_dpll = old_crtc_state->intel_dpll;
+		new_crtc_state->vrr.guardband = old_crtc_state->vrr.guardband;
+	}
+
 	if (!intel_pipe_config_compare(old_crtc_state, new_crtc_state, true)) {
 		drm_dbg_kms(display->drm, "[CRTC:%d:%s] fastset requirement not met, forcing full modeset\n",
 			    crtc->base.base.id, crtc->base.name);
-- 
2.52.0.457.g6b5491de43-goog


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* ✗ Fi.CI.BUILD: failure for Enable seamless boot (fastboot) for PTL
  2026-01-21 20:46 [RFC PATCH v3 0/2] Enable seamless boot (fastboot) for PTL Juasheem Sultan
  2026-01-21 20:46 ` [RFC PATCH v3 1/2] drm/xe/display: Fix reading the framebuffer from stolen memory Juasheem Sultan
  2026-01-21 20:46 ` [RFC PATCH v3 2/2] drm/i915/display: Synchronize crtc_state for initial commit Juasheem Sultan
@ 2026-01-21 21:29 ` Patchwork
  2 siblings, 0 replies; 13+ messages in thread
From: Patchwork @ 2026-01-21 21:29 UTC (permalink / raw)
  To: Juasheem Sultan; +Cc: intel-gfx

== Series Details ==

Series: Enable seamless boot (fastboot) for PTL
URL   : https://patchwork.freedesktop.org/series/160446/
State : failure

== Summary ==

Error: patch https://patchwork.freedesktop.org/api/1.0/series/160446/revisions/1/mbox/ not applied
Applying: drm/xe/display: Fix reading the framebuffer from stolen memory
Using index info to reconstruct a base tree...
A	drivers/gpu/drm/xe/display/xe_plane_initial.c
Falling back to patching base and 3-way merge...
CONFLICT (modify/delete): drivers/gpu/drm/xe/display/xe_plane_initial.c deleted in HEAD and modified in drm/xe/display: Fix reading the framebuffer from stolen memory. Version drm/xe/display: Fix reading the framebuffer from stolen memory of drivers/gpu/drm/xe/display/xe_plane_initial.c left in tree.
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 drm/xe/display: Fix reading the framebuffer from stolen memory
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] 13+ messages in thread

* Re: [RFC PATCH v3 2/2] drm/i915/display: Synchronize crtc_state for initial commit
  2026-01-21 20:46 ` [RFC PATCH v3 2/2] drm/i915/display: Synchronize crtc_state for initial commit Juasheem Sultan
@ 2026-01-21 22:02   ` Manasi Navare
  2026-01-22 15:29   ` Jani Nikula
  1 sibling, 0 replies; 13+ messages in thread
From: Manasi Navare @ 2026-01-21 22:02 UTC (permalink / raw)
  To: Juasheem Sultan, Jani Nikula
  Cc: intel-gfx, intel_xe, Jani Nikula, Rodrigo Vivi, Drew Davenport,
	Sean Paul, Samuel Jacob, Rajat Jain

[-- Attachment #1: Type: text/plain, Size: 3439 bytes --]

Thanks Jausheem for the revision, this definitely simplifies the hardcoding
of the crtc state values and just make sure the new_crtc_state is inherited
from old_crtc_state.
The logic looks good to me.

You could try and move the new_crtc_state = old_crtc_state assignments to a
separate function and call them from intel_ctomic_check()at the top which
ends up calling intel_crtc_check_fastset() , in which case then this will
return true and no modeset would be required.

Other than that it looks good to me.
@Jani Nikula <jani.nikula@intel.com>  let me know what you think, look
forward to your feedback on this new revision and if it looks okay with the
fastset approach.

Manasi

On Wed, Jan 21, 2026 at 12:47 PM Juasheem Sultan <jdsultan@google.com>
wrote:

> When attempting the initial commit, there is a mismatch between
> the new crtc_state and the old crtc_state. This causes us to fail the
> pipe_config comparison and force a modeset. In the case where we are
> inheriting an initialized state, we can sync the new and the old state
> to pass the comparison and allow us to do a fastset and achieve an
> uninterrupted handoff to userspace.
>
> Signed-off-by: Juasheem Sultan <jdsultan@google.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display.c | 19 +++++++++++++++++++
>  1 file changed, 19 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c
> b/drivers/gpu/drm/i915/display/intel_display.c
> index 0d527cf22866..6eef4bd2e251 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -5736,6 +5736,25 @@ static void intel_crtc_check_fastset(const struct
> intel_crtc_state *old_crtc_sta
>         if (old_crtc_state->vrr.in_range != new_crtc_state->vrr.in_range)
>                 new_crtc_state->update_lrr = false;
>
> +       /* Copying crtc state if inheriting an old state for commit */
> +       if (old_crtc_state->inherited) {
> +               new_crtc_state->hw = old_crtc_state->hw;
> +
> +               new_crtc_state->port_clock = old_crtc_state->port_clock;
> +               new_crtc_state->pipe_bpp = old_crtc_state->pipe_bpp;
> +               new_crtc_state->cpu_transcoder =
> old_crtc_state->cpu_transcoder;
> +               new_crtc_state->lane_count = old_crtc_state->lane_count;
> +               new_crtc_state->output_types =
> old_crtc_state->output_types;
> +               new_crtc_state->dp_m_n = old_crtc_state->dp_m_n;
> +               new_crtc_state->framestart_delay =
> old_crtc_state->framestart_delay;
> +               new_crtc_state->pixel_multiplier =
> old_crtc_state->pixel_multiplier;
> +               new_crtc_state->pixel_rate = old_crtc_state->pixel_rate;
> +               new_crtc_state->enhanced_framing =
> old_crtc_state->enhanced_framing;
> +               new_crtc_state->dpll_hw_state =
> old_crtc_state->dpll_hw_state;
> +               new_crtc_state->intel_dpll = old_crtc_state->intel_dpll;
> +               new_crtc_state->vrr.guardband =
> old_crtc_state->vrr.guardband;
> +       }
> +
>         if (!intel_pipe_config_compare(old_crtc_state, new_crtc_state,
> true)) {
>                 drm_dbg_kms(display->drm, "[CRTC:%d:%s] fastset
> requirement not met, forcing full modeset\n",
>                             crtc->base.base.id, crtc->base.name);
> --
> 2.52.0.457.g6b5491de43-goog
>
>

[-- Attachment #2: Type: text/html, Size: 4437 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [RFC PATCH v3 2/2] drm/i915/display: Synchronize crtc_state for initial commit
  2026-01-21 20:46 ` [RFC PATCH v3 2/2] drm/i915/display: Synchronize crtc_state for initial commit Juasheem Sultan
  2026-01-21 22:02   ` Manasi Navare
@ 2026-01-22 15:29   ` Jani Nikula
  2026-01-27  8:05     ` Juasheem Sultan
  1 sibling, 1 reply; 13+ messages in thread
From: Jani Nikula @ 2026-01-22 15:29 UTC (permalink / raw)
  To: Juasheem Sultan, intel-gfx, intel_xe
  Cc: Rodrigo Vivi, Manasi Navare, Drew Davenport, Sean Paul,
	Samuel Jacob, Rajat Jain, Juasheem Sultan

On Wed, 21 Jan 2026, Juasheem Sultan <jdsultan@google.com> wrote:
> When attempting the initial commit, there is a mismatch between
> the new crtc_state and the old crtc_state. This causes us to fail the
> pipe_config comparison and force a modeset. In the case where we are
> inheriting an initialized state, we can sync the new and the old state
> to pass the comparison and allow us to do a fastset and achieve an
> uninterrupted handoff to userspace.
>
> Signed-off-by: Juasheem Sultan <jdsultan@google.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display.c | 19 +++++++++++++++++++
>  1 file changed, 19 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 0d527cf22866..6eef4bd2e251 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -5736,6 +5736,25 @@ static void intel_crtc_check_fastset(const struct intel_crtc_state *old_crtc_sta
>  	if (old_crtc_state->vrr.in_range != new_crtc_state->vrr.in_range)
>  		new_crtc_state->update_lrr = false;
>  
> +	/* Copying crtc state if inheriting an old state for commit */
> +	if (old_crtc_state->inherited) {
> +		new_crtc_state->hw = old_crtc_state->hw;
> +
> +		new_crtc_state->port_clock = old_crtc_state->port_clock;
> +		new_crtc_state->pipe_bpp = old_crtc_state->pipe_bpp;
> +		new_crtc_state->cpu_transcoder = old_crtc_state->cpu_transcoder;
> +		new_crtc_state->lane_count = old_crtc_state->lane_count;
> +		new_crtc_state->output_types = old_crtc_state->output_types;
> +		new_crtc_state->dp_m_n = old_crtc_state->dp_m_n;
> +		new_crtc_state->framestart_delay = old_crtc_state->framestart_delay;
> +		new_crtc_state->pixel_multiplier = old_crtc_state->pixel_multiplier;
> +		new_crtc_state->pixel_rate = old_crtc_state->pixel_rate;
> +		new_crtc_state->enhanced_framing = old_crtc_state->enhanced_framing;
> +		new_crtc_state->dpll_hw_state = old_crtc_state->dpll_hw_state;
> +		new_crtc_state->intel_dpll = old_crtc_state->intel_dpll;
> +		new_crtc_state->vrr.guardband = old_crtc_state->vrr.guardband;

I'd like to see logs of what the differences are.

BR,
Jani.

> +	}
> +
>  	if (!intel_pipe_config_compare(old_crtc_state, new_crtc_state, true)) {
>  		drm_dbg_kms(display->drm, "[CRTC:%d:%s] fastset requirement not met, forcing full modeset\n",
>  			    crtc->base.base.id, crtc->base.name);

-- 
Jani Nikula, Intel

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [RFC PATCH v3 2/2] drm/i915/display: Synchronize crtc_state for initial commit
  2026-01-22 15:29   ` Jani Nikula
@ 2026-01-27  8:05     ` Juasheem Sultan
  2026-02-03 18:18       ` Manasi Navare
  0 siblings, 1 reply; 13+ messages in thread
From: Juasheem Sultan @ 2026-01-27  8:05 UTC (permalink / raw)
  To: Jani Nikula
  Cc: intel-gfx, intel_xe, Rodrigo Vivi, Manasi Navare, Drew Davenport,
	Sean Paul, Samuel Jacob, Rajat Jain

[-- Attachment #1: Type: text/plain, Size: 8563 bytes --]

> I'd like to see logs of what the differences are.

Here's the logs from the pipe_config_compare without my patch:
<6>[   43.743023] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.enable (expected yes, found no)
<6>[   43.763730] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.active (expected yes, found no)
<6>[   43.789093] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in cpu_transcoder (expected 0, found -1)
<6>[   43.814759] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met ihw.enablen lane_count (expected 2, found 0)
<6>[   43.835751] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in dp_m_n (expected tu 64 data 8007832/8388608 link
333659/524288, found tu 0, data 0/0 link 0/0)
<6>[   43.835753] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in output_types (expected 0x00000100, found 0x00000000)
<6>[   43.835754] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in framestart_delay (expected 1, found 0)
<6>[   43.856743] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.pipe_mode.crtc_hdisplay (expected 1920, found 0)
<6>[   43.888602] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.pipe_mode.crtc_htotal (expected 2080, found 0)
<6>[   43.888603] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.pipe_mode.crtc_hblank_start (expected 1920, found
0)
<6>[   43.888604] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.pipe_mode.crtc_hblank_end (expected 2080, found 0)
<6>[   43.888604] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.pipe_mode.crtc_hsync_start (expected 1966, found
0)
<6>[   43.888605] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.pipe_mode.crtc_hsync_end (expected 1996, found 0)
<6>[   43.888605] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.pipe_mode.crtc_vdisplay (expected 1200, found 0)
<6>[   43.888606] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.pipe_mode.crtc_vsync_start (expected 1210, found
0)
<6>[   43.888607] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.pipe_mode.crtc_vsync_end (expected 1216, found 0)
<6>[   43.911732] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.pipe_mode.crtc_vtotal (expected 1236, found 0)
<6>[   43.911733] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.pipe_mode.crtc_vblank_end (expected 1236, found 0)
<6>[   43.932520] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.adjusted_mode.crtc_hdisplay (expected 1920, found
0)
<6>[   43.960305] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.adjusted_mode.crtc_htotal (expected 2080, found 0)
<6>[   43.960306] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.adjusted_mode.crtc_hblank_start (expected 1920,
found 0)
<6>[   43.960306] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.adjusted_mode.crtc_hblank_end (expected 2080,
found 0)
<6>[   43.960307] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.adjusted_mode.crtc_hsync_start (expected 1966,
found 0)
<6>[   43.960307] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.adjusted_mode.crtc_hsync_end (expected 1996,
found 0)
<6>[   43.960308] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.adjusted_mode.crtc_vdisplay (expected 1200, found
0)
<6>[   43.960308] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.adjusted_mode.crtc_vsync_start (expected 1210,
found 0)
<6>[   43.960309] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.adjusted_mode.crtc_vsync_end (expected 1216,
found 0)
<6>[   43.960310] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.adjusted_mode.crtc_vtotal (expected 1236, found 0)
<6>[   43.960310] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.adjusted_mode.crtc_vblank_end (expected 1236,
found 0)
<6>[   43.988392] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in pixel_multiplier (expected 1, found 0)
<6>[   43.988393] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.adjusted_mode.flags (2) (expected 2, found 0)
<6>[   44.016086] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.adjusted_mode.flags (8) (expected 8, found 0)
<6>[   44.016087] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in enhanced_framing (expected yes, found no)
<6>[   44.016088] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in pipe_bpp (expected 24, found 0)
<6>[   44.044074] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.pipe_mode.crtc_clock (expected 154647, found 0)
<6>[   44.044075] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in hw.adjusted_mode.crtc_clock (expected 154647, found
0)
<6>[   44.044075] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in port_clock (expected 243000, found 0)
<6>[   44.044077] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met in vrr.guardband (expected 35, found 0)
<6>[   44.065890] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
requirement not met, forcing full modeset

On Thu, Jan 22, 2026 at 7:29 AM Jani Nikula <jani.nikula@linux.intel.com>
wrote:

> On Wed, 21 Jan 2026, Juasheem Sultan <jdsultan@google.com> wrote:
> > When attempting the initial commit, there is a mismatch between
> > the new crtc_state and the old crtc_state. This causes us to fail the
> > pipe_config comparison and force a modeset. In the case where we are
> > inheriting an initialized state, we can sync the new and the old state
> > to pass the comparison and allow us to do a fastset and achieve an
> > uninterrupted handoff to userspace.
> >
> > Signed-off-by: Juasheem Sultan <jdsultan@google.com>
> > ---
> >  drivers/gpu/drm/i915/display/intel_display.c | 19 +++++++++++++++++++
> >  1 file changed, 19 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_display.c
> b/drivers/gpu/drm/i915/display/intel_display.c
> > index 0d527cf22866..6eef4bd2e251 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display.c
> > +++ b/drivers/gpu/drm/i915/display/intel_display.c
> > @@ -5736,6 +5736,25 @@ static void intel_crtc_check_fastset(const struct
> intel_crtc_state *old_crtc_sta
> >       if (old_crtc_state->vrr.in_range != new_crtc_state->vrr.in_range)
> >               new_crtc_state->update_lrr = false;
> >
> > +     /* Copying crtc state if inheriting an old state for commit */
> > +     if (old_crtc_state->inherited) {
> > +             new_crtc_state->hw = old_crtc_state->hw;
> > +
> > +             new_crtc_state->port_clock = old_crtc_state->port_clock;
> > +             new_crtc_state->pipe_bpp = old_crtc_state->pipe_bpp;
> > +             new_crtc_state->cpu_transcoder =
> old_crtc_state->cpu_transcoder;
> > +             new_crtc_state->lane_count = old_crtc_state->lane_count;
> > +             new_crtc_state->output_types =
> old_crtc_state->output_types;
> > +             new_crtc_state->dp_m_n = old_crtc_state->dp_m_n;
> > +             new_crtc_state->framestart_delay =
> old_crtc_state->framestart_delay;
> > +             new_crtc_state->pixel_multiplier =
> old_crtc_state->pixel_multiplier;
> > +             new_crtc_state->pixel_rate = old_crtc_state->pixel_rate;
> > +             new_crtc_state->enhanced_framing =
> old_crtc_state->enhanced_framing;
> > +             new_crtc_state->dpll_hw_state =
> old_crtc_state->dpll_hw_state;
> > +             new_crtc_state->intel_dpll = old_crtc_state->intel_dpll;
> > +             new_crtc_state->vrr.guardband =
> old_crtc_state->vrr.guardband;
>
> I'd like to see logs of what the differences are.
>
> BR,
> Jani.
>
> > +     }
> > +
> >       if (!intel_pipe_config_compare(old_crtc_state, new_crtc_state,
> true)) {
> >               drm_dbg_kms(display->drm, "[CRTC:%d:%s] fastset
> requirement not met, forcing full modeset\n",
> >                           crtc->base.base.id, crtc->base.name);
>
> --
> Jani Nikula, Intel
>

[-- Attachment #2: Type: text/html, Size: 9962 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [RFC PATCH v3 2/2] drm/i915/display: Synchronize crtc_state for initial commit
  2026-01-27  8:05     ` Juasheem Sultan
@ 2026-02-03 18:18       ` Manasi Navare
  2026-02-03 19:47         ` Jani Nikula
  0 siblings, 1 reply; 13+ messages in thread
From: Manasi Navare @ 2026-02-03 18:18 UTC (permalink / raw)
  To: Juasheem Sultan, Jani Nikula
  Cc: Jani Nikula, intel-gfx, intel_xe, Rodrigo Vivi, Drew Davenport,
	Sean Paul, Samuel Jacob, Rajat Jain

[-- Attachment #1: Type: text/plain, Size: 9427 bytes --]

Thanks Jausheem for the pipe mismatch logs without your patch. And so with
your patch now since you set new_crtc_state to old_crtc_state, this goes
away and it meets the fastset right?

@Jani Nikula <jani.nikula@intel.com> : Did you want to take a look at any
other logs? The above logs are stripped out from kernel logging without his
patch and with his patch it becomes a fastset as expected.
Let us know if there is any other feedback to improve the design for
enabling seamless boot?

Regards
Manasi

On Tue, Jan 27, 2026 at 12:05 AM Juasheem Sultan <jdsultan@google.com>
wrote:

> > I'd like to see logs of what the differences are.
>
> Here's the logs from the pipe_config_compare without my patch:
> <6>[   43.743023] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in hw.enable (expected yes, found no)
> <6>[   43.763730] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in hw.active (expected yes, found no)
> <6>[   43.789093] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in cpu_transcoder (expected 0, found -1)
> <6>[   43.814759] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met ihw.enablen lane_count (expected 2, found 0)
> <6>[   43.835751] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in dp_m_n (expected tu 64 data 8007832/8388608 link
> 333659/524288, found tu 0, data 0/0 link 0/0)
> <6>[   43.835753] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in output_types (expected 0x00000100, found 0x00000000)
> <6>[   43.835754] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in framestart_delay (expected 1, found 0)
> <6>[   43.856743] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in hw.pipe_mode.crtc_hdisplay (expected 1920, found 0)
> <6>[   43.888602] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in hw.pipe_mode.crtc_htotal (expected 2080, found 0)
> <6>[   43.888603] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in hw.pipe_mode.crtc_hblank_start (expected 1920, found
> 0)
> <6>[   43.888604] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in hw.pipe_mode.crtc_hblank_end (expected 2080, found 0)
> <6>[   43.888604] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in hw.pipe_mode.crtc_hsync_start (expected 1966, found
> 0)
> <6>[   43.888605] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in hw.pipe_mode.crtc_hsync_end (expected 1996, found 0)
> <6>[   43.888605] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in hw.pipe_mode.crtc_vdisplay (expected 1200, found 0)
> <6>[   43.888606] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in hw.pipe_mode.crtc_vsync_start (expected 1210, found
> 0)
> <6>[   43.888607] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in hw.pipe_mode.crtc_vsync_end (expected 1216, found 0)
> <6>[   43.911732] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in hw.pipe_mode.crtc_vtotal (expected 1236, found 0)
> <6>[   43.911733] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in hw.pipe_mode.crtc_vblank_end (expected 1236, found 0)
> <6>[   43.932520] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in hw.adjusted_mode.crtc_hdisplay (expected 1920, found
> 0)
> <6>[   43.960305] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in hw.adjusted_mode.crtc_htotal (expected 2080, found 0)
> <6>[   43.960306] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in hw.adjusted_mode.crtc_hblank_start (expected 1920,
> found 0)
> <6>[   43.960306] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in hw.adjusted_mode.crtc_hblank_end (expected 2080,
> found 0)
> <6>[   43.960307] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in hw.adjusted_mode.crtc_hsync_start (expected 1966,
> found 0)
> <6>[   43.960307] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in hw.adjusted_mode.crtc_hsync_end (expected 1996,
> found 0)
> <6>[   43.960308] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in hw.adjusted_mode.crtc_vdisplay (expected 1200, found
> 0)
> <6>[   43.960308] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in hw.adjusted_mode.crtc_vsync_start (expected 1210,
> found 0)
> <6>[   43.960309] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in hw.adjusted_mode.crtc_vsync_end (expected 1216,
> found 0)
> <6>[   43.960310] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in hw.adjusted_mode.crtc_vtotal (expected 1236, found 0)
> <6>[   43.960310] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in hw.adjusted_mode.crtc_vblank_end (expected 1236,
> found 0)
> <6>[   43.988392] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in pixel_multiplier (expected 1, found 0)
> <6>[   43.988393] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in hw.adjusted_mode.flags (2) (expected 2, found 0)
> <6>[   44.016086] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in hw.adjusted_mode.flags (8) (expected 8, found 0)
> <6>[   44.016087] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in enhanced_framing (expected yes, found no)
> <6>[   44.016088] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in pipe_bpp (expected 24, found 0)
> <6>[   44.044074] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in hw.pipe_mode.crtc_clock (expected 154647, found 0)
> <6>[   44.044075] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in hw.adjusted_mode.crtc_clock (expected 154647, found
> 0)
> <6>[   44.044075] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in port_clock (expected 243000, found 0)
> <6>[   44.044077] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met in vrr.guardband (expected 35, found 0)
> <6>[   44.065890] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> requirement not met, forcing full modeset
>
> On Thu, Jan 22, 2026 at 7:29 AM Jani Nikula <jani.nikula@linux.intel.com>
> wrote:
>
>> On Wed, 21 Jan 2026, Juasheem Sultan <jdsultan@google.com> wrote:
>> > When attempting the initial commit, there is a mismatch between
>> > the new crtc_state and the old crtc_state. This causes us to fail the
>> > pipe_config comparison and force a modeset. In the case where we are
>> > inheriting an initialized state, we can sync the new and the old state
>> > to pass the comparison and allow us to do a fastset and achieve an
>> > uninterrupted handoff to userspace.
>> >
>> > Signed-off-by: Juasheem Sultan <jdsultan@google.com>
>> > ---
>> >  drivers/gpu/drm/i915/display/intel_display.c | 19 +++++++++++++++++++
>> >  1 file changed, 19 insertions(+)
>> >
>> > diff --git a/drivers/gpu/drm/i915/display/intel_display.c
>> b/drivers/gpu/drm/i915/display/intel_display.c
>> > index 0d527cf22866..6eef4bd2e251 100644
>> > --- a/drivers/gpu/drm/i915/display/intel_display.c
>> > +++ b/drivers/gpu/drm/i915/display/intel_display.c
>> > @@ -5736,6 +5736,25 @@ static void intel_crtc_check_fastset(const
>> struct intel_crtc_state *old_crtc_sta
>> >       if (old_crtc_state->vrr.in_range != new_crtc_state->vrr.in_range)
>> >               new_crtc_state->update_lrr = false;
>> >
>> > +     /* Copying crtc state if inheriting an old state for commit */
>> > +     if (old_crtc_state->inherited) {
>> > +             new_crtc_state->hw = old_crtc_state->hw;
>> > +
>> > +             new_crtc_state->port_clock = old_crtc_state->port_clock;
>> > +             new_crtc_state->pipe_bpp = old_crtc_state->pipe_bpp;
>> > +             new_crtc_state->cpu_transcoder =
>> old_crtc_state->cpu_transcoder;
>> > +             new_crtc_state->lane_count = old_crtc_state->lane_count;
>> > +             new_crtc_state->output_types =
>> old_crtc_state->output_types;
>> > +             new_crtc_state->dp_m_n = old_crtc_state->dp_m_n;
>> > +             new_crtc_state->framestart_delay =
>> old_crtc_state->framestart_delay;
>> > +             new_crtc_state->pixel_multiplier =
>> old_crtc_state->pixel_multiplier;
>> > +             new_crtc_state->pixel_rate = old_crtc_state->pixel_rate;
>> > +             new_crtc_state->enhanced_framing =
>> old_crtc_state->enhanced_framing;
>> > +             new_crtc_state->dpll_hw_state =
>> old_crtc_state->dpll_hw_state;
>> > +             new_crtc_state->intel_dpll = old_crtc_state->intel_dpll;
>> > +             new_crtc_state->vrr.guardband =
>> old_crtc_state->vrr.guardband;
>>
>> I'd like to see logs of what the differences are.
>>
>> BR,
>> Jani.
>>
>> > +     }
>> > +
>> >       if (!intel_pipe_config_compare(old_crtc_state, new_crtc_state,
>> true)) {
>> >               drm_dbg_kms(display->drm, "[CRTC:%d:%s] fastset
>> requirement not met, forcing full modeset\n",
>> >                           crtc->base.base.id, crtc->base.name);
>>
>> --
>> Jani Nikula, Intel
>>
>

[-- Attachment #2: Type: text/html, Size: 10977 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [RFC PATCH v3 2/2] drm/i915/display: Synchronize crtc_state for initial commit
  2026-02-03 18:18       ` Manasi Navare
@ 2026-02-03 19:47         ` Jani Nikula
  2026-02-03 21:03           ` Manasi Navare
  0 siblings, 1 reply; 13+ messages in thread
From: Jani Nikula @ 2026-02-03 19:47 UTC (permalink / raw)
  To: Manasi Navare, Juasheem Sultan
  Cc: intel-gfx, intel_xe, Rodrigo Vivi, Drew Davenport, Sean Paul,
	Samuel Jacob, Rajat Jain

On Tue, 03 Feb 2026, Manasi Navare <navaremanasi@google.com> wrote:
> Thanks Jausheem for the pipe mismatch logs without your patch. And so with
> your patch now since you set new_crtc_state to old_crtc_state, this goes
> away and it meets the fastset right?
>
> @Jani Nikula <jani.nikula@intel.com> : Did you want to take a look at any
> other logs? The above logs are stripped out from kernel logging without his
> patch and with his patch it becomes a fastset as expected.
> Let us know if there is any other feedback to improve the design for
> enabling seamless boot?

I think it would be better to file an issue at fdo gitlab and attach the
full logs with debugs as described at [1]. The short snippets don't
really give a good picture of what's going on.

The initial commit should be about 1) reading out the hw state to sw
state, 2) some sanitization steps where there might be discrepancies
between read out state and what would be the computed state, 3) ensuring
everything matches in the initial commit so fastset is possible.

In the below log snippet, everything's being turned off. That's not just
about some individual values differing and requiring a full
modeset. It's hard to say what's going on. But simply copying the state
over is not the way to go.


BR,
Jani.



[1] https://drm.pages.freedesktop.org/intel-docs/how-to-file-i915-bugs.html

>
> Regards
> Manasi
>
> On Tue, Jan 27, 2026 at 12:05 AM Juasheem Sultan <jdsultan@google.com>
> wrote:
>
>> > I'd like to see logs of what the differences are.
>>
>> Here's the logs from the pipe_config_compare without my patch:
>> <6>[   43.743023] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in hw.enable (expected yes, found no)
>> <6>[   43.763730] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in hw.active (expected yes, found no)
>> <6>[   43.789093] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in cpu_transcoder (expected 0, found -1)
>> <6>[   43.814759] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met ihw.enablen lane_count (expected 2, found 0)
>> <6>[   43.835751] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in dp_m_n (expected tu 64 data 8007832/8388608 link
>> 333659/524288, found tu 0, data 0/0 link 0/0)
>> <6>[   43.835753] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in output_types (expected 0x00000100, found 0x00000000)
>> <6>[   43.835754] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in framestart_delay (expected 1, found 0)
>> <6>[   43.856743] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in hw.pipe_mode.crtc_hdisplay (expected 1920, found 0)
>> <6>[   43.888602] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in hw.pipe_mode.crtc_htotal (expected 2080, found 0)
>> <6>[   43.888603] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in hw.pipe_mode.crtc_hblank_start (expected 1920, found
>> 0)
>> <6>[   43.888604] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in hw.pipe_mode.crtc_hblank_end (expected 2080, found 0)
>> <6>[   43.888604] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in hw.pipe_mode.crtc_hsync_start (expected 1966, found
>> 0)
>> <6>[   43.888605] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in hw.pipe_mode.crtc_hsync_end (expected 1996, found 0)
>> <6>[   43.888605] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in hw.pipe_mode.crtc_vdisplay (expected 1200, found 0)
>> <6>[   43.888606] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in hw.pipe_mode.crtc_vsync_start (expected 1210, found
>> 0)
>> <6>[   43.888607] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in hw.pipe_mode.crtc_vsync_end (expected 1216, found 0)
>> <6>[   43.911732] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in hw.pipe_mode.crtc_vtotal (expected 1236, found 0)
>> <6>[   43.911733] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in hw.pipe_mode.crtc_vblank_end (expected 1236, found 0)
>> <6>[   43.932520] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in hw.adjusted_mode.crtc_hdisplay (expected 1920, found
>> 0)
>> <6>[   43.960305] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in hw.adjusted_mode.crtc_htotal (expected 2080, found 0)
>> <6>[   43.960306] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in hw.adjusted_mode.crtc_hblank_start (expected 1920,
>> found 0)
>> <6>[   43.960306] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in hw.adjusted_mode.crtc_hblank_end (expected 2080,
>> found 0)
>> <6>[   43.960307] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in hw.adjusted_mode.crtc_hsync_start (expected 1966,
>> found 0)
>> <6>[   43.960307] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in hw.adjusted_mode.crtc_hsync_end (expected 1996,
>> found 0)
>> <6>[   43.960308] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in hw.adjusted_mode.crtc_vdisplay (expected 1200, found
>> 0)
>> <6>[   43.960308] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in hw.adjusted_mode.crtc_vsync_start (expected 1210,
>> found 0)
>> <6>[   43.960309] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in hw.adjusted_mode.crtc_vsync_end (expected 1216,
>> found 0)
>> <6>[   43.960310] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in hw.adjusted_mode.crtc_vtotal (expected 1236, found 0)
>> <6>[   43.960310] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in hw.adjusted_mode.crtc_vblank_end (expected 1236,
>> found 0)
>> <6>[   43.988392] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in pixel_multiplier (expected 1, found 0)
>> <6>[   43.988393] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in hw.adjusted_mode.flags (2) (expected 2, found 0)
>> <6>[   44.016086] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in hw.adjusted_mode.flags (8) (expected 8, found 0)
>> <6>[   44.016087] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in enhanced_framing (expected yes, found no)
>> <6>[   44.016088] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in pipe_bpp (expected 24, found 0)
>> <6>[   44.044074] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in hw.pipe_mode.crtc_clock (expected 154647, found 0)
>> <6>[   44.044075] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in hw.adjusted_mode.crtc_clock (expected 154647, found
>> 0)
>> <6>[   44.044075] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in port_clock (expected 243000, found 0)
>> <6>[   44.044077] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met in vrr.guardband (expected 35, found 0)
>> <6>[   44.065890] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> requirement not met, forcing full modeset
>>
>> On Thu, Jan 22, 2026 at 7:29 AM Jani Nikula <jani.nikula@linux.intel.com>
>> wrote:
>>
>>> On Wed, 21 Jan 2026, Juasheem Sultan <jdsultan@google.com> wrote:
>>> > When attempting the initial commit, there is a mismatch between
>>> > the new crtc_state and the old crtc_state. This causes us to fail the
>>> > pipe_config comparison and force a modeset. In the case where we are
>>> > inheriting an initialized state, we can sync the new and the old state
>>> > to pass the comparison and allow us to do a fastset and achieve an
>>> > uninterrupted handoff to userspace.
>>> >
>>> > Signed-off-by: Juasheem Sultan <jdsultan@google.com>
>>> > ---
>>> >  drivers/gpu/drm/i915/display/intel_display.c | 19 +++++++++++++++++++
>>> >  1 file changed, 19 insertions(+)
>>> >
>>> > diff --git a/drivers/gpu/drm/i915/display/intel_display.c
>>> b/drivers/gpu/drm/i915/display/intel_display.c
>>> > index 0d527cf22866..6eef4bd2e251 100644
>>> > --- a/drivers/gpu/drm/i915/display/intel_display.c
>>> > +++ b/drivers/gpu/drm/i915/display/intel_display.c
>>> > @@ -5736,6 +5736,25 @@ static void intel_crtc_check_fastset(const
>>> struct intel_crtc_state *old_crtc_sta
>>> >       if (old_crtc_state->vrr.in_range != new_crtc_state->vrr.in_range)
>>> >               new_crtc_state->update_lrr = false;
>>> >
>>> > +     /* Copying crtc state if inheriting an old state for commit */
>>> > +     if (old_crtc_state->inherited) {
>>> > +             new_crtc_state->hw = old_crtc_state->hw;
>>> > +
>>> > +             new_crtc_state->port_clock = old_crtc_state->port_clock;
>>> > +             new_crtc_state->pipe_bpp = old_crtc_state->pipe_bpp;
>>> > +             new_crtc_state->cpu_transcoder =
>>> old_crtc_state->cpu_transcoder;
>>> > +             new_crtc_state->lane_count = old_crtc_state->lane_count;
>>> > +             new_crtc_state->output_types =
>>> old_crtc_state->output_types;
>>> > +             new_crtc_state->dp_m_n = old_crtc_state->dp_m_n;
>>> > +             new_crtc_state->framestart_delay =
>>> old_crtc_state->framestart_delay;
>>> > +             new_crtc_state->pixel_multiplier =
>>> old_crtc_state->pixel_multiplier;
>>> > +             new_crtc_state->pixel_rate = old_crtc_state->pixel_rate;
>>> > +             new_crtc_state->enhanced_framing =
>>> old_crtc_state->enhanced_framing;
>>> > +             new_crtc_state->dpll_hw_state =
>>> old_crtc_state->dpll_hw_state;
>>> > +             new_crtc_state->intel_dpll = old_crtc_state->intel_dpll;
>>> > +             new_crtc_state->vrr.guardband =
>>> old_crtc_state->vrr.guardband;
>>>
>>> I'd like to see logs of what the differences are.
>>>
>>> BR,
>>> Jani.
>>>
>>> > +     }
>>> > +
>>> >       if (!intel_pipe_config_compare(old_crtc_state, new_crtc_state,
>>> true)) {
>>> >               drm_dbg_kms(display->drm, "[CRTC:%d:%s] fastset
>>> requirement not met, forcing full modeset\n",
>>> >                           crtc->base.base.id, crtc->base.name);
>>>
>>> --
>>> Jani Nikula, Intel
>>>
>>

-- 
Jani Nikula, Intel

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [RFC PATCH v3 2/2] drm/i915/display: Synchronize crtc_state for initial commit
  2026-02-03 19:47         ` Jani Nikula
@ 2026-02-03 21:03           ` Manasi Navare
  2026-03-03  0:43             ` Manasi Navare
  0 siblings, 1 reply; 13+ messages in thread
From: Manasi Navare @ 2026-02-03 21:03 UTC (permalink / raw)
  To: Jani Nikula
  Cc: Juasheem Sultan, intel-gfx, intel_xe, Rodrigo Vivi,
	Drew Davenport, Sean Paul, Samuel Jacob, Rajat Jain

[-- Attachment #1: Type: text/plain, Size: 12450 bytes --]

On Tue, Feb 3, 2026 at 11:47 AM Jani Nikula <jani.nikula@intel.com> wrote:

> On Tue, 03 Feb 2026, Manasi Navare <navaremanasi@google.com> wrote:
> > Thanks Jausheem for the pipe mismatch logs without your patch. And so
> with
> > your patch now since you set new_crtc_state to old_crtc_state, this goes
> > away and it meets the fastset right?
> >
> > @Jani Nikula <jani.nikula@intel.com> : Did you want to take a look at
> any
> > other logs? The above logs are stripped out from kernel logging without
> his
> > patch and with his patch it becomes a fastset as expected.
> > Let us know if there is any other feedback to improve the design for
> > enabling seamless boot?
>
> I think it would be better to file an issue at fdo gitlab and attach the
> full logs with debugs as described at [1]. The short snippets don't
> really give a good picture of what's going on.
>
> The initial commit should be about 1) reading out the hw state to sw
> state, 2) some sanitization steps where there might be discrepancies
> between read out state and what would be the computed state, 3) ensuring
> everything matches in the initial commit so fastset is possible.
>
> In the below log snippet, everything's being turned off. That's not just
> about some individual values differing and requiring a full
> modeset. It's hard to say what's going on. But simply copying the state
> over is not the way to go.
>

Thanks Jani for your feedback.
@Jani Nikula <jani.nikula@intel.com>  so ideally the expectation would be
that if the FW is initializing the HW to a state, then we should do a
readout
and save that into pipe_config and that should have the values set by the
FW and now next would be to make sure that
the new_crtc_state matches those values ensuring fastset, is that the
correct understanding?
We are possibly missing that HW state readout, since FW programs the HW,
the pipe_config is still all 0s unless
we add the HW state readout and set pipe_config to that?

@Jausheem, we need to understand why everything is turned off on the HW
because of which during the readout,
where the pipe_config_compare throws a mismatch we see that in the
pipe_config (Found values) are all 0.
If we expect that the fimware has programmed the HW to some initial value,
which it should have then
the HW state read out or the found values should not be all 0s.
Could we double check that hw state read out has the values that FW has set
it to,
without your patch and making sure DRM HWC is not clearing out all the
crtcs/connectors
on the initial modeset (so reverting that clean up patch).

As per Jani's suggestion if that is not the case, we can file a bug against
the kernel at FDO and have them triage this.

Regards
Manasi

>
>
> BR,
> Jani.
>
>
>
> [1]
> https://drm.pages.freedesktop.org/intel-docs/how-to-file-i915-bugs.html
>
> >
> > Regards
> > Manasi
> >
> > On Tue, Jan 27, 2026 at 12:05 AM Juasheem Sultan <jdsultan@google.com>
> > wrote:
> >
> >> > I'd like to see logs of what the differences are.
> >>
> >> Here's the logs from the pipe_config_compare without my patch:
> >> <6>[   43.743023] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in hw.enable (expected yes, found no)
> >> <6>[   43.763730] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in hw.active (expected yes, found no)
> >> <6>[   43.789093] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in cpu_transcoder (expected 0, found -1)
> >> <6>[   43.814759] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met ihw.enablen lane_count (expected 2, found 0)
> >> <6>[   43.835751] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in dp_m_n (expected tu 64 data 8007832/8388608 link
> >> 333659/524288, found tu 0, data 0/0 link 0/0)
> >> <6>[   43.835753] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in output_types (expected 0x00000100, found
> 0x00000000)
> >> <6>[   43.835754] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in framestart_delay (expected 1, found 0)
> >> <6>[   43.856743] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in hw.pipe_mode.crtc_hdisplay (expected 1920, found
> 0)
> >> <6>[   43.888602] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in hw.pipe_mode.crtc_htotal (expected 2080, found 0)
> >> <6>[   43.888603] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in hw.pipe_mode.crtc_hblank_start (expected 1920,
> found
> >> 0)
> >> <6>[   43.888604] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in hw.pipe_mode.crtc_hblank_end (expected 2080,
> found 0)
> >> <6>[   43.888604] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in hw.pipe_mode.crtc_hsync_start (expected 1966,
> found
> >> 0)
> >> <6>[   43.888605] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in hw.pipe_mode.crtc_hsync_end (expected 1996,
> found 0)
> >> <6>[   43.888605] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in hw.pipe_mode.crtc_vdisplay (expected 1200, found
> 0)
> >> <6>[   43.888606] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in hw.pipe_mode.crtc_vsync_start (expected 1210,
> found
> >> 0)
> >> <6>[   43.888607] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in hw.pipe_mode.crtc_vsync_end (expected 1216,
> found 0)
> >> <6>[   43.911732] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in hw.pipe_mode.crtc_vtotal (expected 1236, found 0)
> >> <6>[   43.911733] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in hw.pipe_mode.crtc_vblank_end (expected 1236,
> found 0)
> >> <6>[   43.932520] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in hw.adjusted_mode.crtc_hdisplay (expected 1920,
> found
> >> 0)
> >> <6>[   43.960305] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in hw.adjusted_mode.crtc_htotal (expected 2080,
> found 0)
> >> <6>[   43.960306] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in hw.adjusted_mode.crtc_hblank_start (expected
> 1920,
> >> found 0)
> >> <6>[   43.960306] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in hw.adjusted_mode.crtc_hblank_end (expected 2080,
> >> found 0)
> >> <6>[   43.960307] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in hw.adjusted_mode.crtc_hsync_start (expected 1966,
> >> found 0)
> >> <6>[   43.960307] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in hw.adjusted_mode.crtc_hsync_end (expected 1996,
> >> found 0)
> >> <6>[   43.960308] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in hw.adjusted_mode.crtc_vdisplay (expected 1200,
> found
> >> 0)
> >> <6>[   43.960308] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in hw.adjusted_mode.crtc_vsync_start (expected 1210,
> >> found 0)
> >> <6>[   43.960309] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in hw.adjusted_mode.crtc_vsync_end (expected 1216,
> >> found 0)
> >> <6>[   43.960310] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in hw.adjusted_mode.crtc_vtotal (expected 1236,
> found 0)
> >> <6>[   43.960310] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in hw.adjusted_mode.crtc_vblank_end (expected 1236,
> >> found 0)
> >> <6>[   43.988392] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in pixel_multiplier (expected 1, found 0)
> >> <6>[   43.988393] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in hw.adjusted_mode.flags (2) (expected 2, found 0)
> >> <6>[   44.016086] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in hw.adjusted_mode.flags (8) (expected 8, found 0)
> >> <6>[   44.016087] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in enhanced_framing (expected yes, found no)
> >> <6>[   44.016088] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in pipe_bpp (expected 24, found 0)
> >> <6>[   44.044074] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in hw.pipe_mode.crtc_clock (expected 154647, found
> 0)
> >> <6>[   44.044075] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in hw.adjusted_mode.crtc_clock (expected 154647,
> found
> >> 0)
> >> <6>[   44.044075] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in port_clock (expected 243000, found 0)
> >> <6>[   44.044077] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met in vrr.guardband (expected 35, found 0)
> >> <6>[   44.065890] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
> >> requirement not met, forcing full modeset
> >>
> >> On Thu, Jan 22, 2026 at 7:29 AM Jani Nikula <
> jani.nikula@linux.intel.com>
> >> wrote:
> >>
> >>> On Wed, 21 Jan 2026, Juasheem Sultan <jdsultan@google.com> wrote:
> >>> > When attempting the initial commit, there is a mismatch between
> >>> > the new crtc_state and the old crtc_state. This causes us to fail the
> >>> > pipe_config comparison and force a modeset. In the case where we are
> >>> > inheriting an initialized state, we can sync the new and the old
> state
> >>> > to pass the comparison and allow us to do a fastset and achieve an
> >>> > uninterrupted handoff to userspace.
> >>> >
> >>> > Signed-off-by: Juasheem Sultan <jdsultan@google.com>
> >>> > ---
> >>> >  drivers/gpu/drm/i915/display/intel_display.c | 19
> +++++++++++++++++++
> >>> >  1 file changed, 19 insertions(+)
> >>> >
> >>> > diff --git a/drivers/gpu/drm/i915/display/intel_display.c
> >>> b/drivers/gpu/drm/i915/display/intel_display.c
> >>> > index 0d527cf22866..6eef4bd2e251 100644
> >>> > --- a/drivers/gpu/drm/i915/display/intel_display.c
> >>> > +++ b/drivers/gpu/drm/i915/display/intel_display.c
> >>> > @@ -5736,6 +5736,25 @@ static void intel_crtc_check_fastset(const
> >>> struct intel_crtc_state *old_crtc_sta
> >>> >       if (old_crtc_state->vrr.in_range !=
> new_crtc_state->vrr.in_range)
> >>> >               new_crtc_state->update_lrr = false;
> >>> >
> >>> > +     /* Copying crtc state if inheriting an old state for commit */
> >>> > +     if (old_crtc_state->inherited) {
> >>> > +             new_crtc_state->hw = old_crtc_state->hw;
> >>> > +
> >>> > +             new_crtc_state->port_clock =
> old_crtc_state->port_clock;
> >>> > +             new_crtc_state->pipe_bpp = old_crtc_state->pipe_bpp;
> >>> > +             new_crtc_state->cpu_transcoder =
> >>> old_crtc_state->cpu_transcoder;
> >>> > +             new_crtc_state->lane_count =
> old_crtc_state->lane_count;
> >>> > +             new_crtc_state->output_types =
> >>> old_crtc_state->output_types;
> >>> > +             new_crtc_state->dp_m_n = old_crtc_state->dp_m_n;
> >>> > +             new_crtc_state->framestart_delay =
> >>> old_crtc_state->framestart_delay;
> >>> > +             new_crtc_state->pixel_multiplier =
> >>> old_crtc_state->pixel_multiplier;
> >>> > +             new_crtc_state->pixel_rate =
> old_crtc_state->pixel_rate;
> >>> > +             new_crtc_state->enhanced_framing =
> >>> old_crtc_state->enhanced_framing;
> >>> > +             new_crtc_state->dpll_hw_state =
> >>> old_crtc_state->dpll_hw_state;
> >>> > +             new_crtc_state->intel_dpll =
> old_crtc_state->intel_dpll;
> >>> > +             new_crtc_state->vrr.guardband =
> >>> old_crtc_state->vrr.guardband;
> >>>
> >>> I'd like to see logs of what the differences are.
> >>>
> >>> BR,
> >>> Jani.
> >>>
> >>> > +     }
> >>> > +
> >>> >       if (!intel_pipe_config_compare(old_crtc_state, new_crtc_state,
> >>> true)) {
> >>> >               drm_dbg_kms(display->drm, "[CRTC:%d:%s] fastset
> >>> requirement not met, forcing full modeset\n",
> >>> >                           crtc->base.base.id, crtc->base.name);
> >>>
> >>> --
> >>> Jani Nikula, Intel
> >>>
> >>
>
> --
> Jani Nikula, Intel
>

[-- Attachment #2: Type: text/html, Size: 16118 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [RFC PATCH v3 2/2] drm/i915/display: Synchronize crtc_state for initial commit
  2026-02-03 21:03           ` Manasi Navare
@ 2026-03-03  0:43             ` Manasi Navare
  2026-03-03  9:44               ` Jani Nikula
  0 siblings, 1 reply; 13+ messages in thread
From: Manasi Navare @ 2026-03-03  0:43 UTC (permalink / raw)
  To: Jani Nikula
  Cc: Juasheem Sultan, intel-gfx, intel_xe, Rodrigo Vivi,
	Drew Davenport, Sean Paul, Samuel Jacob, Rajat Jain

[-- Attachment #1: Type: text/plain, Size: 13914 bytes --]

Hi @Jani Nikula <jani.nikula@intel.com> :

Before we file a fdo issue with complete debug logs to understand what the
FW is setting up the HW at, I wanted to understand a few more things in
terms of the final solution:

-  Ideally if the FW is setting up the initial state or programming the HW
registers for the initial splashscreen, for the initial commit when we do
the HW state readout, it should have the HW values programmed to some mode
parameters
-  Then like you suggested, we would need to read out the HW state
- Could you elaborate on "1) reading out the hw state to sw
state? - Does that mean do the HW state readout and compute
pipe_config/crtc_state for that?

- Then add some sanitization to have this computed pipe_config that will be
programmed to the HW
- Then ensure that both are same so that the intel fastset logic can apply
fastset?

It would be great if you can reply so that we can collect the necessary
logs, file a bug report on fdo and also send the next ervision of the
patches.

Regards
Manasi
On Tue, Feb 3, 2026 at 1:03 PM Manasi Navare <navaremanasi@google.com>
wrote:

>
>
> On Tue, Feb 3, 2026 at 11:47 AM Jani Nikula <jani.nikula@intel.com> wrote:
>
>> On Tue, 03 Feb 2026, Manasi Navare <navaremanasi@google.com> wrote:
>> > Thanks Jausheem for the pipe mismatch logs without your patch. And so
>> with
>> > your patch now since you set new_crtc_state to old_crtc_state, this goes
>> > away and it meets the fastset right?
>> >
>> > @Jani Nikula <jani.nikula@intel.com> : Did you want to take a look at
>> any
>> > other logs? The above logs are stripped out from kernel logging without
>> his
>> > patch and with his patch it becomes a fastset as expected.
>> > Let us know if there is any other feedback to improve the design for
>> > enabling seamless boot?
>>
>> I think it would be better to file an issue at fdo gitlab and attach the
>> full logs with debugs as described at [1]. The short snippets don't
>> really give a good picture of what's going on.
>>
>> The initial commit should be about 1) reading out the hw state to sw
>> state, 2) some sanitization steps where there might be discrepancies
>> between read out state and what would be the computed state, 3) ensuring
>> everything matches in the initial commit so fastset is possible.
>>
>> In the below log snippet, everything's being turned off. That's not just
>> about some individual values differing and requiring a full
>> modeset. It's hard to say what's going on. But simply copying the state
>> over is not the way to go.
>>
>
> Thanks Jani for your feedback.
> @Jani Nikula <jani.nikula@intel.com>  so ideally the expectation would be
> that if the FW is initializing the HW to a state, then we should do a
> readout
> and save that into pipe_config and that should have the values set by the
> FW and now next would be to make sure that
> the new_crtc_state matches those values ensuring fastset, is that the
> correct understanding?
> We are possibly missing that HW state readout, since FW programs the HW,
> the pipe_config is still all 0s unless
> we add the HW state readout and set pipe_config to that?
>
> @Jausheem, we need to understand why everything is turned off on the HW
> because of which during the readout,
> where the pipe_config_compare throws a mismatch we see that in the
> pipe_config (Found values) are all 0.
> If we expect that the fimware has programmed the HW to some initial value,
> which it should have then
> the HW state read out or the found values should not be all 0s.
> Could we double check that hw state read out has the values that FW has
> set it to,
> without your patch and making sure DRM HWC is not clearing out all the
> crtcs/connectors
> on the initial modeset (so reverting that clean up patch).
>
> As per Jani's suggestion if that is not the case, we can file a bug
> against the kernel at FDO and have them triage this.
>
> Regards
> Manasi
>
>>
>>
>> BR,
>> Jani.
>>
>>
>>
>> [1]
>> https://drm.pages.freedesktop.org/intel-docs/how-to-file-i915-bugs.html
>>
>> >
>> > Regards
>> > Manasi
>> >
>> > On Tue, Jan 27, 2026 at 12:05 AM Juasheem Sultan <jdsultan@google.com>
>> > wrote:
>> >
>> >> > I'd like to see logs of what the differences are.
>> >>
>> >> Here's the logs from the pipe_config_compare without my patch:
>> >> <6>[   43.743023] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in hw.enable (expected yes, found no)
>> >> <6>[   43.763730] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in hw.active (expected yes, found no)
>> >> <6>[   43.789093] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in cpu_transcoder (expected 0, found -1)
>> >> <6>[   43.814759] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met ihw.enablen lane_count (expected 2, found 0)
>> >> <6>[   43.835751] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in dp_m_n (expected tu 64 data 8007832/8388608 link
>> >> 333659/524288, found tu 0, data 0/0 link 0/0)
>> >> <6>[   43.835753] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in output_types (expected 0x00000100, found
>> 0x00000000)
>> >> <6>[   43.835754] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in framestart_delay (expected 1, found 0)
>> >> <6>[   43.856743] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in hw.pipe_mode.crtc_hdisplay (expected 1920,
>> found 0)
>> >> <6>[   43.888602] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in hw.pipe_mode.crtc_htotal (expected 2080, found
>> 0)
>> >> <6>[   43.888603] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in hw.pipe_mode.crtc_hblank_start (expected 1920,
>> found
>> >> 0)
>> >> <6>[   43.888604] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in hw.pipe_mode.crtc_hblank_end (expected 2080,
>> found 0)
>> >> <6>[   43.888604] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in hw.pipe_mode.crtc_hsync_start (expected 1966,
>> found
>> >> 0)
>> >> <6>[   43.888605] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in hw.pipe_mode.crtc_hsync_end (expected 1996,
>> found 0)
>> >> <6>[   43.888605] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in hw.pipe_mode.crtc_vdisplay (expected 1200,
>> found 0)
>> >> <6>[   43.888606] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in hw.pipe_mode.crtc_vsync_start (expected 1210,
>> found
>> >> 0)
>> >> <6>[   43.888607] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in hw.pipe_mode.crtc_vsync_end (expected 1216,
>> found 0)
>> >> <6>[   43.911732] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in hw.pipe_mode.crtc_vtotal (expected 1236, found
>> 0)
>> >> <6>[   43.911733] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in hw.pipe_mode.crtc_vblank_end (expected 1236,
>> found 0)
>> >> <6>[   43.932520] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in hw.adjusted_mode.crtc_hdisplay (expected 1920,
>> found
>> >> 0)
>> >> <6>[   43.960305] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in hw.adjusted_mode.crtc_htotal (expected 2080,
>> found 0)
>> >> <6>[   43.960306] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in hw.adjusted_mode.crtc_hblank_start (expected
>> 1920,
>> >> found 0)
>> >> <6>[   43.960306] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in hw.adjusted_mode.crtc_hblank_end (expected 2080,
>> >> found 0)
>> >> <6>[   43.960307] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in hw.adjusted_mode.crtc_hsync_start (expected
>> 1966,
>> >> found 0)
>> >> <6>[   43.960307] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in hw.adjusted_mode.crtc_hsync_end (expected 1996,
>> >> found 0)
>> >> <6>[   43.960308] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in hw.adjusted_mode.crtc_vdisplay (expected 1200,
>> found
>> >> 0)
>> >> <6>[   43.960308] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in hw.adjusted_mode.crtc_vsync_start (expected
>> 1210,
>> >> found 0)
>> >> <6>[   43.960309] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in hw.adjusted_mode.crtc_vsync_end (expected 1216,
>> >> found 0)
>> >> <6>[   43.960310] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in hw.adjusted_mode.crtc_vtotal (expected 1236,
>> found 0)
>> >> <6>[   43.960310] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in hw.adjusted_mode.crtc_vblank_end (expected 1236,
>> >> found 0)
>> >> <6>[   43.988392] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in pixel_multiplier (expected 1, found 0)
>> >> <6>[   43.988393] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in hw.adjusted_mode.flags (2) (expected 2, found 0)
>> >> <6>[   44.016086] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in hw.adjusted_mode.flags (8) (expected 8, found 0)
>> >> <6>[   44.016087] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in enhanced_framing (expected yes, found no)
>> >> <6>[   44.016088] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in pipe_bpp (expected 24, found 0)
>> >> <6>[   44.044074] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in hw.pipe_mode.crtc_clock (expected 154647, found
>> 0)
>> >> <6>[   44.044075] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in hw.adjusted_mode.crtc_clock (expected 154647,
>> found
>> >> 0)
>> >> <6>[   44.044075] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in port_clock (expected 243000, found 0)
>> >> <6>[   44.044077] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met in vrr.guardband (expected 35, found 0)
>> >> <6>[   44.065890] xe 0000:00:02.0: [drm] [CRTC:88:pipe A] fastset
>> >> requirement not met, forcing full modeset
>> >>
>> >> On Thu, Jan 22, 2026 at 7:29 AM Jani Nikula <
>> jani.nikula@linux.intel.com>
>> >> wrote:
>> >>
>> >>> On Wed, 21 Jan 2026, Juasheem Sultan <jdsultan@google.com> wrote:
>> >>> > When attempting the initial commit, there is a mismatch between
>> >>> > the new crtc_state and the old crtc_state. This causes us to fail
>> the
>> >>> > pipe_config comparison and force a modeset. In the case where we are
>> >>> > inheriting an initialized state, we can sync the new and the old
>> state
>> >>> > to pass the comparison and allow us to do a fastset and achieve an
>> >>> > uninterrupted handoff to userspace.
>> >>> >
>> >>> > Signed-off-by: Juasheem Sultan <jdsultan@google.com>
>> >>> > ---
>> >>> >  drivers/gpu/drm/i915/display/intel_display.c | 19
>> +++++++++++++++++++
>> >>> >  1 file changed, 19 insertions(+)
>> >>> >
>> >>> > diff --git a/drivers/gpu/drm/i915/display/intel_display.c
>> >>> b/drivers/gpu/drm/i915/display/intel_display.c
>> >>> > index 0d527cf22866..6eef4bd2e251 100644
>> >>> > --- a/drivers/gpu/drm/i915/display/intel_display.c
>> >>> > +++ b/drivers/gpu/drm/i915/display/intel_display.c
>> >>> > @@ -5736,6 +5736,25 @@ static void intel_crtc_check_fastset(const
>> >>> struct intel_crtc_state *old_crtc_sta
>> >>> >       if (old_crtc_state->vrr.in_range !=
>> new_crtc_state->vrr.in_range)
>> >>> >               new_crtc_state->update_lrr = false;
>> >>> >
>> >>> > +     /* Copying crtc state if inheriting an old state for commit */
>> >>> > +     if (old_crtc_state->inherited) {
>> >>> > +             new_crtc_state->hw = old_crtc_state->hw;
>> >>> > +
>> >>> > +             new_crtc_state->port_clock =
>> old_crtc_state->port_clock;
>> >>> > +             new_crtc_state->pipe_bpp = old_crtc_state->pipe_bpp;
>> >>> > +             new_crtc_state->cpu_transcoder =
>> >>> old_crtc_state->cpu_transcoder;
>> >>> > +             new_crtc_state->lane_count =
>> old_crtc_state->lane_count;
>> >>> > +             new_crtc_state->output_types =
>> >>> old_crtc_state->output_types;
>> >>> > +             new_crtc_state->dp_m_n = old_crtc_state->dp_m_n;
>> >>> > +             new_crtc_state->framestart_delay =
>> >>> old_crtc_state->framestart_delay;
>> >>> > +             new_crtc_state->pixel_multiplier =
>> >>> old_crtc_state->pixel_multiplier;
>> >>> > +             new_crtc_state->pixel_rate =
>> old_crtc_state->pixel_rate;
>> >>> > +             new_crtc_state->enhanced_framing =
>> >>> old_crtc_state->enhanced_framing;
>> >>> > +             new_crtc_state->dpll_hw_state =
>> >>> old_crtc_state->dpll_hw_state;
>> >>> > +             new_crtc_state->intel_dpll =
>> old_crtc_state->intel_dpll;
>> >>> > +             new_crtc_state->vrr.guardband =
>> >>> old_crtc_state->vrr.guardband;
>> >>>
>> >>> I'd like to see logs of what the differences are.
>> >>>
>> >>> BR,
>> >>> Jani.
>> >>>
>> >>> > +     }
>> >>> > +
>> >>> >       if (!intel_pipe_config_compare(old_crtc_state, new_crtc_state,
>> >>> true)) {
>> >>> >               drm_dbg_kms(display->drm, "[CRTC:%d:%s] fastset
>> >>> requirement not met, forcing full modeset\n",
>> >>> >                           crtc->base.base.id, crtc->base.name);
>> >>>
>> >>> --
>> >>> Jani Nikula, Intel
>> >>>
>> >>
>>
>> --
>> Jani Nikula, Intel
>>
>

[-- Attachment #2: Type: text/html, Size: 17806 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [RFC PATCH v3 2/2] drm/i915/display: Synchronize crtc_state for initial commit
  2026-03-03  0:43             ` Manasi Navare
@ 2026-03-03  9:44               ` Jani Nikula
  2026-03-04  3:30                 ` Juasheem Sultan
  0 siblings, 1 reply; 13+ messages in thread
From: Jani Nikula @ 2026-03-03  9:44 UTC (permalink / raw)
  To: Manasi Navare
  Cc: Juasheem Sultan, intel-gfx, intel_xe, Rodrigo Vivi,
	Drew Davenport, Sean Paul, Samuel Jacob, Rajat Jain,
	ville.syrjala

On Mon, 02 Mar 2026, Manasi Navare <navaremanasi@google.com> wrote:
> Hi @Jani Nikula <jani.nikula@intel.com> :
>
> Before we file a fdo issue with complete debug logs to understand what the
> FW is setting up the HW at, I wanted to understand a few more things in
> terms of the final solution:
>
> -  Ideally if the FW is setting up the initial state or programming the HW
> registers for the initial splashscreen, for the initial commit when we do
> the HW state readout, it should have the HW values programmed to some mode
> parameters
> -  Then like you suggested, we would need to read out the HW state
> - Could you elaborate on "1) reading out the hw state to sw
> state? - Does that mean do the HW state readout and compute
> pipe_config/crtc_state for that?
>
> - Then add some sanitization to have this computed pipe_config that will be
> programmed to the HW
> - Then ensure that both are same so that the intel fastset logic can apply
> fastset?

Let's start with the regular modesets, ignoring the probe for a bit.

For every modeset, we have the old (current) state and the new
state. These are both software states. We compare the states to
determine whether a full modeset is required or not. This is mostly
dependent on what the hardware can change on the fly. If we can bypass a
full modeset, we call it a fastset.

We write either the full new state (modeset) or just the changes
(fastset) to the hardware, and the new state becomes the old (current)
state.

After that, we read back the hardware state to verify we did everything
right. This is the state checker. The comparison is done using the same
functions as for determining whether a full modeset is required.

Rinse and repeat.

At probe, we obviously don't have the old (current) software state. We
create it by reading out the hardware state, using the same mechanisms
as in the state checker. We call it the inherited state. We do the
initial commit with that.

Then we arrive at the first userspace/client initiated modeset. It goes
through the same paths as the regular modeset. If we can get away with a
fastset, we call it fastboot i.e. no full modeset at boot.

That's the basic idea, anyway. Now the caveats.

Sometimes GOP (or whatever pre-os) ends up using slightly different
parameters for the same mode than the driver. Or we might not be able to
read out everything. Or we lose accuracy in the sw->hw->sw changes. Or
the pre-os enables stuff that it doesn't even use or care about. We
wiggle around those issues using sanitization or ignoring small
differences or simply bypassing some parts on the first modeset.

Obviously, if there are gaps in the state readout in the first place,
the inherited state will be incomplete, and likely leads to a full
modeset. (And we also miss out on the state verification of those
parts.)

If the GOP (or pre-os) sets a mode, and the first modeset requests a
completely different mode, you can't have fastboot either.

The thing we absolutely can't do is what patch 2 here does. We can't
simply copy over stuff from one state to another, and hope it works. It
might appear to work by coincidence in some cases, but it is all
wrong. It ignores the computed modeset parameters for the new state,
even if userspace tries a completely different mode. It bypasses the
comparison for whether a full modeset is needed or not. It's not
discretional, it depends on what the hardware can change on the fly, and
it's undocumented at best what happens when you try to change such
things without a modeset.

You can do a lot of debugging based on just looking at the debug output
for the state comparison where we decide a fastset (and in this case
fastboot) is not possible. Where does the differing info come from? Is
there a readout in place? Is something completely zero in the readout,
or are there minor differences? Do you get fastsets on the second and
subsequent regular modesets? Etc. Etc.


HTH,
Jani.


-- 
Jani Nikula, Intel

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [RFC PATCH v3 2/2] drm/i915/display: Synchronize crtc_state for initial commit
  2026-03-03  9:44               ` Jani Nikula
@ 2026-03-04  3:30                 ` Juasheem Sultan
  0 siblings, 0 replies; 13+ messages in thread
From: Juasheem Sultan @ 2026-03-04  3:30 UTC (permalink / raw)
  To: Jani Nikula, Jani Nikula
  Cc: Manasi Navare, intel-gfx, intel_xe, Rodrigo Vivi, Drew Davenport,
	Sean Paul, Samuel Jacob, Rajat Jain, ville.syrjala

[-- Attachment #1: Type: text/plain, Size: 5748 bytes --]

Hi @Jani Nikula <jani.nikula@linux.intel.com>

Thank you for the clarifications. I've investigated the issue and
determined the source of the discrepancy between the driver and firmware
set display state. Firstly, it appears userspace issued a commit that
completely cleared the screen. This explains why we saw all 0s without my
changes. I have fixed that on our side, so I shouldn't have to worry about
that when debugging.

You can do a lot of debugging based on just looking at the debug output
> for the state comparison where we decide a fastset (and in this case
> fastboot) is not possible. Where does the differing info come from? Is
> there a readout in place? Is something completely zero in the readout,
> or are there minor differences? Do you get fastsets on the second and
> subsequent regular modesets? Etc. Etc.


We can commit the state that's originally read from the hardware. When
userspace attempts its first commit, the PLL state and clock that the
driver calculates differ slightly from what the BIOS has set. This is
causing us to modeset. I slightly modified how the pll state was calculated
and added a small tolerance to the clock comparison; this fixes the issue,
making the state seamless, but I'm not sure exactly how this should be
solved. In order to avoid publishing any potentially secure information, I
have created an internal bug where we can discuss exactly how to resolve
this.

On Tue, Mar 3, 2026 at 1:44 AM Jani Nikula <jani.nikula@intel.com> wrote:

> On Mon, 02 Mar 2026, Manasi Navare <navaremanasi@google.com> wrote:
> > Hi @Jani Nikula <jani.nikula@intel.com> :
> >
> > Before we file a fdo issue with complete debug logs to understand what
> the
> > FW is setting up the HW at, I wanted to understand a few more things in
> > terms of the final solution:
> >
> > -  Ideally if the FW is setting up the initial state or programming the
> HW
> > registers for the initial splashscreen, for the initial commit when we do
> > the HW state readout, it should have the HW values programmed to some
> mode
> > parameters
> > -  Then like you suggested, we would need to read out the HW state
> > - Could you elaborate on "1) reading out the hw state to sw
> > state? - Does that mean do the HW state readout and compute
> > pipe_config/crtc_state for that?
> >
> > - Then add some sanitization to have this computed pipe_config that will
> be
> > programmed to the HW
> > - Then ensure that both are same so that the intel fastset logic can
> apply
> > fastset?
>
> Let's start with the regular modesets, ignoring the probe for a bit.
>
> For every modeset, we have the old (current) state and the new
> state. These are both software states. We compare the states to
> determine whether a full modeset is required or not. This is mostly
> dependent on what the hardware can change on the fly. If we can bypass a
> full modeset, we call it a fastset.
>
> We write either the full new state (modeset) or just the changes
> (fastset) to the hardware, and the new state becomes the old (current)
> state.
>
> After that, we read back the hardware state to verify we did everything
> right. This is the state checker. The comparison is done using the same
> functions as for determining whether a full modeset is required.
>
> Rinse and repeat.
>
> At probe, we obviously don't have the old (current) software state. We
> create it by reading out the hardware state, using the same mechanisms
> as in the state checker. We call it the inherited state. We do the
> initial commit with that.
>
> Then we arrive at the first userspace/client initiated modeset. It goes
> through the same paths as the regular modeset. If we can get away with a
> fastset, we call it fastboot i.e. no full modeset at boot.
>
> That's the basic idea, anyway. Now the caveats.
>
> Sometimes GOP (or whatever pre-os) ends up using slightly different
> parameters for the same mode than the driver. Or we might not be able to
> read out everything. Or we lose accuracy in the sw->hw->sw changes. Or
> the pre-os enables stuff that it doesn't even use or care about. We
> wiggle around those issues using sanitization or ignoring small
> differences or simply bypassing some parts on the first modeset.
>
> Obviously, if there are gaps in the state readout in the first place,
> the inherited state will be incomplete, and likely leads to a full
> modeset. (And we also miss out on the state verification of those
> parts.)
>
> If the GOP (or pre-os) sets a mode, and the first modeset requests a
> completely different mode, you can't have fastboot either.
>
> The thing we absolutely can't do is what patch 2 here does. We can't
> simply copy over stuff from one state to another, and hope it works. It
> might appear to work by coincidence in some cases, but it is all
> wrong. It ignores the computed modeset parameters for the new state,
> even if userspace tries a completely different mode. It bypasses the
> comparison for whether a full modeset is needed or not. It's not
> discretional, it depends on what the hardware can change on the fly, and
> it's undocumented at best what happens when you try to change such
> things without a modeset.
>
> You can do a lot of debugging based on just looking at the debug output
> for the state comparison where we decide a fastset (and in this case
> fastboot) is not possible. Where does the differing info come from? Is
> there a readout in place? Is something completely zero in the readout,
> or are there minor differences? Do you get fastsets on the second and
> subsequent regular modesets? Etc. Etc.
>
>
> HTH,
> Jani.
>
>
> --
> Jani Nikula, Intel
>

[-- Attachment #2: Type: text/html, Size: 6756 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2026-03-04  3:30 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-21 20:46 [RFC PATCH v3 0/2] Enable seamless boot (fastboot) for PTL Juasheem Sultan
2026-01-21 20:46 ` [RFC PATCH v3 1/2] drm/xe/display: Fix reading the framebuffer from stolen memory Juasheem Sultan
2026-01-21 20:46 ` [RFC PATCH v3 2/2] drm/i915/display: Synchronize crtc_state for initial commit Juasheem Sultan
2026-01-21 22:02   ` Manasi Navare
2026-01-22 15:29   ` Jani Nikula
2026-01-27  8:05     ` Juasheem Sultan
2026-02-03 18:18       ` Manasi Navare
2026-02-03 19:47         ` Jani Nikula
2026-02-03 21:03           ` Manasi Navare
2026-03-03  0:43             ` Manasi Navare
2026-03-03  9:44               ` Jani Nikula
2026-03-04  3:30                 ` Juasheem Sultan
2026-01-21 21:29 ` ✗ Fi.CI.BUILD: failure for Enable seamless boot (fastboot) for PTL Patchwork

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox