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