• Matt Roper's avatar
    drm/i915: Define multicast registers as a new type · 58bc2453
    Matt Roper authored
    Rather than treating multicast registers as 'i915_reg_t' let's define
    them as a completely new type.  This will allow the compiler to help us
    make sure we're using multicast-aware functions to operate on multicast
    registers.
    
    This plan does break down a bit in places where we're just maintaining
    heterogeneous lists of registers (e.g., various MMIO whitelists used by
    perf, GVT, etc.) rather than performing reads/writes.  We only really
    care about the offset in those cases, so for now we can "cast" the
    registers as non-MCR, leaving us with a list of i915_reg_t's, but we may
    want to look for better ways to store mixed collections of i915_reg_t
    and i915_mcr_reg_t in the future.
    
    v2:
     - Add TLB invalidation registers
    v3:
     - Make type checking of i915_mmio_reg_offset() stricter.  It will
       accept either i915_reg_t or i915_mcr_reg_t, but will now raise a
       compile error if any other type is passed, even if that type contains
       a 'reg' field.  (Jani)
     - Drop a ton of GVT changes; allowing i915_mmio_reg_offset() to take
       either an i915_reg_t or an i915_mcr_reg_t means that the huge lists
       of MMIO_D*() macros used in GVT will continue to work without
       modification.  We need only make changes to structures that have an
       explicit i915_reg_t in them now.
    
    Cc: Jani Nikula <jani.nikula@linux.intel.com>
    Signed-off-by: default avatarMatt Roper <matthew.d.roper@intel.com>
    Reviewed-by: default avatarBalasubramani Vivekanandan <balasubramani.vivekanandan@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20221014230239.1023689-13-matthew.d.roper@intel.com
    58bc2453
intel_workarounds.c 90.2 KB