drm/i915: Use a macro to express the range of valid gens for reg_read
The reg_read whitelist has a gen bitmask to code the gens we're allowing the register to be read on. Until now, it was a literal, but we can be a bit more expressive. To ease the review, a small test program: $ cat bit-range.c #include <stdio.h> #include <stdint.h> #define U32_C(x) x ## U #define GENMASK(h, l) (((U32_C(1) << ((h) - (l) + 1)) - 1) << (l)) #define GEN_RANGE(l, h) GENMASK(h, l) int main(int argc, char **argv) { printf("0x%08x\n", GEN_RANGE(1, 1)); printf("0x%08x\n", GEN_RANGE(1, 2)); printf("0x%08x\n", GEN_RANGE(4, 4)); printf("0x%08x\n", GEN_RANGE(4, 5)); printf("0x%08x\n", GEN_RANGE(1, 31)); printf("0x%08x\n", GEN_RANGE(4, 8)); return 0; } $ ./bit-range 0x00000002 0x00000006 0x00000010 0x00000030 0xfffffffe 0x000001f0 Signed-off-by: Damien Lespiau <damien.lespiau@intel.com> Reviewed-by: Jani Nikula <jani.nikula@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
adb4bd1233
commit
af76ae447d
|
@ -861,12 +861,15 @@ void intel_uncore_fini(struct drm_device *dev)
|
||||||
intel_uncore_forcewake_reset(dev, false);
|
intel_uncore_forcewake_reset(dev, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define GEN_RANGE(l, h) GENMASK(h, l)
|
||||||
|
|
||||||
static const struct register_whitelist {
|
static const struct register_whitelist {
|
||||||
uint64_t offset;
|
uint64_t offset;
|
||||||
uint32_t size;
|
uint32_t size;
|
||||||
uint32_t gen_bitmask; /* support gens, 0x10 for 4, 0x30 for 4 and 5, etc. */
|
/* supported gens, 0x10 for 4, 0x30 for 4 and 5, etc. */
|
||||||
|
uint32_t gen_bitmask;
|
||||||
} whitelist[] = {
|
} whitelist[] = {
|
||||||
{ RING_TIMESTAMP(RENDER_RING_BASE), 8, 0x1F0 },
|
{ RING_TIMESTAMP(RENDER_RING_BASE), 8, GEN_RANGE(4, 8) },
|
||||||
};
|
};
|
||||||
|
|
||||||
int i915_reg_read_ioctl(struct drm_device *dev,
|
int i915_reg_read_ioctl(struct drm_device *dev,
|
||||||
|
|
Loading…
Reference in New Issue