diff options
| author | Dave Airlie <[email protected]> | 2021-06-18 12:55:08 +1000 | 
|---|---|---|
| committer | Dave Airlie <[email protected]> | 2021-06-18 12:55:09 +1000 | 
| commit | d472b36efbf8a27dc8a80519db8b5a8caffe42b6 (patch) | |
| tree | 5672afd20a72c589800b819b34f7c391686eda15 /drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | |
| parent | 43ccc7831fc4864b99954914537ec3c819997f41 (diff) | |
| parent | a4b0b97aace09716a635e1a64c7e54e51f4a0f51 (diff) | |
Merge tag 'amd-drm-next-5.14-2021-06-16' of https://gitlab.freedesktop.org/agd5f/linux into drm-next
amd-drm-next-5.14-2021-06-16:
amdgpu:
- Aldebaran fixes
- Expose asic independent throttler status
- BACO fixes for navi1x
- Smartshift fixes
- Misc code cleanups
- RAS fixes for Sienna Cichlid
- Gamma verificaton fixes
- DC LTTPR fixes
- DP AUX timeout handling fixes
- GFX9, 10 powergating fixes
amdkfd:
- TLB flush fixes when using SDMA
- Locking fixes
- SVM fixes
Signed-off-by: Dave Airlie <[email protected]>
From: Alex Deucher <[email protected]>
Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 44 | 
1 files changed, 43 insertions, 1 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c index 425596c2f6f8..96ef3f1051d8 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c @@ -124,6 +124,22 @@ void amdgpu_register_gpu_instance(struct amdgpu_device *adev)  	mutex_unlock(&mgpu_info.mutex);  } +static void amdgpu_get_audio_func(struct amdgpu_device *adev) +{ +	struct pci_dev *p = NULL; + +	p = pci_get_domain_bus_and_slot(pci_domain_nr(adev->pdev->bus), +			adev->pdev->bus->number, 1); +	if (p) { +		pm_runtime_get_sync(&p->dev); + +		pm_runtime_mark_last_busy(&p->dev); +		pm_runtime_put_autosuspend(&p->dev); + +		pci_dev_put(p); +	} +} +  /**   * amdgpu_driver_load_kms - Main load function for KMS.   * @@ -213,9 +229,35 @@ int amdgpu_driver_load_kms(struct amdgpu_device *adev, unsigned long flags)  						DPM_FLAG_MAY_SKIP_RESUME);  		pm_runtime_use_autosuspend(dev->dev);  		pm_runtime_set_autosuspend_delay(dev->dev, 5000); +  		pm_runtime_allow(dev->dev); +  		pm_runtime_mark_last_busy(dev->dev);  		pm_runtime_put_autosuspend(dev->dev); + +		/* +		 * For runpm implemented via BACO, PMFW will handle the +		 * timing for BACO in and out: +		 *   - put ASIC into BACO state only when both video and +		 *     audio functions are in D3 state. +		 *   - pull ASIC out of BACO state when either video or +		 *     audio function is in D0 state. +		 * Also, at startup, PMFW assumes both functions are in +		 * D0 state. +		 * +		 * So if snd driver was loaded prior to amdgpu driver +		 * and audio function was put into D3 state, there will +		 * be no PMFW-aware D-state transition(D0->D3) on runpm +		 * suspend. Thus the BACO will be not correctly kicked in. +		 * +		 * Via amdgpu_get_audio_func(), the audio dev is put +		 * into D0 state. Then there will be a PMFW-aware D-state +		 * transition(D0->D3) on runpm suspend. +		 */ +		if (amdgpu_device_supports_baco(dev) && +		    !(adev->flags & AMD_IS_APU) && +		    (adev->asic_type >= CHIP_NAVI10)) +			amdgpu_get_audio_func(adev);  	}  	if (amdgpu_acpi_smart_shift_update(dev, AMDGPU_SS_DRV_LOAD)) @@ -1220,7 +1262,7 @@ void amdgpu_driver_postclose_kms(struct drm_device *dev,  	}  	pasid = fpriv->vm.pasid; -	pd = amdgpu_bo_ref(fpriv->vm.root.base.bo); +	pd = amdgpu_bo_ref(fpriv->vm.root.bo);  	amdgpu_ctx_mgr_fini(&fpriv->ctx_mgr);  	amdgpu_vm_fini(adev, &fpriv->vm); |