drm/amdgpu: request/release full gpu access if device is vf
For gpu vf device, first need to request full gpu access before accessing gpu registers, and release full gpu access after the access is done. Signed-off-by: Xiangliang Yu <Xiangliang.Yu@amd.com> Signed-off-by: Monk Liu <Monk.Liu@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
Родитель
ab71ac56f6
Коммит
3149d9da12
|
@ -1345,6 +1345,12 @@ static int amdgpu_early_init(struct amdgpu_device *adev)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (amdgpu_sriov_vf(adev)) {
|
||||||
|
r = amdgpu_virt_request_full_gpu(adev, true);
|
||||||
|
if (r)
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < adev->num_ip_blocks; i++) {
|
for (i = 0; i < adev->num_ip_blocks; i++) {
|
||||||
if ((amdgpu_ip_block_mask & (1 << i)) == 0) {
|
if ((amdgpu_ip_block_mask & (1 << i)) == 0) {
|
||||||
DRM_ERROR("disabled ip block: %d\n", i);
|
DRM_ERROR("disabled ip block: %d\n", i);
|
||||||
|
@ -1547,8 +1553,10 @@ static int amdgpu_fini(struct amdgpu_device *adev)
|
||||||
adev->ip_blocks[i].status.late_initialized = false;
|
adev->ip_blocks[i].status.late_initialized = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (amdgpu_sriov_vf(adev))
|
if (amdgpu_sriov_vf(adev)) {
|
||||||
amdgpu_bo_free_kernel(&adev->virt.csa_obj, &adev->virt.csa_vmid0_addr, NULL);
|
amdgpu_bo_free_kernel(&adev->virt.csa_obj, &adev->virt.csa_vmid0_addr, NULL);
|
||||||
|
amdgpu_virt_release_full_gpu(adev, false);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,6 +60,9 @@ void amdgpu_driver_unload_kms(struct drm_device *dev)
|
||||||
if (adev->rmmio == NULL)
|
if (adev->rmmio == NULL)
|
||||||
goto done_free;
|
goto done_free;
|
||||||
|
|
||||||
|
if (amdgpu_sriov_vf(adev))
|
||||||
|
amdgpu_virt_request_full_gpu(adev, false);
|
||||||
|
|
||||||
if (amdgpu_device_is_px(dev)) {
|
if (amdgpu_device_is_px(dev)) {
|
||||||
pm_runtime_get_sync(dev->dev);
|
pm_runtime_get_sync(dev->dev);
|
||||||
pm_runtime_forbid(dev->dev);
|
pm_runtime_forbid(dev->dev);
|
||||||
|
@ -138,6 +141,9 @@ int amdgpu_driver_load_kms(struct drm_device *dev, unsigned long flags)
|
||||||
pm_runtime_put_autosuspend(dev->dev);
|
pm_runtime_put_autosuspend(dev->dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (amdgpu_sriov_vf(adev))
|
||||||
|
amdgpu_virt_release_full_gpu(adev, true);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
if (r) {
|
if (r) {
|
||||||
/* balance pm_runtime_get_sync in amdgpu_driver_unload_kms */
|
/* balance pm_runtime_get_sync in amdgpu_driver_unload_kms */
|
||||||
|
|
Загрузка…
Ссылка в новой задаче