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.wentl...@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
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to