diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-03-02 18:25:45 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-03-02 18:25:45 -0500 |
| commit | c59224d1326e56febd279032248c58672df0f14d (patch) | |
| tree | c000a39bc729d88685a5b51af636f20a67ed484f | |
| parent | a53c8ceb01c5ae29ae26ab1f97d53018b2021a29 (diff) | |
| parent | d668ca1cc6b9b6d2f1ce2f7b158cbe919cc782dc (diff) | |
Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux
Pull drm fixes from Dave Airlie:
"Not a huge amount happening, some MAINTAINERS updates, radeon, vmwgfx
and tegra fixes"
* 'drm-fixes' of git://people.freedesktop.org/~airlied/linux:
drm/vmwgfx: avoid null pointer dereference at failure paths
drm/vmwgfx: Make sure backing mobs are cleared when allocated. Update driver date.
drm/vmwgfx: Remove some unused surface formats
drm/radeon: enable speaker allocation setup on dce3.2
drm/radeon: change audio enable logic
drm/radeon: fix audio disable on dce6+
drm/radeon: free uvd ring on unload
drm/radeon: disable pll sharing for DP on DCE4.1
drm/radeon: fix missing bo reservation
drm/radeon: print the supported atpx function mask
MAINTAINERS: update drm git tree entry
MAINTAINERS: add entry for drm radeon driver
drm/tegra: Add guard to avoid double disable/enable of RGB outputs
gpu: host1x: do not check previously handled gathers
drm/tegra: fix typo 'CONFIG_TEGRA_DRM_FBDEV'
| -rw-r--r-- | MAINTAINERS | 12 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/atombios_crtc.c | 16 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/dce6_afmt.c | 15 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/evergreen.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/evergreen_hdmi.c | 26 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/r600_audio.c | 14 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/r600_hdmi.c | 15 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon.h | 6 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_atpx_handler.c | 3 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_kms.c | 6 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_uvd.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/rv770.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/tegra/drm.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/tegra/rgb.c | 11 | ||||
| -rw-r--r-- | drivers/gpu/drm/vmwgfx/svga3d_reg.h | 7 | ||||
| -rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_mob.c | 35 | ||||
| -rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_resource.c | 3 | ||||
| -rw-r--r-- | drivers/gpu/host1x/job.c | 2 |
19 files changed, 118 insertions, 63 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index 4f42aceacc43..c6d0e93eff62 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
| @@ -2848,12 +2848,22 @@ F: lib/kobj* | |||
| 2848 | DRM DRIVERS | 2848 | DRM DRIVERS |
| 2849 | M: David Airlie <airlied@linux.ie> | 2849 | M: David Airlie <airlied@linux.ie> |
| 2850 | L: dri-devel@lists.freedesktop.org | 2850 | L: dri-devel@lists.freedesktop.org |
| 2851 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6.git | 2851 | T: git git://people.freedesktop.org/~airlied/linux |
| 2852 | S: Maintained | 2852 | S: Maintained |
| 2853 | F: drivers/gpu/drm/ | 2853 | F: drivers/gpu/drm/ |
| 2854 | F: include/drm/ | 2854 | F: include/drm/ |
| 2855 | F: include/uapi/drm/ | 2855 | F: include/uapi/drm/ |
| 2856 | 2856 | ||
| 2857 | RADEON DRM DRIVERS | ||
| 2858 | M: Alex Deucher <alexander.deucher@amd.com> | ||
| 2859 | M: Christian König <christian.koenig@amd.com> | ||
| 2860 | L: dri-devel@lists.freedesktop.org | ||
| 2861 | T: git git://people.freedesktop.org/~agd5f/linux | ||
| 2862 | S: Supported | ||
| 2863 | F: drivers/gpu/drm/radeon/ | ||
| 2864 | F: include/drm/radeon* | ||
| 2865 | F: include/uapi/drm/radeon* | ||
| 2866 | |||
| 2857 | INTEL DRM DRIVERS (excluding Poulsbo, Moorestown and derivative chipsets) | 2867 | INTEL DRM DRIVERS (excluding Poulsbo, Moorestown and derivative chipsets) |
| 2858 | M: Daniel Vetter <daniel.vetter@ffwll.ch> | 2868 | M: Daniel Vetter <daniel.vetter@ffwll.ch> |
| 2859 | M: Jani Nikula <jani.nikula@linux.intel.com> | 2869 | M: Jani Nikula <jani.nikula@linux.intel.com> |
diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c index 0d19f4f94d5a..daa4dd375ab1 100644 --- a/drivers/gpu/drm/radeon/atombios_crtc.c +++ b/drivers/gpu/drm/radeon/atombios_crtc.c | |||
| @@ -1774,6 +1774,20 @@ static int radeon_atom_pick_pll(struct drm_crtc *crtc) | |||
| 1774 | return ATOM_PPLL1; | 1774 | return ATOM_PPLL1; |
| 1775 | DRM_ERROR("unable to allocate a PPLL\n"); | 1775 | DRM_ERROR("unable to allocate a PPLL\n"); |
| 1776 | return ATOM_PPLL_INVALID; | 1776 | return ATOM_PPLL_INVALID; |
| 1777 | } else if (ASIC_IS_DCE41(rdev)) { | ||
| 1778 | /* Don't share PLLs on DCE4.1 chips */ | ||
| 1779 | if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(radeon_crtc->encoder))) { | ||
| 1780 | if (rdev->clock.dp_extclk) | ||
| 1781 | /* skip PPLL programming if using ext clock */ | ||
| 1782 | return ATOM_PPLL_INVALID; | ||
| 1783 | } | ||
| 1784 | pll_in_use = radeon_get_pll_use_mask(crtc); | ||
| 1785 | if (!(pll_in_use & (1 << ATOM_PPLL1))) | ||
| 1786 | return ATOM_PPLL1; | ||
| 1787 | if (!(pll_in_use & (1 << ATOM_PPLL2))) | ||
| 1788 | return ATOM_PPLL2; | ||
| 1789 | DRM_ERROR("unable to allocate a PPLL\n"); | ||
| 1790 | return ATOM_PPLL_INVALID; | ||
| 1777 | } else if (ASIC_IS_DCE4(rdev)) { | 1791 | } else if (ASIC_IS_DCE4(rdev)) { |
| 1778 | /* in DP mode, the DP ref clock can come from PPLL, DCPLL, or ext clock, | 1792 | /* in DP mode, the DP ref clock can come from PPLL, DCPLL, or ext clock, |
| 1779 | * depending on the asic: | 1793 | * depending on the asic: |
| @@ -1801,7 +1815,7 @@ static int radeon_atom_pick_pll(struct drm_crtc *crtc) | |||
| 1801 | if (pll != ATOM_PPLL_INVALID) | 1815 | if (pll != ATOM_PPLL_INVALID) |
| 1802 | return pll; | 1816 | return pll; |
| 1803 | } | 1817 | } |
| 1804 | } else if (!ASIC_IS_DCE41(rdev)) { /* Don't share PLLs on DCE4.1 chips */ | 1818 | } else { |
| 1805 | /* use the same PPLL for all monitors with the same clock */ | 1819 | /* use the same PPLL for all monitors with the same clock */ |
| 1806 | pll = radeon_get_shared_nondp_ppll(crtc); | 1820 | pll = radeon_get_shared_nondp_ppll(crtc); |
| 1807 | if (pll != ATOM_PPLL_INVALID) | 1821 | if (pll != ATOM_PPLL_INVALID) |
diff --git a/drivers/gpu/drm/radeon/dce6_afmt.c b/drivers/gpu/drm/radeon/dce6_afmt.c index 713a5d359901..94e858751994 100644 --- a/drivers/gpu/drm/radeon/dce6_afmt.c +++ b/drivers/gpu/drm/radeon/dce6_afmt.c | |||
| @@ -278,13 +278,15 @@ static int dce6_audio_chipset_supported(struct radeon_device *rdev) | |||
| 278 | return !ASIC_IS_NODCE(rdev); | 278 | return !ASIC_IS_NODCE(rdev); |
| 279 | } | 279 | } |
| 280 | 280 | ||
| 281 | static void dce6_audio_enable(struct radeon_device *rdev, | 281 | void dce6_audio_enable(struct radeon_device *rdev, |
| 282 | struct r600_audio_pin *pin, | 282 | struct r600_audio_pin *pin, |
| 283 | bool enable) | 283 | bool enable) |
| 284 | { | 284 | { |
| 285 | if (!pin) | ||
| 286 | return; | ||
| 287 | |||
| 285 | WREG32_ENDPOINT(pin->offset, AZ_F0_CODEC_PIN_CONTROL_HOTPLUG_CONTROL, | 288 | WREG32_ENDPOINT(pin->offset, AZ_F0_CODEC_PIN_CONTROL_HOTPLUG_CONTROL, |
| 286 | AUDIO_ENABLED); | 289 | enable ? AUDIO_ENABLED : 0); |
| 287 | DRM_INFO("%s audio %d support\n", enable ? "Enabling" : "Disabling", pin->id); | ||
| 288 | } | 290 | } |
| 289 | 291 | ||
| 290 | static const u32 pin_offsets[7] = | 292 | static const u32 pin_offsets[7] = |
| @@ -323,7 +325,8 @@ int dce6_audio_init(struct radeon_device *rdev) | |||
| 323 | rdev->audio.pin[i].connected = false; | 325 | rdev->audio.pin[i].connected = false; |
| 324 | rdev->audio.pin[i].offset = pin_offsets[i]; | 326 | rdev->audio.pin[i].offset = pin_offsets[i]; |
| 325 | rdev->audio.pin[i].id = i; | 327 | rdev->audio.pin[i].id = i; |
| 326 | dce6_audio_enable(rdev, &rdev->audio.pin[i], true); | 328 | /* disable audio. it will be set up later */ |
| 329 | dce6_audio_enable(rdev, &rdev->audio.pin[i], false); | ||
| 327 | } | 330 | } |
| 328 | 331 | ||
| 329 | return 0; | 332 | return 0; |
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c index 5623e7542d99..8a2c010b7dc5 100644 --- a/drivers/gpu/drm/radeon/evergreen.c +++ b/drivers/gpu/drm/radeon/evergreen.c | |||
| @@ -5475,9 +5475,9 @@ void evergreen_fini(struct radeon_device *rdev) | |||
| 5475 | radeon_wb_fini(rdev); | 5475 | radeon_wb_fini(rdev); |
| 5476 | radeon_ib_pool_fini(rdev); | 5476 | radeon_ib_pool_fini(rdev); |
| 5477 | radeon_irq_kms_fini(rdev); | 5477 | radeon_irq_kms_fini(rdev); |
| 5478 | evergreen_pcie_gart_fini(rdev); | ||
| 5479 | uvd_v1_0_fini(rdev); | 5478 | uvd_v1_0_fini(rdev); |
| 5480 | radeon_uvd_fini(rdev); | 5479 | radeon_uvd_fini(rdev); |
| 5480 | evergreen_pcie_gart_fini(rdev); | ||
| 5481 | r600_vram_scratch_fini(rdev); | 5481 | r600_vram_scratch_fini(rdev); |
| 5482 | radeon_gem_fini(rdev); | 5482 | radeon_gem_fini(rdev); |
| 5483 | radeon_fence_driver_fini(rdev); | 5483 | radeon_fence_driver_fini(rdev); |
diff --git a/drivers/gpu/drm/radeon/evergreen_hdmi.c b/drivers/gpu/drm/radeon/evergreen_hdmi.c index 0c6d5cef4cf1..05b0c95813fd 100644 --- a/drivers/gpu/drm/radeon/evergreen_hdmi.c +++ b/drivers/gpu/drm/radeon/evergreen_hdmi.c | |||
| @@ -306,6 +306,15 @@ void evergreen_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode | |||
| 306 | return; | 306 | return; |
| 307 | offset = dig->afmt->offset; | 307 | offset = dig->afmt->offset; |
| 308 | 308 | ||
| 309 | /* disable audio prior to setting up hw */ | ||
| 310 | if (ASIC_IS_DCE6(rdev)) { | ||
| 311 | dig->afmt->pin = dce6_audio_get_pin(rdev); | ||
| 312 | dce6_audio_enable(rdev, dig->afmt->pin, false); | ||
| 313 | } else { | ||
| 314 | dig->afmt->pin = r600_audio_get_pin(rdev); | ||
| 315 | r600_audio_enable(rdev, dig->afmt->pin, false); | ||
| 316 | } | ||
| 317 | |||
| 309 | evergreen_audio_set_dto(encoder, mode->clock); | 318 | evergreen_audio_set_dto(encoder, mode->clock); |
| 310 | 319 | ||
| 311 | WREG32(HDMI_VBI_PACKET_CONTROL + offset, | 320 | WREG32(HDMI_VBI_PACKET_CONTROL + offset, |
| @@ -409,12 +418,16 @@ void evergreen_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode | |||
| 409 | WREG32(AFMT_RAMP_CONTROL1 + offset, 0x007FFFFF); | 418 | WREG32(AFMT_RAMP_CONTROL1 + offset, 0x007FFFFF); |
| 410 | WREG32(AFMT_RAMP_CONTROL2 + offset, 0x00000001); | 419 | WREG32(AFMT_RAMP_CONTROL2 + offset, 0x00000001); |
| 411 | WREG32(AFMT_RAMP_CONTROL3 + offset, 0x00000001); | 420 | WREG32(AFMT_RAMP_CONTROL3 + offset, 0x00000001); |
| 421 | |||
| 422 | /* enable audio after to setting up hw */ | ||
| 423 | if (ASIC_IS_DCE6(rdev)) | ||
| 424 | dce6_audio_enable(rdev, dig->afmt->pin, true); | ||
| 425 | else | ||
| 426 | r600_audio_enable(rdev, dig->afmt->pin, true); | ||
| 412 | } | 427 | } |
| 413 | 428 | ||
| 414 | void evergreen_hdmi_enable(struct drm_encoder *encoder, bool enable) | 429 | void evergreen_hdmi_enable(struct drm_encoder *encoder, bool enable) |
| 415 | { | 430 | { |
| 416 | struct drm_device *dev = encoder->dev; | ||
| 417 | struct radeon_device *rdev = dev->dev_private; | ||
| 418 | struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); | 431 | struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); |
| 419 | struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv; | 432 | struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv; |
| 420 | 433 | ||
| @@ -427,15 +440,6 @@ void evergreen_hdmi_enable(struct drm_encoder *encoder, bool enable) | |||
| 427 | if (!enable && !dig->afmt->enabled) | 440 | if (!enable && !dig->afmt->enabled) |
| 428 | return; | 441 | return; |
| 429 | 442 | ||
| 430 | if (enable) { | ||
| 431 | if (ASIC_IS_DCE6(rdev)) | ||
| 432 | dig->afmt->pin = dce6_audio_get_pin(rdev); | ||
| 433 | else | ||
| 434 | dig->afmt->pin = r600_audio_get_pin(rdev); | ||
| 435 | } else { | ||
| 436 | dig->afmt->pin = NULL; | ||
| 437 | } | ||
| 438 | |||
| 439 | dig->afmt->enabled = enable; | 443 | dig->afmt->enabled = enable; |
| 440 | 444 | ||
| 441 | DRM_DEBUG("%sabling HDMI interface @ 0x%04X for encoder 0x%x\n", | 445 | DRM_DEBUG("%sabling HDMI interface @ 0x%04X for encoder 0x%x\n", |
diff --git a/drivers/gpu/drm/radeon/r600_audio.c b/drivers/gpu/drm/radeon/r600_audio.c index 47fc2b886979..bffac10c4296 100644 --- a/drivers/gpu/drm/radeon/r600_audio.c +++ b/drivers/gpu/drm/radeon/r600_audio.c | |||
| @@ -142,12 +142,15 @@ void r600_audio_update_hdmi(struct work_struct *work) | |||
| 142 | } | 142 | } |
| 143 | 143 | ||
| 144 | /* enable the audio stream */ | 144 | /* enable the audio stream */ |
| 145 | static void r600_audio_enable(struct radeon_device *rdev, | 145 | void r600_audio_enable(struct radeon_device *rdev, |
| 146 | struct r600_audio_pin *pin, | 146 | struct r600_audio_pin *pin, |
| 147 | bool enable) | 147 | bool enable) |
| 148 | { | 148 | { |
| 149 | u32 value = 0; | 149 | u32 value = 0; |
| 150 | 150 | ||
| 151 | if (!pin) | ||
| 152 | return; | ||
| 153 | |||
| 151 | if (ASIC_IS_DCE4(rdev)) { | 154 | if (ASIC_IS_DCE4(rdev)) { |
| 152 | if (enable) { | 155 | if (enable) { |
| 153 | value |= 0x81000000; /* Required to enable audio */ | 156 | value |= 0x81000000; /* Required to enable audio */ |
| @@ -158,7 +161,6 @@ static void r600_audio_enable(struct radeon_device *rdev, | |||
| 158 | WREG32_P(R600_AUDIO_ENABLE, | 161 | WREG32_P(R600_AUDIO_ENABLE, |
| 159 | enable ? 0x81000000 : 0x0, ~0x81000000); | 162 | enable ? 0x81000000 : 0x0, ~0x81000000); |
| 160 | } | 163 | } |
| 161 | DRM_INFO("%s audio %d support\n", enable ? "Enabling" : "Disabling", pin->id); | ||
| 162 | } | 164 | } |
| 163 | 165 | ||
| 164 | /* | 166 | /* |
| @@ -178,8 +180,8 @@ int r600_audio_init(struct radeon_device *rdev) | |||
| 178 | rdev->audio.pin[0].status_bits = 0; | 180 | rdev->audio.pin[0].status_bits = 0; |
| 179 | rdev->audio.pin[0].category_code = 0; | 181 | rdev->audio.pin[0].category_code = 0; |
| 180 | rdev->audio.pin[0].id = 0; | 182 | rdev->audio.pin[0].id = 0; |
| 181 | 183 | /* disable audio. it will be set up later */ | |
| 182 | r600_audio_enable(rdev, &rdev->audio.pin[0], true); | 184 | r600_audio_enable(rdev, &rdev->audio.pin[0], false); |
| 183 | 185 | ||
| 184 | return 0; | 186 | return 0; |
| 185 | } | 187 | } |
diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c index 3016fc14f502..85a2bb28aed2 100644 --- a/drivers/gpu/drm/radeon/r600_hdmi.c +++ b/drivers/gpu/drm/radeon/r600_hdmi.c | |||
| @@ -329,9 +329,6 @@ static void dce3_2_afmt_write_speaker_allocation(struct drm_encoder *encoder) | |||
| 329 | u8 *sadb; | 329 | u8 *sadb; |
| 330 | int sad_count; | 330 | int sad_count; |
| 331 | 331 | ||
| 332 | /* XXX: setting this register causes hangs on some asics */ | ||
| 333 | return; | ||
| 334 | |||
| 335 | list_for_each_entry(connector, &encoder->dev->mode_config.connector_list, head) { | 332 | list_for_each_entry(connector, &encoder->dev->mode_config.connector_list, head) { |
| 336 | if (connector->encoder == encoder) { | 333 | if (connector->encoder == encoder) { |
| 337 | radeon_connector = to_radeon_connector(connector); | 334 | radeon_connector = to_radeon_connector(connector); |
| @@ -460,6 +457,10 @@ void r600_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode *mod | |||
| 460 | return; | 457 | return; |
| 461 | offset = dig->afmt->offset; | 458 | offset = dig->afmt->offset; |
| 462 | 459 | ||
| 460 | /* disable audio prior to setting up hw */ | ||
| 461 | dig->afmt->pin = r600_audio_get_pin(rdev); | ||
| 462 | r600_audio_enable(rdev, dig->afmt->pin, false); | ||
| 463 | |||
| 463 | r600_audio_set_dto(encoder, mode->clock); | 464 | r600_audio_set_dto(encoder, mode->clock); |
| 464 | 465 | ||
| 465 | WREG32(HDMI0_VBI_PACKET_CONTROL + offset, | 466 | WREG32(HDMI0_VBI_PACKET_CONTROL + offset, |
| @@ -531,6 +532,9 @@ void r600_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode *mod | |||
| 531 | WREG32(HDMI0_RAMP_CONTROL3 + offset, 0x00000001); | 532 | WREG32(HDMI0_RAMP_CONTROL3 + offset, 0x00000001); |
| 532 | 533 | ||
| 533 | r600_hdmi_audio_workaround(encoder); | 534 | r600_hdmi_audio_workaround(encoder); |
| 535 | |||
| 536 | /* enable audio after to setting up hw */ | ||
| 537 | r600_audio_enable(rdev, dig->afmt->pin, true); | ||
| 534 | } | 538 | } |
| 535 | 539 | ||
| 536 | /* | 540 | /* |
| @@ -651,11 +655,6 @@ void r600_hdmi_enable(struct drm_encoder *encoder, bool enable) | |||
| 651 | if (!enable && !dig->afmt->enabled) | 655 | if (!enable && !dig->afmt->enabled) |
| 652 | return; | 656 | return; |
| 653 | 657 | ||
| 654 | if (enable) | ||
| 655 | dig->afmt->pin = r600_audio_get_pin(rdev); | ||
| 656 | else | ||
| 657 | dig->afmt->pin = NULL; | ||
| 658 | |||
| 659 | /* Older chipsets require setting HDMI and routing manually */ | 658 | /* Older chipsets require setting HDMI and routing manually */ |
| 660 | if (!ASIC_IS_DCE3(rdev)) { | 659 | if (!ASIC_IS_DCE3(rdev)) { |
| 661 | if (enable) | 660 | if (enable) |
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h index 024db37b1832..e887d027b6d0 100644 --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h | |||
| @@ -2747,6 +2747,12 @@ int radeon_vm_bo_rmv(struct radeon_device *rdev, | |||
| 2747 | void r600_audio_update_hdmi(struct work_struct *work); | 2747 | void r600_audio_update_hdmi(struct work_struct *work); |
| 2748 | struct r600_audio_pin *r600_audio_get_pin(struct radeon_device *rdev); | 2748 | struct r600_audio_pin *r600_audio_get_pin(struct radeon_device *rdev); |
| 2749 | struct r600_audio_pin *dce6_audio_get_pin(struct radeon_device *rdev); | 2749 | struct r600_audio_pin *dce6_audio_get_pin(struct radeon_device *rdev); |
| 2750 | void r600_audio_enable(struct radeon_device *rdev, | ||
| 2751 | struct r600_audio_pin *pin, | ||
| 2752 | bool enable); | ||
| 2753 | void dce6_audio_enable(struct radeon_device *rdev, | ||
| 2754 | struct r600_audio_pin *pin, | ||
| 2755 | bool enable); | ||
| 2750 | 2756 | ||
| 2751 | /* | 2757 | /* |
| 2752 | * R600 vram scratch functions | 2758 | * R600 vram scratch functions |
diff --git a/drivers/gpu/drm/radeon/radeon_atpx_handler.c b/drivers/gpu/drm/radeon/radeon_atpx_handler.c index 485848f889f5..fa9a9c02751e 100644 --- a/drivers/gpu/drm/radeon/radeon_atpx_handler.c +++ b/drivers/gpu/drm/radeon/radeon_atpx_handler.c | |||
| @@ -219,7 +219,8 @@ static int radeon_atpx_verify_interface(struct radeon_atpx *atpx) | |||
| 219 | memcpy(&output, info->buffer.pointer, size); | 219 | memcpy(&output, info->buffer.pointer, size); |
| 220 | 220 | ||
| 221 | /* TODO: check version? */ | 221 | /* TODO: check version? */ |
| 222 | printk("ATPX version %u\n", output.version); | 222 | printk("ATPX version %u, functions 0x%08x\n", |
| 223 | output.version, output.function_bits); | ||
| 223 | 224 | ||
| 224 | radeon_atpx_parse_functions(&atpx->functions, output.function_bits); | 225 | radeon_atpx_parse_functions(&atpx->functions, output.function_bits); |
| 225 | 226 | ||
diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c index 114d1672d616..2aecd6dc2610 100644 --- a/drivers/gpu/drm/radeon/radeon_kms.c +++ b/drivers/gpu/drm/radeon/radeon_kms.c | |||
| @@ -537,6 +537,10 @@ int radeon_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv) | |||
| 537 | 537 | ||
| 538 | radeon_vm_init(rdev, &fpriv->vm); | 538 | radeon_vm_init(rdev, &fpriv->vm); |
| 539 | 539 | ||
| 540 | r = radeon_bo_reserve(rdev->ring_tmp_bo.bo, false); | ||
| 541 | if (r) | ||
| 542 | return r; | ||
| 543 | |||
| 540 | /* map the ib pool buffer read only into | 544 | /* map the ib pool buffer read only into |
| 541 | * virtual address space */ | 545 | * virtual address space */ |
| 542 | bo_va = radeon_vm_bo_add(rdev, &fpriv->vm, | 546 | bo_va = radeon_vm_bo_add(rdev, &fpriv->vm, |
| @@ -544,6 +548,8 @@ int radeon_driver_open_kms(struct drm_device *dev, struct drm_file *file_priv) | |||
| 544 | r = radeon_vm_bo_set_addr(rdev, bo_va, RADEON_VA_IB_OFFSET, | 548 | r = radeon_vm_bo_set_addr(rdev, bo_va, RADEON_VA_IB_OFFSET, |
| 545 | RADEON_VM_PAGE_READABLE | | 549 | RADEON_VM_PAGE_READABLE | |
| 546 | RADEON_VM_PAGE_SNOOPED); | 550 | RADEON_VM_PAGE_SNOOPED); |
| 551 | |||
| 552 | radeon_bo_unreserve(rdev->ring_tmp_bo.bo); | ||
| 547 | if (r) { | 553 | if (r) { |
| 548 | radeon_vm_fini(rdev, &fpriv->vm); | 554 | radeon_vm_fini(rdev, &fpriv->vm); |
| 549 | kfree(fpriv); | 555 | kfree(fpriv); |
diff --git a/drivers/gpu/drm/radeon/radeon_uvd.c b/drivers/gpu/drm/radeon/radeon_uvd.c index 6781fee1eaad..3e6804b2b2ef 100644 --- a/drivers/gpu/drm/radeon/radeon_uvd.c +++ b/drivers/gpu/drm/radeon/radeon_uvd.c | |||
| @@ -171,6 +171,8 @@ void radeon_uvd_fini(struct radeon_device *rdev) | |||
| 171 | 171 | ||
| 172 | radeon_bo_unref(&rdev->uvd.vcpu_bo); | 172 | radeon_bo_unref(&rdev->uvd.vcpu_bo); |
| 173 | 173 | ||
| 174 | radeon_ring_fini(rdev, &rdev->ring[R600_RING_TYPE_UVD_INDEX]); | ||
| 175 | |||
| 174 | release_firmware(rdev->uvd_fw); | 176 | release_firmware(rdev->uvd_fw); |
| 175 | } | 177 | } |
| 176 | 178 | ||
diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c index 6c772e58c784..4e37a42305d8 100644 --- a/drivers/gpu/drm/radeon/rv770.c +++ b/drivers/gpu/drm/radeon/rv770.c | |||
| @@ -1955,9 +1955,9 @@ void rv770_fini(struct radeon_device *rdev) | |||
| 1955 | radeon_wb_fini(rdev); | 1955 | radeon_wb_fini(rdev); |
| 1956 | radeon_ib_pool_fini(rdev); | 1956 | radeon_ib_pool_fini(rdev); |
| 1957 | radeon_irq_kms_fini(rdev); | 1957 | radeon_irq_kms_fini(rdev); |
| 1958 | rv770_pcie_gart_fini(rdev); | ||
| 1959 | uvd_v1_0_fini(rdev); | 1958 | uvd_v1_0_fini(rdev); |
| 1960 | radeon_uvd_fini(rdev); | 1959 | radeon_uvd_fini(rdev); |
| 1960 | rv770_pcie_gart_fini(rdev); | ||
| 1961 | r600_vram_scratch_fini(rdev); | 1961 | r600_vram_scratch_fini(rdev); |
| 1962 | radeon_gem_fini(rdev); | 1962 | radeon_gem_fini(rdev); |
| 1963 | radeon_fence_driver_fini(rdev); | 1963 | radeon_fence_driver_fini(rdev); |
diff --git a/drivers/gpu/drm/tegra/drm.c b/drivers/gpu/drm/tegra/drm.c index 88a529008ce0..c71594754f46 100644 --- a/drivers/gpu/drm/tegra/drm.c +++ b/drivers/gpu/drm/tegra/drm.c | |||
| @@ -104,7 +104,7 @@ static void tegra_drm_context_free(struct tegra_drm_context *context) | |||
| 104 | 104 | ||
| 105 | static void tegra_drm_lastclose(struct drm_device *drm) | 105 | static void tegra_drm_lastclose(struct drm_device *drm) |
| 106 | { | 106 | { |
| 107 | #ifdef CONFIG_TEGRA_DRM_FBDEV | 107 | #ifdef CONFIG_DRM_TEGRA_FBDEV |
| 108 | struct tegra_drm *tegra = drm->dev_private; | 108 | struct tegra_drm *tegra = drm->dev_private; |
| 109 | 109 | ||
| 110 | tegra_fbdev_restore_mode(tegra->fbdev); | 110 | tegra_fbdev_restore_mode(tegra->fbdev); |
diff --git a/drivers/gpu/drm/tegra/rgb.c b/drivers/gpu/drm/tegra/rgb.c index 338f7f6561d7..0266fb40479e 100644 --- a/drivers/gpu/drm/tegra/rgb.c +++ b/drivers/gpu/drm/tegra/rgb.c | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | struct tegra_rgb { | 15 | struct tegra_rgb { |
| 16 | struct tegra_output output; | 16 | struct tegra_output output; |
| 17 | struct tegra_dc *dc; | 17 | struct tegra_dc *dc; |
| 18 | bool enabled; | ||
| 18 | 19 | ||
| 19 | struct clk *clk_parent; | 20 | struct clk *clk_parent; |
| 20 | struct clk *clk; | 21 | struct clk *clk; |
| @@ -89,6 +90,9 @@ static int tegra_output_rgb_enable(struct tegra_output *output) | |||
| 89 | struct tegra_rgb *rgb = to_rgb(output); | 90 | struct tegra_rgb *rgb = to_rgb(output); |
| 90 | unsigned long value; | 91 | unsigned long value; |
| 91 | 92 | ||
| 93 | if (rgb->enabled) | ||
| 94 | return 0; | ||
| 95 | |||
| 92 | tegra_dc_write_regs(rgb->dc, rgb_enable, ARRAY_SIZE(rgb_enable)); | 96 | tegra_dc_write_regs(rgb->dc, rgb_enable, ARRAY_SIZE(rgb_enable)); |
| 93 | 97 | ||
| 94 | value = DE_SELECT_ACTIVE | DE_CONTROL_NORMAL; | 98 | value = DE_SELECT_ACTIVE | DE_CONTROL_NORMAL; |
| @@ -122,6 +126,8 @@ static int tegra_output_rgb_enable(struct tegra_output *output) | |||
| 122 | tegra_dc_writel(rgb->dc, GENERAL_ACT_REQ << 8, DC_CMD_STATE_CONTROL); | 126 | tegra_dc_writel(rgb->dc, GENERAL_ACT_REQ << 8, DC_CMD_STATE_CONTROL); |
| 123 | tegra_dc_writel(rgb->dc, GENERAL_ACT_REQ, DC_CMD_STATE_CONTROL); | 127 | tegra_dc_writel(rgb->dc, GENERAL_ACT_REQ, DC_CMD_STATE_CONTROL); |
| 124 | 128 | ||
| 129 | rgb->enabled = true; | ||
| 130 | |||
| 125 | return 0; | 131 | return 0; |
| 126 | } | 132 | } |
| 127 | 133 | ||
| @@ -130,6 +136,9 @@ static int tegra_output_rgb_disable(struct tegra_output *output) | |||
| 130 | struct tegra_rgb *rgb = to_rgb(output); | 136 | struct tegra_rgb *rgb = to_rgb(output); |
| 131 | unsigned long value; | 137 | unsigned long value; |
| 132 | 138 | ||
| 139 | if (!rgb->enabled) | ||
| 140 | return 0; | ||
| 141 | |||
| 133 | value = tegra_dc_readl(rgb->dc, DC_CMD_DISPLAY_POWER_CONTROL); | 142 | value = tegra_dc_readl(rgb->dc, DC_CMD_DISPLAY_POWER_CONTROL); |
| 134 | value &= ~(PW0_ENABLE | PW1_ENABLE | PW2_ENABLE | PW3_ENABLE | | 143 | value &= ~(PW0_ENABLE | PW1_ENABLE | PW2_ENABLE | PW3_ENABLE | |
| 135 | PW4_ENABLE | PM0_ENABLE | PM1_ENABLE); | 144 | PW4_ENABLE | PM0_ENABLE | PM1_ENABLE); |
| @@ -144,6 +153,8 @@ static int tegra_output_rgb_disable(struct tegra_output *output) | |||
| 144 | 153 | ||
| 145 | tegra_dc_write_regs(rgb->dc, rgb_disable, ARRAY_SIZE(rgb_disable)); | 154 | tegra_dc_write_regs(rgb->dc, rgb_disable, ARRAY_SIZE(rgb_disable)); |
| 146 | 155 | ||
| 156 | rgb->enabled = false; | ||
| 157 | |||
| 147 | return 0; | 158 | return 0; |
| 148 | } | 159 | } |
| 149 | 160 | ||
diff --git a/drivers/gpu/drm/vmwgfx/svga3d_reg.h b/drivers/gpu/drm/vmwgfx/svga3d_reg.h index bb594c11605e..f58dc7dd15c5 100644 --- a/drivers/gpu/drm/vmwgfx/svga3d_reg.h +++ b/drivers/gpu/drm/vmwgfx/svga3d_reg.h | |||
| @@ -261,12 +261,7 @@ typedef enum SVGA3dSurfaceFormat { | |||
| 261 | /* Planar video formats. */ | 261 | /* Planar video formats. */ |
| 262 | SVGA3D_YV12 = 121, | 262 | SVGA3D_YV12 = 121, |
| 263 | 263 | ||
| 264 | /* Shader constant formats. */ | 264 | SVGA3D_FORMAT_MAX = 122, |
| 265 | SVGA3D_SURFACE_SHADERCONST_FLOAT = 122, | ||
| 266 | SVGA3D_SURFACE_SHADERCONST_INT = 123, | ||
| 267 | SVGA3D_SURFACE_SHADERCONST_BOOL = 124, | ||
| 268 | |||
| 269 | SVGA3D_FORMAT_MAX = 125, | ||
| 270 | } SVGA3dSurfaceFormat; | 265 | } SVGA3dSurfaceFormat; |
| 271 | 266 | ||
| 272 | typedef uint32 SVGA3dColor; /* a, r, g, b */ | 267 | typedef uint32 SVGA3dColor; /* a, r, g, b */ |
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h index 9e4be1725985..07831554dad7 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | |||
| @@ -40,7 +40,7 @@ | |||
| 40 | #include <drm/ttm/ttm_module.h> | 40 | #include <drm/ttm/ttm_module.h> |
| 41 | #include "vmwgfx_fence.h" | 41 | #include "vmwgfx_fence.h" |
| 42 | 42 | ||
| 43 | #define VMWGFX_DRIVER_DATE "20121114" | 43 | #define VMWGFX_DRIVER_DATE "20140228" |
| 44 | #define VMWGFX_DRIVER_MAJOR 2 | 44 | #define VMWGFX_DRIVER_MAJOR 2 |
| 45 | #define VMWGFX_DRIVER_MINOR 5 | 45 | #define VMWGFX_DRIVER_MINOR 5 |
| 46 | #define VMWGFX_DRIVER_PATCHLEVEL 0 | 46 | #define VMWGFX_DRIVER_PATCHLEVEL 0 |
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c b/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c index d4a5a19cb8c3..04a64b8cd3cd 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c | |||
| @@ -188,18 +188,20 @@ static void vmw_takedown_otable_base(struct vmw_private *dev_priv, | |||
| 188 | 188 | ||
| 189 | bo = otable->page_table->pt_bo; | 189 | bo = otable->page_table->pt_bo; |
| 190 | cmd = vmw_fifo_reserve(dev_priv, sizeof(*cmd)); | 190 | cmd = vmw_fifo_reserve(dev_priv, sizeof(*cmd)); |
| 191 | if (unlikely(cmd == NULL)) | 191 | if (unlikely(cmd == NULL)) { |
| 192 | DRM_ERROR("Failed reserving FIFO space for OTable setup.\n"); | 192 | DRM_ERROR("Failed reserving FIFO space for OTable " |
| 193 | 193 | "takedown.\n"); | |
| 194 | memset(cmd, 0, sizeof(*cmd)); | 194 | } else { |
| 195 | cmd->header.id = SVGA_3D_CMD_SET_OTABLE_BASE; | 195 | memset(cmd, 0, sizeof(*cmd)); |
| 196 | cmd->header.size = sizeof(cmd->body); | 196 | cmd->header.id = SVGA_3D_CMD_SET_OTABLE_BASE; |
| 197 | cmd->body.type = type; | 197 | cmd->header.size = sizeof(cmd->body); |
| 198 | cmd->body.baseAddress = 0; | 198 | cmd->body.type = type; |
| 199 | cmd->body.sizeInBytes = 0; | 199 | cmd->body.baseAddress = 0; |
| 200 | cmd->body.validSizeInBytes = 0; | 200 | cmd->body.sizeInBytes = 0; |
| 201 | cmd->body.ptDepth = SVGA3D_MOBFMT_INVALID; | 201 | cmd->body.validSizeInBytes = 0; |
| 202 | vmw_fifo_commit(dev_priv, sizeof(*cmd)); | 202 | cmd->body.ptDepth = SVGA3D_MOBFMT_INVALID; |
| 203 | vmw_fifo_commit(dev_priv, sizeof(*cmd)); | ||
| 204 | } | ||
| 203 | 205 | ||
| 204 | if (bo) { | 206 | if (bo) { |
| 205 | int ret; | 207 | int ret; |
| @@ -562,11 +564,12 @@ void vmw_mob_unbind(struct vmw_private *dev_priv, | |||
| 562 | if (unlikely(cmd == NULL)) { | 564 | if (unlikely(cmd == NULL)) { |
| 563 | DRM_ERROR("Failed reserving FIFO space for Memory " | 565 | DRM_ERROR("Failed reserving FIFO space for Memory " |
| 564 | "Object unbinding.\n"); | 566 | "Object unbinding.\n"); |
| 567 | } else { | ||
| 568 | cmd->header.id = SVGA_3D_CMD_DESTROY_GB_MOB; | ||
| 569 | cmd->header.size = sizeof(cmd->body); | ||
| 570 | cmd->body.mobid = mob->id; | ||
| 571 | vmw_fifo_commit(dev_priv, sizeof(*cmd)); | ||
| 565 | } | 572 | } |
| 566 | cmd->header.id = SVGA_3D_CMD_DESTROY_GB_MOB; | ||
| 567 | cmd->header.size = sizeof(cmd->body); | ||
| 568 | cmd->body.mobid = mob->id; | ||
| 569 | vmw_fifo_commit(dev_priv, sizeof(*cmd)); | ||
| 570 | if (bo) { | 573 | if (bo) { |
| 571 | vmw_fence_single_bo(bo, NULL); | 574 | vmw_fence_single_bo(bo, NULL); |
| 572 | ttm_bo_unreserve(bo); | 575 | ttm_bo_unreserve(bo); |
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c index 2aa4bc6a4d60..9757b57f8388 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c | |||
| @@ -427,8 +427,7 @@ int vmw_dmabuf_init(struct vmw_private *dev_priv, | |||
| 427 | INIT_LIST_HEAD(&vmw_bo->res_list); | 427 | INIT_LIST_HEAD(&vmw_bo->res_list); |
| 428 | 428 | ||
| 429 | ret = ttm_bo_init(bdev, &vmw_bo->base, size, | 429 | ret = ttm_bo_init(bdev, &vmw_bo->base, size, |
| 430 | (user) ? ttm_bo_type_device : | 430 | ttm_bo_type_device, placement, |
| 431 | ttm_bo_type_kernel, placement, | ||
| 432 | 0, interruptible, | 431 | 0, interruptible, |
| 433 | NULL, acc_size, NULL, bo_free); | 432 | NULL, acc_size, NULL, bo_free); |
| 434 | return ret; | 433 | return ret; |
diff --git a/drivers/gpu/host1x/job.c b/drivers/gpu/host1x/job.c index 1146e3bba6e1..112f27e51bc7 100644 --- a/drivers/gpu/host1x/job.c +++ b/drivers/gpu/host1x/job.c | |||
| @@ -538,7 +538,7 @@ int host1x_job_pin(struct host1x_job *job, struct device *dev) | |||
| 538 | 538 | ||
| 539 | g->base = job->gather_addr_phys[i]; | 539 | g->base = job->gather_addr_phys[i]; |
| 540 | 540 | ||
| 541 | for (j = 0; j < job->num_gathers; j++) | 541 | for (j = i + 1; j < job->num_gathers; j++) |
| 542 | if (job->gathers[j].bo == g->bo) | 542 | if (job->gathers[j].bo == g->bo) |
| 543 | job->gathers[j].handled = true; | 543 | job->gathers[j].handled = true; |
| 544 | 544 | ||
