[PATCH v2 1/2] drm/i915/display: Use explicit cast in POWER_DOMAIN_*() macros
Gustavo Sousa
gustavo.sousa at intel.com
Wed Feb 12 18:44:26 UTC 2025
Quoting Gustavo Sousa (2025-02-12 14:59:28-03:00)
>Quoting Ville Syrjälä (2025-02-12 14:52:19-03:00)
>>On Wed, Feb 12, 2025 at 02:43:16PM -0300, Gustavo Sousa wrote:
>>> Let the compiler know that we are intetionally using a different enum
>>> type to perform arithmetic with enum intel_display_power_domain in the
>>> POWER_DOMAIN_*(). Do that by explicitly casting the macro argument to
>>> int.
>>>
>>> Reported-by: kernel test robot <lkp at intel.com>
>>> Closes: https://lore.kernel.org/oe-kbuild-all/202502120809.XfmcqkBD-lkp@intel.com/
>>> Signed-off-by: Gustavo Sousa <gustavo.sousa at intel.com>
>>> ---
>>> drivers/gpu/drm/i915/display/intel_display_power.h | 6 +++---
>>> 1 file changed, 3 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/i915/display/intel_display_power.h b/drivers/gpu/drm/i915/display/intel_display_power.h
>>> index a3a5c1be8bab..3caa3f517a32 100644
>>> --- a/drivers/gpu/drm/i915/display/intel_display_power.h
>>> +++ b/drivers/gpu/drm/i915/display/intel_display_power.h
>>> @@ -117,12 +117,12 @@ enum intel_display_power_domain {
>>> POWER_DOMAIN_INVALID = POWER_DOMAIN_NUM,
>>> };
>>>
>>> -#define POWER_DOMAIN_PIPE(pipe) ((pipe) + POWER_DOMAIN_PIPE_A)
>>> +#define POWER_DOMAIN_PIPE(pipe) ((int)(pipe) + POWER_DOMAIN_PIPE_A)
>>> #define POWER_DOMAIN_PIPE_PANEL_FITTER(pipe) \
>>> - ((pipe) + POWER_DOMAIN_PIPE_PANEL_FITTER_A)
>>> + ((int)(pipe) + POWER_DOMAIN_PIPE_PANEL_FITTER_A)
>>> #define POWER_DOMAIN_TRANSCODER(tran) \
>>> ((tran) == TRANSCODER_EDP ? POWER_DOMAIN_TRANSCODER_EDP : \
>>> - (tran) + POWER_DOMAIN_TRANSCODER_A)
>>> + (int)(tran) + POWER_DOMAIN_TRANSCODER_A)
>>
>>I've generally gone for the
>>POWER_DOMAIN_TRANSCODER_A + (tran) - TRANSCODER_A
>>form for such things, to also make sure it works
>>even if TRANSCODER_A isn't 0 anymore.
>>Does that avoid the warning as well?
>
>Hm... That's a good idea; and I think it might avoid the warning indeed
>(maybe we would need parentheses around (tran) - TRANSCODER_A).
I did a quick test and this also took care of removing the clang warning
in my environment:
diff --git a/drivers/gpu/drm/i915/display/intel_display_power.h b/drivers/gpu/drm/i915/display/intel_display_power.h
index e354051e8982..d46b35dbe018 100644
--- a/drivers/gpu/drm/i915/display/intel_display_power.h
+++ b/drivers/gpu/drm/i915/display/intel_display_power.h
@@ -123,7 +123,7 @@ enum intel_display_power_domain {
((enum intel_display_power_domain)((int)(pipe) + POWER_DOMAIN_PIPE_PANEL_FITTER_A))
#define POWER_DOMAIN_TRANSCODER(tran) \
((tran) == TRANSCODER_EDP ? POWER_DOMAIN_TRANSCODER_EDP : \
- (enum intel_display_power_domain)((int)(tran) + POWER_DOMAIN_TRANSCODER_A))
+ (enum intel_display_power_domain)(POWER_DOMAIN_TRANSCODER_A + ((tran) - TRANSCODER_A)))
struct intel_power_domain_mask {
DECLARE_BITMAP(bits, POWER_DOMAIN_NUM);
The parentheses around (tran) - TRANSCODER_A were indeed necessary,
probably for the compiler to see that as an int expression.
We can get rid of the parentheses if we do (tran) - TRANSCODER_A before
adding POWER_DOMAIN_TRANSCODER_A:
diff --git a/drivers/gpu/drm/i915/display/intel_display_power.h b/drivers/gpu/drm/i915/display/intel_display_power.h
index e354051e8982..b15eb4fd5062 100644
--- a/drivers/gpu/drm/i915/display/intel_display_power.h
+++ b/drivers/gpu/drm/i915/display/intel_display_power.h
@@ -123,7 +123,7 @@ enum intel_display_power_domain {
((enum intel_display_power_domain)((int)(pipe) + POWER_DOMAIN_PIPE_PANEL_FITTER_A))
#define POWER_DOMAIN_TRANSCODER(tran) \
((tran) == TRANSCODER_EDP ? POWER_DOMAIN_TRANSCODER_EDP : \
- (enum intel_display_power_domain)((int)(tran) + POWER_DOMAIN_TRANSCODER_A))
+ (enum intel_display_power_domain)((tran) - TRANSCODER_A + POWER_DOMAIN_TRANSCODER_A))
struct intel_power_domain_mask {
DECLARE_BITMAP(bits, POWER_DOMAIN_NUM);
I'm tending more toward the second alternative.
--
Gustavo Sousa
>
>>
>>Maybe these should even be functions rather than macros?
>
>Yeah. I actually considered this possibility, but went with the macros
>to keep the change simple.
>
>If that's welcome, I could go ahead with turning those macros into
>static inline functions.
>
>--
>Gustavo Sousa
>
>>
>>>
>>> struct intel_power_domain_mask {
>>> DECLARE_BITMAP(bits, POWER_DOMAIN_NUM);
>>> --
>>> 2.48.1
>>
>>--
>>Ville Syrjälä
>>Intel
More information about the Intel-xe
mailing list