aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu.h')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu.h41
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);
440int amdgpu_fence_wait_empty(struct amdgpu_ring *ring); 445int amdgpu_fence_wait_empty(struct amdgpu_ring *ring);
441unsigned amdgpu_fence_count_emitted(struct amdgpu_ring *ring); 446unsigned amdgpu_fence_count_emitted(struct amdgpu_ring *ring);
442 447
443signed long amdgpu_fence_wait_multiple(struct amdgpu_device *adev, 448signed 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);
449struct amdgpu_fence *amdgpu_fence_ref(struct amdgpu_fence *fence); 453struct amdgpu_fence *amdgpu_fence_ref(struct amdgpu_fence *fence);
450void amdgpu_fence_unref(struct amdgpu_fence **fence); 454void 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);
718int amdgpu_sync_rings(struct amdgpu_sync *sync, 722int amdgpu_sync_rings(struct amdgpu_sync *sync,
719 struct amdgpu_ring *ring); 723 struct amdgpu_ring *ring);
724struct fence *amdgpu_sync_get_fence(struct amdgpu_sync *sync);
720int amdgpu_sync_wait(struct amdgpu_sync *sync); 725int amdgpu_sync_wait(struct amdgpu_sync *sync);
721void amdgpu_sync_free(struct amdgpu_device *adev, struct amdgpu_sync *sync, 726void 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);
1214void amdgpu_ring_free_size(struct amdgpu_ring *ring); 1219void amdgpu_ring_free_size(struct amdgpu_ring *ring);
1215int amdgpu_ring_alloc(struct amdgpu_ring *ring, unsigned ndw); 1220int amdgpu_ring_alloc(struct amdgpu_ring *ring, unsigned ndw);
1216int amdgpu_ring_lock(struct amdgpu_ring *ring, unsigned ndw); 1221int amdgpu_ring_lock(struct amdgpu_ring *ring, unsigned ndw);
1222void amdgpu_ring_insert_nop(struct amdgpu_ring *ring, uint32_t count);
1217void amdgpu_ring_commit(struct amdgpu_ring *ring); 1223void amdgpu_ring_commit(struct amdgpu_ring *ring);
1218void amdgpu_ring_unlock_commit(struct amdgpu_ring *ring); 1224void amdgpu_ring_unlock_commit(struct amdgpu_ring *ring);
1219void amdgpu_ring_undo(struct amdgpu_ring *ring); 1225void 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
2205static 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))