aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2015-08-27 00:14:16 -0400
committerAlex Deucher <alexander.deucher@amd.com>2015-09-03 10:29:32 -0400
commit857d913d057f8e7330e9f17eaa2b0eb7ad492c33 (patch)
treeb87cd7e95038a9be3de7c01ce23f4f476a28cdb7
parentbddf8026386927985ef6d0d11c3ba78f70b76bad (diff)
drm/amdgpu: be explicit about cpu vram access for driver BOs (v2)
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>
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_device.c3
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c3
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c3
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c3
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c12
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c7
-rw-r--r--drivers/gpu/drm/amd/amdgpu/fiji_smc.c8
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c12
-rw-r--r--drivers/gpu/drm/amd/amdgpu/iceland_smc.c4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/tonga_smc.c8
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 42d1a22c1199..6ff6ae945794 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)
244 244
245 if (adev->vram_scratch.robj == NULL) { 245 if (adev->vram_scratch.robj == NULL) {
246 r = amdgpu_bo_create(adev, AMDGPU_GPU_PAGE_SIZE, 246 r = amdgpu_bo_create(adev, AMDGPU_GPU_PAGE_SIZE,
247 PAGE_SIZE, true, AMDGPU_GEM_DOMAIN_VRAM, 0, 247 PAGE_SIZE, true, AMDGPU_GEM_DOMAIN_VRAM,
248 AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED,
248 NULL, &adev->vram_scratch.robj); 249 NULL, &adev->vram_scratch.robj);
249 if (r) { 250 if (r) {
250 return r; 251 return r;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c
index 81b821247dde..8a122b1b7786 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,
126 aligned_size = ALIGN(size, PAGE_SIZE); 126 aligned_size = ALIGN(size, PAGE_SIZE);
127 ret = amdgpu_gem_object_create(adev, aligned_size, 0, 127 ret = amdgpu_gem_object_create(adev, aligned_size, 0,
128 AMDGPU_GEM_DOMAIN_VRAM, 128 AMDGPU_GEM_DOMAIN_VRAM,
129 0, true, 129 AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED,
130 &gobj); 130 true, &gobj);
131 if (ret) { 131 if (ret) {
132 printk(KERN_ERR "failed to allocate framebuffer (%d)\n", 132 printk(KERN_ERR "failed to allocate framebuffer (%d)\n",
133 aligned_size); 133 aligned_size);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
index e02db0b2e839..cbd3a486c5c2 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)
125 125
126 if (adev->gart.robj == NULL) { 126 if (adev->gart.robj == NULL) {
127 r = amdgpu_bo_create(adev, adev->gart.table_size, 127 r = amdgpu_bo_create(adev, adev->gart.table_size,
128 PAGE_SIZE, true, AMDGPU_GEM_DOMAIN_VRAM, 0, 128 PAGE_SIZE, true, AMDGPU_GEM_DOMAIN_VRAM,
129 AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED,
129 NULL, &adev->gart.robj); 130 NULL, &adev->gart.robj);
130 if (r) { 131 if (r) {
131 return r; 132 return r;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
index 4b36e779622f..5839fab374bf 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,
656 656
657 r = amdgpu_gem_object_create(adev, args->size, 0, 657 r = amdgpu_gem_object_create(adev, args->size, 0,
658 AMDGPU_GEM_DOMAIN_VRAM, 658 AMDGPU_GEM_DOMAIN_VRAM,
659 0, ttm_bo_type_device, 659 AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED,
660 ttm_bo_type_device,
660 &gobj); 661 &gobj);
661 if (r) 662 if (r)
662 return -ENOMEM; 663 return -ENOMEM;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 399143541d8a..b5abd5cde413 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)
859 amdgpu_ttm_set_active_vram_size(adev, adev->mc.visible_vram_size); 859 amdgpu_ttm_set_active_vram_size(adev, adev->mc.visible_vram_size);
860 860
861 r = amdgpu_bo_create(adev, 256 * 1024, PAGE_SIZE, true, 861 r = amdgpu_bo_create(adev, 256 * 1024, PAGE_SIZE, true,
862 AMDGPU_GEM_DOMAIN_VRAM, 0, 862 AMDGPU_GEM_DOMAIN_VRAM,
863 AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED,
863 NULL, &adev->stollen_vga_memory); 864 NULL, &adev->stollen_vga_memory);
864 if (r) { 865 if (r) {
865 return r; 866 return r;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
index 3ad4a83c418f..2cf6c6b06e3b 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)
154 bo_size = AMDGPU_GPU_PAGE_ALIGN(le32_to_cpu(hdr->ucode_size_bytes) + 8) 154 bo_size = AMDGPU_GPU_PAGE_ALIGN(le32_to_cpu(hdr->ucode_size_bytes) + 8)
155 + AMDGPU_UVD_STACK_SIZE + AMDGPU_UVD_HEAP_SIZE; 155 + AMDGPU_UVD_STACK_SIZE + AMDGPU_UVD_HEAP_SIZE;
156 r = amdgpu_bo_create(adev, bo_size, PAGE_SIZE, true, 156 r = amdgpu_bo_create(adev, bo_size, PAGE_SIZE, true,
157 AMDGPU_GEM_DOMAIN_VRAM, 0, NULL, &adev->uvd.vcpu_bo); 157 AMDGPU_GEM_DOMAIN_VRAM,
158 AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED,
159 NULL, &adev->uvd.vcpu_bo);
158 if (r) { 160 if (r) {
159 dev_err(adev->dev, "(%d) failed to allocate UVD bo\n", r); 161 dev_err(adev->dev, "(%d) failed to allocate UVD bo\n", r);
160 return r; 162 return r;
@@ -901,7 +903,9 @@ int amdgpu_uvd_get_create_msg(struct amdgpu_ring *ring, uint32_t handle,
901 int r, i; 903 int r, i;
902 904
903 r = amdgpu_bo_create(adev, 1024, PAGE_SIZE, true, 905 r = amdgpu_bo_create(adev, 1024, PAGE_SIZE, true,
904 AMDGPU_GEM_DOMAIN_VRAM, 0, NULL, &bo); 906 AMDGPU_GEM_DOMAIN_VRAM,
907 AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED,
908 NULL, &bo);
905 if (r) 909 if (r)
906 return r; 910 return r;
907 911
@@ -948,7 +952,9 @@ int amdgpu_uvd_get_destroy_msg(struct amdgpu_ring *ring, uint32_t handle,
948 int r, i; 952 int r, i;
949 953
950 r = amdgpu_bo_create(adev, 1024, PAGE_SIZE, true, 954 r = amdgpu_bo_create(adev, 1024, PAGE_SIZE, true,
951 AMDGPU_GEM_DOMAIN_VRAM, 0, NULL, &bo); 955 AMDGPU_GEM_DOMAIN_VRAM,
956 AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED,
957 NULL, &bo);
952 if (r) 958 if (r)
953 return r; 959 return r;
954 960
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
index 1a984c934b1f..76982438d1c6 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)
141 /* allocate firmware, stack and heap BO */ 141 /* allocate firmware, stack and heap BO */
142 142
143 r = amdgpu_bo_create(adev, size, PAGE_SIZE, true, 143 r = amdgpu_bo_create(adev, size, PAGE_SIZE, true,
144 AMDGPU_GEM_DOMAIN_VRAM, 0, NULL, &adev->vce.vcpu_bo); 144 AMDGPU_GEM_DOMAIN_VRAM,
145 AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED,
146 NULL, &adev->vce.vcpu_bo);
145 if (r) { 147 if (r) {
146 dev_err(adev->dev, "(%d) failed to allocate VCE bo\n", r); 148 dev_err(adev->dev, "(%d) failed to allocate VCE bo\n", r);
147 return r; 149 return r;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index 5848564d3d66..f68b7cdc370a 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,
1099 1099
1100 r = amdgpu_bo_create(adev, AMDGPU_VM_PTE_COUNT * 8, 1100 r = amdgpu_bo_create(adev, AMDGPU_VM_PTE_COUNT * 8,
1101 AMDGPU_GPU_PAGE_SIZE, true, 1101 AMDGPU_GPU_PAGE_SIZE, true,
1102 AMDGPU_GEM_DOMAIN_VRAM, 0, NULL, &pt); 1102 AMDGPU_GEM_DOMAIN_VRAM,
1103 AMDGPU_GEM_CREATE_NO_CPU_ACCESS,
1104 NULL, &pt);
1103 if (r) 1105 if (r)
1104 goto error_free; 1106 goto error_free;
1105 1107
@@ -1299,7 +1301,8 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm)
1299 vm->page_directory_fence = NULL; 1301 vm->page_directory_fence = NULL;
1300 1302
1301 r = amdgpu_bo_create(adev, pd_size, align, true, 1303 r = amdgpu_bo_create(adev, pd_size, align, true,
1302 AMDGPU_GEM_DOMAIN_VRAM, 0, 1304 AMDGPU_GEM_DOMAIN_VRAM,
1305 AMDGPU_GEM_CREATE_NO_CPU_ACCESS,
1303 NULL, &vm->page_directory); 1306 NULL, &vm->page_directory);
1304 if (r) 1307 if (r)
1305 return r; 1308 return r;
diff --git a/drivers/gpu/drm/amd/amdgpu/fiji_smc.c b/drivers/gpu/drm/amd/amdgpu/fiji_smc.c
index 493c8c9c7faa..322edea65857 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)
762 762
763 /* Allocate FW image data structure and header buffer */ 763 /* Allocate FW image data structure and header buffer */
764 ret = amdgpu_bo_create(adev, image_size, PAGE_SIZE, 764 ret = amdgpu_bo_create(adev, image_size, PAGE_SIZE,
765 true, AMDGPU_GEM_DOMAIN_VRAM, 0, NULL, toc_buf); 765 true, AMDGPU_GEM_DOMAIN_VRAM,
766 AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED,
767 NULL, toc_buf);
766 if (ret) { 768 if (ret) {
767 DRM_ERROR("Failed to allocate memory for TOC buffer\n"); 769 DRM_ERROR("Failed to allocate memory for TOC buffer\n");
768 return -ENOMEM; 770 return -ENOMEM;
@@ -770,7 +772,9 @@ int fiji_smu_init(struct amdgpu_device *adev)
770 772
771 /* Allocate buffer for SMU internal buffer */ 773 /* Allocate buffer for SMU internal buffer */
772 ret = amdgpu_bo_create(adev, smu_internal_buffer_size, PAGE_SIZE, 774 ret = amdgpu_bo_create(adev, smu_internal_buffer_size, PAGE_SIZE,
773 true, AMDGPU_GEM_DOMAIN_VRAM, 0, NULL, smu_buf); 775 true, AMDGPU_GEM_DOMAIN_VRAM,
776 AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED,
777 NULL, smu_buf);
774 if (ret) { 778 if (ret) {
775 DRM_ERROR("Failed to allocate memory for SMU internal buffer\n"); 779 DRM_ERROR("Failed to allocate memory for SMU internal buffer\n");
776 return -ENOMEM; 780 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 517a68f82ec3..4bd1e5cf65ca 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)
3786 /* save restore block */ 3786 /* save restore block */
3787 if (adev->gfx.rlc.save_restore_obj == NULL) { 3787 if (adev->gfx.rlc.save_restore_obj == NULL) {
3788 r = amdgpu_bo_create(adev, dws * 4, PAGE_SIZE, true, 3788 r = amdgpu_bo_create(adev, dws * 4, PAGE_SIZE, true,
3789 AMDGPU_GEM_DOMAIN_VRAM, 0, NULL, &adev->gfx.rlc.save_restore_obj); 3789 AMDGPU_GEM_DOMAIN_VRAM,
3790 AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED,
3791 NULL, &adev->gfx.rlc.save_restore_obj);
3790 if (r) { 3792 if (r) {
3791 dev_warn(adev->dev, "(%d) create RLC sr bo failed\n", r); 3793 dev_warn(adev->dev, "(%d) create RLC sr bo failed\n", r);
3792 return r; 3794 return r;
@@ -3827,7 +3829,9 @@ static int gfx_v7_0_rlc_init(struct amdgpu_device *adev)
3827 3829
3828 if (adev->gfx.rlc.clear_state_obj == NULL) { 3830 if (adev->gfx.rlc.clear_state_obj == NULL) {
3829 r = amdgpu_bo_create(adev, dws * 4, PAGE_SIZE, true, 3831 r = amdgpu_bo_create(adev, dws * 4, PAGE_SIZE, true,
3830 AMDGPU_GEM_DOMAIN_VRAM, 0, NULL, &adev->gfx.rlc.clear_state_obj); 3832 AMDGPU_GEM_DOMAIN_VRAM,
3833 AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED,
3834 NULL, &adev->gfx.rlc.clear_state_obj);
3831 if (r) { 3835 if (r) {
3832 dev_warn(adev->dev, "(%d) create RLC c bo failed\n", r); 3836 dev_warn(adev->dev, "(%d) create RLC c bo failed\n", r);
3833 gfx_v7_0_rlc_fini(adev); 3837 gfx_v7_0_rlc_fini(adev);
@@ -3864,7 +3868,9 @@ static int gfx_v7_0_rlc_init(struct amdgpu_device *adev)
3864 if (adev->gfx.rlc.cp_table_size) { 3868 if (adev->gfx.rlc.cp_table_size) {
3865 if (adev->gfx.rlc.cp_table_obj == NULL) { 3869 if (adev->gfx.rlc.cp_table_obj == NULL) {
3866 r = amdgpu_bo_create(adev, adev->gfx.rlc.cp_table_size, PAGE_SIZE, true, 3870 r = amdgpu_bo_create(adev, adev->gfx.rlc.cp_table_size, PAGE_SIZE, true,
3867 AMDGPU_GEM_DOMAIN_VRAM, 0, NULL, &adev->gfx.rlc.cp_table_obj); 3871 AMDGPU_GEM_DOMAIN_VRAM,
3872 AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED,
3873 NULL, &adev->gfx.rlc.cp_table_obj);
3868 if (r) { 3874 if (r) {
3869 dev_warn(adev->dev, "(%d) create RLC cp table bo failed\n", r); 3875 dev_warn(adev->dev, "(%d) create RLC cp table bo failed\n", r);
3870 gfx_v7_0_rlc_fini(adev); 3876 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 c6f1e2f12b5f..c900aa942ade 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)
623 623
624 /* Allocate FW image data structure and header buffer */ 624 /* Allocate FW image data structure and header buffer */
625 ret = amdgpu_bo_create(adev, image_size, PAGE_SIZE, 625 ret = amdgpu_bo_create(adev, image_size, PAGE_SIZE,
626 true, AMDGPU_GEM_DOMAIN_VRAM, 0, NULL, toc_buf); 626 true, AMDGPU_GEM_DOMAIN_VRAM,
627 AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED,
628 NULL, toc_buf);
627 if (ret) { 629 if (ret) {
628 DRM_ERROR("Failed to allocate memory for TOC buffer\n"); 630 DRM_ERROR("Failed to allocate memory for TOC buffer\n");
629 return -ENOMEM; 631 return -ENOMEM;
diff --git a/drivers/gpu/drm/amd/amdgpu/tonga_smc.c b/drivers/gpu/drm/amd/amdgpu/tonga_smc.c
index 5fc53a40c7ac..1f5ac941a610 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)
761 761
762 /* Allocate FW image data structure and header buffer */ 762 /* Allocate FW image data structure and header buffer */
763 ret = amdgpu_bo_create(adev, image_size, PAGE_SIZE, 763 ret = amdgpu_bo_create(adev, image_size, PAGE_SIZE,
764 true, AMDGPU_GEM_DOMAIN_VRAM, 0, NULL, toc_buf); 764 true, AMDGPU_GEM_DOMAIN_VRAM,
765 AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED,
766 NULL, toc_buf);
765 if (ret) { 767 if (ret) {
766 DRM_ERROR("Failed to allocate memory for TOC buffer\n"); 768 DRM_ERROR("Failed to allocate memory for TOC buffer\n");
767 return -ENOMEM; 769 return -ENOMEM;
@@ -769,7 +771,9 @@ int tonga_smu_init(struct amdgpu_device *adev)
769 771
770 /* Allocate buffer for SMU internal buffer */ 772 /* Allocate buffer for SMU internal buffer */
771 ret = amdgpu_bo_create(adev, smu_internal_buffer_size, PAGE_SIZE, 773 ret = amdgpu_bo_create(adev, smu_internal_buffer_size, PAGE_SIZE,
772 true, AMDGPU_GEM_DOMAIN_VRAM, 0, NULL, smu_buf); 774 true, AMDGPU_GEM_DOMAIN_VRAM,
775 AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED,
776 NULL, smu_buf);
773 if (ret) { 777 if (ret) {
774 DRM_ERROR("Failed to allocate memory for SMU internal buffer\n"); 778 DRM_ERROR("Failed to allocate memory for SMU internal buffer\n");
775 return -ENOMEM; 779 return -ENOMEM;