| From 7bbf969e3d7e9177ffc68eda450bc3d4b533d1a5 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 31 Oct 2025 16:02:25 +0300 |
| Subject: drm/amd/display: Fix logical vs bitwise bug in |
| get_embedded_panel_info_v2_1() |
| |
| From: Dan Carpenter <dan.carpenter@linaro.org> |
| |
| [ Upstream commit 1a79482699b4d1e43948d14f0c7193dc1dcad858 ] |
| |
| The .H_SYNC_POLARITY and .V_SYNC_POLARITY variables are 1 bit bitfields |
| of a u32. The ATOM_HSYNC_POLARITY define is 0x2 and the |
| ATOM_VSYNC_POLARITY is 0x4. When we do a bitwise negate of 0, 2, or 4 |
| then the last bit is always 1 so this code always sets .H_SYNC_POLARITY |
| and .V_SYNC_POLARITY to true. |
| |
| This code is instead intended to check if the ATOM_HSYNC_POLARITY or |
| ATOM_VSYNC_POLARITY flags are set and reverse the result. In other |
| words, it's supposed to be a logical negate instead of a bitwise negate. |
| |
| Fixes: ae79c310b1a6 ("drm/amd/display: Add DCE12 bios parser support") |
| Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org> |
| Reviewed-by: Alex Hung <alex.hung@amd.com> |
| Signed-off-by: Alex Deucher <alexander.deucher@amd.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c | 8 ++++---- |
| 1 file changed, 4 insertions(+), 4 deletions(-) |
| |
| 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 9dd41eaf32cb5..3cc61bb6f8967 100644 |
| --- a/drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c |
| +++ b/drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c |
| @@ -961,10 +961,10 @@ static enum bp_result get_embedded_panel_info_v2_1( |
| /* not provided by VBIOS */ |
| info->lcd_timing.misc_info.HORIZONTAL_CUT_OFF = 0; |
| |
| - info->lcd_timing.misc_info.H_SYNC_POLARITY = ~(uint32_t) (lvds->lcd_timing.miscinfo |
| - & ATOM_HSYNC_POLARITY); |
| - info->lcd_timing.misc_info.V_SYNC_POLARITY = ~(uint32_t) (lvds->lcd_timing.miscinfo |
| - & ATOM_VSYNC_POLARITY); |
| + info->lcd_timing.misc_info.H_SYNC_POLARITY = !(lvds->lcd_timing.miscinfo & |
| + ATOM_HSYNC_POLARITY); |
| + info->lcd_timing.misc_info.V_SYNC_POLARITY = !(lvds->lcd_timing.miscinfo & |
| + ATOM_VSYNC_POLARITY); |
| |
| /* not provided by VBIOS */ |
| info->lcd_timing.misc_info.VERTICAL_CUT_OFF = 0; |
| -- |
| 2.51.0 |
| |