diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3619-drm-amdgpu-cleanup-SA-inti-and-fini-v2.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3619-drm-amdgpu-cleanup-SA-inti-and-fini-v2.patch | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3619-drm-amdgpu-cleanup-SA-inti-and-fini-v2.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3619-drm-amdgpu-cleanup-SA-inti-and-fini-v2.patch new file mode 100644 index 00000000..3d22674e --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3619-drm-amdgpu-cleanup-SA-inti-and-fini-v2.patch @@ -0,0 +1,166 @@ +From 9618199a2ee96e368d910f353b66e7e47dfe1762 Mon Sep 17 00:00:00 2001 +From: Monk Liu <Monk.Liu@amd.com> +Date: Fri, 26 Jan 2018 16:57:25 +0800 +Subject: [PATCH 3619/4131] drm/amdgpu: cleanup SA inti and fini(v2) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +should use bo_create_kernel instead of split to two +function that create and pin the SA bo + +issue: +before this patch, there are DMAR read error in host +side when running SRIOV test, the DMAR address dropped +in the range of SA bo. + +fix: +after this cleanups of SA init and fini, above DMAR +eror gone. + +v2: +keep sa_bo's fini instead of suspend, to keep +reporting error + +Change-Id: I3f299a3342bd7263776bff69e4b31b0d3816749a +Signed-off-by: Monk Liu <Monk.Liu@amd.com> +Reviewed-by: Christian König <christian.koenig@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c | 6 --- + drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 2 - + drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c | 62 ++++++------------------------ + 3 files changed, 11 insertions(+), 59 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c +index e683e3a..29c8015 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c +@@ -286,11 +286,6 @@ int amdgpu_ib_pool_init(struct amdgpu_device *adev) + return r; + } + +- r = amdgpu_sa_bo_manager_start(adev, &adev->ring_tmp_bo); +- if (r) { +- return r; +- } +- + adev->ib_pool_ready = true; + if (amdgpu_debugfs_sa_init(adev)) { + dev_err(adev->dev, "failed to register debugfs file for SA\n"); +@@ -309,7 +304,6 @@ int amdgpu_ib_pool_init(struct amdgpu_device *adev) + void amdgpu_ib_pool_fini(struct amdgpu_device *adev) + { + if (adev->ib_pool_ready) { +- amdgpu_sa_bo_manager_suspend(adev, &adev->ring_tmp_bo); + amdgpu_sa_bo_manager_fini(adev, &adev->ring_tmp_bo); + adev->ib_pool_ready = false; + } +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h +index f1f031e..818b31b 100755 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h +@@ -294,8 +294,6 @@ void amdgpu_sa_bo_manager_fini(struct amdgpu_device *adev, + struct amdgpu_sa_manager *sa_manager); + int amdgpu_sa_bo_manager_start(struct amdgpu_device *adev, + struct amdgpu_sa_manager *sa_manager); +-int amdgpu_sa_bo_manager_suspend(struct amdgpu_device *adev, +- struct amdgpu_sa_manager *sa_manager); + int amdgpu_sa_bo_new(struct amdgpu_sa_manager *sa_manager, + struct amdgpu_sa_bo **sa_bo, + unsigned size, unsigned align); +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c +index 5ca75a4..fb1667b 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c +@@ -63,21 +63,27 @@ int amdgpu_sa_bo_manager_init(struct amdgpu_device *adev, + for (i = 0; i < AMDGPU_SA_NUM_FENCE_LISTS; ++i) + INIT_LIST_HEAD(&sa_manager->flist[i]); + +- r = amdgpu_bo_create(adev, size, align, true, domain, +- 0, NULL, NULL, &sa_manager->bo); ++ r = amdgpu_bo_create_kernel(adev, size, align, domain, &sa_manager->bo, ++ &sa_manager->gpu_addr, &sa_manager->cpu_ptr); + if (r) { + dev_err(adev->dev, "(%d) failed to allocate bo for manager\n", r); + return r; + } + ++ memset(sa_manager->cpu_ptr, 0, sa_manager->size); + return r; + } + + void amdgpu_sa_bo_manager_fini(struct amdgpu_device *adev, +- struct amdgpu_sa_manager *sa_manager) ++ struct amdgpu_sa_manager *sa_manager) + { + struct amdgpu_sa_bo *sa_bo, *tmp; + ++ if (sa_manager->bo == NULL) { ++ dev_err(adev->dev, "no bo for sa manager\n"); ++ return; ++ } ++ + if (!list_empty(&sa_manager->olist)) { + sa_manager->hole = &sa_manager->olist, + amdgpu_sa_bo_try_free(sa_manager); +@@ -88,55 +94,9 @@ void amdgpu_sa_bo_manager_fini(struct amdgpu_device *adev, + list_for_each_entry_safe(sa_bo, tmp, &sa_manager->olist, olist) { + amdgpu_sa_bo_remove_locked(sa_bo); + } +- amdgpu_bo_unref(&sa_manager->bo); +- sa_manager->size = 0; +-} +- +-int amdgpu_sa_bo_manager_start(struct amdgpu_device *adev, +- struct amdgpu_sa_manager *sa_manager) +-{ +- int r; +- +- if (sa_manager->bo == NULL) { +- dev_err(adev->dev, "no bo for sa manager\n"); +- return -EINVAL; +- } + +- /* map the buffer */ +- r = amdgpu_bo_reserve(sa_manager->bo, false); +- if (r) { +- dev_err(adev->dev, "(%d) failed to reserve manager bo\n", r); +- return r; +- } +- r = amdgpu_bo_pin(sa_manager->bo, sa_manager->domain, &sa_manager->gpu_addr); +- if (r) { +- amdgpu_bo_unreserve(sa_manager->bo); +- dev_err(adev->dev, "(%d) failed to pin manager bo\n", r); +- return r; +- } +- r = amdgpu_bo_kmap(sa_manager->bo, &sa_manager->cpu_ptr); +- memset(sa_manager->cpu_ptr, 0, sa_manager->size); +- amdgpu_bo_unreserve(sa_manager->bo); +- return r; +-} +- +-int amdgpu_sa_bo_manager_suspend(struct amdgpu_device *adev, +- struct amdgpu_sa_manager *sa_manager) +-{ +- int r; +- +- if (sa_manager->bo == NULL) { +- dev_err(adev->dev, "no bo for sa manager\n"); +- return -EINVAL; +- } +- +- r = amdgpu_bo_reserve(sa_manager->bo, true); +- if (!r) { +- amdgpu_bo_kunmap(sa_manager->bo); +- amdgpu_bo_unpin(sa_manager->bo); +- amdgpu_bo_unreserve(sa_manager->bo); +- } +- return r; ++ amdgpu_bo_free_kernel(&sa_manager->bo, &sa_manager->gpu_addr, &sa_manager->cpu_ptr); ++ sa_manager->size = 0; + } + + static void amdgpu_sa_bo_remove_locked(struct amdgpu_sa_bo *sa_bo) +-- +2.7.4 + |