aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2164-drm-amdgpu-acquire-available-gfx-queues.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2164-drm-amdgpu-acquire-available-gfx-queues.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2164-drm-amdgpu-acquire-available-gfx-queues.patch71
1 files changed, 71 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2164-drm-amdgpu-acquire-available-gfx-queues.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2164-drm-amdgpu-acquire-available-gfx-queues.patch
new file mode 100644
index 00000000..a3ac8c13
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2164-drm-amdgpu-acquire-available-gfx-queues.patch
@@ -0,0 +1,71 @@
+From 885eb03d13f0ea8645191e5325f62dc66948027b Mon Sep 17 00:00:00 2001
+From: Hawking Zhang <Hawking.Zhang@amd.com>
+Date: Wed, 8 Aug 2018 15:16:43 +0800
+Subject: [PATCH 2164/2940] drm/amdgpu: acquire available gfx queues
+
+currently, amdgpu will owns the first gfx queue of each pipe
+they are:
+me:0 pipe:0 queue:0
+me:0 pipe:1 queue:0
+
+Signed-off-by: Hawking Zhang <Hawking.Zhang@amd.com>
+Reviewed-by: Jack Xiao <jack.xiao@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+Acked-by: Felix Kuehling <Felix.Kuehling@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c | 24 ++++++++++++++++++++++++
+ drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h | 2 ++
+ 2 files changed, 26 insertions(+)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
+index 997932ebbb83..855eff834e2a 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
+@@ -199,6 +199,30 @@ void amdgpu_gfx_compute_queue_acquire(struct amdgpu_device *adev)
+ adev->gfx.num_compute_rings = AMDGPU_MAX_COMPUTE_RINGS;
+ }
+
++void amdgpu_gfx_graphics_queue_acquire(struct amdgpu_device *adev)
++{
++ int i, queue, pipe, me;
++
++ for (i = 0; i < AMDGPU_MAX_GFX_QUEUES; ++i) {
++ queue = i % adev->gfx.me.num_queue_per_pipe;
++ pipe = (i / adev->gfx.me.num_queue_per_pipe)
++ % adev->gfx.me.num_pipe_per_me;
++ me = (i / adev->gfx.me.num_queue_per_pipe)
++ / adev->gfx.me.num_pipe_per_me;
++
++ if (me >= adev->gfx.me.num_me)
++ break;
++ /* policy: amdgpu owns the first queue per pipe at this stage
++ * will extend to mulitple queues per pipe later */
++ if (me == 0 && queue < 1)
++ set_bit(i, adev->gfx.me.queue_bitmap);
++ }
++
++ /* update the number of active graphics rings */
++ adev->gfx.num_gfx_rings =
++ bitmap_weight(adev->gfx.me.queue_bitmap, AMDGPU_MAX_GFX_QUEUES);
++}
++
+ static int amdgpu_gfx_kiq_acquire(struct amdgpu_device *adev,
+ struct amdgpu_ring *ring)
+ {
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h
+index 68f7d3cf4fa2..1c5d12eae5a6 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h
+@@ -335,6 +335,8 @@ int amdgpu_gfx_compute_mqd_sw_init(struct amdgpu_device *adev,
+ void amdgpu_gfx_compute_mqd_sw_fini(struct amdgpu_device *adev);
+
+ void amdgpu_gfx_compute_queue_acquire(struct amdgpu_device *adev);
++void amdgpu_gfx_graphics_queue_acquire(struct amdgpu_device *adev);
++
+ int amdgpu_gfx_queue_to_bit(struct amdgpu_device *adev, int mec,
+ int pipe, int queue);
+ void amdgpu_gfx_bit_to_queue(struct amdgpu_device *adev, int bit,
+--
+2.17.1
+