aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2071-drm-amdgpu-virt-add-wait_reset-virt-ops.patch
diff options
context:
space:
mode:
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.patch67
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
+