From ee73a3644c79cdc5d6fe48bcae45184bb73bbe94 Mon Sep 17 00:00:00 2001 From: Ksawlii Date: Sun, 24 Nov 2024 00:23:26 +0100 Subject: [PATCH] Revert "drm/radeon: properly handle vbios fake edid sizing" This reverts commit 103f1f860c222427eb15a8ee9f01601f10fc3225. --- drivers/gpu/drm/radeon/radeon_atombios.c | 29 +++++++++++------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c index b5ce63ca3..60197257b 100755 --- a/drivers/gpu/drm/radeon/radeon_atombios.c +++ b/drivers/gpu/drm/radeon/radeon_atombios.c @@ -1720,29 +1720,26 @@ struct radeon_encoder_atom_dig *radeon_atombios_get_lvds_info(struct fake_edid_record = (ATOM_FAKE_EDID_PATCH_RECORD *)record; if (fake_edid_record->ucFakeEDIDLength) { struct edid *edid; - int edid_size; - - if (fake_edid_record->ucFakeEDIDLength == 128) - edid_size = fake_edid_record->ucFakeEDIDLength; - else - edid_size = fake_edid_record->ucFakeEDIDLength * 128; - edid = kmemdup(&fake_edid_record->ucFakeEDIDString[0], - edid_size, GFP_KERNEL); + int edid_size = + max((int)EDID_LENGTH, (int)fake_edid_record->ucFakeEDIDLength); + edid = kmalloc(edid_size, GFP_KERNEL); if (edid) { + memcpy((u8 *)edid, (u8 *)&fake_edid_record->ucFakeEDIDString[0], + fake_edid_record->ucFakeEDIDLength); + if (drm_edid_is_valid(edid)) { rdev->mode_info.bios_hardcoded_edid = edid; rdev->mode_info.bios_hardcoded_edid_size = edid_size; - } else { + } else kfree(edid); - } } - record += struct_size(fake_edid_record, - ucFakeEDIDString, - edid_size); - } else { - /* empty fake edid record must be 3 bytes long */ - record += sizeof(ATOM_FAKE_EDID_PATCH_RECORD) + 1; } + record += fake_edid_record->ucFakeEDIDLength ? + struct_size(fake_edid_record, + ucFakeEDIDString, + fake_edid_record->ucFakeEDIDLength) : + /* empty fake edid record must be 3 bytes long */ + sizeof(ATOM_FAKE_EDID_PATCH_RECORD) + 1; break; case LCD_PANEL_RESOLUTION_RECORD_TYPE: panel_res_record = (ATOM_PANEL_RESOLUTION_PATCH_RECORD *)record;