1. 07 2月, 2014 1 次提交
    • C
      drm/i915: Prevent recursion by retiring requests when the ring is full · 1f70999f
      Chris Wilson 提交于
      As the VM do not track activity of objects and instead use a large
      hammer to forcibly idle and evict all of their associated objects when
      one is released, it is possible for that to cause a recursion when we
      need to wait for free space on a ring and call retire requests.
      (intel_ring_begin -> intel_ring_wait_request ->
      i915_gem_retire_requests_ring -> i915_gem_context_free ->
      i915_gem_evict_vm -> i915_gpu_idle -> intel_ring_begin etc)
      
      In order to remove the requirement for calling retire-requests from
      intel_ring_wait_request, we have to inline a couple of steps from
      retiring requests, notably we have to record the position of the request
      we wait for and use that to update the available ring space.
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      1f70999f
  2. 22 1月, 2014 1 次提交
  3. 07 1月, 2014 1 次提交
    • C
      drm/i915: Flush outstanding requests before allocating new seqno · 304d695c
      Chris Wilson 提交于
      In very rare cases (such as a memory failure stress test) it is possible
      to fill the entire ring without emitting a request. Under this
      circumstance, the outstanding request is flushed and waited upon. After
      space on the ring is cleared, we return to emitting the new command -
      except that we just cleared the seqno allocated for this operation and
      trigger the sanity check that a request is only ever emitted with a
      valid seqno. The fix is to rearrange the code to make sure the
      allocation of the seqno for this operation is after any required flushes
      of outstanding operations.
      
      The bug exists since the preallocation was introduced in
      commit 9d773091
      Author: Chris Wilson <chris@chris-wilson.co.uk>
      Date:   Tue Nov 27 16:22:52 2012 +0000
      
          drm/i915: Preallocate next seqno before touching the ring
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Mika Kuoppala <mika.kuoppala@intel.com>
      Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
      Cc: stable@vger.kernel.org
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: NJani Nikula <jani.nikula@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      304d695c
  4. 18 12月, 2013 1 次提交
  5. 17 12月, 2013 1 次提交
  6. 28 11月, 2013 1 次提交
  7. 26 11月, 2013 1 次提交
  8. 21 11月, 2013 2 次提交
  9. 14 11月, 2013 1 次提交
  10. 09 11月, 2013 7 次提交
    • D
      drm/i915/bdw: Take render error interrupt out of the mask · 40c499f9
      Daniel Vetter 提交于
      The handling of the error interrupts isn't wired up at all. And it
      hasn't been ever since ilk happened, so don't bother.
      Reviewed-by: NBen Widawsky <ben@bwidawsk.net>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      40c499f9
    • B
      drm/i915/bdw: BSD init for gen8 also · 780f18c8
      Ben Widawsky 提交于
      This was an oversight and should have been in a previous series
      somewhere.
      Signed-off-by: NBen Widawsky <ben@bwidawsk.net>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      780f18c8
    • B
      drm/i915/bdw: Render ring flushing · a5f3d68e
      Ben Widawsky 提交于
      PIPE_CONTROL added the high address dword. I'm not sure how the
      simulator let me get away with this. I've explicitly left out all the
      workarounds from Gen7 because in the minimal digging that I did, most
      don't seem necessary, and the simulator doesn't complain without them
      
      Note that BLT and BSD ring commands had already been updated previously.
      Just render/pipe_control should have been broken.
      
      v2: Squash in a fixup from Ville to follow the recent IVB PIPE_CONTROL
      updates: "BDW uses the IVB PIPE_CONTROL style for specifying GTT vs.
      PPGTT for the PIPE_CONTROL QW/DW write."
      
      v3: Rebase on top of Chris' cleanup to have an explicit ring->scratch
      buffer object instead of an opaque ring->private where everyone stores
      the same stuff inside.
      Reported-by: NDamien Lespiau <damien.lespiau@intel.com>
      Reviewed-by: Ben Widawsky <ben@bwidawsk.net> (for the fixup)
      Reviewed-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: Ben Widawsky <ben@bwidawsk.net> (v1)
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      a5f3d68e
    • B
      drm/i915/bdw: unleash PPGTT · 28cf5415
      Ben Widawsky 提交于
      v2: Squash in fix from Ben: Set PPGTT batches as necessary
      
      This fixes the regression in the last couple of days when we enabled
      PPGTT.
      
      v3: Squash in fixup to still use GTT for secure batches from Ville:
      
      BDW doesn't have a separate secure vs. non-secure bit in
      MI_BATCH_BUFFER_START. So for secure batches we have to simply
      leave the PPGTT bit unset. Fortunately older generations (except
      HSW) had similar limitations so execbuffer already creates a GTT
      mapping for all secure batches.
      
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: NBen Widawsky <ben@bwidawsk.net>
      Reviewed-by: NImre Deak <imre.deak@intel.com>
      Signed-off-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      28cf5415
    • B
      drm/i915/bdw: Update MI_FLUSH_DW · 075b3bba
      Ben Widawsky 提交于
      The code is more verbose than necessary for the reader's sake, hopefully
      the compiler optimizes away the if.
      Reviewed-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: NBen Widawsky <ben@bwidawsk.net>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      075b3bba
    • B
      drm/i915/bdw: dispatch updates (64b related) · 1c7a0623
      Ben Widawsky 提交于
      The command to emit batch buffers has changed to address 48b addresses.
      It seemed reasonable that we could still use the old instruction where
      emitting 0 for length would do the right thing, but it seems to bother
      the simulator when the code does that.
      
      Now the second dword in the command has the upper 16b of the address of
      the batchbuffer.
      
      v2: Remove duplicated vfun assignment.
      
      v3: Squash in VECS support changes from Zhao Yakui <yakui.zhao@intel.com>
      
      v4: Make checkpatch happy.
      
      Signed-off-by: Ben Widawsky <ben@bwidawsk.net> (v2)
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      1c7a0623
    • B
      drm/i915/bdw: Implement interrupt changes · abd58f01
      Ben Widawsky 提交于
      The interrupt handling implementation remains the same as previous
      generations with the 4 types of registers, status, identity, mask, and
      enable. However the layout of where the bits go have changed entirely.
      To address these changes, all of the interrupt vfuncs needed special
      gen8 code.
      
      The way it works is there is a top level status register now which
      informs the interrupt service routine which unit caused the interrupt,
      and therefore which interrupt registers to read to process the
      interrupt. For display the division is quite logical, a set of interrupt
      registers for each pipe, and in addition to those, a set each for "misc"
      and port.
      
      For GT the things get a bit hairy, as seen by the code. Each of the GT
      units has it's own bits defined. They all look *very similar* and
      resides in 16 bits of a GT register. As an example, RCS and BCS share
      register 0. To compact the code a bit, at a slight expense to
      complexity, this is exactly how the code works as well. 2 structures are
      added to the ring buffer so that our ring buffer interrupt handling code
      knows which ring shares the interrupt registers, and a shift value (ie.
      the top or bottom 16 bits of the register).
      
      The above allows us to kept the interrupt register caching scheme, the
      per interrupt enables, and the code to mask and unmask interrupts
      relatively clean (again at the cost of some more complexity).
      
      Most of the GT units mentioned above are command streamers, and so the
      symmetry should work quite well for even the yet to be implemented rings
      which Broadwell adds.
      
      v2: Fixes up a couple of bugs, and is more verbose about errors in the
      Broadwell interrupt handler.
      
      v3: fix DE_MISC IER offset
      
      v4: Simplify interrupts:
      I totally misread the docs the first time I implemented interrupts, and
      so this should greatly simplify the mess. Unlike GEN6, we never touch
      the regular mask registers in irq_get/put.
      
      v5: Rebased on to of recent pch hotplug setup changes.
      
      v6: Fixup on top of moving num_pipes to intel_info.
      
      v7: Rebased on top of Egbert Eich's hpd irq handling rework. Also
      wired up ibx_hpd_irq_setup for gen8.
      
      v8: Rebase on top of Jani's asle handling rework.
      
      v9: Rebase on top of Ben's VECS enabling for Haswell, where he
      unfortunately went OCD on the gt irq #defines. Not that they're still
      not yet fully consistent:
      - Used the GT_RENDER_ #defines + bdw shifts.
      - Dropped the shift from the L3_PARITY stuff, seemed clearer.
      - s/irq_refcount/irq_refcount.gt/
      
      v10: Squash in VECS enabling patches and the gen8_gt_irq_handler
      refactoring from Zhao Yakui <yakui.zhao@intel.com>
      
      v11: Rebase on top of the interrupt cleanups in upstream.
      
      v12: Rebase on top of Ben's DPF changes in upstream.
      
      v13: Drop bdw from the HAS_L3_DPF feature flag for now, it's unclear what
      exactly needs to be done. Requested by Ben.
      
      v14: Fix the patch.
      - Drop the mask of reserved bits and assorted logic, it doesn't match
        the spec.
      - Do the posting read inconditionally instead of commenting it out.
      - Add a GEN8_MASTER_IRQ_CONTROL definition and use it.
      - Fix up the GEN8_PIPE interrupt defines and give the GEN8_ prefixes -
        we actually will need to use them.
      - Enclose macros in do {} while (0) (checkpatch).
      - Clear DE_MISC interrupt bits only after having processed them.
      - Fix whitespace fail (checkpatch).
      - Fix overtly long lines where appropriate (checkpatch).
      - Don't use typedef'ed private_t (maintainer-scripts).
      - Align the function parameter list correctly.
      
      Signed-off-by: Ben Widawsky <ben@bwidawsk.net> (v4)
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      
      bikeshed
      abd58f01
  11. 16 10月, 2013 1 次提交
    • B
      drm/i915: Do a fuller init after reset · 3d57e5bd
      Ben Widawsky 提交于
      I had this lying around from he original PPGTT series, and thought we
      might try to get it in by itself.
      
      It's convenient to just call i915_gem_init_hw at reset because we'll be
      adding new things to that function, and having just one function to call
      instead of reimplementing it in two places is nice.
      
      In order to accommodate we cleanup ringbuffers in order to bring them
      back up cleanly. Optionally, we could also teardown/re initialize the
      default context but this was causing some problems on reset which I
      wasn't able to fully debug, and is unnecessary with the previous context
      init/enable split.
      
      This essentially reverts:
      commit 8e88a2bd
      Author: Daniel Vetter <daniel.vetter@ffwll.ch>
      Date:   Tue Jun 19 18:40:00 2012 +0200
      
          drm/i915: don't call modeset_init_hw in i915_reset
      
      It seems to work for me on ILK now. Perhaps it's due to:
      commit 8a5c2ae7
      Author: Jesse Barnes <jbarnes@virtuousgeek.org>
      Date:   Thu Mar 28 13:57:19 2013 -0700
      
          drm/i915: fix ILK GPU reset for render
      Signed-off-by: NBen Widawsky <ben@bwidawsk.net>
      Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      3d57e5bd
  12. 10 10月, 2013 1 次提交
  13. 20 9月, 2013 2 次提交
    • B
      drm/i915: s/HAS_L3_GPU_CACHE/HAS_L3_DPF · 040d2baa
      Ben Widawsky 提交于
      We'd only ever used this define to denote whether or not we have the
      dynamic parity feature (DPF) and never to determine whether or not L3
      exists. Baytrail is a good example of where L3 exists, and not DPF.
      
      This patch provides clarify in the code for future use cases which might
      want to actually query whether or not L3 exists.
      
      v2: Add /* DPF == dynamic parity feature */
      Reviewed-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: NBen Widawsky <ben@bwidawsk.net>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      040d2baa
    • B
      drm/i915: Add second slice l3 remapping · 35a85ac6
      Ben Widawsky 提交于
      Certain HSW SKUs have a second bank of L3. This L3 remapping has a
      separate register set, and interrupt from the first "slice". A slice is
      simply a term to define some subset of the GPU's l3 cache. This patch
      implements both the interrupt handler, and ability to communicate with
      userspace about this second slice.
      
      v2:  Remove redundant check about non-existent slice.
      Change warning about interrupts of unknown slices to WARN_ON_ONCE
      Handle the case where we get 2 slice interrupts concurrently, and switch
      the tracking of interrupts to be non-destructive (all Ville)
      Don't enable/mask the second slice parity interrupt for ivb/vlv (even
      though all docs I can find claim it's rsvd) (Ville + Bryan)
      Keep BYT excluded from L3 parity
      
      v3: Fix the slice = ffs to be decremented by one (found by Ville). When
      I initially did my testing on the series, I was using 1-based slice
      counting, so this code was correct. Not sure why my simpler tests that
      I've been running since then didn't pick it up sooner.
      Reviewed-by: NVille Syrjälä <ville.syrjala@linux.intel.com>
      Signed-off-by: NBen Widawsky <ben@bwidawsk.net>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      35a85ac6
  14. 10 9月, 2013 1 次提交
    • C
      drm/i915: Write RING_TAIL once per-request · 09246732
      Chris Wilson 提交于
      Ignoring the legacy DRI1 code, and a couple of special cases (to be
      discussed later), all access to the ring is mediated through requests.
      The first write to a ring will grab a seqno and mark the ring as having
      an outstanding_lazy_request. Either through explicitly adding a request
      after an execbuffer or through an implicit wait (either by the CPU or by
      a semaphore), that sequence of writes will be terminated with a request.
      So we can ellide all the intervening writes to the tail register and
      send the entire command stream to the GPU at once. This will reduce the
      number of *serialising* writes to the tail register by a factor or 3-5
      times (depending upon architecture and number of workarounds, context
      switches, etc involved). This becomes even more noticeable when the
      register write is overloaded with a number of debugging tools. The
      astute reader will wonder if it is then possible to overflow the ring
      with a single command. It is not. When we start a command sequence to
      the ring, we check for available space and issue a wait in case we have
      not. The ring wait will in this case be forced to flush the outstanding
      register write and then poll the ACTHD for sufficient space to continue.
      
      The exception to the rule where everything is inside a request are a few
      initialisation cases where we may want to write GPU commands via the CS
      before userspace wakes up and page flips.
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      09246732
  15. 05 9月, 2013 2 次提交
  16. 04 9月, 2013 1 次提交
  17. 23 8月, 2013 2 次提交
  18. 22 8月, 2013 1 次提交
    • B
      drm/i915: Initialize seqno for VECS too · 5020150b
      Ben Widawsky 提交于
      We require n-1 mailboxes for proper semaphore synchronization. All
      semaphore synchronization code relies on proper values in these
      mailboxes. The fact that we failed to touch the vebox ring by itself
      was unlikely to be an issue since the HW should be initializing the
      values to 0. However the error framework for testing seqno wrap
      introduced by Mika, in addition to the hangcheck via seqno, and
      i915_error_first_batchbuffer() combined caused a nice explosion.
      
      The problem is caused by seqno wrap because the wrap condition is not
      properly setup. The wrap code attempts to set the sync mailboxes all
      to 0, and then set the current seqno to one less than 0. In all cases,
      the vebox mailbox wasn't properly being initialized. This caused a
      wrap to not occur. When hangcheck kicks in with the bogus seqno
      values, the rest just doesn't work. It makes me wonder if we shouldn't
      consider a dumber version of hangcheck...
      
      How we messed this up: VECS support was written before the
      aforementioned other features. Upon VECS being rebased, these facts
      were missed.
      
      Cc: Mika Kuoppala <mika.kuoppala@intel.com>
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=65387
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=67198Signed-off-by: NBen Widawsky <ben@bwidawsk.net>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      5020150b
  19. 19 8月, 2013 1 次提交
  20. 06 8月, 2013 1 次提交
    • B
      drm/i915: Add VM to pin · c37e2204
      Ben Widawsky 提交于
      To verbalize it, one can say, "pin an object into the given address
      space." The semantics of pinning remain the same otherwise.
      
      Certain objects will always have to be bound into the global GTT.
      Therefore, global GTT is a special case, and keep a special interface
      around for it (i915_gem_obj_ggtt_pin).
      
      v2: s/i915_gem_ggtt_pin/i915_gem_obj_ggtt_pin
      Signed-off-by: NBen Widawsky <ben@bwidawsk.net>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      c37e2204
  21. 11 7月, 2013 3 次提交
    • D
      drm/i915: don't enable PM_VEBOX_CS_ERROR_INTERRUPT · c0d6a3dd
      Daniel Vetter 提交于
      The code to handle it is broken - there's simply no code to clear CS
      parser errors on gen5+. And behold, for all the other rings we also
      don't enable it!
      
      Leave the handling code itself in place just to be consistent with the
      existing mess though. And in case someone feels like fixing it all up.
      
      This has been errornously enabled in
      
      commit 12638c57
      Author: Ben Widawsky <ben@bwidawsk.net>
      Date:   Tue May 28 19:22:31 2013 -0700
      
          drm/i915: Enable vebox interrupts
      
      Cc: Damien Lespiau <damien.lespiau@intel.com>
      Cc: Ben Widawsky <ben@bwidawsk.net>
      Reviewed-by: NBen Widawsky <ben@bwidawsk.net>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      c0d6a3dd
    • D
      drm/i915: unify ring irq refcounts (again) · c7113cc3
      Daniel Vetter 提交于
      With the simplified locking there's no reason any more to keep the
      refcounts seperate.
      
      v2: Readd the lost comment that ring->irq_refcount is protected by
      dev_priv->irq_lock.
      Reviewed-by: NBen Widawsky <ben@bwidawsk.net>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      c7113cc3
    • D
      drm/i915: kill dev_priv->rps.lock · 59cdb63d
      Daniel Vetter 提交于
      Now that the rps interrupt locking isn't clearly separated (at elast
      conceptually) from all the other interrupt locking having a different
      lock stopped making sense: It protects much more than just the rps
      workqueue it started out with. But with the addition of VECS the
      separation started to blurr and resulted in some more complex locking
      for the ring interrupt refcount.
      
      With this we can (again) unifiy the ringbuffer irq refcounts without
      causing a massive confusion, but that's for the next patch.
      
      v2: Explain better why the rps.lock once made sense and why no longer,
      requested by Ben.
      Reviewed-by: NBen Widawsky <ben@bwidawsk.net>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      59cdb63d
  22. 09 7月, 2013 2 次提交
    • D
      drm/i915: fix up ring cleanup for the i830/i845 CS tlb w/a · aaf8a516
      Daniel Vetter 提交于
      It's not a good idea to also run the pipe_control cleanup.
      
      This regression has been introduced whith the original cs tlb w/a in
      
      commit b45305fc
      Author: Daniel Vetter <daniel.vetter@ffwll.ch>
      Date:   Mon Dec 17 16:21:27 2012 +0100
      
          drm/i915: Implement workaround for broken CS tlb on i830/845
      
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=64610
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Cc: stable@vger.kernel.org
      Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      aaf8a516
    • B
      drm/i915: Getter/setter for object attributes · f343c5f6
      Ben Widawsky 提交于
      Soon we want to gut a lot of our existing assumptions how many address
      spaces an object can live in, and in doing so, embed the drm_mm_node in
      the object (and later the VMA).
      
      It's possible in the future we'll want to add more getter/setter
      methods, but for now this is enough to enable the VMAs.
      
      v2: Reworked commit message (Ben)
      Added comments to the main functions (Ben)
      sed -i "s/i915_gem_obj_set_color/i915_gem_obj_ggtt_set_color/" drivers/gpu/drm/i915/*.[ch]
      sed -i "s/i915_gem_obj_bound/i915_gem_obj_ggtt_bound/" drivers/gpu/drm/i915/*.[ch]
      sed -i "s/i915_gem_obj_size/i915_gem_obj_ggtt_size/" drivers/gpu/drm/i915/*.[ch]
      sed -i "s/i915_gem_obj_offset/i915_gem_obj_ggtt_offset/" drivers/gpu/drm/i915/*.[ch]
      (Daniel)
      
      v3: Rebased on new reserve_node patch
      Changed DRM_DEBUG_KMS to actually work (will need fixing later)
      Signed-off-by: NBen Widawsky <ben@bwidawsk.net>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      f343c5f6
  23. 04 7月, 2013 1 次提交
    • D
      drm/i915: reinit status page registers after gpu reset · 035dc1e0
      Daniel Vetter 提交于
      This fixes gpu reset on my gm45 - without this patch the bsd thing is
      forever stuck since the seqno updates never reach the status page.
      
      Tbh I have no idea how this ever worked without rewriting the hws
      registers after a gpu reset.
      
      To satisfy my OCD also give the functions a bit more consistent names:
      - Use status_page everywhere, also for the physical addressed one.
      - Use init for the allocation part and setup for the register setup
        part consistently.
      
      Long term I'd really like to share the hw init parts completely
      between gpu reset, resume and driver load, i.e. to call
      i915_gem_init_hw instead of the individual pieces we might need.
      
      v2: Add the missing paragraph to the commit message about what bug
      exactly this patch here fixes.
      
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=65495
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      Tested-by: Nlu hua <huax.lu@intel.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      035dc1e0
  24. 13 6月, 2013 1 次提交
  25. 11 6月, 2013 1 次提交
  26. 07 6月, 2013 1 次提交
    • R
      drm/i915: WA: FBC Render Nuke. · fd3da6c9
      Rodrigo Vivi 提交于
      WaFbcNukeOn3DBlt for IVB, HSW.
      
      According BSPec: "Workaround: Do not enable Render Command Streamer tracking for FBC.
      Instead insert a LRI to address 0x50380 with data 0x00000004 after the PIPE_CONTROL that
      follows each render submission."
      
      v2: Chris noticed that flush_domains check was missing here and also suggested to do
          LRI only when fbc is enabled. To avoid do a I915_READ on every flush lets use the
          module parameter check.
      
      v3: Adding Wa name as Damien suggested.
      
      v4: Ville noticed VLV doesn't support fbc at all and comment came wrong from spec.
      
      v5: Ville noticed than on blt a Cache Clean LRI should be used instead the Nuke one.
      
      v6: Check for flush domain on blt (by Ville).
          Check for scanout dirty (by Chris).
      
      v7: Apply proper fbc_dirty implemented by Chris.
      
      v8: remove unused variables.
      
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: NRodrigo Vivi <rodrigo.vivi@gmail.com>
      Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
      Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      fd3da6c9
  27. 01 6月, 2013 1 次提交