Am 13.10.2017 um 10:08 schrieb Michel Dänzer:
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.
While your approach works as well IIRC converting an arbitrary value
into a boolean is usually done with "!!".
E.g. that should look like:
info->lcd_timing.misc_info.INTERLACE =
!!(lvds->lcd_timing.miscinfo & ATOM_INTERLACE);
Regards,
Christian.
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx