Commit 6c4f978b authored by Alex Deucher's avatar Alex Deucher

drm/radeon: allow selection of alignment in the sub-allocator

There are cases where we need more than 4k alignment.  No
functional change with this commit.
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
parent 9cc2e0e9
...@@ -455,6 +455,7 @@ struct radeon_sa_manager { ...@@ -455,6 +455,7 @@ struct radeon_sa_manager {
uint64_t gpu_addr; uint64_t gpu_addr;
void *cpu_ptr; void *cpu_ptr;
uint32_t domain; uint32_t domain;
uint32_t align;
}; };
struct radeon_sa_bo; struct radeon_sa_bo;
......
...@@ -467,6 +467,7 @@ int radeon_vm_manager_init(struct radeon_device *rdev) ...@@ -467,6 +467,7 @@ int radeon_vm_manager_init(struct radeon_device *rdev)
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_GPU_PAGE_ALIGN(size),
RADEON_GPU_PAGE_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",
......
...@@ -174,7 +174,7 @@ static inline void * radeon_sa_bo_cpu_addr(struct radeon_sa_bo *sa_bo) ...@@ -174,7 +174,7 @@ static inline void * radeon_sa_bo_cpu_addr(struct radeon_sa_bo *sa_bo)
extern int radeon_sa_bo_manager_init(struct radeon_device *rdev, extern int radeon_sa_bo_manager_init(struct radeon_device *rdev,
struct radeon_sa_manager *sa_manager, struct radeon_sa_manager *sa_manager,
unsigned size, u32 domain); unsigned size, u32 align, u32 domain);
extern void radeon_sa_bo_manager_fini(struct radeon_device *rdev, extern void radeon_sa_bo_manager_fini(struct radeon_device *rdev,
struct radeon_sa_manager *sa_manager); struct radeon_sa_manager *sa_manager);
extern int radeon_sa_bo_manager_start(struct radeon_device *rdev, extern int radeon_sa_bo_manager_start(struct radeon_device *rdev,
......
...@@ -224,6 +224,7 @@ int radeon_ib_pool_init(struct radeon_device *rdev) ...@@ -224,6 +224,7 @@ int radeon_ib_pool_init(struct radeon_device *rdev)
} }
r = radeon_sa_bo_manager_init(rdev, &rdev->ring_tmp_bo, r = radeon_sa_bo_manager_init(rdev, &rdev->ring_tmp_bo,
RADEON_IB_POOL_SIZE*64*1024, RADEON_IB_POOL_SIZE*64*1024,
RADEON_GPU_PAGE_SIZE,
RADEON_GEM_DOMAIN_GTT); RADEON_GEM_DOMAIN_GTT);
if (r) { if (r) {
return r; return r;
......
...@@ -49,7 +49,7 @@ static void radeon_sa_bo_try_free(struct radeon_sa_manager *sa_manager); ...@@ -49,7 +49,7 @@ static void radeon_sa_bo_try_free(struct radeon_sa_manager *sa_manager);
int radeon_sa_bo_manager_init(struct radeon_device *rdev, int radeon_sa_bo_manager_init(struct radeon_device *rdev,
struct radeon_sa_manager *sa_manager, struct radeon_sa_manager *sa_manager,
unsigned size, u32 domain) unsigned size, u32 align, u32 domain)
{ {
int i, r; int i, r;
...@@ -57,13 +57,14 @@ int radeon_sa_bo_manager_init(struct radeon_device *rdev, ...@@ -57,13 +57,14 @@ int radeon_sa_bo_manager_init(struct radeon_device *rdev,
sa_manager->bo = NULL; sa_manager->bo = NULL;
sa_manager->size = size; sa_manager->size = size;
sa_manager->domain = domain; sa_manager->domain = domain;
sa_manager->align = align;
sa_manager->hole = &sa_manager->olist; sa_manager->hole = &sa_manager->olist;
INIT_LIST_HEAD(&sa_manager->olist); INIT_LIST_HEAD(&sa_manager->olist);
for (i = 0; i < RADEON_NUM_RINGS; ++i) { for (i = 0; i < RADEON_NUM_RINGS; ++i) {
INIT_LIST_HEAD(&sa_manager->flist[i]); INIT_LIST_HEAD(&sa_manager->flist[i]);
} }
r = radeon_bo_create(rdev, size, RADEON_GPU_PAGE_SIZE, true, r = radeon_bo_create(rdev, size, align, true,
domain, NULL, &sa_manager->bo); domain, NULL, &sa_manager->bo);
if (r) { if (r) {
dev_err(rdev->dev, "(%d) failed to allocate bo for manager\n", r); dev_err(rdev->dev, "(%d) failed to allocate bo for manager\n", r);
...@@ -317,7 +318,7 @@ int radeon_sa_bo_new(struct radeon_device *rdev, ...@@ -317,7 +318,7 @@ int radeon_sa_bo_new(struct radeon_device *rdev,
unsigned tries[RADEON_NUM_RINGS]; unsigned tries[RADEON_NUM_RINGS];
int i, r; int i, r;
BUG_ON(align > RADEON_GPU_PAGE_SIZE); BUG_ON(align > sa_manager->align);
BUG_ON(size > sa_manager->size); BUG_ON(size > sa_manager->size);
*sa_bo = kmalloc(sizeof(struct radeon_sa_bo), GFP_KERNEL); *sa_bo = kmalloc(sizeof(struct radeon_sa_bo), GFP_KERNEL);
......
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