[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