Commit 1c01103c authored by Alex Deucher's avatar Alex Deucher

drm/radeon: align VM PTBs (Page Table Blocks) to 32K

Covers requirements of all current asics.
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
parent 6c4f978b
...@@ -784,6 +784,11 @@ struct radeon_mec { ...@@ -784,6 +784,11 @@ struct radeon_mec {
/* number of entries in page table */ /* number of entries in page table */
#define RADEON_VM_PTE_COUNT (1 << RADEON_VM_BLOCK_SIZE) #define RADEON_VM_PTE_COUNT (1 << RADEON_VM_BLOCK_SIZE)
/* PTBs (Page Table Blocks) need to be aligned to 32K */
#define RADEON_VM_PTB_ALIGN_SIZE 32768
#define RADEON_VM_PTB_ALIGN_MASK (RADEON_VM_PTB_ALIGN_SIZE - 1)
#define RADEON_VM_PTB_ALIGN(a) (((a) + RADEON_VM_PTB_ALIGN_MASK) & ~RADEON_VM_PTB_ALIGN_MASK)
struct radeon_vm { struct radeon_vm {
struct list_head list; struct list_head list;
struct list_head va; struct list_head va;
......
...@@ -466,8 +466,8 @@ int radeon_vm_manager_init(struct radeon_device *rdev) ...@@ -466,8 +466,8 @@ int radeon_vm_manager_init(struct radeon_device *rdev)
size += rdev->vm_manager.max_pfn * 8; size += rdev->vm_manager.max_pfn * 8;
size *= 2; size *= 2;
r = radeon_sa_bo_manager_init(rdev, &rdev->vm_manager.sa_manager, r = radeon_sa_bo_manager_init(rdev, &rdev->vm_manager.sa_manager,
RADEON_GPU_PAGE_ALIGN(size), RADEON_VM_PTB_ALIGN(size),
RADEON_GPU_PAGE_SIZE, RADEON_VM_PTB_ALIGN_SIZE,
RADEON_GEM_DOMAIN_VRAM); RADEON_GEM_DOMAIN_VRAM);
if (r) { if (r) {
dev_err(rdev->dev, "failed to allocate vm bo (%dKB)\n", 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,10 +621,10 @@ int radeon_vm_alloc_pt(struct radeon_device *rdev, struct radeon_vm *vm)
} }
retry: retry:
pd_size = RADEON_GPU_PAGE_ALIGN(radeon_vm_directory_size(rdev)); pd_size = RADEON_VM_PTB_ALIGN(radeon_vm_directory_size(rdev));
r = radeon_sa_bo_new(rdev, &rdev->vm_manager.sa_manager, r = radeon_sa_bo_new(rdev, &rdev->vm_manager.sa_manager,
&vm->page_directory, pd_size, &vm->page_directory, pd_size,
RADEON_GPU_PAGE_SIZE, false); RADEON_VM_PTB_ALIGN_SIZE, false);
if (r == -ENOMEM) { if (r == -ENOMEM) {
r = radeon_vm_evict(rdev, vm); r = radeon_vm_evict(rdev, vm);
if (r) if (r)
...@@ -953,8 +953,8 @@ static int radeon_vm_update_pdes(struct radeon_device *rdev, ...@@ -953,8 +953,8 @@ static int radeon_vm_update_pdes(struct radeon_device *rdev,
retry: retry:
r = radeon_sa_bo_new(rdev, &rdev->vm_manager.sa_manager, r = radeon_sa_bo_new(rdev, &rdev->vm_manager.sa_manager,
&vm->page_tables[pt_idx], &vm->page_tables[pt_idx],
RADEON_VM_PTE_COUNT * 8, RADEON_VM_PTB_ALIGN(RADEON_VM_PTE_COUNT * 8),
RADEON_GPU_PAGE_SIZE, false); RADEON_VM_PTB_ALIGN_SIZE, false);
if (r == -ENOMEM) { if (r == -ENOMEM) {
r = radeon_vm_evict(rdev, vm); r = radeon_vm_evict(rdev, vm);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment