169,19 → 169,24 |
return 0; |
/* Allocate 1M object buffer */ |
INIT_LIST_HEAD(&rdev->ib_pool.scheduled_ibs); |
r = radeon_object_create(rdev, NULL, RADEON_IB_POOL_SIZE*64*1024, |
r = radeon_bo_create(rdev, NULL, RADEON_IB_POOL_SIZE*64*1024, |
true, RADEON_GEM_DOMAIN_GTT, |
false, &rdev->ib_pool.robj); |
&rdev->ib_pool.robj); |
if (r) { |
DRM_ERROR("radeon: failed to ib pool (%d).\n", r); |
return r; |
} |
r = radeon_object_pin(rdev->ib_pool.robj, RADEON_GEM_DOMAIN_GTT, &gpu_addr); |
r = radeon_bo_reserve(rdev->ib_pool.robj, false); |
if (unlikely(r != 0)) |
return r; |
r = radeon_bo_pin(rdev->ib_pool.robj, RADEON_GEM_DOMAIN_GTT, &gpu_addr); |
if (r) { |
radeon_bo_unreserve(rdev->ib_pool.robj); |
DRM_ERROR("radeon: failed to pin ib pool (%d).\n", r); |
return r; |
} |
r = radeon_object_kmap(rdev->ib_pool.robj, &ptr); |
r = radeon_bo_kmap(rdev->ib_pool.robj, &ptr); |
radeon_bo_unreserve(rdev->ib_pool.robj); |
if (r) { |
DRM_ERROR("radeon: failed to map ib poll (%d).\n", r); |
return r; |
207,6 → 212,8 |
|
void radeon_ib_pool_fini(struct radeon_device *rdev) |
{ |
int r; |
|
if (!rdev->ib_pool.ready) { |
return; |
} |
213,8 → 220,13 |
mutex_lock(&rdev->ib_pool.mutex); |
bitmap_zero(rdev->ib_pool.alloc_bm, RADEON_IB_POOL_SIZE); |
if (rdev->ib_pool.robj) { |
// radeon_object_kunmap(rdev->ib_pool.robj); |
// radeon_object_unref(&rdev->ib_pool.robj); |
r = radeon_bo_reserve(rdev->ib_pool.robj, false); |
if (likely(r == 0)) { |
radeon_bo_kunmap(rdev->ib_pool.robj); |
radeon_bo_unpin(rdev->ib_pool.robj); |
radeon_bo_unreserve(rdev->ib_pool.robj); |
} |
radeon_bo_unref(&rdev->ib_pool.robj); |
rdev->ib_pool.robj = NULL; |
} |
mutex_unlock(&rdev->ib_pool.mutex); |
294,46 → 306,31 |
rdev->cp.ring_size = ring_size; |
/* Allocate ring buffer */ |
if (rdev->cp.ring_obj == NULL) { |
r = radeon_object_create(rdev, NULL, rdev->cp.ring_size, |
true, |
r = radeon_bo_create(rdev, NULL, rdev->cp.ring_size, true, |
RADEON_GEM_DOMAIN_GTT, |
false, |
&rdev->cp.ring_obj); |
if (r) { |
DRM_ERROR("radeon: failed to create ring buffer (%d).\n", r); |
mutex_unlock(&rdev->cp.mutex); |
dev_err(rdev->dev, "(%d) ring create failed\n", r); |
return r; |
} |
r = radeon_object_pin(rdev->cp.ring_obj, |
RADEON_GEM_DOMAIN_GTT, |
r = radeon_bo_reserve(rdev->cp.ring_obj, false); |
if (unlikely(r != 0)) |
return r; |
r = radeon_bo_pin(rdev->cp.ring_obj, RADEON_GEM_DOMAIN_GTT, |
&rdev->cp.gpu_addr); |
if (r) { |
DRM_ERROR("radeon: failed to pin ring buffer (%d).\n", r); |
mutex_unlock(&rdev->cp.mutex); |
radeon_bo_unreserve(rdev->cp.ring_obj); |
dev_err(rdev->dev, "(%d) ring pin failed\n", r); |
return r; |
} |
r = radeon_object_kmap(rdev->cp.ring_obj, |
r = radeon_bo_kmap(rdev->cp.ring_obj, |
(void **)&rdev->cp.ring); |
radeon_bo_unreserve(rdev->cp.ring_obj); |
if (r) { |
DRM_ERROR("radeon: failed to map ring buffer (%d).\n", r); |
mutex_unlock(&rdev->cp.mutex); |
dev_err(rdev->dev, "(%d) ring map failed\n", r); |
return r; |
} |
} |
|
|
// rdev->cp.ring = CreateRingBuffer( ring_size, PG_SW ); |
|
dbgprintf("ring buffer %x\n", rdev->cp.ring ); |
|
// rdev->cp.gpu_addr = rdev->mc.gtt_location; |
|
// u32_t *pagelist = &((u32_t*)page_tabs)[(u32_t)rdev->cp.ring >> 12]; |
|
// dbgprintf("pagelist %x\n", pagelist); |
|
// radeon_gart_bind(rdev, 0, ring_size / 4096, pagelist); |
|
rdev->cp.ptr_mask = (rdev->cp.ring_size / 4) - 1; |
rdev->cp.ring_free_dw = rdev->cp.ring_size / 4; |
|
344,11 → 341,17 |
|
void radeon_ring_fini(struct radeon_device *rdev) |
{ |
int r; |
|
mutex_lock(&rdev->cp.mutex); |
if (rdev->cp.ring_obj) { |
// radeon_object_kunmap(rdev->cp.ring_obj); |
// radeon_object_unpin(rdev->cp.ring_obj); |
// radeon_object_unref(&rdev->cp.ring_obj); |
r = radeon_bo_reserve(rdev->cp.ring_obj, false); |
if (likely(r == 0)) { |
radeon_bo_kunmap(rdev->cp.ring_obj); |
radeon_bo_unpin(rdev->cp.ring_obj); |
radeon_bo_unreserve(rdev->cp.ring_obj); |
} |
radeon_bo_unref(&rdev->cp.ring_obj); |
rdev->cp.ring = NULL; |
rdev->cp.ring_obj = NULL; |
} |