drm/amdgpu/virt: add wait_reset virt ops
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. Acked-by: Alex Deucher <alexander.deucher@amd.com> Reviewed-by: Monk Liu <monk.liu@amd.com> Signed-off-by: pding <Pixel.Ding@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
a16f8f11c5
commit
b636176efd
@ -235,6 +235,22 @@ int amdgpu_virt_reset_gpu(struct amdgpu_device *adev)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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_virt_alloc_mm_table() - alloc memory for mm table
|
||||||
* @amdgpu: amdgpu device.
|
* @amdgpu: amdgpu device.
|
||||||
|
@ -55,6 +55,7 @@ struct amdgpu_virt_ops {
|
|||||||
int (*req_full_gpu)(struct amdgpu_device *adev, bool init);
|
int (*req_full_gpu)(struct amdgpu_device *adev, bool init);
|
||||||
int (*rel_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 (*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);
|
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_request_full_gpu(struct amdgpu_device *adev, bool init);
|
||||||
int amdgpu_virt_release_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_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_sriov_gpu_reset(struct amdgpu_device *adev, struct amdgpu_job *job);
|
||||||
int amdgpu_virt_alloc_mm_table(struct amdgpu_device *adev);
|
int amdgpu_virt_alloc_mm_table(struct amdgpu_device *adev);
|
||||||
void amdgpu_virt_free_mm_table(struct amdgpu_device *adev);
|
void amdgpu_virt_free_mm_table(struct amdgpu_device *adev);
|
||||||
|
Loading…
Reference in New Issue
Block a user