Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/i915: use REG_BIT on FW_BLC_SELF_* macros

Use REG_BIT() instead of open coding the shift in the FW_BLC_SELF_*
macro definitions to avoid potentially typing them as 'int'.

For example, this happens when we pass them to _MASKED_BIT_ENABLE(),
because of the typeof() construct there. When we pass 1 << 15 (the
FW_BLC_SELF_EN macro), we get typeof(1 << 15), which is 'int'. Then
the value becomes negative (-2147450880) and we try to assign it to a
'u32'.

In practice this is not a problem though, because when we try to
assign -2147450880 to the u32, that becomes 0x80008000, which was the
intended result.

Link: https://lore.kernel.org/intel-gfx/20250827111109.401604-1-luciano.coelho@intel.com/
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Andi Shyti <andi.shyti@linux.intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>

+3 -3
+3 -3
drivers/gpu/drm/i915/i915_reg.h
··· 412 412 #define FW_BLC _MMIO(0x20d8) 413 413 #define FW_BLC2 _MMIO(0x20dc) 414 414 #define FW_BLC_SELF _MMIO(0x20e0) /* 915+ only */ 415 - #define FW_BLC_SELF_EN_MASK (1 << 31) 416 - #define FW_BLC_SELF_FIFO_MASK (1 << 16) /* 945 only */ 417 - #define FW_BLC_SELF_EN (1 << 15) /* 945 only */ 415 + #define FW_BLC_SELF_EN_MASK REG_BIT(31) 416 + #define FW_BLC_SELF_FIFO_MASK REG_BIT(16) /* 945 only */ 417 + #define FW_BLC_SELF_EN REG_BIT(15) /* 945 only */ 418 418 #define MM_BURST_LENGTH 0x00700000 419 419 #define MM_FIFO_WATERMARK 0x0001F000 420 420 #define LM_BURST_LENGTH 0x00000700