drm/xe: Fix xe_mmio_rmw32 operation
xe_mmio_rmw32 was failing to invert the passed in mask, resulting in a register update that wasn't the expected RMW operation. Fortunately the impact of this mistake was limited, since this function isn't heavily used in Xe right now; this will mostly fix some GuC PM interrupt unmasking. v2: - Rename parameters as 'clr' and 'set' to clarify semantics. (Lucas) Cc: Lucas De Marchi <lucas.demarchi@intel.com> Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com> Link: https://lore.kernel.org/r/20230421145006.10940-1-matthew.d.roper@intel.com Signed-off-by: Matt Roper <matthew.d.roper@intel.com> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
This commit is contained in:
parent
7500477ded
commit
d33dc1dc29
@ -42,13 +42,13 @@ static inline u32 xe_mmio_read32(struct xe_gt *gt, u32 reg)
|
||||
return readl(gt->mmio.regs + reg);
|
||||
}
|
||||
|
||||
static inline u32 xe_mmio_rmw32(struct xe_gt *gt, u32 reg, u32 mask,
|
||||
u32 val)
|
||||
static inline u32 xe_mmio_rmw32(struct xe_gt *gt, u32 reg, u32 clr,
|
||||
u32 set)
|
||||
{
|
||||
u32 old, reg_val;
|
||||
|
||||
old = xe_mmio_read32(gt, reg);
|
||||
reg_val = (old & mask) | val;
|
||||
reg_val = (old & ~clr) | set;
|
||||
xe_mmio_write32(gt, reg, reg_val);
|
||||
|
||||
return old;
|
||||
|
Loading…
x
Reference in New Issue
Block a user