diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2012-06-04 18:45:15 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2012-12-10 16:53:47 -0500 |
commit | 009ee7a0d4520d7d7aa810ca3662c03580ceeaae (patch) | |
tree | 4427e6e1ccb542ce0e03e9facaaf37f022d8551f /drivers/gpu/drm/radeon/radeon_test.c | |
parent | 8c5fd7efcc5c037bdfbf6d90639fcdc499824bbd (diff) |
drm/radeon/kms: add support for dma rings to radeon_test_moves()
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_test.c')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_test.c | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_test.c b/drivers/gpu/drm/radeon/radeon_test.c index 587c09a00ba2..fda09c9ea689 100644 --- a/drivers/gpu/drm/radeon/radeon_test.c +++ b/drivers/gpu/drm/radeon/radeon_test.c | |||
@@ -26,16 +26,31 @@ | |||
26 | #include "radeon_reg.h" | 26 | #include "radeon_reg.h" |
27 | #include "radeon.h" | 27 | #include "radeon.h" |
28 | 28 | ||
29 | #define RADEON_TEST_COPY_BLIT 1 | ||
30 | #define RADEON_TEST_COPY_DMA 0 | ||
31 | |||
29 | 32 | ||
30 | /* Test BO GTT->VRAM and VRAM->GTT GPU copies across the whole GTT aperture */ | 33 | /* Test BO GTT->VRAM and VRAM->GTT GPU copies across the whole GTT aperture */ |
31 | void radeon_test_moves(struct radeon_device *rdev) | 34 | static void radeon_do_test_moves(struct radeon_device *rdev, int flag) |
32 | { | 35 | { |
33 | struct radeon_bo *vram_obj = NULL; | 36 | struct radeon_bo *vram_obj = NULL; |
34 | struct radeon_bo **gtt_obj = NULL; | 37 | struct radeon_bo **gtt_obj = NULL; |
35 | struct radeon_fence *fence = NULL; | 38 | struct radeon_fence *fence = NULL; |
36 | uint64_t gtt_addr, vram_addr; | 39 | uint64_t gtt_addr, vram_addr; |
37 | unsigned i, n, size; | 40 | unsigned i, n, size; |
38 | int r; | 41 | int r, ring; |
42 | |||
43 | switch (flag) { | ||
44 | case RADEON_TEST_COPY_DMA: | ||
45 | ring = radeon_copy_dma_ring_index(rdev); | ||
46 | break; | ||
47 | case RADEON_TEST_COPY_BLIT: | ||
48 | ring = radeon_copy_blit_ring_index(rdev); | ||
49 | break; | ||
50 | default: | ||
51 | DRM_ERROR("Unknown copy method\n"); | ||
52 | return; | ||
53 | } | ||
39 | 54 | ||
40 | size = 1024 * 1024; | 55 | size = 1024 * 1024; |
41 | 56 | ||
@@ -106,7 +121,10 @@ void radeon_test_moves(struct radeon_device *rdev) | |||
106 | 121 | ||
107 | radeon_bo_kunmap(gtt_obj[i]); | 122 | radeon_bo_kunmap(gtt_obj[i]); |
108 | 123 | ||
109 | r = radeon_copy(rdev, gtt_addr, vram_addr, size / RADEON_GPU_PAGE_SIZE, &fence); | 124 | if (ring == R600_RING_TYPE_DMA_INDEX) |
125 | r = radeon_copy_dma(rdev, gtt_addr, vram_addr, size / RADEON_GPU_PAGE_SIZE, &fence); | ||
126 | else | ||
127 | r = radeon_copy_blit(rdev, gtt_addr, vram_addr, size / RADEON_GPU_PAGE_SIZE, &fence); | ||
110 | if (r) { | 128 | if (r) { |
111 | DRM_ERROR("Failed GTT->VRAM copy %d\n", i); | 129 | DRM_ERROR("Failed GTT->VRAM copy %d\n", i); |
112 | goto out_cleanup; | 130 | goto out_cleanup; |
@@ -149,7 +167,10 @@ void radeon_test_moves(struct radeon_device *rdev) | |||
149 | 167 | ||
150 | radeon_bo_kunmap(vram_obj); | 168 | radeon_bo_kunmap(vram_obj); |
151 | 169 | ||
152 | r = radeon_copy(rdev, vram_addr, gtt_addr, size / RADEON_GPU_PAGE_SIZE, &fence); | 170 | if (ring == R600_RING_TYPE_DMA_INDEX) |
171 | r = radeon_copy_dma(rdev, vram_addr, gtt_addr, size / RADEON_GPU_PAGE_SIZE, &fence); | ||
172 | else | ||
173 | r = radeon_copy_blit(rdev, vram_addr, gtt_addr, size / RADEON_GPU_PAGE_SIZE, &fence); | ||
153 | if (r) { | 174 | if (r) { |
154 | DRM_ERROR("Failed VRAM->GTT copy %d\n", i); | 175 | DRM_ERROR("Failed VRAM->GTT copy %d\n", i); |
155 | goto out_cleanup; | 176 | goto out_cleanup; |
@@ -223,6 +244,14 @@ out_cleanup: | |||
223 | } | 244 | } |
224 | } | 245 | } |
225 | 246 | ||
247 | void radeon_test_moves(struct radeon_device *rdev) | ||
248 | { | ||
249 | if (rdev->asic->copy.dma) | ||
250 | radeon_do_test_moves(rdev, RADEON_TEST_COPY_DMA); | ||
251 | if (rdev->asic->copy.blit) | ||
252 | radeon_do_test_moves(rdev, RADEON_TEST_COPY_BLIT); | ||
253 | } | ||
254 | |||
226 | void radeon_test_ring_sync(struct radeon_device *rdev, | 255 | void radeon_test_ring_sync(struct radeon_device *rdev, |
227 | struct radeon_ring *ringA, | 256 | struct radeon_ring *ringA, |
228 | struct radeon_ring *ringB) | 257 | struct radeon_ring *ringB) |