aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/radeon.h
diff options
context:
space:
mode:
authorChristian König <deathsimple@vodafone.de>2012-08-08 06:22:43 -0400
committerAlex Deucher <alexander.deucher@amd.com>2012-09-20 13:10:39 -0400
commit9b40e5d8427f12567749978f66e86e5e8fced5ab (patch)
treeb4353bad316dc1e0d5a8e57d9acfcf7d3991770d /drivers/gpu/drm/radeon/radeon.h
parentf82cbddddbd368f391d45738601fa29a75cfbe3b (diff)
drm/radeon: make VM flushs a ring operation
Move flushing the VMs as function into the rings. First step to make VM operations async. Signed-off-by: Christian König <deathsimple@vodafone.de> Reviewed-by: Jerome Glisse <jglisse@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon.h')
-rw-r--r--drivers/gpu/drm/radeon/radeon.h6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index 19a29db7c1f5..320355de9c54 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -639,6 +639,8 @@ struct radeon_vm {
639 struct mutex mutex; 639 struct mutex mutex;
640 /* last fence for cs using this vm */ 640 /* last fence for cs using this vm */
641 struct radeon_fence *fence; 641 struct radeon_fence *fence;
642 /* last flush or NULL if we still need to flush */
643 struct radeon_fence *last_flush;
642}; 644};
643 645
644struct radeon_vm_manager { 646struct radeon_vm_manager {
@@ -1116,7 +1118,6 @@ struct radeon_asic {
1116 int (*init)(struct radeon_device *rdev); 1118 int (*init)(struct radeon_device *rdev);
1117 void (*fini)(struct radeon_device *rdev); 1119 void (*fini)(struct radeon_device *rdev);
1118 int (*bind)(struct radeon_device *rdev, struct radeon_vm *vm, int id); 1120 int (*bind)(struct radeon_device *rdev, struct radeon_vm *vm, int id);
1119 void (*tlb_flush)(struct radeon_device *rdev, struct radeon_vm *vm);
1120 uint32_t (*page_flags)(struct radeon_device *rdev, 1121 uint32_t (*page_flags)(struct radeon_device *rdev,
1121 struct radeon_vm *vm, 1122 struct radeon_vm *vm,
1122 uint32_t flags); 1123 uint32_t flags);
@@ -1135,6 +1136,7 @@ struct radeon_asic {
1135 int (*ring_test)(struct radeon_device *rdev, struct radeon_ring *cp); 1136 int (*ring_test)(struct radeon_device *rdev, struct radeon_ring *cp);
1136 int (*ib_test)(struct radeon_device *rdev, struct radeon_ring *cp); 1137 int (*ib_test)(struct radeon_device *rdev, struct radeon_ring *cp);
1137 bool (*is_lockup)(struct radeon_device *rdev, struct radeon_ring *cp); 1138 bool (*is_lockup)(struct radeon_device *rdev, struct radeon_ring *cp);
1139 void (*vm_flush)(struct radeon_device *rdev, struct radeon_ib *ib);
1138 } ring[RADEON_NUM_RINGS]; 1140 } ring[RADEON_NUM_RINGS];
1139 /* irqs */ 1141 /* irqs */
1140 struct { 1142 struct {
@@ -1733,7 +1735,6 @@ void radeon_ring_write(struct radeon_ring *ring, uint32_t v);
1733#define radeon_asic_vm_init(rdev) (rdev)->asic->vm.init((rdev)) 1735#define radeon_asic_vm_init(rdev) (rdev)->asic->vm.init((rdev))
1734#define radeon_asic_vm_fini(rdev) (rdev)->asic->vm.fini((rdev)) 1736#define radeon_asic_vm_fini(rdev) (rdev)->asic->vm.fini((rdev))
1735#define radeon_asic_vm_bind(rdev, v, id) (rdev)->asic->vm.bind((rdev), (v), (id)) 1737#define radeon_asic_vm_bind(rdev, v, id) (rdev)->asic->vm.bind((rdev), (v), (id))
1736#define radeon_asic_vm_tlb_flush(rdev, v) (rdev)->asic->vm.tlb_flush((rdev), (v))
1737#define radeon_asic_vm_page_flags(rdev, v, flags) (rdev)->asic->vm.page_flags((rdev), (v), (flags)) 1738#define radeon_asic_vm_page_flags(rdev, v, flags) (rdev)->asic->vm.page_flags((rdev), (v), (flags))
1738#define radeon_asic_vm_set_page(rdev, v, pfn, addr, flags) (rdev)->asic->vm.set_page((rdev), (v), (pfn), (addr), (flags)) 1739#define radeon_asic_vm_set_page(rdev, v, pfn, addr, flags) (rdev)->asic->vm.set_page((rdev), (v), (pfn), (addr), (flags))
1739#define radeon_ring_start(rdev, r, cp) (rdev)->asic->ring[(r)].ring_start((rdev), (cp)) 1740#define radeon_ring_start(rdev, r, cp) (rdev)->asic->ring[(r)].ring_start((rdev), (cp))
@@ -1742,6 +1743,7 @@ void radeon_ring_write(struct radeon_ring *ring, uint32_t v);
1742#define radeon_ring_ib_execute(rdev, r, ib) (rdev)->asic->ring[(r)].ib_execute((rdev), (ib)) 1743#define radeon_ring_ib_execute(rdev, r, ib) (rdev)->asic->ring[(r)].ib_execute((rdev), (ib))
1743#define radeon_ring_ib_parse(rdev, r, ib) (rdev)->asic->ring[(r)].ib_parse((rdev), (ib)) 1744#define radeon_ring_ib_parse(rdev, r, ib) (rdev)->asic->ring[(r)].ib_parse((rdev), (ib))
1744#define radeon_ring_is_lockup(rdev, r, cp) (rdev)->asic->ring[(r)].is_lockup((rdev), (cp)) 1745#define radeon_ring_is_lockup(rdev, r, cp) (rdev)->asic->ring[(r)].is_lockup((rdev), (cp))
1746#define radeon_ring_vm_flush(rdev, r, ib) (rdev)->asic->ring[(r)].vm_flush((rdev), (ib))
1745#define radeon_irq_set(rdev) (rdev)->asic->irq.set((rdev)) 1747#define radeon_irq_set(rdev) (rdev)->asic->irq.set((rdev))
1746#define radeon_irq_process(rdev) (rdev)->asic->irq.process((rdev)) 1748#define radeon_irq_process(rdev) (rdev)->asic->irq.process((rdev))
1747#define radeon_get_vblank_counter(rdev, crtc) (rdev)->asic->display.get_vblank_counter((rdev), (crtc)) 1749#define radeon_get_vblank_counter(rdev, crtc) (rdev)->asic->display.get_vblank_counter((rdev), (crtc))