diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2071-drm-amdgpu-virt-add-wait_reset-virt-ops.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2071-drm-amdgpu-virt-add-wait_reset-virt-ops.patch | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2071-drm-amdgpu-virt-add-wait_reset-virt-ops.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2071-drm-amdgpu-virt-add-wait_reset-virt-ops.patch new file mode 100644 index 00000000..7c48b098 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2071-drm-amdgpu-virt-add-wait_reset-virt-ops.patch @@ -0,0 +1,67 @@ +From 8e0071debca529c33ea151fbedfde149afc0ac16 Mon Sep 17 00:00:00 2001 +From: pding <Pixel.Ding@amd.com> +Date: Tue, 24 Oct 2017 09:51:04 +0800 +Subject: [PATCH 2071/4131] 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> +--- + 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.7.4 + |