[radeon-alex:drm-next-4.21-wip 113/125] drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_abm.c:86 calculate_16_bit_backlight_from_pwm() warn: should 'bl_pwm << (1 + bl_int_count)' be a 64 bit type?

Dan Carpenter dan.carpenter at oracle.com
Wed Oct 31 17:53:40 UTC 2018


tree:   git://people.freedesktop.org/~agd5f/linux.git drm-next-4.21-wip
head:   6830ffcb15a5bae3f031734b75b11a5f489a52bf
commit: 6459eb8ee95150ffbdfcd0c9325945be80f98cf8 [113/125] drm/amd/display: Expand dc to use 16.16 bit backlight

smatch warnings:
drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_abm.c:86 calculate_16_bit_backlight_from_pwm() warn: should 'bl_pwm << (1 + bl_int_count)' be a 64 bit type?

git remote add radeon-alex git://people.freedesktop.org/~agd5f/linux.git
git remote update radeon-alex
git checkout 6459eb8ee95150ffbdfcd0c9325945be80f98cf8
vim +86 drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_abm.c

aa7397df Amy Zhang      2017-05-12   55  
5e7773a2 Anthony Koo    2017-01-23   56  
6459eb8e Anthony Koo    2018-10-12   57  static unsigned int calculate_16_bit_backlight_from_pwm(struct dce_abm *abm_dce)
5e7773a2 Anthony Koo    2017-01-23   58  {
5e7773a2 Anthony Koo    2017-01-23   59  	uint64_t current_backlight;
5e7773a2 Anthony Koo    2017-01-23   60  	uint32_t round_result;
5e7773a2 Anthony Koo    2017-01-23   61  	uint32_t pwm_period_cntl, bl_period, bl_int_count;
5e7773a2 Anthony Koo    2017-01-23   62  	uint32_t bl_pwm_cntl, bl_pwm, fractional_duty_cycle_en;
5e7773a2 Anthony Koo    2017-01-23   63  	uint32_t bl_period_mask, bl_pwm_mask;
5e7773a2 Anthony Koo    2017-01-23   64  
5e7773a2 Anthony Koo    2017-01-23   65  	pwm_period_cntl = REG_READ(BL_PWM_PERIOD_CNTL);
5e7773a2 Anthony Koo    2017-01-23   66  	REG_GET(BL_PWM_PERIOD_CNTL, BL_PWM_PERIOD, &bl_period);
5e7773a2 Anthony Koo    2017-01-23   67  	REG_GET(BL_PWM_PERIOD_CNTL, BL_PWM_PERIOD_BITCNT, &bl_int_count);
5e7773a2 Anthony Koo    2017-01-23   68  
5e7773a2 Anthony Koo    2017-01-23   69  	bl_pwm_cntl = REG_READ(BL_PWM_CNTL);
5e7773a2 Anthony Koo    2017-01-23   70  	REG_GET(BL_PWM_CNTL, BL_ACTIVE_INT_FRAC_CNT, (uint32_t *)(&bl_pwm));
5e7773a2 Anthony Koo    2017-01-23   71  	REG_GET(BL_PWM_CNTL, BL_PWM_FRACTIONAL_EN, &fractional_duty_cycle_en);
5e7773a2 Anthony Koo    2017-01-23   72  
5e7773a2 Anthony Koo    2017-01-23   73  	if (bl_int_count == 0)
5e7773a2 Anthony Koo    2017-01-23   74  		bl_int_count = 16;
5e7773a2 Anthony Koo    2017-01-23   75  
5e7773a2 Anthony Koo    2017-01-23   76  	bl_period_mask = (1 << bl_int_count) - 1;
5e7773a2 Anthony Koo    2017-01-23   77  	bl_period &= bl_period_mask;
5e7773a2 Anthony Koo    2017-01-23   78  
5e7773a2 Anthony Koo    2017-01-23   79  	bl_pwm_mask = bl_period_mask << (16 - bl_int_count);
5e7773a2 Anthony Koo    2017-01-23   80  
5e7773a2 Anthony Koo    2017-01-23   81  	if (fractional_duty_cycle_en == 0)
5e7773a2 Anthony Koo    2017-01-23   82  		bl_pwm &= bl_pwm_mask;
5e7773a2 Anthony Koo    2017-01-23   83  	else
5e7773a2 Anthony Koo    2017-01-23   84  		bl_pwm &= 0xFFFF;
5e7773a2 Anthony Koo    2017-01-23   85  
5e7773a2 Anthony Koo    2017-01-23  @86  	current_backlight = bl_pwm << (1 + bl_int_count);
                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Smatch is not clever enough to know that this doesn't wrap and
current_backlight is a u64 so it generates a warning.

5e7773a2 Anthony Koo    2017-01-23   87  
5e7773a2 Anthony Koo    2017-01-23   88  	if (bl_period == 0)
5e7773a2 Anthony Koo    2017-01-23   89  		bl_period = 0xFFFF;
5e7773a2 Anthony Koo    2017-01-23   90  
ca709397 Harry Wentland 2017-02-06   91  	current_backlight = div_u64(current_backlight, bl_period);
5e7773a2 Anthony Koo    2017-01-23   92  	current_backlight = (current_backlight + 1) >> 1;
5e7773a2 Anthony Koo    2017-01-23   93  
5e7773a2 Anthony Koo    2017-01-23   94  	current_backlight = (uint64_t)(current_backlight) * bl_period;
5e7773a2 Anthony Koo    2017-01-23   95  
5e7773a2 Anthony Koo    2017-01-23   96  	round_result = (uint32_t)(current_backlight & 0xFFFFFFFF);
5e7773a2 Anthony Koo    2017-01-23   97  
5e7773a2 Anthony Koo    2017-01-23   98  	round_result = (round_result >> (bl_int_count-1)) & 1;
5e7773a2 Anthony Koo    2017-01-23   99  
5e7773a2 Anthony Koo    2017-01-23  100  	current_backlight >>= bl_int_count;
5e7773a2 Anthony Koo    2017-01-23  101  	current_backlight += round_result;
5e7773a2 Anthony Koo    2017-01-23  102  
5e7773a2 Anthony Koo    2017-01-23  103  	return (uint32_t)(current_backlight);
5e7773a2 Anthony Koo    2017-01-23  104  }
5e7773a2 Anthony Koo    2017-01-23  105  


---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation


More information about the dri-devel mailing list