diff options
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.patch | 74 |
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 + |