Commit d6683bbe authored by Matt Roper's avatar Matt Roper

drm/i915/xelpmp: Consider GSI offset when doing MCR lookups

MCR range tables use the final MMIO offset of a register (including the
0x380000 GSI offset when applicable).  Since the i915_mcr_reg_t passed
as a parameter during steering lookup does not include the GSI offset,
we need to add it back in for GSI registers before searching the tables.

Fixes: a7ec65fc ("drm/i915/xelpmp: Add multicast steering for media GT")
Signed-off-by: default avatarMatt Roper <matthew.d.roper@intel.com>
Reviewed-by: default avatarRadhakrishna Sripada <radhakrishna.sripada@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230214001906.1477370-1-matthew.d.roper@intel.com
parent 4583d6be
...@@ -561,12 +561,15 @@ static bool reg_needs_read_steering(struct intel_gt *gt, ...@@ -561,12 +561,15 @@ static bool reg_needs_read_steering(struct intel_gt *gt,
i915_mcr_reg_t reg, i915_mcr_reg_t reg,
enum intel_steering_type type) enum intel_steering_type type)
{ {
const u32 offset = i915_mmio_reg_offset(reg); u32 offset = i915_mmio_reg_offset(reg);
const struct intel_mmio_range *entry; const struct intel_mmio_range *entry;
if (likely(!gt->steering_table[type])) if (likely(!gt->steering_table[type]))
return false; return false;
if (IS_GSI_REG(offset))
offset += gt->uncore->gsi_offset;
for (entry = gt->steering_table[type]; entry->end; entry++) { for (entry = gt->steering_table[type]; entry->end; entry++) {
if (offset >= entry->start && offset <= entry->end) if (offset >= entry->start && offset <= entry->end)
return true; return true;
......
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