[PATCH] drm/amd/display: Fix warning about overflow
Michel Dänzer
michel at daenzer.net
Fri Oct 13 08:08:45 UTC 2017
On 12/10/17 07:54 PM, Harry Wentland wrote:
> We're overflowing the last bit. Cast it explicitly
>
> Signed-off-by: Harry Wentland <harry.wentland at amd.com>
> ---
> drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c b/drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c
> index cb94e18cc455..715dc789bb24 100644
> --- a/drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c
> +++ b/drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c
> @@ -1047,7 +1047,7 @@ static enum bp_result get_embedded_panel_info_v2_1(
> lvds->lcd_timing.miscinfo & ATOM_V_REPLICATIONBY2;
> info->lcd_timing.misc_info.COMPOSITE_SYNC =
> lvds->lcd_timing.miscinfo & ATOM_COMPOSITESYNC;
> - info->lcd_timing.misc_info.INTERLACE =
> + info->lcd_timing.misc_info.INTERLACE = (uint32_t)
> lvds->lcd_timing.miscinfo & ATOM_INTERLACE;
I wasn't sure offhand, so I had to write a little test program, but it
looks like this doesn't work as intended:
(lvds->lcd_timing.miscinfo & ATOM_INTERLACE) is an unsigned 16-bit
value, which is either 0x80 (ATOM_INTERLACE) or 0. Assigning that to the
unsigned 1-bit field info->lcd_timing.misc_info.INTERLACE always results
in 0. Casting the 16-bit value to 32 bits doesn't change that.
I think what's intended here is something like
info->lcd_timing.misc_info.INTERLACE =
(lvds->lcd_timing.miscinfo & ATOM_INTERLACE) != 0;
Looks like there's the same problem with other fields of
info->lcd_timing.misc_info above.
Another possible solution is making the fields of struct misc_info bool
instead of uint32_t.
--
Earthling Michel Dänzer | http://www.amd.com
Libre software enthusiast | Mesa and X developer
More information about the amd-gfx
mailing list