diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-07 13:01:56 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-07 13:01:56 -0500 |
| commit | 83dbb15e9cd78a3619e3db36777e2f81d09b2914 (patch) | |
| tree | 521737fc0829222c2739e4d50bf8546a39d6aa0e | |
| parent | 6e6bc67982573c221d12cbd123d34395f9f6e22e (diff) | |
| parent | 2ac863719e518ae1a8f328849e64ea26a222f079 (diff) | |
Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux
* 'drm-fixes' of git://people.freedesktop.org/~airlied/linux: (40 commits)
vmwgfx: Snoop DMA transfers with non-covering sizes
vmwgfx: Move the prefered mode first in the list
vmwgfx: Unreference surface on cursor error path
vmwgfx: Free prefered mode on error path
vmwgfx: Use pointer return error codes
vmwgfx: Fix hw cursor position
vmwgfx: Infrastructure for explicit placement
vmwgfx: Make the preferred autofit mode have a 60Hz vrefresh
vmwgfx: Remove screen object active list
vmwgfx: Screen object cleanups
drm/radeon/kms: consolidate GART code, fix segfault after GPU lockup V2
drm/radeon/kms: don't poll forever if MC GDDR link training fails
drm/radeon/kms: fix DP setup on TRAVIS bridges
drm/radeon/kms: set HPD polarity in hpd_init()
drm/radeon/kms: add MSI module parameter
drm/radeon/kms: Add MSI quirk for Dell RS690
drm/radeon/kms: Add MSI quirk for HP RS690
drm/radeon/kms: split MSI check into a separate function
vmwgfx: Reinstate the update_layout ioctl
drm/radeon/kms: always do extended edid probe
...
33 files changed, 2948 insertions, 2657 deletions
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index 711d9653abd0..9a2e2a14b3bb 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c | |||
| @@ -163,6 +163,7 @@ static struct drm_conn_prop_enum_list drm_connector_enum_list[] = | |||
| 163 | { DRM_MODE_CONNECTOR_HDMIB, "HDMI-B", 0 }, | 163 | { DRM_MODE_CONNECTOR_HDMIB, "HDMI-B", 0 }, |
| 164 | { DRM_MODE_CONNECTOR_TV, "TV", 0 }, | 164 | { DRM_MODE_CONNECTOR_TV, "TV", 0 }, |
| 165 | { DRM_MODE_CONNECTOR_eDP, "eDP", 0 }, | 165 | { DRM_MODE_CONNECTOR_eDP, "eDP", 0 }, |
| 166 | { DRM_MODE_CONNECTOR_VIRTUAL, "Virtual", 0}, | ||
| 166 | }; | 167 | }; |
| 167 | 168 | ||
| 168 | static struct drm_prop_enum_list drm_encoder_enum_list[] = | 169 | static struct drm_prop_enum_list drm_encoder_enum_list[] = |
| @@ -171,6 +172,7 @@ static struct drm_prop_enum_list drm_encoder_enum_list[] = | |||
| 171 | { DRM_MODE_ENCODER_TMDS, "TMDS" }, | 172 | { DRM_MODE_ENCODER_TMDS, "TMDS" }, |
| 172 | { DRM_MODE_ENCODER_LVDS, "LVDS" }, | 173 | { DRM_MODE_ENCODER_LVDS, "LVDS" }, |
| 173 | { DRM_MODE_ENCODER_TVDAC, "TV" }, | 174 | { DRM_MODE_ENCODER_TVDAC, "TV" }, |
| 175 | { DRM_MODE_ENCODER_VIRTUAL, "Virtual" }, | ||
| 174 | }; | 176 | }; |
| 175 | 177 | ||
| 176 | char *drm_get_encoder_name(struct drm_encoder *encoder) | 178 | char *drm_get_encoder_name(struct drm_encoder *encoder) |
| @@ -464,8 +466,10 @@ void drm_connector_init(struct drm_device *dev, | |||
| 464 | list_add_tail(&connector->head, &dev->mode_config.connector_list); | 466 | list_add_tail(&connector->head, &dev->mode_config.connector_list); |
| 465 | dev->mode_config.num_connector++; | 467 | dev->mode_config.num_connector++; |
| 466 | 468 | ||
| 467 | drm_connector_attach_property(connector, | 469 | if (connector_type != DRM_MODE_CONNECTOR_VIRTUAL) |
| 468 | dev->mode_config.edid_property, 0); | 470 | drm_connector_attach_property(connector, |
| 471 | dev->mode_config.edid_property, | ||
| 472 | 0); | ||
| 469 | 473 | ||
| 470 | drm_connector_attach_property(connector, | 474 | drm_connector_attach_property(connector, |
| 471 | dev->mode_config.dpms_property, 0); | 475 | dev->mode_config.dpms_property, 0); |
diff --git a/drivers/gpu/drm/radeon/Makefile b/drivers/gpu/drm/radeon/Makefile index 9f363e0c4b60..cf8b4bc3e73d 100644 --- a/drivers/gpu/drm/radeon/Makefile +++ b/drivers/gpu/drm/radeon/Makefile | |||
| @@ -70,7 +70,7 @@ radeon-y += radeon_device.o radeon_asic.o radeon_kms.o \ | |||
| 70 | r200.o radeon_legacy_tv.o r600_cs.o r600_blit.o r600_blit_shaders.o \ | 70 | r200.o radeon_legacy_tv.o r600_cs.o r600_blit.o r600_blit_shaders.o \ |
| 71 | r600_blit_kms.o radeon_pm.o atombios_dp.o r600_audio.o r600_hdmi.o \ | 71 | r600_blit_kms.o radeon_pm.o atombios_dp.o r600_audio.o r600_hdmi.o \ |
| 72 | evergreen.o evergreen_cs.o evergreen_blit_shaders.o evergreen_blit_kms.o \ | 72 | evergreen.o evergreen_cs.o evergreen_blit_shaders.o evergreen_blit_kms.o \ |
| 73 | radeon_trace_points.o ni.o cayman_blit_shaders.o | 73 | radeon_trace_points.o ni.o cayman_blit_shaders.o atombios_encoders.o |
| 74 | 74 | ||
| 75 | radeon-$(CONFIG_COMPAT) += radeon_ioc32.o | 75 | radeon-$(CONFIG_COMPAT) += radeon_ioc32.o |
| 76 | radeon-$(CONFIG_VGA_SWITCHEROO) += radeon_atpx_handler.o | 76 | radeon-$(CONFIG_VGA_SWITCHEROO) += radeon_atpx_handler.o |
diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c index a515b2a09d85..87921c88a95c 100644 --- a/drivers/gpu/drm/radeon/atombios_crtc.c +++ b/drivers/gpu/drm/radeon/atombios_crtc.c | |||
| @@ -558,7 +558,7 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc, | |||
| 558 | bpc = connector->display_info.bpc; | 558 | bpc = connector->display_info.bpc; |
| 559 | encoder_mode = atombios_get_encoder_mode(encoder); | 559 | encoder_mode = atombios_get_encoder_mode(encoder); |
| 560 | if ((radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT | ATOM_DEVICE_DFP_SUPPORT)) || | 560 | if ((radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT | ATOM_DEVICE_DFP_SUPPORT)) || |
| 561 | radeon_encoder_is_dp_bridge(encoder)) { | 561 | (radeon_encoder_get_dp_bridge_encoder_id(encoder) != ENCODER_OBJECT_ID_NONE)) { |
| 562 | if (connector) { | 562 | if (connector) { |
| 563 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); | 563 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); |
| 564 | struct radeon_connector_atom_dig *dig_connector = | 564 | struct radeon_connector_atom_dig *dig_connector = |
| @@ -638,44 +638,29 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc, | |||
| 638 | if (ss_enabled && ss->percentage) | 638 | if (ss_enabled && ss->percentage) |
| 639 | args.v3.sInput.ucDispPllConfig |= | 639 | args.v3.sInput.ucDispPllConfig |= |
| 640 | DISPPLL_CONFIG_SS_ENABLE; | 640 | DISPPLL_CONFIG_SS_ENABLE; |
| 641 | if (radeon_encoder->devices & (ATOM_DEVICE_DFP_SUPPORT) || | 641 | if (ENCODER_MODE_IS_DP(encoder_mode)) { |
| 642 | radeon_encoder_is_dp_bridge(encoder)) { | 642 | args.v3.sInput.ucDispPllConfig |= |
| 643 | DISPPLL_CONFIG_COHERENT_MODE; | ||
| 644 | /* 16200 or 27000 */ | ||
| 645 | args.v3.sInput.usPixelClock = cpu_to_le16(dp_clock / 10); | ||
| 646 | } else if (radeon_encoder->devices & (ATOM_DEVICE_DFP_SUPPORT)) { | ||
| 643 | struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv; | 647 | struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv; |
| 644 | if (encoder_mode == ATOM_ENCODER_MODE_DP) { | 648 | if (encoder_mode == ATOM_ENCODER_MODE_HDMI) |
| 649 | /* deep color support */ | ||
| 650 | args.v3.sInput.usPixelClock = | ||
| 651 | cpu_to_le16((mode->clock * bpc / 8) / 10); | ||
| 652 | if (dig->coherent_mode) | ||
| 645 | args.v3.sInput.ucDispPllConfig |= | 653 | args.v3.sInput.ucDispPllConfig |= |
| 646 | DISPPLL_CONFIG_COHERENT_MODE; | 654 | DISPPLL_CONFIG_COHERENT_MODE; |
| 647 | /* 16200 or 27000 */ | 655 | if (mode->clock > 165000) |
| 648 | args.v3.sInput.usPixelClock = cpu_to_le16(dp_clock / 10); | ||
| 649 | } else { | ||
| 650 | if (encoder_mode == ATOM_ENCODER_MODE_HDMI) { | ||
| 651 | /* deep color support */ | ||
| 652 | args.v3.sInput.usPixelClock = | ||
| 653 | cpu_to_le16((mode->clock * bpc / 8) / 10); | ||
| 654 | } | ||
| 655 | if (dig->coherent_mode) | ||
| 656 | args.v3.sInput.ucDispPllConfig |= | ||
| 657 | DISPPLL_CONFIG_COHERENT_MODE; | ||
| 658 | if (mode->clock > 165000) | ||
| 659 | args.v3.sInput.ucDispPllConfig |= | ||
| 660 | DISPPLL_CONFIG_DUAL_LINK; | ||
| 661 | } | ||
| 662 | } else if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) { | ||
| 663 | if (encoder_mode == ATOM_ENCODER_MODE_DP) { | ||
| 664 | args.v3.sInput.ucDispPllConfig |= | 656 | args.v3.sInput.ucDispPllConfig |= |
| 665 | DISPPLL_CONFIG_COHERENT_MODE; | 657 | DISPPLL_CONFIG_DUAL_LINK; |
| 666 | /* 16200 or 27000 */ | ||
| 667 | args.v3.sInput.usPixelClock = cpu_to_le16(dp_clock / 10); | ||
| 668 | } else if (encoder_mode != ATOM_ENCODER_MODE_LVDS) { | ||
| 669 | if (mode->clock > 165000) | ||
| 670 | args.v3.sInput.ucDispPllConfig |= | ||
| 671 | DISPPLL_CONFIG_DUAL_LINK; | ||
| 672 | } | ||
| 673 | } | 658 | } |
| 674 | if (radeon_encoder_is_dp_bridge(encoder)) { | 65 | |
