diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2013-07-12 15:56:02 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2013-07-15 09:37:10 -0400 |
commit | 1c01103cb90197900beb534911de558d7a43d0b3 (patch) | |
tree | 55a3b1e0bd4ea45f884577d91eaba293567ee95d | |
parent | 6c4f978b357bc779c703fda1f200e9179623d3e9 (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.h | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_gart.c | 12 |
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 | |||
787 | struct radeon_vm { | 792 | struct 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 | ||
623 | retry: | 623 | retry: |
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, | |||
953 | retry: | 953 | retry: |
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); |