Commit 9fa81f91 authored by Lucas De Marchi's avatar Lucas De Marchi Committed by Rodrigo Vivi

drm/xe/mmio: Account for GSI offset when checking ranges

Change xe_mmio_in_range() to use the same logic to account for the GT's
adj_offset as the read and write functions. This is needed when checking
ranges for the MCR registers if the GT has an offset to adjust.
Reviewed-by: default avatarMatt Roper <matthew.d.roper@intel.com>
Link: https://lore.kernel.org/r/20230908225227.1276610-1-lucas.demarchi@intel.comSigned-off-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
parent 9e6fe003
...@@ -448,7 +448,7 @@ static bool xe_gt_mcr_get_nonterminated_steering(struct xe_gt *gt, ...@@ -448,7 +448,7 @@ static bool xe_gt_mcr_get_nonterminated_steering(struct xe_gt *gt,
continue; continue;
for (int i = 0; gt->steering[type].ranges[i].end > 0; i++) { for (int i = 0; gt->steering[type].ranges[i].end > 0; i++) {
if (xe_mmio_in_range(&gt->steering[type].ranges[i], reg)) { if (xe_mmio_in_range(gt, &gt->steering[type].ranges[i], reg)) {
*group = gt->steering[type].group_target; *group = gt->steering[type].group_target;
*instance = gt->steering[type].instance_target; *instance = gt->steering[type].instance_target;
return true; return true;
...@@ -459,7 +459,7 @@ static bool xe_gt_mcr_get_nonterminated_steering(struct xe_gt *gt, ...@@ -459,7 +459,7 @@ static bool xe_gt_mcr_get_nonterminated_steering(struct xe_gt *gt,
implicit_ranges = gt->steering[IMPLICIT_STEERING].ranges; implicit_ranges = gt->steering[IMPLICIT_STEERING].ranges;
if (implicit_ranges) if (implicit_ranges)
for (int i = 0; implicit_ranges[i].end > 0; i++) for (int i = 0; implicit_ranges[i].end > 0; i++)
if (xe_mmio_in_range(&implicit_ranges[i], reg)) if (xe_mmio_in_range(gt, &implicit_ranges[i], reg))
return false; return false;
/* /*
......
...@@ -127,9 +127,13 @@ static inline int xe_mmio_wait32(struct xe_gt *gt, struct xe_reg reg, u32 mask, ...@@ -127,9 +127,13 @@ static inline int xe_mmio_wait32(struct xe_gt *gt, struct xe_reg reg, u32 mask,
int xe_mmio_ioctl(struct drm_device *dev, void *data, int xe_mmio_ioctl(struct drm_device *dev, void *data,
struct drm_file *file); struct drm_file *file);
static inline bool xe_mmio_in_range(const struct xe_mmio_range *range, static inline bool xe_mmio_in_range(const struct xe_gt *gt,
const struct xe_mmio_range *range,
struct xe_reg reg) struct xe_reg reg)
{ {
if (reg.addr < gt->mmio.adj_limit)
reg.addr += gt->mmio.adj_offset;
return range && reg.addr >= range->start && reg.addr <= range->end; return range && reg.addr >= range->start && reg.addr <= range->end;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment