Commit 05fa7ea7 authored by Alex Deucher's avatar Alex Deucher Committed by Dave Airlie

drm/radeon/kms: fix extended lvds info parsing

On rev <= 1.1 tables, the offset is absolute,
on newer tables, it's relative.

Fixes:
https://bugzilla.redhat.com/show_bug.cgi?id=700326Signed-off-by: default avatarAlex Deucher <alexdeucher@gmail.com>
Reviewed-by: default avatarJerome Glisse <jglisse@redhat.com>
Cc: stable@kernel.org
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent d9282fca
...@@ -1574,9 +1574,17 @@ struct radeon_encoder_atom_dig *radeon_atombios_get_lvds_info(struct ...@@ -1574,9 +1574,17 @@ struct radeon_encoder_atom_dig *radeon_atombios_get_lvds_info(struct
ATOM_FAKE_EDID_PATCH_RECORD *fake_edid_record; ATOM_FAKE_EDID_PATCH_RECORD *fake_edid_record;
ATOM_PANEL_RESOLUTION_PATCH_RECORD *panel_res_record; ATOM_PANEL_RESOLUTION_PATCH_RECORD *panel_res_record;
bool bad_record = false; bool bad_record = false;
u8 *record = (u8 *)(mode_info->atom_context->bios + u8 *record;
data_offset +
le16_to_cpu(lvds_info->info.usModePatchTableOffset)); if ((frev == 1) && (crev < 2))
/* absolute */
record = (u8 *)(mode_info->atom_context->bios +
le16_to_cpu(lvds_info->info.usModePatchTableOffset));
else
/* relative */
record = (u8 *)(mode_info->atom_context->bios +
data_offset +
le16_to_cpu(lvds_info->info.usModePatchTableOffset));
while (*record != ATOM_RECORD_END_TYPE) { while (*record != ATOM_RECORD_END_TYPE) {
switch (*record) { switch (*record) {
case LCD_MODE_PATCH_RECORD_MODE_TYPE: case LCD_MODE_PATCH_RECORD_MODE_TYPE:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment