• Matt Roper's avatar
    drm/xe/mcr: Try to derive dss_per_grp from hwconfig attributes · fc7c7498
    Matt Roper authored
    When steering MCR register ranges of type "DSS," the group_id and
    instance_id values are calculated by dividing the DSS pool according to
    the size of a gslice or cslice, depending on the platform.  These values
    haven't changed much on past platforms, so we've been able to hardcode
    the proper divisor so far.  However the layout may not be so fixed on
    future platforms so the proper, future-proof way to determine this is by
    using some of the attributes from the GuC's hwconfig table.  The
    hwconfig has two attributes reflecting the architectural maximum slice
    and subslice counts (i.e., before any fusing is considered) that can be
    used for the purposes of calculating MCR steering targets.
    
    If the hwconfig is lacking the necessary values (which should only be
    possible on older platforms before these attributes were added), we can
    still fall back to the old hardcoded values.  Going forward the hwconfig
    is expected to always provide the information we need on newer
    platforms, and any failure to do so will be considered a bug in the
    firmware that will prevent us from switching to the buggy firmware
    release.
    
    It's worth noting that over time GuC's hwconfig has provided a couple
    different keys with similar-sounding descriptions.  For our purposes
    here, we only trust the newer key "70" which has supplanted the
    similarly-named key "2" that existed on older platforms.
    
    Bspec: 73210
    Signed-off-by: default avatarMatt Roper <matthew.d.roper@intel.com>
    Reviewed-by: default avatarJonathan Cavitt <jonathan.cavitt@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240815172602.2729146-4-matthew.d.roper@intel.com
    fc7c7498
xe_gt_mcr.c 24.8 KB