[PATCH 5/7] drm/amdgpu/virt: add wait_reset virt ops
Alex Deucher
alexdeucher at gmail.com
Wed Oct 25 22:41:07 UTC 2017
On Tue, Oct 24, 2017 at 10:17 PM, Pixel Ding <Pixel.Ding at amd.com> wrote:
> From: pding <Pixel.Ding at amd.com>
>
> Hi Alex,
>
> Split the wait_reset patch to 2. Part 1.
>
> please review.
>
> ---
> Driver can use this interface to check if there's a function level
> reset done in hypervisor. It's helpful when IRQ handler for reset
> is not ready, or special handling is required.
>
> Signed-off-by: pding <Pixel.Ding at amd.com>
Acked-by: Alex Deucher <alexander.deucher at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 16 ++++++++++++++++
> drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h | 2 ++
> 2 files changed, 18 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> index b385623..fee08af 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
> @@ -234,6 +234,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);
> --
> 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