Index | Thread | Search

From:
Vitaliy Makkoveev <mvs@openbsd.org>
Subject:
Re: Intel GPU, ghosting after zzz or ZZZ
To:
Walter Alejandro Iglesias <wai@roquesor.com>
Cc:
tech@openbsd.org
Date:
Tue, 26 May 2026 23:39:11 +0300

Download raw body.

Thread
On Tue, May 26, 2026 at 09:48:15PM +0200, Walter Alejandro Iglesias wrote:
> On Tue, May 26, 2026 at 09:53:58PM +0300, Vitaliy Makkoveev wrote:
> > On Tue, May 26, 2026 at 08:43:48PM +0200, Walter Alejandro Iglesias wrote:
> > > On Tue, May 26, 2026 at 06:29:32PM +0000, Vitaliy Makkoveev wrote:
> > > > On Tue, May 26, 2026 at 08:00:58PM +0200, Walter Alejandro Iglesias wrote:
> > > > > On Tue, May 26, 2026 at 08:28:42PM +0300, Vitaliy Makkoveev wrote:
> > > > > > On Tue, May 26, 2026 at 10:12:31AM +0200, Walter Alejandro Iglesias wrote:
> > > > > > > Vitaliy,
> > > > > > > 
> > > > > > > > On Mon, May 25, 2026 at 10:00:44PM +0300, Vitaliy Makkoveev wrote:
> > > > > > > > > I also have the problem with wscons screen burner on ALDERLAKE. I don't
> > > > > > > > > know how describe it, so the screeshot [1]. After screen unblan, the
> > > > > > > > > output happens only in upper left corner, the upper half of the first
> > > > > > > > > line. The other screen contains garbage.
> > > > > > > > > 
> > > > > > > 
> > > > > > > Just to clear up a doubt.  Could you try the diff below, please?
> > > > > > > 
> > > > > > > This diff flips the order in which rasops_show_screen and
> > > > > > > drm_client_dev_restore are called.  Notice inteldrm_doswitch is called
> > > > > > > before inteldrm_burner_cb:
> > > > > > > 
> > > > > > > void
> > > > > > > inteldrm_attachhook(struct device *self)
> > > > > > > {
> > > > > > > ...
> > > > > > > 	task_set(&dev_priv->switchtask, inteldrm_doswitch, dev_priv);
> > > > > > > 	task_set(&dev_priv->burner_task, inteldrm_burner_cb, dev_priv);
> > > > > > > 
> > > > > > > 
> > > > > > 
> > > > > > With this diff after screen on, my ALDERLAKE machine has no garbage on
> > > > > > screen, screen is the same as it was before screen off.
> > > > > 
> > > > > So, the weird half line from the picture does not happen?
> > > 
> > > This happens without your diff?  I mean, this half line is a side effect
> > > of your diff?
> > > 
> > 
> > We have 3 cases:
> > 
> >  1. Without any diffs this half line always presents.
> > 
> >  2. With my diff this half line always presents.
> > 
> >  3. With your diff below this half line always absent.
> 
> Have you tried using both, your diff and mine?
> 

Now, I'm talking only about ALDERLAKE machine.

This is your diff proposed to test:

Index: i915_driver.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/drm/i915/i915_driver.c,v
diff -u -p -u -p -r1.30 i915_driver.c
--- i915_driver.c	30 Apr 2026 04:33:06 -0000	1.30
+++ i915_driver.c	26 May 2026 07:57:22 -0000
@@ -2077,8 +2077,8 @@ inteldrm_doswitch(void *v)
 	struct drm_device *dev = &dev_priv->drm;
 	struct rasops_info *ri = &dev_priv->ro;
 
-	rasops_show_screen(ri, dev_priv->switchcookie, 0, NULL, NULL);
 	drm_client_dev_restore(dev);
+	rasops_show_screen(ri, dev_priv->switchcookie, 0, NULL, NULL);
 
 	if (dev_priv->switchcb)
 		(*dev_priv->switchcb)(dev_priv->switchcbarg, 0, 0);
@@ -2094,8 +2094,8 @@ inteldrm_enter_ddb(void *v, void *cookie
 	if (cookie == ri->ri_active)
 		return;
 
-	rasops_show_screen(ri, cookie, 0, NULL, NULL);
 	drm_client_dev_restore(dev);
+	rasops_show_screen(ri, cookie, 0, NULL, NULL);
 }
 
 int

I tried it on ALDERLAKE machine. With this diff I see no garbage, I see
no overlapping symbols, the screen looks like it was before screen
burner. This means The text at the screen is the same as it was without
artifacts. Without the half-line in the upper left corner.

With your diff this half-line in the upper left corner appears only
while kernel prints something in kernel log.

When I type something on keyboard I see no output on screen. I also see
no output of executed command. After I do console switch with "Ctl + Alt
+ F*" the output appears and the console starts work as normal.

Index: sys/dev/pci/drm/i915/i915_driver.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/drm/i915/i915_driver.c,v
retrieving revision 1.30
diff -u -p -r1.30 i915_driver.c
--- sys/dev/pci/drm/i915/i915_driver.c	30 Apr 2026 04:33:06 -0000	1.30
+++ sys/dev/pci/drm/i915/i915_driver.c	26 May 2026 17:03:06 -0000
@@ -2154,8 +2154,10 @@ inteldrm_burner_cb(void *arg1)
 	struct drm_i915_private *dev_priv = arg1;
 	struct drm_device *dev = &dev_priv->drm;
 	struct drm_fb_helper *helper = dev->fb_helper;
+	struct rasops_info *ri = &dev_priv->ro;
 
 	drm_fb_helper_blank(dev_priv->burner_fblank, helper->info);
+	rasops_show_screen(ri, ri->ri_active, 0, NULL, NULL);
 }
 
 int

The combination of your diff above and my diff above works provides the
same result, so I suspect my diff has no affect here.


Without your diff above the "Ctl + Alt + F*" magic doesn't work. Without
your diff but with my diff only the "Ctl + Alt + F*" magic doesn't work
but I see no overlapping symbols on screen. I also see half-line in the
upper left corner.

Without any diff I see garbage on screen, overlapping symbols and
half-line in the upper left corner.