Merge branch 'drm-fixes-3.14' of git://people.freedesktop.org/~agd5f/linux into drm-fixes

more radeon fixes

* 'drm-fixes-3.14' of git://people.freedesktop.org/~agd5f/linux:
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

+15 -1
drivers/gpu/drm/radeon/atombios_crtc.c
··· 1774 1774 return ATOM_PPLL1; 1775 1775 DRM_ERROR("unable to allocate a PPLL\n"); 1776 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 1791 } else if (ASIC_IS_DCE4(rdev)) { 1778 1792 /* in DP mode, the DP ref clock can come from PPLL, DCPLL, or ext clock, 1779 1793 * depending on the asic: ··· 1815 1801 if (pll != ATOM_PPLL_INVALID) 1816 1802 return pll; 1817 1803 } 1818 - } else if (!ASIC_IS_DCE41(rdev)) { /* Don't share PLLs on DCE4.1 chips */ 1804 + } else { 1819 1805 /* use the same PPLL for all monitors with the same clock */ 1820 1806 pll = radeon_get_shared_nondp_ppll(crtc); 1821 1807 if (pll != ATOM_PPLL_INVALID)
+9 -6
drivers/gpu/drm/radeon/dce6_afmt.c
··· 278 278 return !ASIC_IS_NODCE(rdev); 279 279 } 280 280 281 - static void dce6_audio_enable(struct radeon_device *rdev, 282 - struct r600_audio_pin *pin, 283 - bool enable) 281 + void dce6_audio_enable(struct radeon_device *rdev, 282 + struct r600_audio_pin *pin, 283 + bool enable) 284 284 { 285 + if (!pin) 286 + return; 287 + 285 288 WREG32_ENDPOINT(pin->offset, AZ_F0_CODEC_PIN_CONTROL_HOTPLUG_CONTROL, 286 - AUDIO_ENABLED); 287 - DRM_INFO("%s audio %d support\n", enable ? "Enabling" : "Disabling", pin->id); 289 + enable ? AUDIO_ENABLED : 0); 288 290 } 289 291 290 292 static const u32 pin_offsets[7] = ··· 325 323 rdev->audio.pin[i].connected = false; 326 324 rdev->audio.pin[i].offset = pin_offsets[i]; 327 325 rdev->audio.pin[i].id = i; 328 - dce6_audio_enable(rdev, &rdev->audio.pin[i], true); 326 + /* disable audio. it will be set up later */ 327 + dce6_audio_enable(rdev, &rdev->audio.pin[i], false); 329 328 } 330 329 331 330 return 0;
+1 -1
drivers/gpu/drm/radeon/evergreen.c
··· 5475 5475 radeon_wb_fini(rdev); 5476 5476 radeon_ib_pool_fini(rdev); 5477 5477 radeon_irq_kms_fini(rdev); 5478 - evergreen_pcie_gart_fini(rdev); 5479 5478 uvd_v1_0_fini(rdev); 5480 5479 radeon_uvd_fini(rdev); 5480 + evergreen_pcie_gart_fini(rdev); 5481 5481 r600_vram_scratch_fini(rdev); 5482 5482 radeon_gem_fini(rdev); 5483 5483 radeon_fence_driver_fini(rdev);
+15 -11
drivers/gpu/drm/radeon/evergreen_hdmi.c
··· 306 306 return; 307 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 318 evergreen_audio_set_dto(encoder, mode->clock); 310 319 311 320 WREG32(HDMI_VBI_PACKET_CONTROL + offset, ··· 418 409 WREG32(AFMT_RAMP_CONTROL1 + offset, 0x007FFFFF); 419 410 WREG32(AFMT_RAMP_CONTROL2 + offset, 0x00000001); 420 411 WREG32(AFMT_RAMP_CONTROL3 + offset, 0x00000001); 412 + 413 + /* enable audio after to setting up hw */ 414 + if (ASIC_IS_DCE6(rdev)) 415 + dce6_audio_enable(rdev, dig->afmt->pin, true); 416 + else 417 + r600_audio_enable(rdev, dig->afmt->pin, true); 421 418 } 422 419 423 420 void evergreen_hdmi_enable(struct drm_encoder *encoder, bool enable) 424 421 { 425 - struct drm_device *dev = encoder->dev; 426 - struct radeon_device *rdev = dev->dev_private; 427 422 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); 428 423 struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv; 429 424 ··· 439 426 return; 440 427 if (!enable && !dig->afmt->enabled) 441 428 return; 442 - 443 - if (enable) { 444 - if (ASIC_IS_DCE6(rdev)) 445 - dig->afmt->pin = dce6_audio_get_pin(rdev); 446 - else 447 - dig->afmt->pin = r600_audio_get_pin(rdev); 448 - } else { 449 - dig->afmt->pin = NULL; 450 - } 451 429 452 430 dig->afmt->enabled = enable; 453 431
+8 -6
drivers/gpu/drm/radeon/r600_audio.c
··· 142 142 } 143 143 144 144 /* enable the audio stream */ 145 - static void r600_audio_enable(struct radeon_device *rdev, 146 - struct r600_audio_pin *pin, 147 - bool enable) 145 + void r600_audio_enable(struct radeon_device *rdev, 146 + struct r600_audio_pin *pin, 147 + bool enable) 148 148 { 149 149 u32 value = 0; 150 + 151 + if (!pin) 152 + return; 150 153 151 154 if (ASIC_IS_DCE4(rdev)) { 152 155 if (enable) { ··· 161 158 WREG32_P(R600_AUDIO_ENABLE, 162 159 enable ? 0x81000000 : 0x0, ~0x81000000); 163 160 } 164 - DRM_INFO("%s audio %d support\n", enable ? "Enabling" : "Disabling", pin->id); 165 161 } 166 162 167 163 /* ··· 180 178 rdev->audio.pin[0].status_bits = 0; 181 179 rdev->audio.pin[0].category_code = 0; 182 180 rdev->audio.pin[0].id = 0; 183 - 184 - r600_audio_enable(rdev, &rdev->audio.pin[0], true); 181 + /* disable audio. it will be set up later */ 182 + r600_audio_enable(rdev, &rdev->audio.pin[0], false); 185 183 186 184 return 0; 187 185 }
+7 -8
drivers/gpu/drm/radeon/r600_hdmi.c
··· 329 329 u8 *sadb; 330 330 int sad_count; 331 331 332 - /* XXX: setting this register causes hangs on some asics */ 333 - return; 334 - 335 332 list_for_each_entry(connector, &encoder->dev->mode_config.connector_list, head) { 336 333 if (connector->encoder == encoder) { 337 334 radeon_connector = to_radeon_connector(connector); ··· 457 460 return; 458 461 offset = dig->afmt->offset; 459 462 463 + /* disable audio prior to setting up hw */ 464 + dig->afmt->pin = r600_audio_get_pin(rdev); 465 + r600_audio_enable(rdev, dig->afmt->pin, false); 466 + 460 467 r600_audio_set_dto(encoder, mode->clock); 461 468 462 469 WREG32(HDMI0_VBI_PACKET_CONTROL + offset, ··· 532 531 WREG32(HDMI0_RAMP_CONTROL3 + offset, 0x00000001); 533 532 534 533 r600_hdmi_audio_workaround(encoder); 534 + 535 + /* enable audio after to setting up hw */ 536 + r600_audio_enable(rdev, dig->afmt->pin, true); 535 537 } 536 538 537 539 /* ··· 654 650 return; 655 651 if (!enable && !dig->afmt->enabled) 656 652 return; 657 - 658 - if (enable) 659 - dig->afmt->pin = r600_audio_get_pin(rdev); 660 - else 661 - dig->afmt->pin = NULL; 662 653 663 654 /* Older chipsets require setting HDMI and routing manually */ 664 655 if (!ASIC_IS_DCE3(rdev)) {
+6
drivers/gpu/drm/radeon/radeon.h
··· 2747 2747 void r600_audio_update_hdmi(struct work_struct *work); 2748 2748 struct r600_audio_pin *r600_audio_get_pin(struct radeon_device *rdev); 2749 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 2758 * R600 vram scratch functions
+2 -1
drivers/gpu/drm/radeon/radeon_atpx_handler.c
··· 219 219 memcpy(&output, info->buffer.pointer, size); 220 220 221 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 225 radeon_atpx_parse_functions(&atpx->functions, output.function_bits); 225 226
+6
drivers/gpu/drm/radeon/radeon_kms.c
··· 537 537 538 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 544 /* map the ib pool buffer read only into 541 545 * virtual address space */ 542 546 bo_va = radeon_vm_bo_add(rdev, &fpriv->vm, ··· 548 544 r = radeon_vm_bo_set_addr(rdev, bo_va, RADEON_VA_IB_OFFSET, 549 545 RADEON_VM_PAGE_READABLE | 550 546 RADEON_VM_PAGE_SNOOPED); 547 + 548 + radeon_bo_unreserve(rdev->ring_tmp_bo.bo); 551 549 if (r) { 552 550 radeon_vm_fini(rdev, &fpriv->vm); 553 551 kfree(fpriv);
+2
drivers/gpu/drm/radeon/radeon_uvd.c
··· 171 171 172 172 radeon_bo_unref(&rdev->uvd.vcpu_bo); 173 173 174 + radeon_ring_fini(rdev, &rdev->ring[R600_RING_TYPE_UVD_INDEX]); 175 + 174 176 release_firmware(rdev->uvd_fw); 175 177 } 176 178
+1 -1
drivers/gpu/drm/radeon/rv770.c
··· 1955 1955 radeon_wb_fini(rdev); 1956 1956 radeon_ib_pool_fini(rdev); 1957 1957 radeon_irq_kms_fini(rdev); 1958 - rv770_pcie_gart_fini(rdev); 1959 1958 uvd_v1_0_fini(rdev); 1960 1959 radeon_uvd_fini(rdev); 1960 + rv770_pcie_gart_fini(rdev); 1961 1961 r600_vram_scratch_fini(rdev); 1962 1962 radeon_gem_fini(rdev); 1963 1963 radeon_fence_driver_fini(rdev);