diff options
author | Christian König <deathsimple@vodafone.de> | 2012-08-08 06:22:43 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2012-09-20 13:10:39 -0400 |
commit | 9b40e5d8427f12567749978f66e86e5e8fced5ab (patch) | |
tree | b4353bad316dc1e0d5a8e57d9acfcf7d3991770d /drivers/gpu/drm/radeon/radeon.h | |
parent | f82cbddddbd368f391d45738601fa29a75cfbe3b (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.h | 6 |
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 | ||
644 | struct radeon_vm_manager { | 646 | struct 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)) |