diff options
author | Christian König <christian.koenig@amd.com> | 2017-06-28 07:43:48 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-07-14 11:05:56 -0400 |
commit | e8110b1c9bdd3d76610a9783724233a570964d3c (patch) | |
tree | 487cf682efa74dc330f48f0fc70a7c865406c40c | |
parent | 0ed279877ddf7ae8e5acd9fe4d464ceba98f37cd (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.h | 44 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 42 |
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 | */ | ||
1798 | static 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 | |||
1807 | static 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 | |||
1839 | static inline struct amdgpu_sdma_instance * | 1795 | static inline struct amdgpu_sdma_instance * |
1840 | amdgpu_get_sdma_instance(struct amdgpu_ring *ring) | 1796 | amdgpu_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 | ||
215 | static 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 | |||
224 | static 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 |