Subversion Repositories Kolibri OS

Rev

Rev 5271 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5271 Rev 6104
Line 32... Line 32...
32
#define RADEON_BENCHMARK_ITERATIONS 1024
32
#define RADEON_BENCHMARK_ITERATIONS 1024
33
#define RADEON_BENCHMARK_COMMON_MODES_N 17
33
#define RADEON_BENCHMARK_COMMON_MODES_N 17
Line 34... Line 34...
34
 
34
 
35
static int radeon_benchmark_do_move(struct radeon_device *rdev, unsigned size,
35
static int radeon_benchmark_do_move(struct radeon_device *rdev, unsigned size,
36
				    uint64_t saddr, uint64_t daddr,
36
				    uint64_t saddr, uint64_t daddr,
-
 
37
				    int flag, int n,
37
				    int flag, int n)
38
				    struct reservation_object *resv)
38
{
39
{
39
	unsigned long start_jiffies;
40
	unsigned long start_jiffies;
40
	unsigned long end_jiffies;
41
	unsigned long end_jiffies;
41
	struct radeon_fence *fence = NULL;
42
	struct radeon_fence *fence = NULL;
Line 44... Line 45...
44
	start_jiffies = jiffies;
45
	start_jiffies = jiffies;
45
	for (i = 0; i < n; i++) {
46
	for (i = 0; i < n; i++) {
46
		switch (flag) {
47
		switch (flag) {
47
		case RADEON_BENCHMARK_COPY_DMA:
48
		case RADEON_BENCHMARK_COPY_DMA:
48
			fence = radeon_copy_dma(rdev, saddr, daddr,
49
			fence = radeon_copy_dma(rdev, saddr, daddr,
49
					    size / RADEON_GPU_PAGE_SIZE,
50
						size / RADEON_GPU_PAGE_SIZE,
50
						NULL);
51
						resv);
51
			break;
52
			break;
52
		case RADEON_BENCHMARK_COPY_BLIT:
53
		case RADEON_BENCHMARK_COPY_BLIT:
53
			fence = radeon_copy_blit(rdev, saddr, daddr,
54
			fence = radeon_copy_blit(rdev, saddr, daddr,
54
					     size / RADEON_GPU_PAGE_SIZE,
55
						 size / RADEON_GPU_PAGE_SIZE,
55
						 NULL);
56
						 resv);
56
			break;
57
			break;
57
		default:
58
		default:
58
			DRM_ERROR("Unknown copy method\n");
59
			DRM_ERROR("Unknown copy method\n");
59
			return -EINVAL;
60
			return -EINVAL;
60
		}
61
		}
Line 82... Line 83...
82
		 kind, n, size >> 10, sdomain, ddomain, time,
83
		 kind, n, size >> 10, sdomain, ddomain, time,
83
		 throughput * 8, throughput);
84
		 throughput * 8, throughput);
84
}
85
}
Line 85... Line 86...
85
 
86
 
86
static void radeon_benchmark_move(struct radeon_device *rdev, unsigned size,
87
static void radeon_benchmark_move(struct radeon_device *rdev, unsigned size,
87
			   unsigned sdomain, unsigned ddomain)
88
				  unsigned sdomain, unsigned ddomain)
