1. 13 7月, 2022 1 次提交
  2. 23 6月, 2022 1 次提交
  3. 17 6月, 2022 1 次提交
  4. 09 6月, 2022 1 次提交
    • M
      drm/i915/pvc: Add register steering · e0d7371b
      Matt Roper 提交于
      Ponte Vecchio no longer has MSLICE or LNCF steering, but the bspec does
      document several new types of multicast register ranges.  Fortunately,
      most of the different MCR types all provide valid values at instance
      (0,0) so there's no need to read fuse registers and calculate a
      non-terminated instance.  We'll lump all of those range types (BSLICE,
      HALFBSLICE, TILEPSMI, CC, and L3BANK) into a single category called
      "INSTANCE0" to keep things simple.  We'll also perform explicit steering
      for each of these multicast register types, even if the implicit
      steering setup for COMPUTE/DSS ranges would have worked too; this is
      based on guidance from our hardware architects who suggested that we
      move away from implicit steering and start explicitly steer all MCR
      register accesses on modern platforms (we'll work on transitioning
      COMPUTE/DSS to explicit steering in the future).
      
      Note that there's one additional MCR range type defined in the bspec
      (SQIDI) that we don't handle here.  Those ranges use a different
      steering control register that we never touch; since instance 0 is also
      always a valid setting there, we can just ignore those ranges.
      
      Finally, we'll rename the HAS_MSLICES() macro to HAS_MSLICE_STEERING().
      PVC hardware still has units referred to as mslices, but there's no
      register steering based on mslice for this platform.
      
      v2:
       - Rebase on other recent changes
       - Swap two table rows to keep table sorted & easy to read.  (Harish)
      
      Bspec: 67609
      Signed-off-by: NMatt Roper <matthew.d.roper@intel.com>
      Reviewed-by: NHarish Chegondi <harish.chegondi@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20220608170700.4026648-1-matthew.d.roper@intel.com
      e0d7371b
  5. 02 6月, 2022 1 次提交
    • M
      drm/i915/sseu: Disassociate internal subslice mask representation from uapi · b87d3901
      Matt Roper 提交于
      As with EU masks, it's easier to store subslice/DSS masks internally in
      a format that's more natural for the driver to work with, and then only
      covert into the u8[] uapi form when the query ioctl is invoked.  Since
      the hardware design changed significantly with Xe_HP, we'll use a union
      to choose between the old "hsw-style" subslice masks or the newer xehp
      mask.  HSW-style masks will be stored in an array of u8's, indexed by
      slice (there's never more than 6 subslices per slice on older
      platforms).  For Xe_HP and beyond where slices no longer exist, we only
      need a single bitmask.  However we already know that this mask is
      eventually going to grow too large for a simple u64 to hold, so we'll
      represent it in a manner that can be operated on by the utilities in
      linux/bitmap.h.
      
      v2:
       - Fix typo: BIT(s) -> BIT(ss) in gen9_sseu_device_status()
      
      v3:
       - Eliminate sseu->ss_stride and just calculate the stride while
         specifically handling uapi.  (Tvrtko)
       - Use BITMAP_BITS() macro to refer to size of masks rather than
         passing I915_MAX_SS_FUSE_BITS directly.  (Tvrtko)
       - Report compute/geometry DSS masks separately when dumping Xe_HP SSEU
         info.  (Tvrtko)
       - Restore dropped range checks to intel_sseu_has_subslice().  (Tvrtko)
      
      v4:
       - Make the bitmap size macro check the size of the .xehp field rather
         than the containing union.  (Tvrtko)
       - Don't add GEM_BUG_ON() intel_sseu_has_subslice()'s check for whether
         slice or subslice ID exceed sseu->max_[sub]slices; various loops
         in the driver are expected to exceed these, so we should just
         silently return 'false.'
      
      v5:
       - Move XEHP_BITMAP_BITS() to the header so that we can also replace a
         usage of I915_MAX_SS_FUSE_BITS in one of the inline functions.
         (Bala)
       - Change the local variable in intel_slicemask_from_xehp_dssmask() from
         u16 to 'unsigned long' to make it a bit more future-proof.
      
      Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
      Cc: Balasubramani Vivekanandan <balasubramani.vivekanandan@intel.com>
      Signed-off-by: NMatt Roper <matthew.d.roper@intel.com>
      Acked-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Reviewed-by: NBalasubramani Vivekanandan <balasubramani.vivekanandan@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20220601150725.521468-6-matthew.d.roper@intel.com
      b87d3901
  6. 26 5月, 2022 1 次提交
  7. 06 5月, 2022 1 次提交
  8. 30 4月, 2022 1 次提交
  9. 22 4月, 2022 1 次提交
  10. 07 4月, 2022 1 次提交
  11. 21 3月, 2022 3 次提交
  12. 18 3月, 2022 1 次提交
    • J
      drm/i915/guc: Add fetch of hwconfig blob · 8781f051
      John Harrison 提交于
      Implement support for fetching the hardware description table from the
      GuC. The call is made twice - once without a destination buffer to
      query the size and then a second time to fill in the buffer.
      
      The table is stored in the GT structure so that it can be fetched once
      at driver load time. Keeping inside a GuC structure would mean it
      would be release and reloaded on a GuC reset (part of a full GT
      reset). However, the table does not change just because the GT has been
      reset and the GuC reloaded. Also, dynamic memory allocations inside
      the reset path are a problem.
      
      Note that the table is only available on ADL-P and later platforms.
      
      v2 (John's v2 patch):
       * Move to GT level to avoid memory allocation during reset path (and
         unnecessary re-read of the table on a reset).
      
      v5 (of Jordan's posting):
       * Various changes made by Jordan and recommended by Michal
         - Makefile ordering
         - Adjust "struct intel_guc_hwconfig hwconfig" comment
         - Set Copyright year to 2022 in intel_guc_hwconfig.c/.h
         - Drop inline from hwconfig_to_guc()
         - Replace hwconfig param with guc in __guc_action_get_hwconfig()
         - Move zero size check into guc_hwconfig_discover_size()
         - Change comment to say zero size offset/size is needed to get size
         - Add has_guc_hwconfig to devinfo and drop has_table()
         - Change drm_err to notice in __uc_init_hw() and use %pe
      
      v6 (of Jordan's posting):
       * Added a couple more small changes recommended by Michal
       * Merge in John's v2 patch, but note:
         - Using drm_notice as recommended by Michal
         - Reverted Michal's suggestion of using devinfo
      
      v7 (of Jordan's posting):
       * Change back to drm_err as preferred by John
      
      Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
      Signed-off-by: NRodrigo Vivi <rodrigo.vivi@intel.com>
      Signed-off-by: NJohn Harrison <John.C.Harrison@Intel.com>
      Reviewed-by: NMatthew Brost <matthew.brost@intel.com>
      Acked-by: NJon Bloomfield <jon.bloomfield@intel.com>
      Signed-off-by: NJordan Justen <jordan.l.justen@intel.com>
      Reviewed-by: NMichal Wajdeczko <michal.wajdeczko@intel.com>
      Signed-off-by: NJohn Harrison <John.C.Harrison@Intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20220306232157.1174335-2-jordan.l.justen@intel.com
      8781f051
  13. 16 3月, 2022 2 次提交
  14. 28 2月, 2022 1 次提交
  15. 20 2月, 2022 1 次提交
  16. 19 2月, 2022 1 次提交
  17. 11 2月, 2022 1 次提交
  18. 02 2月, 2022 2 次提交
  19. 26 1月, 2022 1 次提交
    • T
      drm/i915: Flush TLBs before releasing backing store · 7938d615
      Tvrtko Ursulin 提交于
      We need to flush TLBs before releasing backing store otherwise userspace
      is able to encounter stale entries if a) it is not declaring access to
      certain buffers and b) it races with the backing store release from a
      such undeclared execution already executing on the GPU in parallel.
      
      The approach taken is to mark any buffer objects which were ever bound
      to the GPU and to trigger a serialized TLB flush when their backing
      store is released.
      
      Alternatively the flushing could be done on VMA unbind, at which point
      we would be able to ascertain whether there is potential a parallel GPU
      execution (which could race), but essentially it boils down to paying
      the cost of TLB flushes potentially needlessly at VMA unbind time (when
      the backing store is not known to be going away so not needed for
      safety), versus potentially needlessly at backing store relase time
      (since we at that point cannot tell whether there is anything executing
      on the GPU which uses that object).
      
      Thereforce simplicity of implementation has been chosen for now with
      scope to benchmark and refine later as required.
      Signed-off-by: NTvrtko Ursulin <tvrtko.ursulin@intel.com>
      Reported-by: NSushma Venkatesh Reddy <sushma.venkatesh.reddy@intel.com>
      Reviewed-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
      Acked-by: NDave Airlie <airlied@redhat.com>
      Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
      Cc: Jon Bloomfield <jon.bloomfield@intel.com>
      Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
      Cc: Jani Nikula <jani.nikula@intel.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      7938d615
  20. 12 1月, 2022 1 次提交
  21. 06 1月, 2022 1 次提交
  22. 18 12月, 2021 1 次提交
  23. 16 11月, 2021 1 次提交
  24. 05 10月, 2021 1 次提交
  25. 25 9月, 2021 1 次提交
    • J
      drm/i915: Flush buffer pools on driver remove · 74af1e2c
      Janusz Krzysztofik 提交于
      We currently do an explicit flush of the buffer pools within the call path
      of drm_driver.release(); this removes all buffers, regardless of their age,
      freeing the buffers' associated resources (objects, address space areas).
      However there is other code that runs within the drm_driver.release() call
      chain that expects objects and their associated address space areas have
      already been flushed.
      
      Since buffer pools auto-flush old buffers once per second in a worker
      thread, there's a small window where if we remove the driver while there
      are still objects in buffers with an age of less than one second, the
      assumptions of the other release code may be violated.
      
      By moving the flush to driver remove (which executes earlier via the
      pci_driver.remove() flow) we're ensuring that all buffers are flushed and
      their associated objects freed before some other code in
      pci_driver.remove() flushes those objects so they are released before
      _any_ code in drm_driver.release() that check completness of those
      flushes executes.
      
      v2: Reword commit description as suggested by Matt.
      Signed-off-by: NJanusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Cc: Matt Roper <matthew.d.roper@intel.com>
      Signed-off-by: NMatt Roper <matthew.d.roper@intel.com>
      Reviewed-by: NMatt Roper <matthew.d.roper@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20210924163825.634606-1-janusz.krzysztofik@linux.intel.com
      74af1e2c
  26. 24 9月, 2021 1 次提交
    • T
      drm/i915: Reduce the number of objects subject to memcpy recover · a259cc14
      Thomas Hellström 提交于
      We really only need memcpy restore for objects that affect the
      operability of the migrate context. That is, primarily the page-table
      objects of the migrate VM.
      
      Add an object flag, I915_BO_ALLOC_PM_EARLY for objects that need early
      restores using memcpy and a way to assign LMEM page-table object flags
      to be used by the vms.
      
      Restore objects without this flag with the gpu blitter and only objects
      carrying the flag using TTM memcpy.
      
      Initially mark the migrate, gt, gtt and vgpu vms to use this flag, and
      defer for a later audit which vms actually need it. Most importantly, user-
      allocated vms with pinned page-table objects can be restored using the
      blitter.
      
      Performance-wise memcpy restore is probably as fast as gpu restore if not
      faster, but using gpu restore will help tackling future restrictions in
      mappable LMEM size.
      
      v4:
      - Don't mark the aliasing ppgtt page table flags for early resume, but
        rather the ggtt page table flags as intended. (Matthew Auld)
      - The check for user buffer objects during early resume is pointless, since
        they are never marked I915_BO_ALLOC_PM_EARLY. (Matthew Auld)
      v5:
      - Mark GuC LMEM objects with I915_BO_ALLOC_PM_EARLY to have them restored
        before we fire up the migrate context.
      
      Cc: Matthew Brost <matthew.brost@intel.com>
      Signed-off-by: NThomas Hellström <thomas.hellstrom@linux.intel.com>
      Reviewed-by: NMatthew Auld <matthew.auld@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20210922062527.865433-8-thomas.hellstrom@linux.intel.com
      a259cc14
  27. 20 9月, 2021 2 次提交
  28. 19 9月, 2021 1 次提交
  29. 15 9月, 2021 1 次提交
  30. 03 9月, 2021 1 次提交
  31. 05 8月, 2021 3 次提交
  32. 04 8月, 2021 1 次提交
  33. 28 7月, 2021 1 次提交