[PATCH 6/7] drm/amdgpu/virt: add wait_reset virt ops

Deucher, Alexander Alexander.Deucher at amd.com
Mon Oct 23 16:28:14 UTC 2017


> -----Original Message-----
> From: amd-gfx [mailto:amd-gfx-bounces at lists.freedesktop.org] On Behalf
> Of Pixel Ding
> Sent: Monday, October 23, 2017 6:04 AM
> To: amd-gfx at lists.freedesktop.org
> Cc: Sun, Gary; Ding, Pixel; Li, Bingley
> Subject: [PATCH 6/7] drm/amdgpu/virt: add wait_reset virt ops
> 
> From: pding <Pixel.Ding at amd.com>
> 
> Driver can use this interface to check if there's a function level
> reset done in hypervisor.
> 

I'd suggest splitting this patch in two, one to add the new callback, and one to add the implementation for VI.

Alex

> Signed-off-by: pding <Pixel.Ding at amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 16 ++++++++++++++++
>  drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h |  2 ++
>  drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c    |  1 +
>  drivers/gpu/drm/amd/amdgpu/mxgpu_vi.c    |  6 ++++++
>  4 files changed, 25 insertions(+)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> index 33dac7e..6a4a901 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> @@ -231,6 +231,22 @@ int amdgpu_virt_reset_gpu(struct amdgpu_device
> *adev)
>  }
> 
>  /**
> + * amdgpu_virt_wait_reset() - wait for reset gpu completed
> + * @amdgpu:	amdgpu device.
> + * Wait for GPU reset completed.
> + * Return: Zero if reset success, otherwise will return error.
> + */
> +int amdgpu_virt_wait_reset(struct amdgpu_device *adev)
> +{
> +	struct amdgpu_virt *virt = &adev->virt;
> +
> +	if (!virt->ops || !virt->ops->wait_reset)
> +		return -EINVAL;
> +
> +	return virt->ops->wait_reset(adev);
> +}
> +
> +/**
>   * amdgpu_virt_alloc_mm_table() - alloc memory for mm table
>   * @amdgpu:	amdgpu device.
>   * MM table is used by UVD and VCE for its initialization
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h
> index 81efb9d..d149aca 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h
> @@ -55,6 +55,7 @@ struct amdgpu_virt_ops {
>  	int (*req_full_gpu)(struct amdgpu_device *adev, bool init);
>  	int (*rel_full_gpu)(struct amdgpu_device *adev, bool init);
>  	int (*reset_gpu)(struct amdgpu_device *adev);
> +	int (*wait_reset)(struct amdgpu_device *adev);
>  	void (*trans_msg)(struct amdgpu_device *adev, u32 req, u32 data1,
> u32 data2, u32 data3);
>  };
> 
> @@ -286,6 +287,7 @@ void amdgpu_virt_kiq_wreg(struct amdgpu_device
> *adev, uint32_t reg, uint32_t v);
>  int amdgpu_virt_request_full_gpu(struct amdgpu_device *adev, bool init);
>  int amdgpu_virt_release_full_gpu(struct amdgpu_device *adev, bool init);
>  int amdgpu_virt_reset_gpu(struct amdgpu_device *adev);
> +int amdgpu_virt_wait_reset(struct amdgpu_device *adev);
>  int amdgpu_sriov_gpu_reset(struct amdgpu_device *adev, struct
> amdgpu_job *job);
>  int amdgpu_virt_alloc_mm_table(struct amdgpu_device *adev);
>  void amdgpu_virt_free_mm_table(struct amdgpu_device *adev);
> diff --git a/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c
> b/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c
> index b4906d2..f91aab3 100644
> --- a/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c
> +++ b/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c
> @@ -353,5 +353,6 @@ const struct amdgpu_virt_ops xgpu_ai_virt_ops = {
>  	.req_full_gpu	= xgpu_ai_request_full_gpu_access,
>  	.rel_full_gpu	= xgpu_ai_release_full_gpu_access,
>  	.reset_gpu = xgpu_ai_request_reset,
> +	.wait_reset = NULL,
>  	.trans_msg = xgpu_ai_mailbox_trans_msg,
>  };
> diff --git a/drivers/gpu/drm/amd/amdgpu/mxgpu_vi.c
> b/drivers/gpu/drm/amd/amdgpu/mxgpu_vi.c
> index c25a831..27b03c7 100644
> --- a/drivers/gpu/drm/amd/amdgpu/mxgpu_vi.c
> +++ b/drivers/gpu/drm/amd/amdgpu/mxgpu_vi.c
> @@ -458,6 +458,11 @@ static int xgpu_vi_request_reset(struct
> amdgpu_device *adev)
>  	return xgpu_vi_send_access_requests(adev,
> IDH_REQ_GPU_RESET_ACCESS);
>  }
> 
> +static int xgpu_vi_wait_reset_cmpl(struct amdgpu_device *adev)
> +{
> +	return xgpu_vi_poll_msg(adev, IDH_FLR_NOTIFICATION_CMPL);
> +}
> +
>  static int xgpu_vi_request_full_gpu_access(struct amdgpu_device *adev,
>  					   bool init)
>  {
> @@ -613,5 +618,6 @@ const struct amdgpu_virt_ops xgpu_vi_virt_ops = {
>  	.req_full_gpu		= xgpu_vi_request_full_gpu_access,
>  	.rel_full_gpu		= xgpu_vi_release_full_gpu_access,
>  	.reset_gpu		= xgpu_vi_request_reset,
> +	.wait_reset             = xgpu_vi_wait_reset_cmpl,
>  	.trans_msg		= NULL, /* Does not need to trans VF errors
> to host. */
>  };
> --
> 2.9.5
> 
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


More information about the amd-gfx mailing list