diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0525-drm-amdgpu-be-explicit-about-cpu-vram-access-for-dri.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0525-drm-amdgpu-be-explicit-about-cpu-vram-access-for-dri.patch | 287 |
1 files changed, 287 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0525-drm-amdgpu-be-explicit-about-cpu-vram-access-for-dri.patch b/common/recipes-kernel/linux/files/0525-drm-amdgpu-be-explicit-about-cpu-vram-access-for-dri.patch new file mode 100644 index 00000000..6ecb3ea3 --- /dev/null +++ b/common/recipes-kernel/linux/files/0525-drm-amdgpu-be-explicit-about-cpu-vram-access-for-dri.patch @@ -0,0 +1,287 @@ +From 857d913d057f8e7330e9f17eaa2b0eb7ad492c33 Mon Sep 17 00:00:00 2001 +From: Alex Deucher <alexander.deucher@amd.com> +Date: Thu, 27 Aug 2015 00:14:16 -0400 +Subject: [PATCH 0525/1050] drm/amdgpu: be explicit about cpu vram access for + driver BOs (v2) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +For kernel driver BOs, be explicit about whether we need +vram access up front. This avoids unecessary migrations and +avoids using visible vram for buffers were it's not needed. + +v2: line wrap fixes + +Reviewed-by: Christian König <christian.koenig@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 3 ++- + drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c | 4 ++-- + drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c | 3 ++- + drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 3 ++- + drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 3 ++- + drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 12 +++++++++--- + drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 4 +++- + drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 7 +++++-- + drivers/gpu/drm/amd/amdgpu/fiji_smc.c | 8 ++++++-- + drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 12 +++++++++--- + drivers/gpu/drm/amd/amdgpu/iceland_smc.c | 4 +++- + drivers/gpu/drm/amd/amdgpu/tonga_smc.c | 8 ++++++-- + 12 files changed, 51 insertions(+), 20 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +index 42d1a22..6ff6ae9 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +@@ -244,7 +244,8 @@ static int amdgpu_vram_scratch_init(struct amdgpu_device *adev) + + if (adev->vram_scratch.robj == NULL) { + r = amdgpu_bo_create(adev, AMDGPU_GPU_PAGE_SIZE, +- PAGE_SIZE, true, AMDGPU_GEM_DOMAIN_VRAM, 0, ++ PAGE_SIZE, true, AMDGPU_GEM_DOMAIN_VRAM, ++ AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED, + NULL, &adev->vram_scratch.robj); + if (r) { + return r; +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c +index 81b8212..8a122b1 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c +@@ -126,8 +126,8 @@ static int amdgpufb_create_pinned_object(struct amdgpu_fbdev *rfbdev, + aligned_size = ALIGN(size, PAGE_SIZE); + ret = amdgpu_gem_object_create(adev, aligned_size, 0, + AMDGPU_GEM_DOMAIN_VRAM, +- 0, true, +- &gobj); ++ AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED, ++ true, &gobj); + if (ret) { + printk(KERN_ERR "failed to allocate framebuffer (%d)\n", + aligned_size); +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c +index e02db0b..cbd3a48 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c +@@ -125,7 +125,8 @@ int amdgpu_gart_table_vram_alloc(struct amdgpu_device *adev) + + if (adev->gart.robj == NULL) { + r = amdgpu_bo_create(adev, adev->gart.table_size, +- PAGE_SIZE, true, AMDGPU_GEM_DOMAIN_VRAM, 0, ++ PAGE_SIZE, true, AMDGPU_GEM_DOMAIN_VRAM, ++ AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED, + NULL, &adev->gart.robj); + if (r) { + return r; +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +index 4b36e77..5839fab 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +@@ -656,7 +656,8 @@ int amdgpu_mode_dumb_create(struct drm_file *file_priv, + + r = amdgpu_gem_object_create(adev, args->size, 0, + AMDGPU_GEM_DOMAIN_VRAM, +- 0, ttm_bo_type_device, ++ AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED, ++ ttm_bo_type_device, + &gobj); + if (r) + return -ENOMEM; +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +index 3991435..b5abd5c 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +@@ -859,7 +859,8 @@ int amdgpu_ttm_init(struct amdgpu_device *adev) + amdgpu_ttm_set_active_vram_size(adev, adev->mc.visible_vram_size); + + r = amdgpu_bo_create(adev, 256 * 1024, PAGE_SIZE, true, +- AMDGPU_GEM_DOMAIN_VRAM, 0, ++ AMDGPU_GEM_DOMAIN_VRAM, ++ AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED, + NULL, &adev->stollen_vga_memory); + if (r) { + return r; +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c +index 3ad4a83..2cf6c6b 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c +@@ -154,7 +154,9 @@ int amdgpu_uvd_sw_init(struct amdgpu_device *adev) + bo_size = AMDGPU_GPU_PAGE_ALIGN(le32_to_cpu(hdr->ucode_size_bytes) + 8) + + AMDGPU_UVD_STACK_SIZE + AMDGPU_UVD_HEAP_SIZE; + r = amdgpu_bo_create(adev, bo_size, PAGE_SIZE, true, +- AMDGPU_GEM_DOMAIN_VRAM, 0, NULL, &adev->uvd.vcpu_bo); ++ AMDGPU_GEM_DOMAIN_VRAM, ++ AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED, ++ NULL, &adev->uvd.vcpu_bo); + if (r) { + dev_err(adev->dev, "(%d) failed to allocate UVD bo\n", r); + return r; +@@ -901,7 +903,9 @@ int amdgpu_uvd_get_create_msg(struct amdgpu_ring *ring, uint32_t handle, + int r, i; + + r = amdgpu_bo_create(adev, 1024, PAGE_SIZE, true, +- AMDGPU_GEM_DOMAIN_VRAM, 0, NULL, &bo); ++ AMDGPU_GEM_DOMAIN_VRAM, ++ AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED, ++ NULL, &bo); + if (r) + return r; + +@@ -948,7 +952,9 @@ int amdgpu_uvd_get_destroy_msg(struct amdgpu_ring *ring, uint32_t handle, + int r, i; + + r = amdgpu_bo_create(adev, 1024, PAGE_SIZE, true, +- AMDGPU_GEM_DOMAIN_VRAM, 0, NULL, &bo); ++ AMDGPU_GEM_DOMAIN_VRAM, ++ AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED, ++ NULL, &bo); + if (r) + return r; + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c +index 1a984c9..7698243 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c +@@ -141,7 +141,9 @@ int amdgpu_vce_sw_init(struct amdgpu_device *adev, unsigned long size) + /* allocate firmware, stack and heap BO */ + + r = amdgpu_bo_create(adev, size, PAGE_SIZE, true, +- AMDGPU_GEM_DOMAIN_VRAM, 0, NULL, &adev->vce.vcpu_bo); ++ AMDGPU_GEM_DOMAIN_VRAM, ++ AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED, ++ NULL, &adev->vce.vcpu_bo); + if (r) { + dev_err(adev->dev, "(%d) failed to allocate VCE bo\n", r); + return r; +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +index 5848564..f68b7cd 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +@@ -1099,7 +1099,9 @@ int amdgpu_vm_bo_map(struct amdgpu_device *adev, + + r = amdgpu_bo_create(adev, AMDGPU_VM_PTE_COUNT * 8, + AMDGPU_GPU_PAGE_SIZE, true, +- AMDGPU_GEM_DOMAIN_VRAM, 0, NULL, &pt); ++ AMDGPU_GEM_DOMAIN_VRAM, ++ AMDGPU_GEM_CREATE_NO_CPU_ACCESS, ++ NULL, &pt); + if (r) + goto error_free; + +@@ -1299,7 +1301,8 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm) + vm->page_directory_fence = NULL; + + r = amdgpu_bo_create(adev, pd_size, align, true, +- AMDGPU_GEM_DOMAIN_VRAM, 0, ++ AMDGPU_GEM_DOMAIN_VRAM, ++ AMDGPU_GEM_CREATE_NO_CPU_ACCESS, + NULL, &vm->page_directory); + if (r) + return r; +diff --git a/drivers/gpu/drm/amd/amdgpu/fiji_smc.c b/drivers/gpu/drm/amd/amdgpu/fiji_smc.c +index 493c8c9..322edea 100644 +--- a/drivers/gpu/drm/amd/amdgpu/fiji_smc.c ++++ b/drivers/gpu/drm/amd/amdgpu/fiji_smc.c +@@ -762,7 +762,9 @@ int fiji_smu_init(struct amdgpu_device *adev) + + /* Allocate FW image data structure and header buffer */ + ret = amdgpu_bo_create(adev, image_size, PAGE_SIZE, +- true, AMDGPU_GEM_DOMAIN_VRAM, 0, NULL, toc_buf); ++ true, AMDGPU_GEM_DOMAIN_VRAM, ++ AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED, ++ NULL, toc_buf); + if (ret) { + DRM_ERROR("Failed to allocate memory for TOC buffer\n"); + return -ENOMEM; +@@ -770,7 +772,9 @@ int fiji_smu_init(struct amdgpu_device *adev) + + /* Allocate buffer for SMU internal buffer */ + ret = amdgpu_bo_create(adev, smu_internal_buffer_size, PAGE_SIZE, +- true, AMDGPU_GEM_DOMAIN_VRAM, 0, NULL, smu_buf); ++ true, AMDGPU_GEM_DOMAIN_VRAM, ++ AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED, ++ NULL, smu_buf); + if (ret) { + DRM_ERROR("Failed to allocate memory for SMU internal buffer\n"); + return -ENOMEM; +diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c +index 517a68f..4bd1e5c 100644 +--- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c ++++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c +@@ -3786,7 +3786,9 @@ static int gfx_v7_0_rlc_init(struct amdgpu_device *adev) + /* save restore block */ + if (adev->gfx.rlc.save_restore_obj == NULL) { + r = amdgpu_bo_create(adev, dws * 4, PAGE_SIZE, true, +- AMDGPU_GEM_DOMAIN_VRAM, 0, NULL, &adev->gfx.rlc.save_restore_obj); ++ AMDGPU_GEM_DOMAIN_VRAM, ++ AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED, ++ NULL, &adev->gfx.rlc.save_restore_obj); + if (r) { + dev_warn(adev->dev, "(%d) create RLC sr bo failed\n", r); + return r; +@@ -3827,7 +3829,9 @@ static int gfx_v7_0_rlc_init(struct amdgpu_device *adev) + + if (adev->gfx.rlc.clear_state_obj == NULL) { + r = amdgpu_bo_create(adev, dws * 4, PAGE_SIZE, true, +- AMDGPU_GEM_DOMAIN_VRAM, 0, NULL, &adev->gfx.rlc.clear_state_obj); ++ AMDGPU_GEM_DOMAIN_VRAM, ++ AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED, ++ NULL, &adev->gfx.rlc.clear_state_obj); + if (r) { + dev_warn(adev->dev, "(%d) create RLC c bo failed\n", r); + gfx_v7_0_rlc_fini(adev); +@@ -3864,7 +3868,9 @@ static int gfx_v7_0_rlc_init(struct amdgpu_device *adev) + if (adev->gfx.rlc.cp_table_size) { + if (adev->gfx.rlc.cp_table_obj == NULL) { + r = amdgpu_bo_create(adev, adev->gfx.rlc.cp_table_size, PAGE_SIZE, true, +- AMDGPU_GEM_DOMAIN_VRAM, 0, NULL, &adev->gfx.rlc.cp_table_obj); ++ AMDGPU_GEM_DOMAIN_VRAM, ++ AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED, ++ NULL, &adev->gfx.rlc.cp_table_obj); + if (r) { + dev_warn(adev->dev, "(%d) create RLC cp table bo failed\n", r); + gfx_v7_0_rlc_fini(adev); +diff --git a/drivers/gpu/drm/amd/amdgpu/iceland_smc.c b/drivers/gpu/drm/amd/amdgpu/iceland_smc.c +index c6f1e2f..c900aa9 100644 +--- a/drivers/gpu/drm/amd/amdgpu/iceland_smc.c ++++ b/drivers/gpu/drm/amd/amdgpu/iceland_smc.c +@@ -623,7 +623,9 @@ int iceland_smu_init(struct amdgpu_device *adev) + + /* Allocate FW image data structure and header buffer */ + ret = amdgpu_bo_create(adev, image_size, PAGE_SIZE, +- true, AMDGPU_GEM_DOMAIN_VRAM, 0, NULL, toc_buf); ++ true, AMDGPU_GEM_DOMAIN_VRAM, ++ AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED, ++ NULL, toc_buf); + if (ret) { + DRM_ERROR("Failed to allocate memory for TOC buffer\n"); + return -ENOMEM; +diff --git a/drivers/gpu/drm/amd/amdgpu/tonga_smc.c b/drivers/gpu/drm/amd/amdgpu/tonga_smc.c +index 5fc53a4..1f5ac94 100644 +--- a/drivers/gpu/drm/amd/amdgpu/tonga_smc.c ++++ b/drivers/gpu/drm/amd/amdgpu/tonga_smc.c +@@ -761,7 +761,9 @@ int tonga_smu_init(struct amdgpu_device *adev) + + /* Allocate FW image data structure and header buffer */ + ret = amdgpu_bo_create(adev, image_size, PAGE_SIZE, +- true, AMDGPU_GEM_DOMAIN_VRAM, 0, NULL, toc_buf); ++ true, AMDGPU_GEM_DOMAIN_VRAM, ++ AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED, ++ NULL, toc_buf); + if (ret) { + DRM_ERROR("Failed to allocate memory for TOC buffer\n"); + return -ENOMEM; +@@ -769,7 +771,9 @@ int tonga_smu_init(struct amdgpu_device *adev) + + /* Allocate buffer for SMU internal buffer */ + ret = amdgpu_bo_create(adev, smu_internal_buffer_size, PAGE_SIZE, +- true, AMDGPU_GEM_DOMAIN_VRAM, 0, NULL, smu_buf); ++ true, AMDGPU_GEM_DOMAIN_VRAM, ++ AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED, ++ NULL, smu_buf); + if (ret) { + DRM_ERROR("Failed to allocate memory for SMU internal buffer\n"); + return -ENOMEM; +-- +1.9.1 + |