All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 0/6] i915: SSEU handling updates
@ 2022-05-20 23:04 ` Matt Roper
  0 siblings, 0 replies; 37+ messages in thread
From: Matt Roper @ 2022-05-20 23:04 UTC (permalink / raw)
  To: intel-gfx; +Cc: Tvrtko Ursulin, dri-devel

This series reworks i915's internal handling of slice/subslice/EU (SSEU)
data to represent platforms like Xe_HP in a more natural manner and to
prepare for future platforms where the masks will need to grow in size.
One key idea of this series is that although we have a fixed ABI to
convey SSEU data to userspace (i.e., multiple u8[] arrays with data
stored at different strides), we don't need to use this cumbersome
format for the driver's own internal storage.  As long as we can convert
into the uapi form properly when responding to the I915_QUERY ioctl,
it's preferable to use an internal storage format that's easier for the
driver to work with.

Another key point here is that we're reaching the point where subslice
(DSS) masks will soon not fit within simple u32/u64 integer values.
Xe_HP SDV and DG2 platforms today have subslice (DSS) masks that are 32
bits, which maxes out the current storage of a u32.  With PVC the masks
are represented by a pair of 32-bit registers, requiring a bump up to at
least 64-bits of storage internally.  We could switch to u64 for that in
the short term, but since we already know that upcoming architectures
intend to provide DSS fuse bits via three or more registers it's best to
switch to a representation that's more future-proof but still easy to
work with in the driver code.  To accomodate this, we start storing our
subslice mask for Xe_HP and beyond in a new typedef that can be
processed by the linux/bitmap.h operations.

Finally, since no userspace for Xe_HP or beyond is using the legacy
I915_GETPARAM ioctl lookups for I915_PARAM_SLICE_MASK and
I915_PARAM_SUBSLICE_MASK (since they've migrated to the more flexible
I915_QUERY ioctl that can return more than a simple u32 value), we take
the opportunity to officially drop support for those GETPARAM lookups on
modern platforms.  Maintaining support for these GETPARAM lookups don't
make sense for a number of reasons:

 * Traditional slices no longer exist, and newer ideas like gslices,
   cslices, mslices, etc. aren't something userspace needs to query
   since it can be inferred from other information.
 * The GETPARAM ioctl doesn't have a way to distinguish between geometry
   subslice masks and compute subslice masks, which are distinct on
   Xe_HP and beyond.
 * The I915_GETPARAM ioctl is limited to returning a 32-bit value, so
   when subslice masks begin to exceed 32-bits (on PVC), it simply can't
   return the entire mask.
 * The GETPARAM ioctl doesn't have a way to give sensible information
   for multi-tile devices.

v2:
 - Switch to union of hsw/xehp formats to keep the representation in a
   natural format for different types of hardware.
 - Avoid accessing internals of intel_sseu_ss_mask_t directly outside of
   intel_sseu.[ch].
 - Include PVC SSEU which needs the larger SS mask storage enabled by
   this series.

v3:
 - Correct a BIT(s) typo that should have been BIT(ss), causing
   incorrect handling on gen9 platforms.

v4:
 - Eliminate sseu->{ss,eu}_stride fields and just calculate the proper
   value in the UAPI code that needs them.
 - Handle unwanted ~u8 sign extension at the callsite instead of inside
   sseu_set_eus.
 - Use BITMAP_BITS() macro rather than passing I915_MAX_SS_FUSE_BITS
   around directly to bitmap operations.
 - Improved debugfs / dmesg reporting for Xe_HP dumps
 - Various assertion check improvements.

Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>


Matt Roper (6):
  drm/i915/xehp: Use separate sseu init function
  drm/i915/xehp: Drop GETPARAM lookups of I915_PARAM_[SUB]SLICE_MASK
  drm/i915/sseu: Simplify gen11+ SSEU handling
  drm/i915/sseu: Don't try to store EU mask internally in UAPI format
  drm/i915/sseu: Disassociate internal subslice mask representation from
    uapi
  drm/i915/pvc: Add SSEU changes

 drivers/gpu/drm/i915/gem/i915_gem_context.c  |   5 +-
 drivers/gpu/drm/i915/gt/intel_engine_cs.c    |   4 +-
 drivers/gpu/drm/i915/gt/intel_gt.c           |  12 +-
 drivers/gpu/drm/i915/gt/intel_gt_regs.h      |   1 +
 drivers/gpu/drm/i915/gt/intel_sseu.c         | 450 ++++++++++++-------
 drivers/gpu/drm/i915/gt/intel_sseu.h         |  94 ++--
 drivers/gpu/drm/i915/gt/intel_sseu_debugfs.c |  30 +-
 drivers/gpu/drm/i915/gt/intel_workarounds.c  |  24 +-
 drivers/gpu/drm/i915/i915_drv.h              |   2 +
 drivers/gpu/drm/i915/i915_getparam.c         |  11 +-
 drivers/gpu/drm/i915/i915_pci.c              |   3 +-
 drivers/gpu/drm/i915/i915_query.c            |  26 +-
 drivers/gpu/drm/i915/intel_device_info.h     |   1 +
 13 files changed, 398 insertions(+), 265 deletions(-)

-- 
2.35.3


^ permalink raw reply	[flat|nested] 37+ messages in thread
* [PATCH 0/5] i915: SSEU handling updates
@ 2022-04-27 23:07 Matt Roper
  2022-04-28  0:42 ` [Intel-gfx] ✗ Fi.CI.SPARSE: warning for i915: SSEU handling updates (rev2) Patchwork
  0 siblings, 1 reply; 37+ messages in thread
From: Matt Roper @ 2022-04-27 23:07 UTC (permalink / raw)
  To: intel-gfx; +Cc: tvrtko.ursulin, dri-devel

This series makes a handful of updates to i915's internal handling of
slice/subslice/EU (SSEU) data to handle recent platforms like Xe_HP in a
more natural manner and to prepare for some additional upcoming
platforms we have in the pipeline (the first of which I'll probably
start sending patches for in the next week or two).  One key idea of
this series is that although we have a fixed ABI to convey SSEU data to
userspace (i.e., multiple u8[] arrays with data stored at different
strides), we don't need to use this cumbersome format for the driver's
own internal storage.  As long as we can convert into the uapi form
properly when responding to the I915_QUERY ioctl, it's preferable to use
an internal storage format that's easier for the driver to work with.
Doing so can also save us some storage space on modern platforms since
we don't always need to replicate a bunch of data that's architecturally
guaranteed to be identical.

Another key point here is that Xe_HP platforms today have subslice (DSS)
masks that are 32 bits, which maxes out the storage of a u32.  On future
platforms the architecture design is going to start spreading their DSS
masks over multiple 32-bit fuse registers.  So even for platforms where
the total number of DSS doesn't actually go up, we're going to need
larger storage than just a u32 to express the mask properly.  To
accomodate this, we start storing our subslice mask in a new typedef
that can be processed by the linux/bitmap.h operations.

Finally, since no userspace for Xe_HP or beyond is using the legacy
I915_GETPARAM ioctl lookups for I915_PARAM_SLICE_MASK and
I915_PARAM_SUBSLICE_MASK (since they've migrated to the more flexible
I915_QUERY ioctl that can return more than a simple u32 value), we take
the opportunity to officially drop support for those GETPARAM lookups on
modern platforms.  Maintaining support for these GETPARAM lookups don't
make sense for a number of reasons:

 * Traditional slices no longer exist, and newer ideas like gslices,
   cslices, mslices, etc. aren't something userspace needs to query
   since it can be inferred from other information.
 * The GETPARAM ioctl doesn't have a way to distinguish between geometry
   subslice masks and compute subslice masks, which are distinct on
   Xe_HP and beyond.
 * The I915_GETPARAM ioctl is limited to returning a 32-bit value, so
   when subslice masks begin to exceed 32-bits, it simply can't return
   the entire mask.
 * The GETPARAM ioctl doesn't have a way to give sensible information
   for multi-tile devices.


Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>

