On Mon, Feb 10, 2025 at 11:40:25PM +1100, Jonathan Gray wrote:
> On Mon, Feb 10, 2025 at 12:06:58PM +0100, Matthieu Herrb wrote:
> > On Mon, Feb 10, 2025 at 09:10:26PM +1100, Jonathan Gray wrote:
> > > On Mon, Feb 10, 2025 at 08:29:34AM +0100, Matthieu Herrb wrote:
> > > > On Mon, Feb 10, 2025 at 08:20:05AM +0100, Matthieu Herrb wrote:
> > > > > On Mon, Feb 10, 2025 at 05:49:37PM +1100, Jonathan Gray wrote:
> > > > > > On Mon, Feb 10, 2025 at 07:27:28AM +0100, Matthieu Herrb wrote:
> > > > > > > Hi,
> > > > > > > 
> > > > > > > sorry to not having being able to test the drm upgrade on this 
> > > > > > > machine
> > > > > > > earlier, but the new drm code hangs on boot shorly after attachine
> > > > > > > drm, clearing the screen and displaying:
> > > > > > > 
> > > > > > > wsdisplay0 at inteldrm0 mux1: console (std, vt100, emulation), 
> > > > > > > using
> > > > > > > wskbd1
> > > > > > > 
> > > > > > > It's not a hard hang (the capslock led still toggles, and the CPU
> > > > > > > don't seem to go full speed, power use stays uner 1A at 19V), but 
> > > > > > > I
> > > > > > > can't enter DDB nor do a Ctl+Alt+Del to trigger a reboot.
> > > > > > > I've the latest BIOS for this machine.
> > > > > > 
> > > > > > I had another report like this today.  Machine could still change
> > > > > > virtual terminals.  It was also Alder Lake.
> > > > > 
> > > > > Hmm intersting, switching VT inedeed works and cause a screen refresh.
> > > > > So in text mode I can log in and run commands blindly. Switching to
> > > > > anothr VT and back will display the result.
> > > > > 
> > > > > Also now I access the machine through the net. In my previous attempt
> > > > > I couldn't, probably because I did enter DDB after hitting
> > > > > Ctrl+Alt+ESC, but without output on the screen I thought it failed.
> > > > > 
> > > > > None of the printfs show up, but here's a full dmesg with DRMDEBUG
> > > > > (and a few VT switches that add more lines at the end)
> > > > > 
> > > > 
> > > > Another data point: X or Wayland work normally if I start them from
> > > > these VT switches. So it's just wsdisplat that doesnt't refresh.  (And
> > > > if I had xenodm started by rc.conf.local, I probably wouldn't notice
> > > > the issue).
> > > 
> > > does forcing a switch help?
> > 
> > No unfortunatly it does not.
> 
> going back to intel_fbdev_restore_mode() ?

Unfortunatly no luck either. It looks more like some cache or buffer
flush missing after basic rasops updates (putchar and so).
I've tried to follow the function pointers from wsdisplay -> rasos ->
rasos_vcons ... but got lost.

> 
> Index: sys/dev/pci/drm/i915/i915_driver.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/drm/i915/i915_driver.c,v
> diff -u -p -r1.20 i915_driver.c
> --- sys/dev/pci/drm/i915/i915_driver.c        7 Feb 2025 03:03:28 -0000       
> 1.20
> +++ sys/dev/pci/drm/i915/i915_driver.c        10 Feb 2025 12:35:05 -0000
> @@ -1889,6 +1889,7 @@ int     inteldrm_getchar(void *, int, int, s
>  void inteldrm_burner(void *, u_int, u_int);
>  void inteldrm_burner_cb(void *);
>  void inteldrm_scrollback(void *, void *, int lines);
> +int  intel_fbdev_restore_mode(struct drm_i915_private *);
>  extern const struct pci_device_id pciidlist[];
>  
>  struct wsscreen_descr inteldrm_stdscreen = {
> @@ -2038,7 +2039,7 @@ inteldrm_doswitch(void *v)
>       struct rasops_info *ri = &dev_priv->ro;
>  
>       rasops_show_screen(ri, dev_priv->switchcookie, 0, NULL, NULL);
> -     drm_client_dev_restore(dev);
> +     intel_fbdev_restore_mode(dev_priv);
>  
>       if (dev_priv->switchcb)
>               (*dev_priv->switchcb)(dev_priv->switchcbarg, 0, 0);
> @@ -2055,7 +2056,7 @@ inteldrm_enter_ddb(void *v, void *cookie
>               return;
>  
>       rasops_show_screen(ri, cookie, 0, NULL, NULL);
> -     drm_client_dev_restore(dev);
> +     intel_fbdev_restore_mode(dev_priv);
>  }
>  
>  int
> @@ -2501,7 +2502,7 @@ inteldrm_activate(struct device *self, i
>       case DVACT_WAKEUP:
>               i915_drm_resume_early(dev);
>               i915_drm_resume(dev);
> -             drm_client_dev_restore(dev);
> +             intel_fbdev_restore_mode(dev_priv);
>               rv = config_suspend(dev->dev, act);
>               break;
>       }
> Index: sys/dev/pci/drm/i915/display/intel_fbdev.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/drm/i915/display/intel_fbdev.c,v
> diff -u -p -r1.14 intel_fbdev.c
> --- sys/dev/pci/drm/i915/display/intel_fbdev.c        7 Feb 2025 03:03:29 
> -0000       1.14
> +++ sys/dev/pci/drm/i915/display/intel_fbdev.c        10 Feb 2025 12:32:10 
> -0000
> @@ -599,7 +599,7 @@ static int intel_fbdev_output_poll_chang
>       return 0;
>  }
>  
> -static int intel_fbdev_restore_mode(struct drm_i915_private *dev_priv)
> +int intel_fbdev_restore_mode(struct drm_i915_private *dev_priv)
>  {
>       struct intel_fbdev *ifbdev = dev_priv->display.fbdev.fbdev;
>       int ret;
> 

-- 
Matthieu Herrb

Reply via email to