• Lucas De Marchi's avatar
    drm/xe: Introduce xe_reg/xe_reg_mcr · 36e22be4
    Lucas De Marchi authored
    Stop using i915 types for registers. Use our own types. Differently from
    i915, this will keep under the register definition the knowledge for the
    different types of registers. For now, the "flags"/"options" are mcr and
    masked, although only the former is being used.
    
    Additionally MCR registers have their own type. The only place that
    should really look inside a xe_mcr_reg_t is that code dealing with the
    steering and using other APIs when the register is MCR has been a source
    of problem in the past.
    
    Most of the driver is agnostic to the register differences since they
    either use the definition from the header or already call the correct
    MCR_REG()/_MMIO() macros. By embeding the struct xe_reg inside the
    struct it's also possible to guarantee the compiler will break if
    using RANDOM_MCR_REG.reg is attempted, since now the u32 is inside the
    inner struct.
    
    v2:
      - Deep a dedicated type for MCR registers to avoid misuse
        (Matt Roper, Jani)
      - Drop the typedef and just use a struct since it's not an opaque type
        (Jani)
      - Add more kernel-doc
    v3:
      - Use only 22 bits for the register address since all the platforms
        supported so far have only 4MB of MMIO per tile  (Matt Roper)
    Reviewed-by: default avatarMatt Roper <matthew.d.roper@intel.com>
    Link: https://lore.kernel.org/r/20230427223256.1432787-7-lucas.demarchi@intel.comSigned-off-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
    Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
    36e22be4
xe_reg_defs.h 2.99 KB