• Matt Roper's avatar
    drm/xe/xe2: Add MCR register steering for primary GT · 5c82000f
    Matt Roper authored
    Xe2 uses the same steering control register and steering semaphore
    register as MTL.  As with recent platforms, group/instance 0,0 is
    sufficient to target a non-terminated instance for most classes of MCR
    registers; the only types of ranges that need to consider platform
    fusing to find a non-terminated instance are SLICE/DSS ranges and a new
    SQIDI_PSMI type of range.
    
    Note that the range of valid bits in XE2_NODE_ENABLE_MASK may be reduced
    for some Xe2 SKUs.  However the lowest bits are always valid and only
    the lowest instance is obtained via __ffs(), so there's no need to
    complicate the masking with extra platform/subplatform checks.
    
    Also note that Wa_14017387313 suggests skipping MCR lock acquisition
    around GAM and GAMWKR registers to prevent MCR register accesses in an
    interrupt handler from deadlocking when the steering semaphore is
    already held outside the interrupt context.  At this time Xe never
    issues MCR accesses from within an interrupt handler so the workaround
    is not currently needed.
    
    v2:
      - [0x008700-0x0087FF] range to extend up to 0x887F (Matt Attwood)
      - [0x00EF00-0x00F4FF] -> [0x00F000, 0xFFFF] to follow latest
        bspec version (Bala)
    
    Bspec: 71185
    Signed-off-by: default avatarMatt Roper <matthew.d.roper@intel.com>
    Signed-off-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
    Reviewed-by: default avatarBalasubramani Vivekanandan <balasubramani.vivekanandan@intel.com>
    Reviewed-by: default avatarMatt Atwood <matthew.s.atwood@intel.com>
    Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
    5c82000f
xe_gt_mcr.c 21.5 KB