]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/xe/debugfs: Correct printing of register whitelist ranges
authorMatt Roper <matthew.d.roper@intel.com>
Wed, 8 Apr 2026 22:27:44 +0000 (15:27 -0700)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Wed, 29 Apr 2026 15:28:24 +0000 (11:28 -0400)
The register-save-restore debugfs prints whitelist entries as offset
ranges.  E.g.,

        REG[0x39319c-0x39319f]: allow read access

for a single dword-sized register.  However the GENMASK value used to
set the lower bits to '1' for the upper bound of the whitelist range
incorrectly included one more bit than it should have, causing the
whitelist ranges to sometimes appear twice as large as they really were.
For example,

        REG[0x6210-0x6217]: allow rw access

was also intended to be a single dword-sized register whitelist (with a
range 0x6210-0x6213) but was printed incorrectly as a qword-sized range
because one too many bits was flipped on.  Similar 'off by one' logic
was applied when printing 4-dword register ranges and 64-dword register
ranges as well.

Correct the GENMASK logic to print these ranges in debugfs correctly.
No impact outside of correcting the misleading debugfs output.

Fixes: d855d2246ea6 ("drm/xe: Print whitelist while applying")
Reviewed-by: Stuart Summers <stuart.summers@intel.com>
Link: https://patch.msgid.link/20260408-regsr_wl_range-v1-1-e9a28c8b4264@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
(cherry picked from commit 1a2a722ff96749734a5585dfe7f0bea7719caa8b)
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
drivers/gpu/drm/xe/xe_reg_whitelist.c

index 80577e4b7437ca2e65d1a94f6869446a3de0b4b0..8cc313182968d354f29b16629ce2f44bd7395f05 100644 (file)
@@ -226,7 +226,7 @@ void xe_reg_whitelist_print_entry(struct drm_printer *p, unsigned int indent,
        }
 
        range_start = reg & REG_GENMASK(25, range_bit);
-       range_end = range_start | REG_GENMASK(range_bit, 0);
+       range_end = range_start | REG_GENMASK(range_bit - 1, 0);
 
        switch (val & RING_FORCE_TO_NONPRIV_ACCESS_MASK) {
        case RING_FORCE_TO_NONPRIV_ACCESS_RW: