37,22 → 37,6 |
#include <asm/pci-bridge.h> |
#endif /* CONFIG_PPC_PMAC */ |
|
/* from radeon_encoder.c */ |
extern uint32_t |
radeon_get_encoder_enum(struct drm_device *dev, uint32_t supported_device, |
uint8_t dac); |
extern void radeon_link_encoder_connector(struct drm_device *dev); |
|
/* from radeon_connector.c */ |
extern void |
radeon_add_legacy_connector(struct drm_device *dev, |
uint32_t connector_id, |
uint32_t supported_device, |
int connector_type, |
struct radeon_i2c_bus_rec *i2c_bus, |
uint16_t connector_object_id, |
struct radeon_hpd *hpd); |
|
/* from radeon_legacy_encoder.c */ |
extern void |
radeon_add_legacy_encoder(struct drm_device *dev, uint32_t encoder_enum, |
147,7 → 131,7 |
enum radeon_combios_table_offset table) |
{ |
struct radeon_device *rdev = dev->dev_private; |
int rev; |
int rev, size; |
uint16_t offset = 0, check_offset; |
|
if (!rdev->bios) |
156,174 → 140,106 |
switch (table) { |
/* absolute offset tables */ |
case COMBIOS_ASIC_INIT_1_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0xc); |
if (check_offset) |
offset = check_offset; |
check_offset = 0xc; |
break; |
case COMBIOS_BIOS_SUPPORT_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x14); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x14; |
break; |
case COMBIOS_DAC_PROGRAMMING_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x2a); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x2a; |
break; |
case COMBIOS_MAX_COLOR_DEPTH_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x2c); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x2c; |
break; |
case COMBIOS_CRTC_INFO_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x2e); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x2e; |
break; |
case COMBIOS_PLL_INFO_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x30); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x30; |
break; |
case COMBIOS_TV_INFO_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x32); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x32; |
break; |
case COMBIOS_DFP_INFO_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x34); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x34; |
break; |
case COMBIOS_HW_CONFIG_INFO_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x36); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x36; |
break; |
case COMBIOS_MULTIMEDIA_INFO_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x38); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x38; |
break; |
case COMBIOS_TV_STD_PATCH_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x3e); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x3e; |
break; |
case COMBIOS_LCD_INFO_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x40); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x40; |
break; |
case COMBIOS_MOBILE_INFO_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x42); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x42; |
break; |
case COMBIOS_PLL_INIT_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x46); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x46; |
break; |
case COMBIOS_MEM_CONFIG_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x48); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x48; |
break; |
case COMBIOS_SAVE_MASK_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x4a); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x4a; |
break; |
case COMBIOS_HARDCODED_EDID_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x4c); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x4c; |
break; |
case COMBIOS_ASIC_INIT_2_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x4e); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x4e; |
break; |
case COMBIOS_CONNECTOR_INFO_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x50); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x50; |
break; |
case COMBIOS_DYN_CLK_1_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x52); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x52; |
break; |
case COMBIOS_RESERVED_MEM_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x54); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x54; |
break; |
case COMBIOS_EXT_TMDS_INFO_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x58); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x58; |
break; |
case COMBIOS_MEM_CLK_INFO_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x5a); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x5a; |
break; |
case COMBIOS_EXT_DAC_INFO_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x5c); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x5c; |
break; |
case COMBIOS_MISC_INFO_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x5e); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x5e; |
break; |
case COMBIOS_CRT_INFO_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x60); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x60; |
break; |
case COMBIOS_INTEGRATED_SYSTEM_INFO_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x62); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x62; |
break; |
case COMBIOS_COMPONENT_VIDEO_INFO_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x64); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x64; |
break; |
case COMBIOS_FAN_SPEED_INFO_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x66); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x66; |
break; |
case COMBIOS_OVERDRIVE_INFO_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x68); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x68; |
break; |
case COMBIOS_OEM_INFO_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x6a); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x6a; |
break; |
case COMBIOS_DYN_CLK_2_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x6c); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x6c; |
break; |
case COMBIOS_POWER_CONNECTOR_INFO_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x6e); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x6e; |
break; |
case COMBIOS_I2C_INFO_TABLE: |
check_offset = RBIOS16(rdev->bios_header_start + 0x70); |
if (check_offset) |
offset = check_offset; |
check_offset = 0x70; |
break; |
/* relative offset tables */ |
case COMBIOS_ASIC_INIT_3_TABLE: /* offset from misc info */ |
439,11 → 355,16 |
} |
break; |
default: |
check_offset = 0; |
break; |
} |
|
size = RBIOS8(rdev->bios_header_start + 0x6); |
/* check absolute offset tables */ |
if (table < COMBIOS_ASIC_INIT_3_TABLE && check_offset && check_offset < size) |
offset = RBIOS16(rdev->bios_header_start + check_offset); |
|
return offset; |
|
} |
|
bool radeon_combios_check_hardcoded_edid(struct radeon_device *rdev) |
965,16 → 886,22 |
dac = RBIOS8(dac_info + 0x3) & 0xf; |
p_dac->ps2_pdac_adj = (bg << 8) | (dac); |
} |
/* if the values are all zeros, use the table */ |
if (p_dac->ps2_pdac_adj) |
/* if the values are zeros, use the table */ |
if ((dac == 0) || (bg == 0)) |
found = 0; |
else |
found = 1; |
} |
|
/* quirks */ |
/* Radeon 7000 (RV100) */ |
if (((dev->pdev->device == 0x5159) && |
(dev->pdev->subsystem_vendor == 0x174B) && |
(dev->pdev->subsystem_device == 0x7c28)) || |
/* Radeon 9100 (R200) */ |
if ((dev->pdev->device == 0x514D) && |
((dev->pdev->device == 0x514D) && |
(dev->pdev->subsystem_vendor == 0x174B) && |
(dev->pdev->subsystem_device == 0x7149)) { |
(dev->pdev->subsystem_device == 0x7149))) { |
/* vbios value is bad, use the default */ |
found = 0; |
} |