Skip to content

drm/xe/mcr: Add MCR framework and operations

Matt Roper requested to merge mattrope/kernel:xe_mcr into xe

MCR on Xe works in a similar manner to the MCR redesign we recently completed on i915: multicast registers will be defined as their own type to allow the compile to catch non-MCR operations used on MCR registers and vice-versa. There are a couple notable differences though:

  • We perform explicit steering on all MCR types in Xe and don't try to get fancy with implicit steering. With the direction the hardware is going (all MCR accesses need to be protected by a hardware semaphore), implicit steering isn't possible at all on MTL and beyond and the extra complexity that implicit steering brings on the pre-MTL platforms isn't really worth the extra complexity.

  • We calculate a non-terminated group/instance target for each MCR class at initialization and just re-use that directly at runtime rather than re-calculating a non-terminated target every time an 'mcr_read_any' operation is performed.

TODO: At the moment we haven't finalized how registers in general will be defined for Xe and we're still importing i915's register files. As such, these operations work on "i915_mcr_reg_t" at the moment, but this is expected to change down the road.

Initialization of each platform's MCR ranges, and the rules for finding non-terminated targets will be added in the next patch.

Signed-off-by: Matt Roper matthew.d.roper@intel.com

References: Add MCR support (#140 - closed)

Merge request reports