diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2164-drm-amdgpu-gfx8-Fix-compute-ring-failure-after-reset.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2164-drm-amdgpu-gfx8-Fix-compute-ring-failure-after-reset.patch | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2164-drm-amdgpu-gfx8-Fix-compute-ring-failure-after-reset.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2164-drm-amdgpu-gfx8-Fix-compute-ring-failure-after-reset.patch new file mode 100644 index 00000000..0dfbc364 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2164-drm-amdgpu-gfx8-Fix-compute-ring-failure-after-reset.patch @@ -0,0 +1,47 @@ +From e2ea800efa991ead9c141239489602b3966fd639 Mon Sep 17 00:00:00 2001 +From: "Xiangliang.Yu" <Xiangliang.Yu@amd.com> +Date: Fri, 10 Nov 2017 14:23:38 +0800 +Subject: [PATCH 2164/4131] drm/amdgpu/gfx8: Fix compute ring failure after + resetting + +Do ring clear before ring test, otherwise compute ring test will +fail after gpu resetting. Still can't find the root cause, just +workaround it. + +Signed-off-by: Xiangliang.Yu <Xiangliang.Yu@amd.com> +Acked-by: Monk Liu <Monk.Liu@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c +index 9fe7f39..97497ca 100644 +--- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c ++++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c +@@ -4871,9 +4871,6 @@ static int gfx_v8_0_kcq_init_queue(struct amdgpu_ring *ring) + /* reset MQD to a clean status */ + if (adev->gfx.mec.mqd_backup[mqd_idx]) + memcpy(mqd, adev->gfx.mec.mqd_backup[mqd_idx], sizeof(struct vi_mqd_allocation)); +- /* reset ring buffer */ +- ring->wptr = 0; +- amdgpu_ring_clear_ring(ring); + } else { + amdgpu_ring_clear_ring(ring); + } +@@ -4948,6 +4945,13 @@ static int gfx_v8_0_kiq_resume(struct amdgpu_device *adev) + /* Test KCQs */ + for (i = 0; i < adev->gfx.num_compute_rings; i++) { + ring = &adev->gfx.compute_ring[i]; ++ if (adev->in_gpu_reset) { ++ /* move reset ring buffer to here to workaround ++ * compute ring test failed ++ */ ++ ring->wptr = 0; ++ amdgpu_ring_clear_ring(ring); ++ } + ring->ready = true; + r = amdgpu_ring_test_ring(ring); + if (r) +-- +2.7.4 + |