diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon.h')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon.h | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h index b9ee99258602..ecf2a3960c07 100644 --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h | |||
@@ -348,6 +348,7 @@ int radeon_fence_emit(struct radeon_device *rdev, struct radeon_fence **fence, i | |||
348 | void radeon_fence_process(struct radeon_device *rdev, int ring); | 348 | void radeon_fence_process(struct radeon_device *rdev, int ring); |
349 | bool radeon_fence_signaled(struct radeon_fence *fence); | 349 | bool radeon_fence_signaled(struct radeon_fence *fence); |
350 | int radeon_fence_wait(struct radeon_fence *fence, bool interruptible); | 350 | int radeon_fence_wait(struct radeon_fence *fence, bool interruptible); |
351 | int radeon_fence_wait_locked(struct radeon_fence *fence); | ||
351 | int radeon_fence_wait_next_locked(struct radeon_device *rdev, int ring); | 352 | int radeon_fence_wait_next_locked(struct radeon_device *rdev, int ring); |
352 | int radeon_fence_wait_empty_locked(struct radeon_device *rdev, int ring); | 353 | int radeon_fence_wait_empty_locked(struct radeon_device *rdev, int ring); |
353 | int radeon_fence_wait_any(struct radeon_device *rdev, | 354 | int radeon_fence_wait_any(struct radeon_device *rdev, |
@@ -548,17 +549,20 @@ struct radeon_semaphore { | |||
548 | struct radeon_sa_bo *sa_bo; | 549 | struct radeon_sa_bo *sa_bo; |
549 | signed waiters; | 550 | signed waiters; |
550 | uint64_t gpu_addr; | 551 | uint64_t gpu_addr; |
552 | struct radeon_fence *sync_to[RADEON_NUM_RINGS]; | ||
551 | }; | 553 | }; |
552 | 554 | ||
553 | int radeon_semaphore_create(struct radeon_device *rdev, | 555 | int radeon_semaphore_create(struct radeon_device *rdev, |
554 | struct radeon_semaphore **semaphore); | 556 | struct radeon_semaphore **semaphore); |
555 | void radeon_semaphore_emit_signal(struct radeon_device *rdev, int ring, | 557 | bool radeon_semaphore_emit_signal(struct radeon_device *rdev, int ring, |
556 | struct radeon_semaphore *semaphore); | 558 | struct radeon_semaphore *semaphore); |
557 | void radeon_semaphore_emit_wait(struct radeon_device *rdev, int ring, | 559 | bool radeon_semaphore_emit_wait(struct radeon_device *rdev, int ring, |
558 | struct radeon_semaphore *semaphore); | 560 | struct radeon_semaphore *semaphore); |
561 | void radeon_semaphore_sync_to(struct radeon_semaphore *semaphore, | ||
562 | struct radeon_fence *fence); | ||
559 | int radeon_semaphore_sync_rings(struct radeon_device *rdev, | 563 | int radeon_semaphore_sync_rings(struct radeon_device *rdev, |
560 | struct radeon_semaphore *semaphore, | 564 | struct radeon_semaphore *semaphore, |
561 | int signaler, int waiter); | 565 | int waiting_ring); |
562 | void radeon_semaphore_free(struct radeon_device *rdev, | 566 | void radeon_semaphore_free(struct radeon_device *rdev, |
563 | struct radeon_semaphore **semaphore, | 567 | struct radeon_semaphore **semaphore, |
564 | struct radeon_fence *fence); | 568 | struct radeon_fence *fence); |
@@ -645,13 +649,15 @@ void radeon_scratch_free(struct radeon_device *rdev, uint32_t reg); | |||
645 | /* | 649 | /* |
646 | * GPU doorbell structures, functions & helpers | 650 | * GPU doorbell structures, functions & helpers |
647 | */ | 651 | */ |
652 | #define RADEON_MAX_DOORBELLS 1024 /* Reserve at most 1024 doorbell slots for radeon-owned rings. */ | ||
653 | |||
648 | struct radeon_doorbell { | 654 | struct radeon_doorbell { |
649 | u32 num_pages; | ||
650 | bool free[1024]; | ||
651 | /* doorbell mmio */ | 655 | /* doorbell mmio */ |
652 | resource_size_t base; | 656 | resource_size_t base; |
653 | resource_size_t size; | 657 | resource_size_t size; |
654 | void __iomem *ptr; | 658 | u32 __iomem *ptr; |
659 | u32 num_doorbells; /* Number of doorbells actually reserved for radeon. */ | ||
660 | unsigned long used[DIV_ROUND_UP(RADEON_MAX_DOORBELLS, BITS_PER_LONG)]; | ||
655 | }; | 661 | }; |
656 | 662 | ||
657 | int radeon_doorbell_get(struct radeon_device *rdev, u32 *page); | 663 | int radeon_doorbell_get(struct radeon_device *rdev, u32 *page); |
@@ -765,7 +771,6 @@ struct radeon_ib { | |||
765 | struct radeon_fence *fence; | 771 | struct radeon_fence *fence; |
766 | struct radeon_vm *vm; | 772 | struct radeon_vm *vm; |
767 | bool is_const_ib; | 773 | bool is_const_ib; |
768 | struct radeon_fence *sync_to[RADEON_NUM_RINGS]; | ||
769 | struct radeon_semaphore *semaphore; | 774 | struct radeon_semaphore *semaphore; |
770 | }; | 775 | }; |
771 | 776 | ||
@@ -799,8 +804,7 @@ struct radeon_ring { | |||
799 | u32 pipe; | 804 | u32 pipe; |
800 | u32 queue; | 805 | u32 queue; |
801 | struct radeon_bo *mqd_obj; | 806 | struct radeon_bo *mqd_obj; |
802 | u32 doorbell_page_num; | 807 | u32 doorbell_index; |
803 | u32 doorbell_offset; | ||
804 | unsigned wptr_offs; | 808 | unsigned wptr_offs; |
805 | }; | 809 | }; |
806 | 810 | ||
@@ -921,7 +925,6 @@ int radeon_ib_get(struct radeon_device *rdev, int ring, | |||
921 | struct radeon_ib *ib, struct radeon_vm *vm, | 925 | struct radeon_ib *ib, struct radeon_vm *vm, |
922 | unsigned size); | 926 | unsigned size); |
923 | void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib *ib); | 927 | void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib *ib); |
924 | void radeon_ib_sync_to(struct radeon_ib *ib, struct radeon_fence *fence); | ||
925 | int radeon_ib_schedule(struct radeon_device *rdev, struct radeon_ib *ib, | 928 | int radeon_ib_schedule(struct radeon_device *rdev, struct radeon_ib *ib, |
926 | struct radeon_ib *const_ib); | 929 | struct radeon_ib *const_ib); |
927 | int radeon_ib_pool_init(struct radeon_device *rdev); | 930 | int radeon_ib_pool_init(struct radeon_device *rdev); |
@@ -1638,7 +1641,7 @@ struct radeon_asic_ring { | |||
1638 | /* command emmit functions */ | 1641 | /* command emmit functions */ |
1639 | void (*ib_execute)(struct radeon_device *rdev, struct radeon_ib *ib); | 1642 | void (*ib_execute)(struct radeon_device *rdev, struct radeon_ib *ib); |
1640 | void (*emit_fence)(struct radeon_device *rdev, struct radeon_fence *fence); | 1643 | void (*emit_fence)(struct radeon_device *rdev, struct radeon_fence *fence); |
1641 | void (*emit_semaphore)(struct radeon_device *rdev, struct radeon_ring *cp, | 1644 | bool (*emit_semaphore)(struct radeon_device *rdev, struct radeon_ring *cp, |
1642 | struct radeon_semaphore *semaphore, bool emit_wait); | 1645 | struct radeon_semaphore *semaphore, bool emit_wait); |
1643 | void (*vm_flush)(struct radeon_device *rdev, int ridx, struct radeon_vm *vm); | 1646 | void (*vm_flush)(struct radeon_device *rdev, int ridx, struct radeon_vm *vm); |
1644 | 1647 | ||
@@ -1979,6 +1982,7 @@ struct cik_asic { | |||
1979 | 1982 | ||
1980 | unsigned tile_config; | 1983 | unsigned tile_config; |
1981 | uint32_t tile_mode_array[32]; | 1984 | uint32_t tile_mode_array[32]; |
1985 | uint32_t macrotile_mode_array[16]; | ||
1982 | }; | 1986 | }; |
1983 | 1987 | ||
1984 | union radeon_asic_config { | 1988 | union radeon_asic_config { |
@@ -2239,8 +2243,8 @@ void r100_mm_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v, | |||
2239 | u32 r100_io_rreg(struct radeon_device *rdev, u32 reg); | 2243 | u32 r100_io_rreg(struct radeon_device *rdev, u32 reg); |
2240 | void r100_io_wreg(struct radeon_device *rdev, u32 reg, u32 v); | 2244 | void r100_io_wreg(struct radeon_device *rdev, u32 reg, u32 v); |
2241 | 2245 | ||
2242 | u32 cik_mm_rdoorbell(struct radeon_device *rdev, u32 offset); | 2246 | u32 cik_mm_rdoorbell(struct radeon_device *rdev, u32 index); |
2243 | void cik_mm_wdoorbell(struct radeon_device *rdev, u32 offset, u32 v); | 2247 | void cik_mm_wdoorbell(struct radeon_device *rdev, u32 index, u32 v); |
2244 | 2248 | ||
2245 | /* | 2249 | /* |
2246 | * Cast helper | 2250 | * Cast helper |
@@ -2303,8 +2307,8 @@ void cik_mm_wdoorbell(struct radeon_device *rdev, u32 offset, u32 v); | |||
2303 | #define RREG32_IO(reg) r100_io_rreg(rdev, (reg)) | 2307 | #define RREG32_IO(reg) r100_io_rreg(rdev, (reg)) |
2304 | #define WREG32_IO(reg, v) r100_io_wreg(rdev, (reg), (v)) | 2308 | #define WREG32_IO(reg, v) r100_io_wreg(rdev, (reg), (v)) |
2305 | 2309 | ||
2306 | #define RDOORBELL32(offset) cik_mm_rdoorbell(rdev, (offset)) | 2310 | #define RDOORBELL32(index) cik_mm_rdoorbell(rdev, (index)) |
2307 | #define WDOORBELL32(offset, v) cik_mm_wdoorbell(rdev, (offset), (v)) | 2311 | #define WDOORBELL32(index, v) cik_mm_wdoorbell(rdev, (index), (v)) |
2308 | 2312 | ||
2309 | /* | 2313 | /* |
2310 | * Indirect registers accessor | 2314 | * Indirect registers accessor |