aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/radeon_display.c
diff options
context:
space:
mode:
authorAlex Deucher <alexdeucher@gmail.com>2010-02-05 04:21:19 -0500
committerDave Airlie <airlied@redhat.com>2010-02-08 18:31:20 -0500
commit3c537889e17232e9073f75ae8710ea0f008c5a29 (patch)
tree9d3c25825b466b8ddc3fdc8224d4484c99173b08 /drivers/gpu/drm/radeon/radeon_display.c
parent2739d49cd7f1f44876cad614b072da698967b370 (diff)
drm/radeon/kms: add support for hardcoded edids in rom (v2)
Some servers hardcode an edid in rom so that they will work properly with KVMs. This is a port of the relevant code from the ddx. [airlied: reworked to validate edid at boot stage - and remove special quirk, if there is a valid EDID in the BIOS rom we'll just try and use it.] Signed-off-by: Alex Deucher <alexdeucher@gmail.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_display.c')
-rw-r--r--drivers/gpu/drm/radeon/radeon_display.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
index ec3166bfaa4..79634da7c31 100644
--- a/drivers/gpu/drm/radeon/radeon_display.c
+++ b/drivers/gpu/drm/radeon/radeon_display.c
@@ -352,6 +352,8 @@ static bool radeon_setup_enc_conn(struct drm_device *dev)
352 352
353int radeon_ddc_get_modes(struct radeon_connector *radeon_connector) 353int radeon_ddc_get_modes(struct radeon_connector *radeon_connector)
354{ 354{
355 struct drm_device *dev = radeon_connector->base.dev;
356 struct radeon_device *rdev = dev->dev_private;
355 int ret = 0; 357 int ret = 0;
356 358
357 if ((radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_DisplayPort) || 359 if ((radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_DisplayPort) ||
@@ -366,7 +368,9 @@ int radeon_ddc_get_modes(struct radeon_connector *radeon_connector)
366 if (!radeon_connector->edid) { 368 if (!radeon_connector->edid) {
367 radeon_connector->edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter); 369 radeon_connector->edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter);
368 } 370 }
369 371 /* some servers provide a hardcoded edid in rom for KVMs */
372 if (!radeon_connector->edid)
373 radeon_connector->edid = radeon_combios_get_hardcoded_edid(rdev);
370 if (radeon_connector->edid) { 374 if (radeon_connector->edid) {
371 drm_mode_connector_update_edid_property(&radeon_connector->base, radeon_connector->edid); 375 drm_mode_connector_update_edid_property(&radeon_connector->base, radeon_connector->edid);
372 ret = drm_add_edid_modes(&radeon_connector->base, radeon_connector->edid); 376 ret = drm_add_edid_modes(&radeon_connector->base, radeon_connector->edid);
@@ -829,6 +833,12 @@ int radeon_modeset_init(struct radeon_device *rdev)
829 return ret; 833 return ret;
830 } 834 }
831 835
836 /* check combios for a valid hardcoded EDID - Sun servers */
837 if (!rdev->is_atom_bios) {
838 /* check for hardcoded EDID in BIOS */
839 radeon_combios_check_hardcoded_edid(rdev);
840 }
841
832 if (rdev->flags & RADEON_SINGLE_CRTC) 842 if (rdev->flags & RADEON_SINGLE_CRTC)
833 num_crtc = 1; 843 num_crtc = 1;
834 844
@@ -850,6 +860,8 @@ int radeon_modeset_init(struct radeon_device *rdev)
850 860
851void radeon_modeset_fini(struct radeon_device *rdev) 861void radeon_modeset_fini(struct radeon_device *rdev)
852{ 862{
863 kfree(rdev->mode_info.bios_hardcoded_edid);
864
853 if (rdev->mode_info.mode_config_initialized) { 865 if (rdev->mode_info.mode_config_initialized) {
854 radeon_hpd_fini(rdev); 866 radeon_hpd_fini(rdev);
855 drm_mode_config_cleanup(rdev->ddev); 867 drm_mode_config_cleanup(rdev->ddev);