> -----Original Message----- > From: amd-gfx [mailto:amd-gfx-bounces at lists.freedesktop.org] On Behalf > Of Xiangliang Yu > Sent: Tuesday, January 10, 2017 5:01 AM > To: amd-gfx at lists.freedesktop.org > Cc: Yu, Xiangliang > Subject: [V2 07/11] 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 at amd.com> Reviewed-by: Alex Deucher <alexander.deucher at amd.com> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 9 +++++++++ > drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 6 ++++++ > 2 files changed, 15 insertions(+) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > index 9a2fd3e..03d28a1 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c > @@ -1330,6 +1330,12 @@ static int amdgpu_early_init(struct > amdgpu_device *adev) > 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++) { > if ((amdgpu_ip_block_mask & (1 << i)) == 0) { > DRM_ERROR("disabled ip block: %d\n", i); > @@ -1523,6 +1529,9 @@ static int amdgpu_fini(struct amdgpu_device > *adev) > adev->ip_blocks[i].status.late_initialized = false; > } > > + if (amdgpu_sriov_vf(adev)) > + amdgpu_virt_release_full_gpu(adev, false); > + > return 0; > } > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c > index 47bc8e1..eb228c7 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c > @@ -60,6 +60,9 @@ int amdgpu_driver_unload_kms(struct drm_device > *dev) > if (adev->rmmio == NULL) > goto done_free; > > + if (amdgpu_sriov_vf(adev)) > + amdgpu_virt_request_full_gpu(adev, false); > + > if (amdgpu_device_is_px(dev)) { > pm_runtime_get_sync(dev->dev); > pm_runtime_forbid(dev->dev); > @@ -139,6 +142,9 @@ int amdgpu_driver_load_kms(struct drm_device > *dev, unsigned long flags) > pm_runtime_put_autosuspend(dev->dev); > } > > + if (amdgpu_sriov_vf(adev)) > + amdgpu_virt_release_full_gpu(adev, true); > + > out: > if (r) { > /* balance pm_runtime_get_sync in > amdgpu_driver_unload_kms */ > -- > 2.7.4 > > _______________________________________________ > amd-gfx mailing list > amd-gfx at lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/amd-gfx