aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2013-07-12 15:56:02 -0400
committerAlex Deucher <alexander.deucher@amd.com>2013-07-15 09:37:10 -0400
commit1c01103cb90197900beb534911de558d7a43d0b3 (patch)
tree55a3b1e0bd4ea45f884577d91eaba293567ee95d
parent6c4f978b357bc779c703fda1f200e9179623d3e9 (diff)
drm/radeon: align VM PTBs (Page Table Blocks) to 32K
Covers requirements of all current asics. Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Cc: stable@vger.kernel.org
-rw-r--r--drivers/gpu/drm/radeon/radeon.h5
-rw-r--r--drivers/gpu/drm/radeon/radeon_gart.c12
2 files changed, 11 insertions, 6 deletions
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index 82e8e36064e3..001081757895 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -784,6 +784,11 @@ struct radeon_mec {
784/* number of entries in page table */ 784/* number of entries in page table */
785#define RADEON_VM_PTE_COUNT (1 << RADEON_VM_BLOCK_SIZE) 785#define RADEON_VM_PTE_COUNT (1 << RADEON_VM_BLOCK_SIZE)
786 786
787/* PTBs (Page Table Blocks) need to be aligned to 32K */
788#define RADEON_VM_PTB_ALIGN_SIZE 32768
789#define RADEON_VM_PTB_ALIGN_MASK (RADEON_VM_PTB_ALIGN_SIZE - 1)
790#define RADEON_VM_PTB_ALIGN(a) (((a) + RADEON_VM_PTB_ALIGN_MASK) & ~RADEON_VM_PTB_ALIGN_MASK)
791
787struct radeon_vm { 792struct radeon_vm {
788 struct list_head list; 793 struct list_head list;
789 struct list_head va; 794 struct list_head va;
diff --git a/drivers/gpu/drm/radeon/radeon_gart.c b/drivers/gpu/drm/radeon/radeon_gart.c
index 5ce190b8bd1f..d9d31a383276 100644
--- a/drivers/gpu/drm/radeon/radeon_gart.c
+++ b/drivers/gpu/drm/radeon/radeon_gart.c
@@ -466,8 +466,8 @@ int radeon_vm_manager_init(struct radeon_device *rdev)
466 size += rdev->vm_manager.max_pfn * 8; 466 size += rdev->vm_manager.max_pfn * 8;
467 size *= 2; 467 size *= 2;
468 r = radeon_sa_bo_manager_init(rdev, &rdev->vm_manager.sa_manager, 468 r = radeon_sa_bo_manager_init(rdev, &rdev->vm_manager.sa_manager,
469 RADEON_GPU_PAGE_ALIGN(size), 469 RADEON_VM_PTB_ALIGN(size),
470 RADEON_GPU_PAGE_SIZE, 470 RADEON_VM_PTB_ALIGN_SIZE,
471 RADEON_GEM_DOMAIN_VRAM); 471 RADEON_GEM_DOMAIN_VRAM);
472 if (r) { 472 if (r) {
473 dev_err(rdev->dev, "failed to allocate vm bo (%dKB)\n", 473 dev_err(rdev->dev, "failed to allocate vm bo (%dKB)\n",
@@ -621,10 +621,10 @@ int radeon_vm_alloc_pt(struct radeon_device *rdev, struct radeon_vm *vm)
621 } 621 }
622 622
623retry: 623retry:
624 pd_size = RADEON_GPU_PAGE_ALIGN(radeon_vm_directory_size(rdev)); 624 pd_size = RADEON_VM_PTB_ALIGN(radeon_vm_directory_size(rdev));
625 r = radeon_sa_bo_new(rdev, &rdev->vm_manager.sa_manager, 625 r = radeon_sa_bo_new(rdev, &rdev->vm_manager.sa_manager,
626 &vm->page_directory, pd_size, 626 &vm->page_directory, pd_size,
627 RADEON_GPU_PAGE_SIZE, false); 627 RADEON_VM_PTB_ALIGN_SIZE, false);
628 if (r == -ENOMEM) { 628 if (r == -ENOMEM) {
629 r = radeon_vm_evict(rdev, vm); 629 r = radeon_vm_evict(rdev, vm);
630 if (r) 630 if (r)
@@ -953,8 +953,8 @@ static int radeon_vm_update_pdes(struct radeon_device *rdev,
953retry: 953retry:
954 r = radeon_sa_bo_new(rdev, &rdev->vm_manager.sa_manager, 954 r = radeon_sa_bo_new(rdev, &rdev->vm_manager.sa_manager,
955 &vm->page_tables[pt_idx], 955 &vm->page_tables[pt_idx],
956 RADEON_VM_PTE_COUNT * 8, 956 RADEON_VM_PTB_ALIGN(RADEON_VM_PTE_COUNT * 8),
957 RADEON_GPU_PAGE_SIZE, false); 957 RADEON_VM_PTB_ALIGN_SIZE, false);
958 958
959 if (r == -ENOMEM) { 959 if (r == -ENOMEM) {
960 r = radeon_vm_evict(rdev, vm); 960 r = radeon_vm_evict(rdev, vm);