1. 24 10月, 2019 2 次提交
  2. 22 10月, 2019 1 次提交
  3. 21 10月, 2019 1 次提交
  4. 18 10月, 2019 1 次提交
  5. 17 10月, 2019 1 次提交
  6. 04 10月, 2019 4 次提交
    • C
      drm/i915: Move context management under GEM · a4e7ccda
      Chris Wilson 提交于
      Keep track of the GEM contexts underneath i915->gem.contexts and assign
      them their own lock for the purposes of list management.
      
      v2: Focus on lock tracking; ctx->vm is protected by ctx->mutex
      v3: Correct split with removal of logical HW ID
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Reviewed-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191004134015.13204-15-chris@chris-wilson.co.uk
      a4e7ccda
    • C
      drm/i915: Remove logical HW ID · 2935ed53
      Chris Wilson 提交于
      With the introduction of ctx->engines[] we allow multiple logical
      contexts to be used on the same engine (e.g. with virtual engines).
      According to bspec, aach logical context requires a unique tag in order
      for context-switching to occur correctly between them. [Simple
      experiments show that it is not so easy to trick the HW into performing
      a lite-restore with matching logical IDs, though my memory from early
      Broadwell experiments do suggest that it should be generating
      lite-restores.]
      
      We only need to keep a unique tag for the active lifetime of the
      context, and for as long as we need to identify that context. The HW
      uses the tag to determine if it should use a lite-restore (why not the
      LRCA?) and passes the tag back for various status identifies. The only
      status we need to track is for OA, so when using perf, we assign the
      specific context a unique tag.
      
      v2: Calculate required number of tags to fill ELSP.
      
      Fixes: 976b55f0 ("drm/i915: Allow a context to define its set of engines")
      Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=111895Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Acked-by: NDaniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
      Reviewed-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191004134015.13204-14-chris@chris-wilson.co.uk
      2935ed53
    • C
      drm/i915: Coordinate i915_active with its own mutex · b1e3177b
      Chris Wilson 提交于
      Forgo the struct_mutex serialisation for i915_active, and interpose its
      own mutex handling for active/retire.
      
      This is a multi-layered sleight-of-hand. First, we had to ensure that no
      active/retire callbacks accidentally inverted the mutex ordering rules,
      nor assumed that they were themselves serialised by struct_mutex. More
      challenging though, is the rule over updating elements of the active
      rbtree. Instead of the whole i915_active now being serialised by
      struct_mutex, allocations/rotations of the tree are serialised by the
      i915_active.mutex and individual nodes are serialised by the caller
      using the i915_timeline.mutex (we need to use nested spinlocks to
      interact with the dma_fence callback lists).
      
      The pain point here is that instead of a single mutex around execbuf, we
      now have to take a mutex for active tracker (one for each vma, context,
      etc) and a couple of spinlocks for each fence update. The improvement in
      fine grained locking allowing for multiple concurrent clients
      (eventually!) should be worth it in typical loads.
      
      v2: Add some comments that barely elucidate anything :(
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Reviewed-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191004134015.13204-6-chris@chris-wilson.co.uk
      b1e3177b
    • C
      drm/i915: Pull i915_vma_pin under the vm->mutex · 2850748e
      Chris Wilson 提交于
      Replace the struct_mutex requirement for pinning the i915_vma with the
      local vm->mutex instead. Note that the vm->mutex is tainted by the
      shrinker (we require unbinding from inside fs-reclaim) and so we cannot
      allocate while holding that mutex. Instead we have to preallocate
      workers to do allocate and apply the PTE updates after we have we
      reserved their slot in the drm_mm (using fences to order the PTE writes
      with the GPU work and with later unbind).
      
      In adding the asynchronous vma binding, one subtle requirement is to
      avoid coupling the binding fence into the backing object->resv. That is
      the asynchronous binding only applies to the vma timeline itself and not
      to the pages as that is a more global timeline (the binding of one vma
      does not need to be ordered with another vma, nor does the implicit GEM
      fencing depend on a vma, only on writes to the backing store). Keeping
      the vma binding distinct from the backing store timelines is verified by
      a number of async gem_exec_fence and gem_exec_schedule tests. The way we
      do this is quite simple, we keep the fence for the vma binding separate
      and only wait on it as required, and never add it to the obj->resv
      itself.
      
      Another consequence in reducing the locking around the vma is the
      destruction of the vma is no longer globally serialised by struct_mutex.
      A natural solution would be to add a kref to i915_vma, but that requires
      decoupling the reference cycles, possibly by introducing a new
      i915_mm_pages object that is own by both obj->mm and vma->pages.
      However, we have not taken that route due to the overshadowing lmem/ttm
      discussions, and instead play a series of complicated games with
      trylocks to (hopefully) ensure that only one destruction path is called!
      
      v2: Add some commentary, and some helpers to reduce patch churn.
      Signed-off-by: NChris Wilson <chris@chris-wilson.co.uk>
      Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
      Reviewed-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191004134015.13204-4-chris@chris-wilson.co.uk
      2850748e
  7. 06 9月, 2019 2 次提交
  8. 23 8月, 2019 1 次提交
    • J
      drm/i915/psr: Make PSR registers relative to transcoders · 4ab4fa10
      José Roberto de Souza 提交于
      PSR registers are a mess, some have the full address while others just
      have the additional offset from psr_mmio_base.
      
      For BDW+ psr_mmio_base is nothing more than TRANSCODER_EDP_OFFSET +
      0x800 and using it makes more difficult for people with an PSR
      register address or PSR register name from from BSpec as i915 also
      don't match the BSpec names.
      For HSW psr_mmio_base is _DDI_BUF_CTL_A + 0x800 and PSR registers are
      only available in DDIA.
      
      Other reason to make relative to transcoder is that since BDW every
      transcoder have PSR registers, so in theory it should be possible to
      have PSR enabled in a non-eDP transcoder.
      
      So for BDW+ we can use _TRANS2() to get the register offset of any
      PSR register in any transcoder while for HSW we have _HSW_PSR_ADJ
      that will calculate the register offset for the single PSR instance,
      noting that we are already guarded about trying to enable PSR in other
      port than DDIA on HSW by the 'if (dig_port->base.port != PORT_A)' in
      intel_psr_compute_config(), this check should only be valid for HSW
      and will be changed in future.
      PSR2 registers and PSR_EVENT was added after Haswell so that is why
      _PSR_ADJ() is not used in some macros.
      
      The only registers that can not be relative to transcoder are
      PSR_IMR and PSR_IIR that are not relative to anything, so keeping it
      hardcoded. That changed for TGL but it will be handled in another
      patch.
      
      Also removing BDW_EDP_PSR_BASE from GVT because it is not used as it
      is the only PSR register that GVT have.
      
      v5:
      - Macros changed to be more explicit about HSW (Dhinakaran)
      - Squashed with the patch that added the tran parameter to the
      macros (Dhinakaran)
      
      v6:
      - Checking for interruption errors after module reload in the
      transcoder that will be used (Dhinakaran)
      - Using lowercase to the registers offsets
      
      v7:
      - Removing IS_HASWELL() from registers macros(Jani)
      
      Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
      Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
      Cc: Jani Nikula <jani.nikula@linux.intel.com>
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Cc: Zhi Wang <zhi.a.wang@intel.com>
      Reviewed-by: NLucas De Marchi <lucas.demarchi@intel.com>
      Signed-off-by: NJosé Roberto de Souza <jose.souza@intel.com>
      Signed-off-by: NLucas De Marchi <lucas.demarchi@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20190820223325.27490-1-jose.souza@intel.com
      4ab4fa10
  9. 22 8月, 2019 1 次提交
  10. 13 8月, 2019 7 次提交
  11. 10 8月, 2019 2 次提交
  12. 09 8月, 2019 2 次提交
  13. 08 8月, 2019 2 次提交
  14. 02 8月, 2019 1 次提交
  15. 30 7月, 2019 8 次提交
  16. 12 7月, 2019 1 次提交
  17. 21 6月, 2019 1 次提交
    • D
      drm/prime: Align gem_prime_export with obj_funcs.export · e4fa8457
      Daniel Vetter 提交于
      The idea is that gem_prime_export is deprecated in favor of
      obj_funcs.export. That's much easier to do if both have matching
      function signatures.
      Reviewed-by: NEric Anholt <eric@anholt.net>
      Reviewed-by: NEmil Velikov <emil.velikov@collabora.com>
      Acked-by: NChristian König <christian.koenig@amd.com>
      Acked-by: NThierry Reding <treding@nvidia.com>
      Signed-off-by: NDaniel Vetter <daniel.vetter@intel.com>
      Cc: Russell King <linux@armlinux.org.uk>
      Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Cc: Maxime Ripard <maxime.ripard@bootlin.com>
      Cc: Sean Paul <sean@poorly.run>
      Cc: David Airlie <airlied@linux.ie>
      Cc: Daniel Vetter <daniel@ffwll.ch>
      Cc: Zhenyu Wang <zhenyuw@linux.intel.com>
      Cc: Zhi Wang <zhi.a.wang@intel.com>
      Cc: Jani Nikula <jani.nikula@linux.intel.com>
      Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
      Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
      Cc: Alex Deucher <alexander.deucher@amd.com>
      Cc: "Christian König" <christian.koenig@amd.com>
      Cc: "David (ChunMing) Zhou" <David1.Zhou@amd.com>
      Cc: Thierry Reding <thierry.reding@gmail.com>
      Cc: Jonathan Hunter <jonathanh@nvidia.com>
      Cc: Dave Airlie <airlied@redhat.com>
      Cc: Eric Anholt <eric@anholt.net>
      Cc: "Michel Dänzer" <michel.daenzer@amd.com>
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Cc: Huang Rui <ray.huang@amd.com>
      Cc: Felix Kuehling <Felix.Kuehling@amd.com>
      Cc: Hawking Zhang <Hawking.Zhang@amd.com>
      Cc: Feifei Xu <Feifei.Xu@amd.com>
      Cc: Jim Qu <Jim.Qu@amd.com>
      Cc: Evan Quan <evan.quan@amd.com>
      Cc: Matthew Auld <matthew.auld@intel.com>
      Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
      Cc: Thomas Zimmermann <tdz@users.sourceforge.net>
      Cc: Kate Stewart <kstewart@linuxfoundation.org>
      Cc: Sumit Semwal <sumit.semwal@linaro.org>
      Cc: Jilayne Lovejoy <opensource@jilayne.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Mikulas Patocka <mpatocka@redhat.com>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Junwei Zhang <Jerry.Zhang@amd.com>
      Cc: intel-gvt-dev@lists.freedesktop.org
      Cc: intel-gfx@lists.freedesktop.org
      Cc: amd-gfx@lists.freedesktop.org
      Cc: linux-tegra@vger.kernel.org
      Link: https://patchwork.freedesktop.org/patch/msgid/20190614203615.12639-10-daniel.vetter@ffwll.ch
      e4fa8457
  18. 17 6月, 2019 2 次提交