[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