aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2017-06-28 07:43:48 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-07-14 11:05:56 -0400
commite8110b1c9bdd3d76610a9783724233a570964d3c (patch)
tree487cf682efa74dc330f48f0fc70a7c865406c40c
parent0ed279877ddf7ae8e5acd9fe4d464ceba98f37cd (diff)
drm/amdgpu: move ring helpers to amdgpu_ring.h
Keep them where they belong. Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Acked-by: Felix Kuehling <Felix.Kuehling@amd.com>
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu.h44
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h42
2 files changed, 42 insertions, 44 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index df63823ad4db..714235f507f6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -1792,50 +1792,6 @@ void amdgpu_mm_wdoorbell64(struct amdgpu_device *adev, u32 index, u64 v);
1792#define RBIOS16(i) (RBIOS8(i) | (RBIOS8((i)+1) << 8)) 1792#define RBIOS16(i) (RBIOS8(i) | (RBIOS8((i)+1) << 8))
1793#define RBIOS32(i) ((RBIOS16(i)) | (RBIOS16((i)+2) << 16)) 1793#define RBIOS32(i) ((RBIOS16(i)) | (RBIOS16((i)+2) << 16))
1794 1794
1795/*
1796 * RING helpers.
1797 */
1798static inline void amdgpu_ring_write(struct amdgpu_ring *ring, uint32_t v)
1799{
1800 if (ring->count_dw <= 0)
1801 DRM_ERROR("amdgpu: writing more dwords to the ring than expected!\n");
1802 ring->ring[ring->wptr++ & ring->buf_mask] = v;
1803 ring->wptr &= ring->ptr_mask;
1804 ring->count_dw--;
1805}
1806
1807static inline void amdgpu_ring_write_multiple(struct amdgpu_ring *ring, void *src, int count_dw)
1808{
1809 unsigned occupied, chunk1, chunk2;
1810 void *dst;
1811
1812 if (unlikely(ring->count_dw < count_dw)) {
1813 DRM_ERROR("amdgpu: writing more dwords to the ring than expected!\n");
1814 return;
1815 }
1816
1817 occupied = ring->wptr & ring->buf_mask;
1818 dst = (void *)&ring->ring[occupied];
1819 chunk1 = ring->buf_mask + 1 - occupied;
1820 chunk1 = (chunk1 >= count_dw) ? count_dw: chunk1;
1821 chunk2 = count_dw - chunk1;
1822 chunk1 <<= 2;
1823 chunk2 <<= 2;
1824
1825 if (chunk1)
1826 memcpy(dst, src, chunk1);
1827
1828 if (chunk2) {
1829 src += chunk1;
1830 dst = (void *)ring->ring;
1831 memcpy(dst, src, chunk2);
1832 }
1833
1834 ring->wptr += count_dw;
1835 ring->wptr &= ring->ptr_mask;
1836 ring->count_dw -= count_dw;
1837}
1838
1839static inline struct amdgpu_sdma_instance * 1795static inline struct amdgpu_sdma_instance *
1840amdgpu_get_sdma_instance(struct amdgpu_ring *ring) 1796amdgpu_get_sdma_instance(struct amdgpu_ring *ring)
1841{ 1797{
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
index bc8dec992f73..04cbc3a4d4bf 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
@@ -212,4 +212,46 @@ static inline void amdgpu_ring_clear_ring(struct amdgpu_ring *ring)
212 212
213} 213}
214 214
215static inline void amdgpu_ring_write(struct amdgpu_ring *ring, uint32_t v)
216{
217 if (ring->count_dw <= 0)
218 DRM_ERROR("amdgpu: writing more dwords to the ring than expected!\n");
219 ring->ring[ring->wptr++ & ring->buf_mask] = v;
220 ring->wptr &= ring->ptr_mask;
221 ring->count_dw--;
222}
223
224static inline void amdgpu_ring_write_multiple(struct amdgpu_ring *ring,
225 void *src, int count_dw)
226{
227 unsigned occupied, chunk1, chunk2;
228 void *dst;
229
230 if (unlikely(ring->count_dw < count_dw)) {
231 DRM_ERROR("amdgpu: writing more dwords to the ring than expected!\n");
232 return;
233 }
234
235 occupied = ring->wptr & ring->buf_mask;
236 dst = (void *)&ring->ring[occupied];
237 chunk1 = ring->buf_mask + 1 - occupied;
238 chunk1 = (chunk1 >= count_dw) ? count_dw: chunk1;
239 chunk2 = count_dw - chunk1;
240 chunk1 <<= 2;
241 chunk2 <<= 2;
242
243 if (chunk1)
244 memcpy(dst, src, chunk1);
245
246 if (chunk2) {
247 src += chunk1;
248 dst = (void *)ring->ring;
249 memcpy(dst, src, chunk2);
250 }
251
252 ring->wptr += count_dw;
253 ring->wptr &= ring->ptr_mask;
254 ring->count_dw -= count_dw;
255}
256
215#endif 257#endif