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