Subversion Repositories Kolibri OS

Rev

Rev 5271 | Show entire file | Regard 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 45... Line 46...
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 90... Line 91...
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;
93
	int time;
94
	int time;
Line 94... Line -...
94
 
-
 
95
 
-
 
96
    ENTER();
-
 
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) {
101
		goto out_cleanup;
99
		goto out_cleanup;
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)
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)