aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1180-drm-amdgpu-clean-up-memory-GDS-GWS-OA-alignment-code.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1180-drm-amdgpu-clean-up-memory-GDS-GWS-OA-alignment-code.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1180-drm-amdgpu-clean-up-memory-GDS-GWS-OA-alignment-code.patch110
1 files changed, 110 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1180-drm-amdgpu-clean-up-memory-GDS-GWS-OA-alignment-code.patch b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1180-drm-amdgpu-clean-up-memory-GDS-GWS-OA-alignment-code.patch
new file mode 100644
index 00000000..3e12dbe1
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1180-drm-amdgpu-clean-up-memory-GDS-GWS-OA-alignment-code.patch
@@ -0,0 +1,110 @@
+From ee27748f1527d1968dba0e6526e0213cf19228ed Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= <marek.olsak@amd.com>
+Date: Tue, 22 Jan 2019 15:44:54 -0500
+Subject: [PATCH 1180/2940] drm/amdgpu: clean up memory/GDS/GWS/OA alignment
+ code
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+- move all adjustments into one place
+- specify GDS/GWS/OA alignment in basic units of the heaps
+- it looks like GDS alignment was 1 instead of 4
+
+Signed-off-by: Marek Olšák <marek.olsak@amd.com>
+Reviewed-by: Christian König <christian.koenig@amd.com>
+Signed-off-by: Chaudhary Amit Kumar <Chaudharyamit.Kumar@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 7 -------
+ drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 16 ++++++++++++----
+ drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 6 +++---
+ 3 files changed, 15 insertions(+), 14 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
+index 270ca7438f34..254a7c6c5724 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
+@@ -62,10 +62,6 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size,
+
+ memset(&bp, 0, sizeof(bp));
+ *obj = NULL;
+- /* At least align on page size */
+- if (alignment < PAGE_SIZE) {
+- alignment = PAGE_SIZE;
+- }
+
+ if ((initial_domain & AMDGPU_GEM_DOMAIN_DGMA) ||
+ (initial_domain & AMDGPU_GEM_DOMAIN_DGMA_IMPORT)) {
+@@ -275,9 +271,6 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,
+ return -EINVAL;
+ }
+ flags |= AMDGPU_GEM_CREATE_NO_CPU_ACCESS;
+- /* GDS allocations must be DW aligned */
+- if (args->in.domains & AMDGPU_GEM_DOMAIN_GDS)
+- size = ALIGN(size, 4);
+ }
+
+ if (flags & AMDGPU_GEM_CREATE_VM_ALWAYS_VALID) {
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+index b308751d9e16..b55e5d3d6198 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+@@ -447,12 +447,20 @@ static int amdgpu_bo_do_create(struct amdgpu_device *adev,
+ size_t acc_size;
+ int r;
+
+- page_align = roundup(bp->byte_align, PAGE_SIZE) >> PAGE_SHIFT;
+- if (bp->domain & (AMDGPU_GEM_DOMAIN_GDS | AMDGPU_GEM_DOMAIN_GWS |
+- AMDGPU_GEM_DOMAIN_OA))
++ /* Note that GDS/GWS/OA allocates 1 page per byte/resource. */
++ if (bp->domain & (AMDGPU_GEM_DOMAIN_GWS | AMDGPU_GEM_DOMAIN_OA)) {
++ /* GWS and OA don't need any alignment. */
++ page_align = bp->byte_align;
+ size <<= PAGE_SHIFT;
+- else
++ } else if (bp->domain & AMDGPU_GEM_DOMAIN_GDS) {
++ /* Both size and alignment must be a multiple of 4. */
++ page_align = ALIGN(bp->byte_align, 4);
++ size = ALIGN(size, 4) << PAGE_SHIFT;
++ } else {
++ /* Memory should be aligned at least to a page size. */
++ page_align = ALIGN(bp->byte_align, PAGE_SIZE) >> PAGE_SHIFT;
+ size = ALIGN(size, PAGE_SIZE);
++ }
+
+ if (!amdgpu_bo_validate_size(adev, size, bp->domain))
+ return -ENOMEM;
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+index 9f7d91b69ccb..fe853624e293 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+@@ -2068,7 +2068,7 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
+ }
+
+ r = amdgpu_bo_create_kernel(adev, adev->gds.mem.gfx_partition_size,
+- PAGE_SIZE, AMDGPU_GEM_DOMAIN_GDS,
++ 4, AMDGPU_GEM_DOMAIN_GDS,
+ &adev->gds.gds_gfx_bo, NULL, NULL);
+ if (r)
+ return r;
+@@ -2081,7 +2081,7 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
+ }
+
+ r = amdgpu_bo_create_kernel(adev, adev->gds.gws.gfx_partition_size,
+- PAGE_SIZE, AMDGPU_GEM_DOMAIN_GWS,
++ 1, AMDGPU_GEM_DOMAIN_GWS,
+ &adev->gds.gws_gfx_bo, NULL, NULL);
+ if (r)
+ return r;
+@@ -2094,7 +2094,7 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
+ }
+
+ r = amdgpu_bo_create_kernel(adev, adev->gds.oa.gfx_partition_size,
+- PAGE_SIZE, AMDGPU_GEM_DOMAIN_OA,
++ 1, AMDGPU_GEM_DOMAIN_OA,
+ &adev->gds.oa_gfx_bo, NULL, NULL);
+ if (r)
+ return r;
+--
+2.17.1
+