• Matt Roper's avatar
    drm/i915/sseu: Disassociate internal subslice mask representation from uapi · b87d3901
    Matt Roper authored
    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: default avatarMatt Roper <matthew.d.roper@intel.com>
    Acked-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Reviewed-by: default avatarBalasubramani Vivekanandan <balasubramani.vivekanandan@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20220601150725.521468-6-matthew.d.roper@intel.com
    b87d3901
i915_query.c 14.2 KB