aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2220-drm-amdgpu-sdma-allocate-CSA-per-sdma-ring.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2220-drm-amdgpu-sdma-allocate-CSA-per-sdma-ring.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2220-drm-amdgpu-sdma-allocate-CSA-per-sdma-ring.patch70
1 files changed, 70 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2220-drm-amdgpu-sdma-allocate-CSA-per-sdma-ring.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2220-drm-amdgpu-sdma-allocate-CSA-per-sdma-ring.patch
new file mode 100644
index 00000000..e67a7516
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2220-drm-amdgpu-sdma-allocate-CSA-per-sdma-ring.patch
@@ -0,0 +1,70 @@
+From 008b81feeb99cd65c77085ff14790639eea33a85 Mon Sep 17 00:00:00 2001
+From: Jack Xiao <Jack.Xiao@amd.com>
+Date: Mon, 7 Jan 2019 15:28:01 +0800
+Subject: [PATCH 2220/2940] drm/amdgpu/sdma: allocate CSA per sdma ring
+
+Allocate CSA for the given sdma ring.
+
+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_sdma.c | 27 ++++++++++++++++++++++++
+ drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h | 1 +
+ 2 files changed, 28 insertions(+)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c
+index 115bb0c99b0f..7ddffbf65999 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c
+@@ -24,6 +24,10 @@
+ #include "amdgpu.h"
+ #include "amdgpu_sdma.h"
+
++#define AMDGPU_CSA_SDMA_SIZE 64
++/* SDMA CSA reside in the 3rd page of CSA */
++#define AMDGPU_CSA_SDMA_OFFSET (4096 * 2)
++
+ /*
+ * GPU SDMA IP block helpers function.
+ */
+@@ -56,3 +60,26 @@ int amdgpu_sdma_get_index_from_ring(struct amdgpu_ring *ring, uint32_t *index)
+
+ return -EINVAL;
+ }
++
++uint64_t amdgpu_sdma_get_csa_mc_addr(struct amdgpu_ring *ring,
++ unsigned vmid)
++{
++ struct amdgpu_device *adev = ring->adev;
++ uint64_t csa_mc_addr;
++ uint32_t index = 0;
++ int r;
++
++ if (vmid == 0 || !amdgpu_mcbp)
++ return 0;
++
++ r = amdgpu_sdma_get_index_from_ring(ring, &index);
++
++ if (r || index > 31)
++ csa_mc_addr = 0;
++ else
++ csa_mc_addr = amdgpu_csa_vaddr(adev) +
++ AMDGPU_CSA_SDMA_OFFSET +
++ index * AMDGPU_CSA_SDMA_SIZE;
++
++ return csa_mc_addr;
++}
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h
+index 015d21bfce85..35dd152f9d5c 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h
+@@ -97,4 +97,5 @@ struct amdgpu_buffer_funcs {
+ struct amdgpu_sdma_instance *
+ amdgpu_sdma_get_instance_from_ring(struct amdgpu_ring *ring);
+ int amdgpu_sdma_get_index_from_ring(struct amdgpu_ring *ring, uint32_t *index);
++uint64_t amdgpu_sdma_get_csa_mc_addr(struct amdgpu_ring *ring, unsigned vmid);
+ #endif
+--
+2.17.1
+