drm/i915/power: fix size for for_each_set_bit() in abox iteration

commit cfa7b76597 upstream.

for_each_set_bit() expects size to be in bits, not bytes. The abox mask
iteration uses bytes, but it works by coincidence, because the local
variable holding the mask is unsigned long, and the mask only ever has
bit 2 as the highest bit. Using a smaller type could lead to subtle and
very hard to track bugs.

Fixes: 62afef2811 ("drm/i915/rkl: RKL uses ABOX0 for pixel transfers")
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Matt Roper <matthew.d.roper@intel.com>
Cc: stable@vger.kernel.org # v5.9+
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Link: https://lore.kernel.org/r/20250905104149.1144751-1-jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
(cherry picked from commit 7ea3baa6efe4bb93d11e1c0e6528b1468d7debf6)
Signed-off-by: Tvrtko Ursulin <tursulin@ursulin.net>
[ adapted struct intel_display *display parameters to struct drm_i915_private *dev_priv ]
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Jani Nikula 2025-09-05 13:41:49 +03:00 committed by Greg Kroah-Hartman
parent b9f9035d94
commit 215ea32e1f
1 changed files with 3 additions and 3 deletions

View File

@ -1150,7 +1150,7 @@ static void icl_mbus_init(struct drm_i915_private *dev_priv)
if (DISPLAY_VER(dev_priv) == 12) if (DISPLAY_VER(dev_priv) == 12)
abox_regs |= BIT(0); abox_regs |= BIT(0);
for_each_set_bit(i, &abox_regs, sizeof(abox_regs)) for_each_set_bit(i, &abox_regs, BITS_PER_TYPE(abox_regs))
intel_de_rmw(dev_priv, MBUS_ABOX_CTL(i), mask, val); intel_de_rmw(dev_priv, MBUS_ABOX_CTL(i), mask, val);
} }
@ -1603,11 +1603,11 @@ static void tgl_bw_buddy_init(struct drm_i915_private *dev_priv)
if (table[config].page_mask == 0) { if (table[config].page_mask == 0) {
drm_dbg(&dev_priv->drm, drm_dbg(&dev_priv->drm,
"Unknown memory configuration; disabling address buddy logic.\n"); "Unknown memory configuration; disabling address buddy logic.\n");
for_each_set_bit(i, &abox_mask, sizeof(abox_mask)) for_each_set_bit(i, &abox_mask, BITS_PER_TYPE(abox_mask))
intel_de_write(dev_priv, BW_BUDDY_CTL(i), intel_de_write(dev_priv, BW_BUDDY_CTL(i),
BW_BUDDY_DISABLE); BW_BUDDY_DISABLE);
} else { } else {
for_each_set_bit(i, &abox_mask, sizeof(abox_mask)) { for_each_set_bit(i, &abox_mask, BITS_PER_TYPE(abox_mask)) {
intel_de_write(dev_priv, BW_BUDDY_PAGE_MASK(i), intel_de_write(dev_priv, BW_BUDDY_PAGE_MASK(i),
table[config].page_mask); table[config].page_mask);