aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/1600-drm-amdgpu-Move-IB-pool-init-and-fini-v2.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1600-drm-amdgpu-Move-IB-pool-init-and-fini-v2.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/1600-drm-amdgpu-Move-IB-pool-init-and-fini-v2.patch74
1 files changed, 74 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1600-drm-amdgpu-Move-IB-pool-init-and-fini-v2.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1600-drm-amdgpu-Move-IB-pool-init-and-fini-v2.patch
new file mode 100644
index 00000000..20d69ea8
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1600-drm-amdgpu-Move-IB-pool-init-and-fini-v2.patch
@@ -0,0 +1,74 @@
+From 7126ec1b9fc3409b81b78f15273096112c8b6143 Mon Sep 17 00:00:00 2001
+From: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
+Date: Wed, 6 Mar 2019 16:16:28 -0500
+Subject: [PATCH 1600/2940] drm/amdgpu: Move IB pool init and fini v2
+
+Problem:
+Using SDMA for TLB invalidation in certain ASICs exposed a problem
+of IB pool not being ready while SDMA already up on Init and already
+shutt down while SDMA still running on Fini. This caused
+IB allocation failure. Temproary fix was commited into a
+bringup branch but this is the generic fix.
+
+Fix:
+Init IB pool rigth after GMC is ready but before SDMA is ready.
+Do th opposite for Fini.
+
+v2: Remove restriction on SDMA early init and move amdgpu_ib_pool_fini
+
+Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+index f03e1ba1df94..c9aed77f5ef4 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+@@ -1734,6 +1734,13 @@ static int amdgpu_device_ip_init(struct amdgpu_device *adev)
+ }
+ }
+
++ r = amdgpu_ib_pool_init(adev);
++ if (r) {
++ dev_err(adev->dev, "IB initialization failed (%d).\n", r);
++ amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_IB_INIT_FAIL, 0, r);
++ goto init_failed;
++ }
++
+ r = amdgpu_ucode_create_bo(adev); /* create ucode bo when sw_init complete*/
+ if (r)
+ goto init_failed;
+@@ -1972,6 +1979,7 @@ static int amdgpu_device_ip_fini(struct amdgpu_device *adev)
+ amdgpu_free_static_csa(&adev->virt.csa_obj);
+ amdgpu_device_wb_fini(adev);
+ amdgpu_device_vram_scratch_fini(adev);
++ amdgpu_ib_pool_fini(adev);
+ }
+
+ r = adev->ip_blocks[i].version->funcs->sw_fini((void *)adev);
+@@ -2703,13 +2711,6 @@ int amdgpu_device_init(struct amdgpu_device *adev,
+ /* Get a log2 for easy divisions. */
+ adev->mm_stats.log2_max_MBps = ilog2(max(1u, max_MBps));
+
+- r = amdgpu_ib_pool_init(adev);
+- if (r) {
+- dev_err(adev->dev, "IB initialization failed (%d).\n", r);
+- amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_IB_INIT_FAIL, 0, r);
+- goto failed;
+- }
+-
+ amdgpu_fbdev_init(adev);
+
+ r = amdgpu_pm_sysfs_init(adev);
+@@ -2787,7 +2788,6 @@ void amdgpu_device_fini(struct amdgpu_device *adev)
+ else
+ drm_atomic_helper_shutdown(adev->ddev);
+ }
+- amdgpu_ib_pool_fini(adev);
+ amdgpu_fence_driver_fini(adev);
+ amdgpu_pm_sysfs_fini(adev);
+ amdgpu_fbdev_fini(adev);
+--
+2.17.1
+