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 20:28:42 +0300

Download raw body.

Thread
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. It has no output
on screen until I do tty switch with Ctl + Alt + F*. After tty switch
everything works as before sceen burner.

> 
> 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
> 
> 
> -- 
> Walter
>