diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu.h')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu.h | 41 |
1 files changed, 31 insertions, 10 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index aa2dcf578dd6..668939a14206 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h | |||
@@ -98,6 +98,9 @@ extern int amdgpu_sched_hw_submission; | |||
98 | #define AMDGPU_MAX_COMPUTE_RINGS 8 | 98 | #define AMDGPU_MAX_COMPUTE_RINGS 8 |
99 | #define AMDGPU_MAX_VCE_RINGS 2 | 99 | #define AMDGPU_MAX_VCE_RINGS 2 |
100 | 100 | ||
101 | /* max number of IP instances */ | ||
102 | #define AMDGPU_MAX_SDMA_INSTANCES 2 | ||
103 | |||
101 | /* number of hw syncs before falling back on blocking */ | 104 | /* number of hw syncs before falling back on blocking */ |
102 | #define AMDGPU_NUM_SYNCS 4 | 105 | #define AMDGPU_NUM_SYNCS 4 |
103 | 106 | ||
@@ -262,7 +265,7 @@ struct amdgpu_buffer_funcs { | |||
262 | unsigned fill_num_dw; | 265 | unsigned fill_num_dw; |
263 | 266 | ||
264 | /* used for buffer clearing */ | 267 | /* used for buffer clearing */ |
265 | void (*emit_fill_buffer)(struct amdgpu_ring *ring, | 268 | void (*emit_fill_buffer)(struct amdgpu_ib *ib, |
266 | /* value to write to memory */ | 269 | /* value to write to memory */ |
267 | uint32_t src_data, | 270 | uint32_t src_data, |
268 | /* dst addr in bytes */ | 271 | /* dst addr in bytes */ |
@@ -340,6 +343,8 @@ struct amdgpu_ring_funcs { | |||
340 | int (*test_ring)(struct amdgpu_ring *ring); | 343 | int (*test_ring)(struct amdgpu_ring *ring); |
341 | int (*test_ib)(struct amdgpu_ring *ring); | 344 | int (*test_ib)(struct amdgpu_ring *ring); |
342 | bool (*is_lockup)(struct amdgpu_ring *ring); | 345 | bool (*is_lockup)(struct amdgpu_ring *ring); |
346 | /* insert NOP packets */ | ||
347 | void (*insert_nop)(struct amdgpu_ring *ring, uint32_t count); | ||
343 | }; | 348 | }; |
344 | 349 | ||
345 | /* | 350 | /* |
@@ -440,12 +445,11 @@ int amdgpu_fence_wait_next(struct amdgpu_ring *ring); | |||
440 | int amdgpu_fence_wait_empty(struct amdgpu_ring *ring); | 445 | int amdgpu_fence_wait_empty(struct amdgpu_ring *ring); |
441 | unsigned amdgpu_fence_count_emitted(struct amdgpu_ring *ring); | 446 | unsigned amdgpu_fence_count_emitted(struct amdgpu_ring *ring); |
442 | 447 | ||
443 | signed long amdgpu_fence_wait_multiple(struct amdgpu_device *adev, | 448 | signed long amdgpu_fence_wait_any(struct amdgpu_device *adev, |
444 | struct fence **array, | 449 | struct fence **array, |
445 | uint32_t count, | 450 | uint32_t count, |
446 | bool wait_all, | 451 | bool intr, |
447 | bool intr, | 452 | signed long t); |
448 | signed long t); | ||
449 | struct amdgpu_fence *amdgpu_fence_ref(struct amdgpu_fence *fence); | 453 | struct amdgpu_fence *amdgpu_fence_ref(struct amdgpu_fence *fence); |
450 | void amdgpu_fence_unref(struct amdgpu_fence **fence); | 454 | void amdgpu_fence_unref(struct amdgpu_fence **fence); |
451 | 455 | ||
@@ -717,6 +721,7 @@ int amdgpu_sync_resv(struct amdgpu_device *adev, | |||
717 | void *owner); | 721 | void *owner); |
718 | int amdgpu_sync_rings(struct amdgpu_sync *sync, | 722 | int amdgpu_sync_rings(struct amdgpu_sync *sync, |
719 | struct amdgpu_ring *ring); | 723 | struct amdgpu_ring *ring); |
724 | struct fence *amdgpu_sync_get_fence(struct amdgpu_sync *sync); | ||
720 | int amdgpu_sync_wait(struct amdgpu_sync *sync); | 725 | int amdgpu_sync_wait(struct amdgpu_sync *sync); |
721 | void amdgpu_sync_free(struct amdgpu_device *adev, struct amdgpu_sync *sync, | 726 | void amdgpu_sync_free(struct amdgpu_device *adev, struct amdgpu_sync *sync, |
722 | struct fence *fence); | 727 | struct fence *fence); |
@@ -1214,6 +1219,7 @@ int amdgpu_ib_ring_tests(struct amdgpu_device *adev); | |||
1214 | void amdgpu_ring_free_size(struct amdgpu_ring *ring); | 1219 | void amdgpu_ring_free_size(struct amdgpu_ring *ring); |
1215 | int amdgpu_ring_alloc(struct amdgpu_ring *ring, unsigned ndw); | 1220 | int amdgpu_ring_alloc(struct amdgpu_ring *ring, unsigned ndw); |
1216 | int amdgpu_ring_lock(struct amdgpu_ring *ring, unsigned ndw); | 1221 | int amdgpu_ring_lock(struct amdgpu_ring *ring, unsigned ndw); |
1222 | void amdgpu_ring_insert_nop(struct amdgpu_ring *ring, uint32_t count); | ||
1217 | void amdgpu_ring_commit(struct amdgpu_ring *ring); | 1223 | void amdgpu_ring_commit(struct amdgpu_ring *ring); |
1218 | void amdgpu_ring_unlock_commit(struct amdgpu_ring *ring); | 1224 | void amdgpu_ring_unlock_commit(struct amdgpu_ring *ring); |
1219 | void amdgpu_ring_undo(struct amdgpu_ring *ring); | 1225 | void amdgpu_ring_undo(struct amdgpu_ring *ring); |
@@ -1665,7 +1671,6 @@ struct amdgpu_uvd { | |||
1665 | struct amdgpu_bo *vcpu_bo; | 1671 | struct amdgpu_bo *vcpu_bo; |
1666 | void *cpu_addr; | 1672 | void *cpu_addr; |
1667 | uint64_t gpu_addr; | 1673 | uint64_t gpu_addr; |
1668 | void *saved_bo; | ||
1669 | atomic_t handles[AMDGPU_MAX_UVD_HANDLES]; | 1674 | atomic_t handles[AMDGPU_MAX_UVD_HANDLES]; |
1670 | struct drm_file *filp[AMDGPU_MAX_UVD_HANDLES]; | 1675 | struct drm_file *filp[AMDGPU_MAX_UVD_HANDLES]; |
1671 | struct delayed_work idle_work; | 1676 | struct delayed_work idle_work; |
@@ -1709,6 +1714,7 @@ struct amdgpu_sdma { | |||
1709 | uint32_t feature_version; | 1714 | uint32_t feature_version; |
1710 | 1715 | ||
1711 | struct amdgpu_ring ring; | 1716 | struct amdgpu_ring ring; |
1717 | bool burst_nop; | ||
1712 | }; | 1718 | }; |
1713 | 1719 | ||
1714 | /* | 1720 | /* |
@@ -2057,7 +2063,7 @@ struct amdgpu_device { | |||
2057 | struct amdgpu_gfx gfx; | 2063 | struct amdgpu_gfx gfx; |
2058 | 2064 | ||
2059 | /* sdma */ | 2065 | /* sdma */ |
2060 | struct amdgpu_sdma sdma[2]; | 2066 | struct amdgpu_sdma sdma[AMDGPU_MAX_SDMA_INSTANCES]; |
2061 | struct amdgpu_irq_src sdma_trap_irq; | 2067 | struct amdgpu_irq_src sdma_trap_irq; |
2062 | struct amdgpu_irq_src sdma_illegal_inst_irq; | 2068 | struct amdgpu_irq_src sdma_illegal_inst_irq; |
2063 | 2069 | ||
@@ -2196,6 +2202,21 @@ static inline void amdgpu_ring_write(struct amdgpu_ring *ring, uint32_t v) | |||
2196 | ring->ring_free_dw--; | 2202 | ring->ring_free_dw--; |
2197 | } | 2203 | } |
2198 | 2204 | ||
2205 | static inline struct amdgpu_sdma * amdgpu_get_sdma_instance(struct amdgpu_ring *ring) | ||
2206 | { | ||
2207 | struct amdgpu_device *adev = ring->adev; | ||
2208 | int i; | ||
2209 | |||
2210 | for (i = 0; i < AMDGPU_MAX_SDMA_INSTANCES; i++) | ||
2211 | if (&adev->sdma[i].ring == ring) | ||
2212 | break; | ||
2213 | |||
2214 | if (i < AMDGPU_MAX_SDMA_INSTANCES) | ||
2215 | return &adev->sdma[i]; | ||
2216 | else | ||
2217 | return NULL; | ||
2218 | } | ||
2219 | |||
2199 | /* | 2220 | /* |
2200 | * ASICs macro. | 2221 | * ASICs macro. |
2201 | */ | 2222 | */ |
@@ -2248,7 +2269,7 @@ static inline void amdgpu_ring_write(struct amdgpu_ring *ring, uint32_t v) | |||
2248 | #define amdgpu_display_stop_mc_access(adev, s) (adev)->mode_info.funcs->stop_mc_access((adev), (s)) | 2269 | #define amdgpu_display_stop_mc_access(adev, s) (adev)->mode_info.funcs->stop_mc_access((adev), (s)) |
2249 | #define amdgpu_display_resume_mc_access(adev, s) (adev)->mode_info.funcs->resume_mc_access((adev), (s)) | 2270 | #define amdgpu_display_resume_mc_access(adev, s) (adev)->mode_info.funcs->resume_mc_access((adev), (s)) |
2250 | #define amdgpu_emit_copy_buffer(adev, ib, s, d, b) (adev)->mman.buffer_funcs->emit_copy_buffer((ib), (s), (d), (b)) | 2271 | #define amdgpu_emit_copy_buffer(adev, ib, s, d, b) (adev)->mman.buffer_funcs->emit_copy_buffer((ib), (s), (d), (b)) |
2251 | #define amdgpu_emit_fill_buffer(adev, r, s, d, b) (adev)->mman.buffer_funcs->emit_fill_buffer((r), (s), (d), (b)) | 2272 | #define amdgpu_emit_fill_buffer(adev, ib, s, d, b) (adev)->mman.buffer_funcs->emit_fill_buffer((ib), (s), (d), (b)) |
2252 | #define amdgpu_dpm_get_temperature(adev) (adev)->pm.funcs->get_temperature((adev)) | 2273 | #define amdgpu_dpm_get_temperature(adev) (adev)->pm.funcs->get_temperature((adev)) |
2253 | #define amdgpu_dpm_pre_set_power_state(adev) (adev)->pm.funcs->pre_set_power_state((adev)) | 2274 | #define amdgpu_dpm_pre_set_power_state(adev) (adev)->pm.funcs->pre_set_power_state((adev)) |
2254 | #define amdgpu_dpm_set_power_state(adev) (adev)->pm.funcs->set_power_state((adev)) | 2275 | #define amdgpu_dpm_set_power_state(adev) (adev)->pm.funcs->set_power_state((adev)) |