1. 03 5月, 2012 12 次提交
  2. 17 4月, 2012 1 次提交
  3. 16 4月, 2012 2 次提交
  4. 10 4月, 2012 4 次提交
    • D
      drm/i915: dump the DMA fetch addr register on pre-gen6 · 9d2f41fa
      Daniel Vetter 提交于
      It exists way back to gen2, bug got moved around on gen4 a bit.
      Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      Signed-Off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      9d2f41fa
    • D
      drm/i915: extract gt interrupt handler · e7b4c6b1
      Daniel Vetter 提交于
      vlv, ivb and snb all share the gen6+ gt irq handling. 3 copies of the
      same stuff is a bit much, so extract it into a little helper.
      
      Now ilk has a different gt irq handling than snb, but shares the same
      irq handler (due to the similar display block). So also extract the
      ilk gt irq handling to clearly separate these two things.
      
      Nice side effect of this is that we can complete Ben Widawsky's gen6+
      irq bit #define cleanup and call the render irq also with the GEN6
      alias. Beforehand that code was shared with ilk, and neither option
      really made much sense.
      
      As a bonus this enables the error interrupt handling lifted from the
      vlv code on snb and ivb, too.
      Reviewed-by: NJesse Barnes <jbarnes@virtuousgeek.org>
      Antagonized-by: NBen Widawsky <ben@bwidawsk.net>
      Signed-Off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      e7b4c6b1
    • D
      drm/i915: rip out old HWSTAM missed irq WA for vlv · fad2596a
      Daniel Vetter 提交于
      This got copy-pasted from an older version. The newer kinds of
      workarounds don't need this anymore.
      
      Shame on me for not noticing when picking up the vlv irq patch.
      Reviewed-by: NJesse Barnes <jbarnes@virtuousgeek.org>
      Signed-Off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      fad2596a
    • B
      drm/i915: ring irq cleanups · e2a1e2f0
      Ben Widawsky 提交于
      - gen6 put/get only need one argument
          rflags and gflags are always the same (see above explanation)
      - remove a couple redundantly defined IRQs
      - reordered some lines to make things go in descending order
      
      Every ring has its own interrupts, enables, masks, and status bits that
      are fed into the main interrupt enable/mask/status registers. At one
      point in time it seemed like a good idea to make our functions support
      the notion that each interrupt may have a different bit position in the
      corresponding register (blitter parser error may be bit n in IMR, but
      bit m in blitter IMR). It turned out though that the HW designers did us
      a solid on Gen6+ and this unfortunate situation has been avoided. This
      allows our interrupt code to be cleaned up a bit.
      
      I jammed this into one commit because there should be no functional
      change with this commit, and staging it into multiple commits was
      unnecessarily artificial IMO.
      
      CC: Chris Wilson <chris@chris-wilson.co.uk>
      CC: Jesse Barnes <jbarnes@virtuousgeek.org>
      Signed-off-by: NBen Widawsky <benjamin.widawsky@intel.com>
      Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      [danvet:
      - fixed up merged conflict with vlv changes.
      - added GEN6 to GT blitter bit, we only use it on gen6+.
      - added a comment to both ring irq bits and GT irq bits that on gen6+
        these alias.
      - added comment that GT_BSD_USER_INTERRUPT is ilk-only.
      - I've got confused a bit that we still use GT_USER_INTERRUPT on ivb
        for the render ring - but this goes back to ilk where we have only
        gt interrupt bits and so we be equally confusing if changed.]
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      e2a1e2f0
  5. 29 3月, 2012 1 次提交
  6. 21 3月, 2012 1 次提交
    • D
      drm/i915: bind objects to the global gtt only when needed · 74898d7e
      Daniel Vetter 提交于
      And track the existence of such a binding similar to the aliasing
      ppgtt case. Speeds up binding/unbinding in the common case where we
      only need a ppgtt binding (which is accessed in a cpu coherent fashion
      by the gpu) and no gloabl gtt binding (which needs uc writes for the
      ptes).
      
      This patch just puts the required tracking in place.
      
      v2: Check that global gtt mappings exist in the error_state capture
      code (with Chris Wilson's llc reloc patches batchbuffers are no longer
      relocated as mappable in all situations, so this matters). Suggested
      by Chris Wilson.
      
      v3: Adapted to Chris' latest llc-reloc patches.
      
      v4: Fix a bug in the i915 error state capture code noticed by Chris
      Wilson.
      Reviewed-and-tested-by: NChris Wilson <chris@chris-wilson.co.uk>
      Signed-Off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      74898d7e
  7. 19 3月, 2012 1 次提交
  8. 15 2月, 2012 2 次提交
  9. 13 2月, 2012 1 次提交
  10. 09 2月, 2012 1 次提交
    • D
      drm/i915: dump even more into the error_state · 7e3b8737
      Daniel Vetter 提交于
      Chris Wilson and me have again stared at funny error states and it's
      been pretty clear from the start that something was seriously amiss.
      The seqnos last seen by the cpu were a few hundred behind those that
      the gpu could have possibly emitted last before it died ...
      
      Chris now tracked it down (hopefully, definit verdict's still out),
      but in hindsight we'd have found the bug by simply dumping the cpu
      side tracking of the ring head and tail registers.
      
      Fix this and prevent an identical time-waster in the future.
      
      Because the hangs always involved semaphores in one way or another,
      we've tried to dump the mbox registers, but couldn't find any
      inconsistencies. Still, dump them too.
      Reviewed-and-wanted-by: NChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: NEugeni Dodonov <eugeni.dodonov@intel.com>
      Signed-Off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      7e3b8737
  11. 01 2月, 2012 1 次提交
  12. 30 1月, 2012 5 次提交
  13. 26 1月, 2012 1 次提交
  14. 20 1月, 2012 1 次提交
  15. 04 1月, 2012 1 次提交
  16. 20 12月, 2011 2 次提交
  17. 04 11月, 2011 1 次提交
  18. 21 10月, 2011 2 次提交
    • D
      drm/i915: close PM interrupt masking races in the rps work func · a9e2641d
      Daniel Vetter 提交于
      This patch closes the following race:
      
      We get a PM interrupt A, mask it, set dev_priv->iir = PM_A and kick of the
      work item. Scheduler isn't grumpy, so the work queue takes rps_lock,
      grabs pm_iir = dev_priv->pm_iir and pm_imr = READ(PMIMR). Note that
      pm_imr == pm_iir because we've just masked the interrupt we've got.
      
      Now hw sends out PM interrupt B (not masked), we process it and mask
      it.  Later on the irq handler also clears PMIIR.
      
      Then the work item proceeds and at the end clears PMIMR. Because
      (local) pm_imr == pm_iir we have
              pm_imr & ~pm_iir == 0
      so all interrupts are enabled.
      
      Hardware is still interrupt-happy, and sends out a new PM interrupt B.
      PMIMR doesn't mask B (it does not mask anything), PMIIR is cleared, so
      we get it and hit the WARN in the interrupt handler (because
      dev_priv->pm_iir == PM_B).
      
      That's why I've moved the
              WRITE(PMIMR, 0)
      up under the protection of the rps_lock. And write an uncoditional 0
      to PMIMR, because that's what we'll do anyway.
      
      This races looks much more likely because we can arbitrarily extend
      the window by grabing dev->struct mutex right after the irq handler
      has processed the first PM_B interrupt.
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Reviewed-by: NBen Widawsky <ben@bwidawsk.net>
      Signed-off-by: NKeith Packard <keithp@keithp.com>
      a9e2641d
    • D
      drm/i915: close PM interrupt masking races in the irq handler · 4fb066ab
      Daniel Vetter 提交于
      Quoting Chris Wilson's more concise description:
      
      "Ah I think I see the problem. As you point out we only mask the current
      interrupt received, so that if we have a task pending (and so IMR != 0) we
      actually unmask the pending interrupt and so could receive it again before the
      tasklet is finally kicked off by the grumpy scheduler."
      
      We need the hw to issue PM interrupts A, B, A while the scheduler is hating us
      and refuses to run the rps work item. On receiving PM interrupt A we hit the
      WARN because
      
      dev_priv->pm_iir == PM_A | PM_B
      
      Also add a posting read as suggested by Chris to ensure proper ordering of the
      writes to PMIMR and PMIIR. Just in case somebody weakens write ordering.
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Reviewed-by: NBen Widawsky <ben@bwidawsk.net>
      Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: NKeith Packard <keithp@keithp.com>
      4fb066ab