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