88
{
89
{
89
	struct radeon_bo *dobj = NULL;
90
	struct radeon_bo *dobj = NULL;
90
	struct radeon_bo *sobj = NULL;
91
	struct radeon_bo *sobj = NULL;
91
	uint64_t saddr, daddr;
92
	uint64_t saddr, daddr;
92
	int r, n;
93
	int r, n;
Line 93... Line -...
93
	int time;
-
 
94
 
-
 
95
 
-
 
96
    ENTER();
94
	int time;
97
 
95
 
98
	n = RADEON_BENCHMARK_ITERATIONS;
96
	n = RADEON_BENCHMARK_ITERATIONS;
99
	r = radeon_bo_create(rdev, size, PAGE_SIZE, true, sdomain, 0, NULL, NULL, &sobj);
97
	r = radeon_bo_create(rdev, size, PAGE_SIZE, true, sdomain, 0, NULL, NULL, &sobj);
100
	if (r) {
98
	if (r) {
Line 118... Line 116...
118
	r = radeon_bo_pin(dobj, ddomain, &daddr);
116
	r = radeon_bo_pin(dobj, ddomain, &daddr);
119
	radeon_bo_unreserve(dobj);
117
	radeon_bo_unreserve(dobj);
120
	if (r) {
118
	if (r) {
121
		goto out_cleanup;
119
		goto out_cleanup;
122
	}
120
	}
123
    dbgprintf("done\n");
-
 
Line 124... Line 121...
124
 
121
 
125
	if (rdev->asic->copy.dma) {
122
	if (rdev->asic->copy.dma) {
126
		time = radeon_benchmark_do_move(rdev, size, saddr, daddr,
123
		time = radeon_benchmark_do_move(rdev, size, saddr, daddr,
-
 
124
						RADEON_BENCHMARK_COPY_DMA, n,
127
						RADEON_BENCHMARK_COPY_DMA, n);
125
						dobj->tbo.resv);
128
		if (time < 0)
126
		if (time < 0)
129
			goto out_cleanup;
127
			goto out_cleanup;
130
		if (time > 0)
128
		if (time > 0)
131
			radeon_benchmark_log_results(n, size, time,
129
			radeon_benchmark_log_results(n, size, time,
132
						     sdomain, ddomain, "dma");
130
						     sdomain, ddomain, "dma");
Line 133... Line 131...
133
	}
131
	}
134
 
132
 
135
	if (rdev->asic->copy.blit) {
133
	if (rdev->asic->copy.blit) {
-
 
134
		time = radeon_benchmark_do_move(rdev, size, saddr, daddr,
136
	time = radeon_benchmark_do_move(rdev, size, saddr, daddr,
135
						RADEON_BENCHMARK_COPY_BLIT, n,
137
					RADEON_BENCHMARK_COPY_BLIT, n);
136
						dobj->tbo.resv);
138
	if (time < 0)
137
		if (time < 0)
139
		goto out_cleanup;
138
			goto out_cleanup;
140
	if (time > 0)
139
		if (time > 0)
141
		radeon_benchmark_log_results(n, size, time,
140
			radeon_benchmark_log_results(n, size, time,
Line 142... Line 141...
142
					     sdomain, ddomain, "blit");
141
						     sdomain, ddomain, "blit");
143
	}
142
	}
144
 
143
 
Line 161... Line 160...
161
	}
160
	}
Line 162... Line 161...
162
 
161
 
163
	if (r) {
162
	if (r) {
164
		DRM_ERROR("Error while benchmarking BO move.\n");
163
		DRM_ERROR("Error while benchmarking BO move.\n");
165
	}
-
 
166
 
-
 
167
    LEAVE();
-
 
168
 
164
	}
Line 169... Line 165...
169
}
165
}
170
 
166
 
171
void radeon_benchmark(struct radeon_device *rdev, int test_number)
167
void radeon_benchmark(struct radeon_device *rdev, int test_number)
Line 228... Line 224...
228
	case 6:
224
	case 6:
229
		/* GTT to VRAM, buffer size sweep, common modes */
225
		/* GTT to VRAM, buffer size sweep, common modes */
230
		for (i = 0; i < RADEON_BENCHMARK_COMMON_MODES_N; i++)
226
		for (i = 0; i < RADEON_BENCHMARK_COMMON_MODES_N; i++)
231
			radeon_benchmark_move(rdev, common_modes[i],
227
			radeon_benchmark_move(rdev, common_modes[i],
232
					      RADEON_GEM_DOMAIN_GTT,
228
					      RADEON_GEM_DOMAIN_GTT,
233
                 RADEON_GEM_DOMAIN_VRAM);
229
					      RADEON_GEM_DOMAIN_VRAM);
234
		break;
230
		break;
235
	case 7:
231
	case 7:
236
		/* VRAM to GTT, buffer size sweep, common modes */
232
		/* VRAM to GTT, buffer size sweep, common modes */
237
		for (i = 0; i < RADEON_BENCHMARK_COMMON_MODES_N; i++)
233
		for (i = 0; i < RADEON_BENCHMARK_COMMON_MODES_N; i++)
238
			radeon_benchmark_move(rdev, common_modes[i],
234
			radeon_benchmark_move(rdev, common_modes[i],
239
					      RADEON_GEM_DOMAIN_VRAM,
235
					      RADEON_GEM_DOMAIN_VRAM,
240
                 RADEON_GEM_DOMAIN_GTT);
236
					      RADEON_GEM_DOMAIN_GTT);
241
		break;
237
		break;
242
	case 8:
238
	case 8:
243
		/* VRAM to VRAM, buffer size sweep, common modes */
239
		/* VRAM to VRAM, buffer size sweep, common modes */
244
		for (i = 0; i < RADEON_BENCHMARK_COMMON_MODES_N; i++)
240
		for (i = 0; i < RADEON_BENCHMARK_COMMON_MODES_N; i++)
245
			radeon_benchmark_move(rdev, common_modes[i],
241
			radeon_benchmark_move(rdev, common_modes[i],
246
					      RADEON_GEM_DOMAIN_VRAM,
242
					      RADEON_GEM_DOMAIN_VRAM,
247
                 RADEON_GEM_DOMAIN_VRAM);
243
					      RADEON_GEM_DOMAIN_VRAM);
248
		break;
244
		break;
Line 249... Line 245...
249
 
245
 
250
	default:
246
	default:
251
		DRM_ERROR("Unknown benchmark\n");
247
		DRM_ERROR("Unknown benchmark\n");