[V2 07/11] drm/amdgpu: request/release full gpu access if device is vf

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> -----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


[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux