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