On Sat, Mar 14, 2015 at 08:02:09AM -0400, dan mclaughlin wrote:
> On Sat, 14 Mar 2015 20:58:32 +1100
> Mon Dec 10 10:49:46 2012 -0600 Jonathan Gray <[email protected]> wrote:
> > On Tue, Mar 10, 2015 at 07:14:28AM -0400, dan mclaughlin wrote:
> > >
> > > that did do something. before the screen would just freeze with its
> > > contents.
> > > now it freezes like that for a second, and then goes blank. i reproduced
> > > it
> > > twice. the first time took about the same amount of time as before, the
> > > second
> > > went a bit longer before hanging. it seems there is also enough time
> > > before it
> > > freezes to get error messages now. the first time i got the expected
> > > messages:
> > >
> > > Mar 9 17:15:48 node02 /bsd: error: [drm:pid2359:i915_hangcheck_hung]
> > > *ERROR* Ha
> > > ngcheck timer elapsed... GPU hung
> > > Mar 9 17:15:48 node02 /bsd: error: [drm:pid11430:i915_reset] *ERROR*
> > > Failed to
> > > reset chip.
> > >
> > > the second time though i got this though:
> > >
> > > Mar 10 06:37:01 node02 /bsd: error:
> > > [drm:pid27180:i915_get_vblank_timestamp] *ER
> > > ROR* Invalid crtc 1
> > > Mar 10 06:37:01 node02 /bsd: uvm_fault(0xd5c34634, 0x80038000, 0, 1) -> e
> > >
> > > i do get occational vblank_timestamp errors but they have never seemed to
> > > cause
> > > any significant problem before (although i don't use graphics too
> > > intensely).
> >
> > The 845g hardware has a single display pipe. I had hoped the problems
> > people had encountered with it were gone when the 'pipe a force' quirks
> > were removed for it.
> >
> > I'm not entirely sure where to look for the source of getting the pipe
> > wrong.
> >
> > I would be interested to hear if the following diff makes any difference.
> > From:
> >
> > commit 21a245d2d62ef617978316203af032d499805cd2
> > Author: Rob Clark <[email protected]>
> > Date: Mon Dec 10 10:49:46 2012 -0600
> >
> > drm: small fix in drm_send_vblank_event()
> >
> > Initialize e->pipe.. some drivers set this themselves, others do not.
> > Setting it in drm_send_vblank_event() should help ensure more consistent
> > behavior with the different drivers.
> >
> > Index: sys/dev/pci/drm/drm_irq.c
> > ===================================================================
> > RCS file: /cvs/src/sys/dev/pci/drm/drm_irq.c,v
> > retrieving revision 1.59
> > diff -u -p -r1.59 drm_irq.c
> > --- sys/dev/pci/drm/drm_irq.c 12 Feb 2015 08:48:32 -0000 1.59
> > +++ sys/dev/pci/drm/drm_irq.c 12 Mar 2015 12:50:29 -0000
> > @@ -885,6 +885,7 @@ void drm_send_vblank_event(struct drm_de
> >
> > now = get_drm_timestamp();
> > }
> > + e->pipe = crtc;
> > send_vblank_event(dev, e, seq, &now);
> > }
> > EXPORT_SYMBOL(drm_send_vblank_event);
>
> no luck.
>
> i was using qiv, and when changing a picture, it paused for a second or two
> (no response) and then resumed, showing some blue lines across the middle for
> a fraction of a second. everything was fine for a few more seconds, and then i
> tried to use fullscreen, and it froze after blanking.
>
> i got a few errors, but don't know exactly what caused them.
>
> Mar 14 07:35:50 node02 /bsd: error: [drm:pid16745:i915_get_vblank_timestamp]
> *ERROR* Invalid crtc 1
> Mar 14 07:35:59 node02 /bsd: error: [drm:pid31156:i915_hangcheck_hung]
> *ERROR* Hangcheck timer elapsed... GPU hung
> Mar 14 07:35:59 node02 /bsd: error: [drm:pid11046:i915_reset] *ERROR* Failed
> to reset chip.
>
> BTW, this was with the other patch applied as well.
>
Do you still see the hangs with vblank timestamping disabled?
Index: sys/dev/pci/drm/i915/i915_irq.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/drm/i915/i915_irq.c,v
retrieving revision 1.21
diff -u -p -r1.21 i915_irq.c
--- sys/dev/pci/drm/i915/i915_irq.c 12 Feb 2015 11:11:45 -0000 1.21
+++ sys/dev/pci/drm/i915/i915_irq.c 14 Mar 2015 12:14:03 -0000
@@ -2719,7 +2719,8 @@ void intel_irq_init(struct drm_device *d
dev->driver->get_vblank_counter = gm45_get_vblank_counter;
}
- if (drm_core_check_feature(dev, DRIVER_MODESET))
+ if (drm_core_check_feature(dev, DRIVER_MODESET) &&
+ INTEL_INFO(dev)->num_pipes > 1)
dev->driver->get_vblank_timestamp = i915_get_vblank_timestamp;
else
dev->driver->get_vblank_timestamp = NULL;