aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2215-drm-amdgpu-add-the-trailing-fence-per-ring.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2215-drm-amdgpu-add-the-trailing-fence-per-ring.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2215-drm-amdgpu-add-the-trailing-fence-per-ring.patch96
1 files changed, 96 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2215-drm-amdgpu-add-the-trailing-fence-per-ring.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2215-drm-amdgpu-add-the-trailing-fence-per-ring.patch
new file mode 100644
index 00000000..3e785402
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2215-drm-amdgpu-add-the-trailing-fence-per-ring.patch
@@ -0,0 +1,96 @@
+From a32ebb7724f52b9247003da6ad31600380911655 Mon Sep 17 00:00:00 2001
+From: Jack Xiao <Jack.Xiao@amd.com>
+Date: Thu, 10 Jan 2019 14:28:08 +0800
+Subject: [PATCH 2215/2940] drm/amdgpu: add the trailing fence per ring
+
+The trailing fence for ring is used to track the
+completion of preemption.
+
+Acked-by: Hawking Zhang <Hawking.Zhang@amd.com>
+Signed-off-by: Jack Xiao <Jack.Xiao@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c | 18 +++++++++++++-----
+ drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 10 ++++++++++
+ drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 4 ++++
+ 3 files changed, 27 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
+index 68036aa596c1..a947fe4e2368 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
+@@ -707,22 +707,30 @@ static int amdgpu_debugfs_fence_info(struct seq_file *m, void *data)
+ amdgpu_fence_process(ring);
+
+ seq_printf(m, "--- ring %d (%s) ---\n", i, ring->name);
+- seq_printf(m, "Last signaled fence 0x%08x\n",
++ seq_printf(m, "Last signaled fence 0x%08x\n",
+ atomic_read(&ring->fence_drv.last_seq));
+- seq_printf(m, "Last emitted 0x%08x\n",
++ seq_printf(m, "Last emitted 0x%08x\n",
+ ring->fence_drv.sync_seq);
+
++ if (ring->funcs->type == AMDGPU_RING_TYPE_GFX ||
++ ring->funcs->type == AMDGPU_RING_TYPE_SDMA) {
++ seq_printf(m, "Last signaled trailing fence 0x%08x\n",
++ le32_to_cpu(*ring->trail_fence_cpu_addr));
++ seq_printf(m, "Last emitted 0x%08x\n",
++ ring->trail_seq);
++ }
++
+ if (ring->funcs->type != AMDGPU_RING_TYPE_GFX)
+ continue;
+
+ /* set in CP_VMID_PREEMPT and preemption occurred */
+- seq_printf(m, "Last preempted 0x%08x\n",
++ seq_printf(m, "Last preempted 0x%08x\n",
+ le32_to_cpu(*(ring->fence_drv.cpu_addr + 2)));
+ /* set in CP_VMID_RESET and reset occurred */
+- seq_printf(m, "Last reset 0x%08x\n",
++ seq_printf(m, "Last reset 0x%08x\n",
+ le32_to_cpu(*(ring->fence_drv.cpu_addr + 4)));
+ /* Both preemption and reset occurred */
+- seq_printf(m, "Last both 0x%08x\n",
++ seq_printf(m, "Last both 0x%08x\n",
+ le32_to_cpu(*(ring->fence_drv.cpu_addr + 6)));
+ }
+ return 0;
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
+index ff6976eaa919..233729ed71cc 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
+@@ -281,6 +281,16 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
+ return r;
+ }
+
++ r = amdgpu_device_wb_get(adev, &ring->trail_fence_offs);
++ if (r) {
++ dev_err(adev->dev,
++ "(%d) ring trail_fence_offs wb alloc failed\n", r);
++ return r;
++ }
++ ring->trail_fence_gpu_addr =
++ adev->wb.gpu_addr + (ring->trail_fence_offs * 4);
++ ring->trail_fence_cpu_addr = &adev->wb.wb[ring->trail_fence_offs];
++
+ r = amdgpu_device_wb_get(adev, &ring->cond_exe_offs);
+ if (r) {
+ dev_err(adev->dev, "(%d) ring cond_exec_polling wb alloc failed\n", r);
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
+index 764bf851c1df..0f497fa213aa 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
+@@ -206,6 +206,10 @@ struct amdgpu_ring {
+ unsigned fence_offs;
+ uint64_t current_ctx;
+ char name[16];
++ u32 trail_seq;
++ unsigned trail_fence_offs;
++ u64 trail_fence_gpu_addr;
++ volatile u32 *trail_fence_cpu_addr;
+ unsigned cond_exe_offs;
+ u64 cond_exe_gpu_addr;
+ volatile u32 *cond_exe_cpu_addr;
+--
+2.17.1
+