aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/radeon.h
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2013-02-01 11:32:42 -0500
committerAlex Deucher <alexander.deucher@amd.com>2013-02-01 13:57:10 -0500
commit43f1214aa094e46efdfc0255d9601be0e5ea0f62 (patch)
treef68b6472afdc8d460b73f67958aad4b21e06ee85 /drivers/gpu/drm/radeon/radeon.h
parent24178ec42b0985d485886bc43b97e54ff173627e (diff)
drm/radeon: use IBs for VM page table updates v2
For very large page table updates, we can exceed the size of the ring. To avoid this, use an IB to perform the page table update. v2(ck): cleanup the IB infrastructure and the use it instead of filling the struct ourself. Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Christian König <christian.koenig@amd.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon.h')
-rw-r--r--drivers/gpu/drm/radeon/radeon.h7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index 6539d6cb4bc7..307d681b3443 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -780,6 +780,7 @@ int radeon_ib_get(struct radeon_device *rdev, int ring,
780 struct radeon_ib *ib, struct radeon_vm *vm, 780 struct radeon_ib *ib, struct radeon_vm *vm,
781 unsigned size); 781 unsigned size);
782void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib *ib); 782void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib *ib);
783void radeon_ib_sync_to(struct radeon_ib *ib, struct radeon_fence *fence);
783int radeon_ib_schedule(struct radeon_device *rdev, struct radeon_ib *ib, 784int radeon_ib_schedule(struct radeon_device *rdev, struct radeon_ib *ib,
784 struct radeon_ib *const_ib); 785 struct radeon_ib *const_ib);
785int radeon_ib_pool_init(struct radeon_device *rdev); 786int radeon_ib_pool_init(struct radeon_device *rdev);
@@ -1188,7 +1189,9 @@ struct radeon_asic {
1188 void (*fini)(struct radeon_device *rdev); 1189 void (*fini)(struct radeon_device *rdev);
1189 1190
1190 u32 pt_ring_index; 1191 u32 pt_ring_index;
1191 void (*set_page)(struct radeon_device *rdev, uint64_t pe, 1192 void (*set_page)(struct radeon_device *rdev,
1193 struct radeon_ib *ib,
1194 uint64_t pe,
1192 uint64_t addr, unsigned count, 1195 uint64_t addr, unsigned count,
1193 uint32_t incr, uint32_t flags); 1196 uint32_t incr, uint32_t flags);
1194 } vm; 1197 } vm;
@@ -1810,7 +1813,7 @@ void radeon_ring_write(struct radeon_ring *ring, uint32_t v);
1810#define radeon_gart_set_page(rdev, i, p) (rdev)->asic->gart.set_page((rdev), (i), (p)) 1813#define radeon_gart_set_page(rdev, i, p) (rdev)->asic->gart.set_page((rdev), (i), (p))
1811#define radeon_asic_vm_init(rdev) (rdev)->asic->vm.init((rdev)) 1814#define radeon_asic_vm_init(rdev) (rdev)->asic->vm.init((rdev))
1812#define radeon_asic_vm_fini(rdev) (rdev)->asic->vm.fini((rdev)) 1815#define radeon_asic_vm_fini(rdev) (rdev)->asic->vm.fini((rdev))
1813#define radeon_asic_vm_set_page(rdev, pe, addr, count, incr, flags) ((rdev)->asic->vm.set_page((rdev), (pe), (addr), (count), (incr), (flags))) 1816#define radeon_asic_vm_set_page(rdev, ib, pe, addr, count, incr, flags) ((rdev)->asic->vm.set_page((rdev), (ib), (pe), (addr), (count), (incr), (flags)))
1814#define radeon_ring_start(rdev, r, cp) (rdev)->asic->ring[(r)].ring_start((rdev), (cp)) 1817#define radeon_ring_start(rdev, r, cp) (rdev)->asic->ring[(r)].ring_start((rdev), (cp))
1815#define radeon_ring_test(rdev, r, cp) (rdev)->asic->ring[(r)].ring_test((rdev), (cp)) 1818#define radeon_ring_test(rdev, r, cp) (rdev)->asic->ring[(r)].ring_test((rdev), (cp))
1816#define radeon_ib_test(rdev, r, cp) (rdev)->asic->ring[(r)].ib_test((rdev), (cp)) 1819#define radeon_ib_test(rdev, r, cp) (rdev)->asic->ring[(r)].ib_test((rdev), (cp))