Matt Roper (5):
  drm/i915/sseu: Don't try to store EU mask internally in UAPI format
  drm/i915/xehp: Drop GETPARAM lookups of I915_PARAM_[SUB]SLICE_MASK
  drm/i915/xehp: Use separate sseu init function
  drm/i915/sseu: Simplify gen11+ SSEU handling
  drm/i915/sseu: Disassociate internal subslice mask representation from
    uapi

 drivers/gpu/drm/i915/gem/i915_gem_context.c  |   4 +-
 drivers/gpu/drm/i915/gt/intel_engine_cs.c    |   2 +-
 drivers/gpu/drm/i915/gt/intel_gt.c           |  14 +-
 drivers/gpu/drm/i915/gt/intel_sseu.c         | 371 +++++++++++--------
 drivers/gpu/drm/i915/gt/intel_sseu.h         |  69 ++--
 drivers/gpu/drm/i915/gt/intel_sseu_debugfs.c |  28 +-
 drivers/gpu/drm/i915/gt/intel_workarounds.c  |  28 +-
 drivers/gpu/drm/i915/i915_getparam.c         |  10 +-
 drivers/gpu/drm/i915/i915_query.c            |  16 +-
 9 files changed, 323 insertions(+), 219 deletions(-)

-- 
2.35.1


^ permalink raw reply	[flat|nested] 37+ messages in thread

end of thread, other threads:[~2022-06-01 14:41 UTC | newest]

Thread overview: 37+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-20 23:04 [PATCH v4 0/6] i915: SSEU handling updates Matt Roper
2022-05-20 23:04 ` [Intel-gfx] " Matt Roper
2022-05-20 23:04 ` [PATCH v4 1/6] drm/i915/xehp: Use separate sseu init function Matt Roper
2022-05-20 23:04   ` [Intel-gfx] " Matt Roper
2022-05-20 23:04 ` [PATCH v4 2/6] drm/i915/xehp: Drop GETPARAM lookups of I915_PARAM_[SUB]SLICE_MASK Matt Roper
2022-05-20 23:04   ` [Intel-gfx] " Matt Roper
2022-05-20 23:04 ` [PATCH v4 3/6] drm/i915/sseu: Simplify gen11+ SSEU handling Matt Roper
2022-05-20 23:04   ` [Intel-gfx] " Matt Roper
2022-05-20 23:04 ` [PATCH v4 4/6] drm/i915/sseu: Don't try to store EU mask internally in UAPI format Matt Roper
2022-05-20 23:04   ` [Intel-gfx] " Matt Roper
2022-05-20 23:04 ` [PATCH v4 5/6] drm/i915/sseu: Disassociate internal subslice mask representation from uapi Matt Roper
2022-05-20 23:04   ` [Intel-gfx] " Matt Roper
2022-05-23  7:59   ` Tvrtko Ursulin
2022-05-23  7:59     ` [Intel-gfx] " Tvrtko Ursulin
2022-05-23 20:45   ` [PATCH v5 " Matt Roper
2022-05-23 20:45     ` [Intel-gfx] " Matt Roper
2022-06-01  8:18     ` Balasubramani Vivekanandan
2022-06-01  8:18       ` [Intel-gfx] " Balasubramani Vivekanandan
2022-06-01 14:40       ` Matt Roper
2022-06-01 14:40         ` [Intel-gfx] " Matt Roper
2022-05-20 23:04 ` [PATCH v4 6/6] drm/i915/pvc: Add SSEU changes Matt Roper
2022-05-20 23:04   ` [Intel-gfx] " Matt Roper
2022-05-20 23:46 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for i915: SSEU handling updates Patchwork
2022-05-20 23:46 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
2022-05-20 23:55 ` [Intel-gfx] ✗ Fi.CI.BAT: failure " Patchwork
2022-05-23 21:00 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for i915: SSEU handling updates (rev2) Patchwork
2022-05-23 21:00 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
2022-05-23 21:23 ` [Intel-gfx] ✗ Fi.CI.BAT: failure " Patchwork
2022-05-23 23:31   ` Matt Roper
2022-05-24 16:20     ` Vudum, Lakshminarayana
2022-05-24  2:51 ` Patchwork
2022-05-24  5:52 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2022-05-24  7:07 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
2022-05-24  7:32 ` [PATCH v4 0/6] i915: SSEU handling updates Tvrtko Ursulin
2022-05-24  7:32   ` [Intel-gfx] " Tvrtko Ursulin
2022-05-24 16:12 ` [Intel-gfx] ✓ Fi.CI.IGT: success for i915: SSEU handling updates (rev2) Patchwork
  -- strict thread matches above, loose matches on Subject: below --
2022-04-27 23:07 [PATCH 0/5] i915: SSEU handling updates Matt Roper
2022-04-28  0:42 ` [Intel-gfx] ✗ Fi.CI.SPARSE: warning for i915: SSEU handling updates (rev2) Patchwork

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.