mirror of
				https://github.com/tiagovignatti/intel-gpu-tools.git
				synced 2025-11-03 19:47:15 +00:00 
			
		
		
		
	tests: run igt.cocci
Re-run with correct igt_fail rules. Again manually fixup missing includes for igt_core.h. Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
		
							parent
							
								
									87042d671f
								
							
						
					
					
						commit
						c9c554594e
					
				@ -618,16 +618,8 @@ int main(void)
 | 
			
		||||
		unsigned r2, n2, p;
 | 
			
		||||
 | 
			
		||||
		wrpll_compute_rnp(ref->clock, &r2, &n2, &p);
 | 
			
		||||
		if (ref->r2 != r2 || ref->n2 != n2 || ref->p != p) {
 | 
			
		||||
			printf("Computed value differs for %li Hz:\n"
 | 
			
		||||
			       "  Reference: (%u,%u,%u)\n"
 | 
			
		||||
			       "  Computed:  (%u,%u,%u)\n",
 | 
			
		||||
			       (int64_t)ref->clock * 1000,
 | 
			
		||||
			       ref->r2, ref->n2, ref->p,
 | 
			
		||||
			       r2, n2, p);
 | 
			
		||||
 | 
			
		||||
			abort();
 | 
			
		||||
		}
 | 
			
		||||
		igt_fail_on_f(ref->r2 != r2 || ref->n2 != n2 || ref->p != p,
 | 
			
		||||
			      "Computed value differs for %li Hz:\n""  Reference: (%u,%u,%u)\n""  Computed:  (%u,%u,%u)\n", (int64_t)ref->clock * 1000, ref->r2, ref->n2, ref->p, r2, n2, p);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
 | 
			
		||||
@ -118,17 +118,11 @@ static void _assert_dfs_entry(const char *fname, const char *s, bool inverse)
 | 
			
		||||
 | 
			
		||||
	read_dfs(fname, tmp, l + 1);
 | 
			
		||||
	if (!inverse) {
 | 
			
		||||
		if (strncmp(tmp, s, l) != 0) {
 | 
			
		||||
			fprintf(stderr, "contents of %s: '%s' (expected '%s')\n",
 | 
			
		||||
			       fname, tmp, s);
 | 
			
		||||
			igt_fail(1);
 | 
			
		||||
		}
 | 
			
		||||
		igt_fail_on_f(strncmp(tmp, s, l) != 0,
 | 
			
		||||
			      "contents of %s: '%s' (expected '%s')\n", fname, tmp, s);
 | 
			
		||||
	} else {
 | 
			
		||||
		if (strncmp(tmp, s, l) == 0) {
 | 
			
		||||
			fprintf(stderr, "contents of %s: '%s' (expected not '%s'\n",
 | 
			
		||||
			       fname, tmp, s);
 | 
			
		||||
			igt_fail(1);
 | 
			
		||||
		}
 | 
			
		||||
		igt_fail_on_f(strncmp(tmp, s, l) == 0,
 | 
			
		||||
			      "contents of %s: '%s' (expected not '%s'\n", fname, tmp, s);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -86,7 +86,7 @@ static int negative_reloc(int fd, unsigned flags)
 | 
			
		||||
			   &execbuf));
 | 
			
		||||
	gem_close(fd, gem_exec[1].handle);
 | 
			
		||||
 | 
			
		||||
	printf("Found offset %ld for 4k batch\n", (long)gem_exec[0].offset);
 | 
			
		||||
	igt_info("Found offset %ld for 4k batch\n", (long)gem_exec[0].offset);
 | 
			
		||||
	igt_require(gem_exec[0].offset < BIAS);
 | 
			
		||||
 | 
			
		||||
	memset(gem_reloc, 0, sizeof(gem_reloc));
 | 
			
		||||
@ -106,7 +106,7 @@ static int negative_reloc(int fd, unsigned flags)
 | 
			
		||||
			   DRM_IOCTL_I915_GEM_EXECBUFFER2,
 | 
			
		||||
			   &execbuf));
 | 
			
		||||
 | 
			
		||||
	printf("Batch is now at offset %ld\n", (long)gem_exec[0].offset);
 | 
			
		||||
	igt_info("Batch is now at offset %ld\n", (long)gem_exec[0].offset);
 | 
			
		||||
 | 
			
		||||
	gem_read(fd, gem_exec[0].handle, 0, buf, sizeof(buf));
 | 
			
		||||
	gem_close(fd, gem_exec[0].handle);
 | 
			
		||||
 | 
			
		||||
@ -81,8 +81,7 @@ static void performance(void)
 | 
			
		||||
		gettimeofday(&end, NULL);
 | 
			
		||||
 | 
			
		||||
		linear[count != 2] = count * loop / elapsed(&start, &end);
 | 
			
		||||
		printf("Upload rate for %d linear surfaces:	%7.3fMiB/s\n",
 | 
			
		||||
		       count, linear[count != 2]);
 | 
			
		||||
		igt_info("Upload rate for %d linear surfaces:	%7.3fMiB/s\n", count, linear[count != 2]);
 | 
			
		||||
 | 
			
		||||
		for (n = 0; n < count; n++)
 | 
			
		||||
			gem_set_tiling(fd, handle[n], I915_TILING_X, 1024);
 | 
			
		||||
@ -95,8 +94,7 @@ static void performance(void)
 | 
			
		||||
		gettimeofday(&end, NULL);
 | 
			
		||||
 | 
			
		||||
		tiled[count != 2] = count * loop / elapsed(&start, &end);
 | 
			
		||||
		printf("Upload rate for %d tiled surfaces:	%7.3fMiB/s\n",
 | 
			
		||||
		       count, tiled[count != 2]);
 | 
			
		||||
		igt_info("Upload rate for %d tiled surfaces:	%7.3fMiB/s\n", count, tiled[count != 2]);
 | 
			
		||||
 | 
			
		||||
		for (n = 0; n < count; n++) {
 | 
			
		||||
			munmap(ptr[n], OBJECT_SIZE);
 | 
			
		||||
@ -215,8 +213,7 @@ static void thread_performance(unsigned mask)
 | 
			
		||||
		gettimeofday(&end, NULL);
 | 
			
		||||
 | 
			
		||||
		linear[count != 2] = nthreads * loops / elapsed(&start, &end) / (OBJECT_SIZE / 4096);
 | 
			
		||||
		printf("%s rate for %d linear surfaces, %d threads:	%7.3fMiB/s\n",
 | 
			
		||||
		       direction_string(mask), count, nthreads, linear[count != 2]);
 | 
			
		||||
		igt_info("%s rate for %d linear surfaces, %d threads:	%7.3fMiB/s\n", direction_string(mask), count, nthreads, linear[count != 2]);
 | 
			
		||||
 | 
			
		||||
		for (n = 0; n < count; n++)
 | 
			
		||||
			gem_set_tiling(fd, handle[n], I915_TILING_X, 1024);
 | 
			
		||||
@ -237,8 +234,7 @@ static void thread_performance(unsigned mask)
 | 
			
		||||
		gettimeofday(&end, NULL);
 | 
			
		||||
 | 
			
		||||
		tiled[count != 2] = nthreads * loops / elapsed(&start, &end) / (OBJECT_SIZE / 4096);
 | 
			
		||||
		printf("%s rate for %d tiled surfaces, %d threads:	%7.3fMiB/s\n",
 | 
			
		||||
		       direction_string(mask), count, nthreads, tiled[count != 2]);
 | 
			
		||||
		igt_info("%s rate for %d tiled surfaces, %d threads:	%7.3fMiB/s\n", direction_string(mask), count, nthreads, tiled[count != 2]);
 | 
			
		||||
 | 
			
		||||
		for (n = 0; n < count; n++) {
 | 
			
		||||
			munmap(ptr[n], OBJECT_SIZE);
 | 
			
		||||
@ -300,8 +296,7 @@ static void thread_contention(void)
 | 
			
		||||
		gettimeofday(&end, NULL);
 | 
			
		||||
 | 
			
		||||
		linear[count != 2] = count * loops / elapsed(&start, &end) / (OBJECT_SIZE / 4096);
 | 
			
		||||
		printf("Contended upload rate for %d threads:	%7.3fMiB/s\n",
 | 
			
		||||
		       count, linear[count != 2]);
 | 
			
		||||
		igt_info("Contended upload rate for %d threads:	%7.3fMiB/s\n", count, linear[count != 2]);
 | 
			
		||||
 | 
			
		||||
		for (n = 0; n < count; n++)
 | 
			
		||||
			gem_set_tiling(fd, threads[n].handle, I915_TILING_X, 1024);
 | 
			
		||||
@ -314,8 +309,7 @@ static void thread_contention(void)
 | 
			
		||||
		gettimeofday(&end, NULL);
 | 
			
		||||
 | 
			
		||||
		tiled[count != 2] = count * loops / elapsed(&start, &end) / (OBJECT_SIZE / 4096);
 | 
			
		||||
		printf("Contended upload rate for %d threads:	%7.3fMiB/s\n",
 | 
			
		||||
		       count, tiled[count != 2]);
 | 
			
		||||
		igt_info("Contended upload rate for %d threads:	%7.3fMiB/s\n", count, tiled[count != 2]);
 | 
			
		||||
 | 
			
		||||
		for (n = 0; n < count; n++) {
 | 
			
		||||
			gem_close(fd, threads[n].handle);
 | 
			
		||||
 | 
			
		||||
@ -44,10 +44,8 @@ static uint64_t timer_query(int fd)
 | 
			
		||||
	struct local_drm_i915_reg_read reg_read;
 | 
			
		||||
 | 
			
		||||
	reg_read.offset = 0x2358;
 | 
			
		||||
	if (drmIoctl(fd, REG_READ_IOCTL, ®_read)) {
 | 
			
		||||
		perror("positive test case failed: ");
 | 
			
		||||
		igt_fail(1);
 | 
			
		||||
	}
 | 
			
		||||
	igt_fail_on_f(drmIoctl(fd, REG_READ_IOCTL, ®_read),
 | 
			
		||||
		      "positive test case failed: ");
 | 
			
		||||
 | 
			
		||||
	return reg_read.val;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -109,7 +109,7 @@ int main(int argc, char **argv)
 | 
			
		||||
	if (count == 0)
 | 
			
		||||
		count = 3 * gem_aperture_size(fd) / SIZE / 2;
 | 
			
		||||
	else if (count < 2) {
 | 
			
		||||
		fprintf(stderr, "count must be >= 2\n");
 | 
			
		||||
		igt_warn("count must be >= 2\n");
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -131,7 +131,7 @@ int main(int argc, char **argv)
 | 
			
		||||
	if (count == 0)
 | 
			
		||||
		count = 3 * gem_aperture_size(fd) / SIZE / 2;
 | 
			
		||||
	else if (count < 2) {
 | 
			
		||||
		fprintf(stderr, "count must be >= 2\n");
 | 
			
		||||
		igt_warn("count must be >= 2\n");
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -310,7 +310,7 @@ static void run_test(data_t *data, enum ring r1, enum ring r2, enum test test)
 | 
			
		||||
		bo_check(data, b, 0xc);
 | 
			
		||||
		break;
 | 
			
		||||
	default:
 | 
			
		||||
		abort();
 | 
			
		||||
		igt_fail(1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	r1_ops->busy_fini(data);
 | 
			
		||||
 | 
			
		||||
@ -157,8 +157,7 @@ static void render_copyfunc(struct igt_buf *src,
 | 
			
		||||
		intel_batchbuffer_flush(batch_3d);
 | 
			
		||||
	} else {
 | 
			
		||||
		if (!warned) {
 | 
			
		||||
			printf("No render copy found for this gen, "
 | 
			
		||||
			       "test is shallow!\n");
 | 
			
		||||
			igt_info("No render copy found for this gen, ""test is shallow!\n");
 | 
			
		||||
			warned = 1;
 | 
			
		||||
		}
 | 
			
		||||
		igt_assert(dst->bo);
 | 
			
		||||
@ -290,12 +289,12 @@ static int run_cmd(char *s)
 | 
			
		||||
	int i;
 | 
			
		||||
	r = wordexp(s, &wexp, 0);
 | 
			
		||||
	if (r != 0) {
 | 
			
		||||
		printf("can't parse %s\n", s);
 | 
			
		||||
		igt_info("can't parse %s\n", s);
 | 
			
		||||
		return r;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for(i = 0; i < wexp.we_wordc; i++)
 | 
			
		||||
		printf("argv[%d] = %s\n", i, wexp.we_wordv[i]);
 | 
			
		||||
		igt_info("argv[%d] = %s\n", i, wexp.we_wordv[i]);
 | 
			
		||||
 | 
			
		||||
	pid = fork();
 | 
			
		||||
 | 
			
		||||
@ -303,14 +302,12 @@ static int run_cmd(char *s)
 | 
			
		||||
		char path[PATH_MAX];
 | 
			
		||||
		char full_path[PATH_MAX];
 | 
			
		||||
 | 
			
		||||
		if (getcwd(path, PATH_MAX) == NULL)
 | 
			
		||||
			perror("getcwd");
 | 
			
		||||
		igt_warn_on_f(getcwd(path, PATH_MAX) == NULL, "getcwd");
 | 
			
		||||
 | 
			
		||||
		igt_assert(snprintf(full_path, PATH_MAX, "%s/%s", path, wexp.we_wordv[0]) > 0);
 | 
			
		||||
 | 
			
		||||
		r = execv(full_path, wexp.we_wordv);
 | 
			
		||||
		if (r == -1)
 | 
			
		||||
			perror("execv failed");
 | 
			
		||||
		igt_warn_on_f(r == -1, "execv failed");
 | 
			
		||||
	} else {
 | 
			
		||||
		int waitcount = options.timeout;
 | 
			
		||||
 | 
			
		||||
@ -318,14 +315,12 @@ static int run_cmd(char *s)
 | 
			
		||||
			r = waitpid(pid, &status, WNOHANG);
 | 
			
		||||
			if (r == pid) {
 | 
			
		||||
				if(WIFEXITED(status)) {
 | 
			
		||||
					if (WEXITSTATUS(status))
 | 
			
		||||
						fprintf(stderr,
 | 
			
		||||
						    "child returned with %d\n",
 | 
			
		||||
							WEXITSTATUS(status));
 | 
			
		||||
					igt_warn_on_f(WEXITSTATUS(status),
 | 
			
		||||
						      "child returned with %d\n", WEXITSTATUS(status));
 | 
			
		||||
					return WEXITSTATUS(status);
 | 
			
		||||
				}
 | 
			
		||||
			} else if (r != 0) {
 | 
			
		||||
				perror("waitpid");
 | 
			
		||||
				igt_warn("waitpid");
 | 
			
		||||
				return -errno;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
@ -369,7 +364,7 @@ static int __read_seqno(uint32_t *seqno)
 | 
			
		||||
	r = read(fh, buf, sizeof(buf) - 1);
 | 
			
		||||
	close(fh);
 | 
			
		||||
	if (r < 0) {
 | 
			
		||||
		perror("read");
 | 
			
		||||
		igt_warn("read");
 | 
			
		||||
		return -errno;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -382,7 +377,7 @@ static int __read_seqno(uint32_t *seqno)
 | 
			
		||||
	errno = 0;
 | 
			
		||||
	tmp = strtoul(p, NULL, 0);
 | 
			
		||||
	if (tmp == ULONG_MAX && errno) {
 | 
			
		||||
		perror("strtoul");
 | 
			
		||||
		igt_warn("strtoul");
 | 
			
		||||
		return -errno;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -439,7 +434,7 @@ static int write_seqno(uint32_t seqno)
 | 
			
		||||
		return r;
 | 
			
		||||
 | 
			
		||||
	if (rb != seqno) {
 | 
			
		||||
		printf("seqno readback differs rb:0x%x vs w:0x%x\n", rb, seqno);
 | 
			
		||||
		igt_info("seqno readback differs rb:0x%x vs w:0x%x\n", rb, seqno);
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -518,16 +513,16 @@ static void background_run_once(void)
 | 
			
		||||
 | 
			
		||||
static void print_usage(const char *s)
 | 
			
		||||
{
 | 
			
		||||
	printf("%s: [OPTION]...\n", s);
 | 
			
		||||
	printf("    where options are:\n");
 | 
			
		||||
	printf("    -b --background       run in background inducing wraps\n");
 | 
			
		||||
	printf("    -c --cmd=cmdstring    use cmdstring to cross wrap\n");
 | 
			
		||||
	printf("    -n --rounds=num       run num times across wrap boundary, 0 == forever\n");
 | 
			
		||||
	printf("    -t --timeout=sec      set timeout to wait for testrun to sec seconds\n");
 | 
			
		||||
	printf("    -d --dontwrap         don't wrap just run the test\n");
 | 
			
		||||
	printf("    -p --prewrap=n        set seqno to WRAP - n for each testrun\n");
 | 
			
		||||
	printf("    -r --norandom         dont randomize prewrap space\n");
 | 
			
		||||
	printf("    -i --buffers          number of buffers to copy\n");
 | 
			
		||||
	igt_info("%s: [OPTION]...\n", s);
 | 
			
		||||
	igt_info("    where options are:\n");
 | 
			
		||||
	igt_info("    -b --background       run in background inducing wraps\n");
 | 
			
		||||
	igt_info("    -c --cmd=cmdstring    use cmdstring to cross wrap\n");
 | 
			
		||||
	igt_info("    -n --rounds=num       run num times across wrap boundary, 0 == forever\n");
 | 
			
		||||
	igt_info("    -t --timeout=sec      set timeout to wait for testrun to sec seconds\n");
 | 
			
		||||
	igt_info("    -d --dontwrap         don't wrap just run the test\n");
 | 
			
		||||
	igt_info("    -p --prewrap=n        set seqno to WRAP - n for each testrun\n");
 | 
			
		||||
	igt_info("    -r --norandom         dont randomize prewrap space\n");
 | 
			
		||||
	igt_info("    -i --buffers          number of buffers to copy\n");
 | 
			
		||||
	igt_fail(-1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -560,50 +555,47 @@ static void parse_options(int argc, char **argv)
 | 
			
		||||
		switch(c) {
 | 
			
		||||
		case 'b':
 | 
			
		||||
			options.background = 1;
 | 
			
		||||
			printf("running in background inducing wraps\n");
 | 
			
		||||
			igt_info("running in background inducing wraps\n");
 | 
			
		||||
			break;
 | 
			
		||||
		case 'd':
 | 
			
		||||
			options.dontwrap = 1;
 | 
			
		||||
			printf("won't wrap after testruns\n");
 | 
			
		||||
			igt_info("won't wrap after testruns\n");
 | 
			
		||||
			break;
 | 
			
		||||
		case 'n':
 | 
			
		||||
			options.rounds = atoi(optarg);
 | 
			
		||||
			printf("running %d rounds\n", options.rounds);
 | 
			
		||||
			igt_info("running %d rounds\n", options.rounds);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'c':
 | 
			
		||||
			strncpy(options.cmd, optarg, sizeof(options.cmd) - 1);
 | 
			
		||||
			options.cmd[sizeof(options.cmd) - 1] = 0;
 | 
			
		||||
			printf("cmd set to %s\n", options.cmd);
 | 
			
		||||
			igt_info("cmd set to %s\n", options.cmd);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'i':
 | 
			
		||||
			options.buffers = atoi(optarg);
 | 
			
		||||
			printf("buffers %d\n", options.buffers);
 | 
			
		||||
			igt_info("buffers %d\n", options.buffers);
 | 
			
		||||
			break;
 | 
			
		||||
		case 't':
 | 
			
		||||
			options.timeout = atoi(optarg);
 | 
			
		||||
			if (options.timeout == 0)
 | 
			
		||||
				options.timeout = 10;
 | 
			
		||||
			printf("setting timeout to %d seconds\n",
 | 
			
		||||
			       options.timeout);
 | 
			
		||||
			igt_info("setting timeout to %d seconds\n", options.timeout);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'r':
 | 
			
		||||
			options.random = 0;
 | 
			
		||||
			break;
 | 
			
		||||
		case 'p':
 | 
			
		||||
			options.prewrap_space = atoi(optarg);
 | 
			
		||||
			printf("prewrap set to %d (0x%x)\n",
 | 
			
		||||
			       options.prewrap_space, UINT32_MAX -
 | 
			
		||||
			       options.prewrap_space);
 | 
			
		||||
			igt_info("prewrap set to %d (0x%x)\n", options.prewrap_space, UINT32_MAX - options.prewrap_space);
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			printf("unkown command options\n");
 | 
			
		||||
			igt_info("unkown command options\n");
 | 
			
		||||
			print_usage(argv[0]);
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (optind < argc) {
 | 
			
		||||
		printf("unkown command options\n");
 | 
			
		||||
		igt_info("unkown command options\n");
 | 
			
		||||
		print_usage(argv[0]);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -223,18 +223,15 @@ static void cpucpy2d(uint32_t *src, unsigned src_stride, unsigned src_x, unsigne
 | 
			
		||||
			    + i*options.tile_size + j;
 | 
			
		||||
			uint32_t tmp = src[src_ofs];
 | 
			
		||||
			if (tmp != expect) {
 | 
			
		||||
			    printf("mismatch at tile %i pos %i, read %i, expected %i, diff %i\n",
 | 
			
		||||
				    logical_tile_no, i*options.tile_size + j, tmp, expect, (int) tmp - expect);
 | 
			
		||||
			    if (options.trace_tile >= 0 && options.fail)
 | 
			
		||||
				    igt_fail(1);
 | 
			
		||||
			    igt_info("mismatch at tile %i pos %i, read %i, expected %i, diff %i\n", logical_tile_no, i * options.tile_size + j, tmp, expect, (int)tmp - expect);
 | 
			
		||||
			    igt_fail_on(options.trace_tile >= 0 && options.fail);
 | 
			
		||||
			    failed++;
 | 
			
		||||
			}
 | 
			
		||||
			/* when not aborting, correct any errors */
 | 
			
		||||
			dst[dst_ofs] = expect;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if (failed && options.fail)
 | 
			
		||||
		igt_fail(1);
 | 
			
		||||
	igt_fail_on(failed && options.fail);
 | 
			
		||||
 | 
			
		||||
	if (failed > stats.max_failed_reads)
 | 
			
		||||
		stats.max_failed_reads = failed;
 | 
			
		||||
@ -370,35 +367,35 @@ static void next_copyfunc(int tile)
 | 
			
		||||
{
 | 
			
		||||
	if (fence_storm) {
 | 
			
		||||
		if (tile == options.trace_tile)
 | 
			
		||||
			printf(" using fence storm\n");
 | 
			
		||||
			igt_info(" using fence storm\n");
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (copyfunc_seq % 61 == 0
 | 
			
		||||
			&& options.forced_tiling != I915_TILING_NONE) {
 | 
			
		||||
		if (tile == options.trace_tile)
 | 
			
		||||
			printf(" using fence storm\n");
 | 
			
		||||
			igt_info(" using fence storm\n");
 | 
			
		||||
		fence_storm = num_fences;
 | 
			
		||||
		copyfunc = blitter_copyfunc;
 | 
			
		||||
	} else if (copyfunc_seq % 17 == 0) {
 | 
			
		||||
		if (tile == options.trace_tile)
 | 
			
		||||
			printf(" using cpu\n");
 | 
			
		||||
			igt_info(" using cpu\n");
 | 
			
		||||
		copyfunc = cpu_copyfunc;
 | 
			
		||||
	} else if (copyfunc_seq % 19 == 0) {
 | 
			
		||||
		if (tile == options.trace_tile)
 | 
			
		||||
			printf(" using prw\n");
 | 
			
		||||
			igt_info(" using prw\n");
 | 
			
		||||
		copyfunc = prw_copyfunc;
 | 
			
		||||
	} else if (copyfunc_seq % 3 == 0 && options.use_render) {
 | 
			
		||||
		if (tile == options.trace_tile)
 | 
			
		||||
			printf(" using render\n");
 | 
			
		||||
			igt_info(" using render\n");
 | 
			
		||||
		copyfunc = render_copyfunc;
 | 
			
		||||
	} else if (options.use_blt){
 | 
			
		||||
		if (tile == options.trace_tile)
 | 
			
		||||
			printf(" using blitter\n");
 | 
			
		||||
			igt_info(" using blitter\n");
 | 
			
		||||
		copyfunc = blitter_copyfunc;
 | 
			
		||||
	} else if (options.use_render){
 | 
			
		||||
		if (tile == options.trace_tile)
 | 
			
		||||
			printf(" using render\n");
 | 
			
		||||
			igt_info(" using render\n");
 | 
			
		||||
		copyfunc = render_copyfunc;
 | 
			
		||||
	} else {
 | 
			
		||||
		copyfunc = cpu_copyfunc;
 | 
			
		||||
@ -563,9 +560,7 @@ static void init_set(unsigned set)
 | 
			
		||||
			       buffers[set][i].stride);
 | 
			
		||||
 | 
			
		||||
		if (options.trace_tile != -1 && i == options.trace_tile/options.tiles_per_buf)
 | 
			
		||||
			printf("changing buffer %i containing tile %i: tiling %i, stride %i\n", i,
 | 
			
		||||
					options.trace_tile,
 | 
			
		||||
					buffers[set][i].tiling, buffers[set][i].stride);
 | 
			
		||||
			igt_info("changing buffer %i containing tile %i: tiling %i, stride %i\n", i, options.trace_tile, buffers[set][i].tiling, buffers[set][i].stride);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -602,9 +597,7 @@ static void copy_tiles(unsigned *permutation)
 | 
			
		||||
		tile2xy(dst_buf, dst_tile, &dst_x, &dst_y);
 | 
			
		||||
 | 
			
		||||
		if (options.trace_tile == i)
 | 
			
		||||
			printf("copying tile %i from %i (%i, %i) to %i (%i, %i)", i,
 | 
			
		||||
				tile_permutation[i], src_buf_idx, src_tile,
 | 
			
		||||
				permutation[idx], dst_buf_idx, dst_tile);
 | 
			
		||||
			igt_info("copying tile %i from %i (%i, %i) to %i (%i, %i)", i, tile_permutation[i], src_buf_idx, src_tile, permutation[idx], dst_buf_idx, dst_tile);
 | 
			
		||||
 | 
			
		||||
		if (options.no_hw) {
 | 
			
		||||
			cpucpy2d(src_buf->data,
 | 
			
		||||
@ -681,21 +674,20 @@ static void parse_options(int argc, char **argv)
 | 
			
		||||
		switch(c) {
 | 
			
		||||
		case 'd':
 | 
			
		||||
			options.no_hw = 1;
 | 
			
		||||
			printf("no-hw debug mode\n");
 | 
			
		||||
			igt_info("no-hw debug mode\n");
 | 
			
		||||
			break;
 | 
			
		||||
		case 'S':
 | 
			
		||||
			options.use_signal_helper = 0;
 | 
			
		||||
			printf("disabling that pesky nuisance who keeps interrupting us\n");
 | 
			
		||||
			igt_info("disabling that pesky nuisance who keeps interrupting us\n");
 | 
			
		||||
			break;
 | 
			
		||||
		case 's':
 | 
			
		||||
			tmp = atoi(optarg);
 | 
			
		||||
			if (tmp < options.tile_size*8192)
 | 
			
		||||
				printf("scratch buffer size needs to be at least %i\n",
 | 
			
		||||
				       options.tile_size*8192);
 | 
			
		||||
				igt_info("scratch buffer size needs to be at least %i\n", options.tile_size * 8192);
 | 
			
		||||
			else if (tmp & (tmp - 1)) {
 | 
			
		||||
				printf("scratch buffer size needs to be a power-of-two\n");
 | 
			
		||||
				igt_info("scratch buffer size needs to be a power-of-two\n");
 | 
			
		||||
			} else {
 | 
			
		||||
				printf("fixed scratch buffer size to %u\n", tmp);
 | 
			
		||||
				igt_info("fixed scratch buffer size to %u\n", tmp);
 | 
			
		||||
				options.scratch_buf_size = tmp;
 | 
			
		||||
				sanitize_tiles_per_buf();
 | 
			
		||||
			}
 | 
			
		||||
@ -703,78 +695,78 @@ static void parse_options(int argc, char **argv)
 | 
			
		||||
		case 'g':
 | 
			
		||||
			tmp = atoi(optarg);
 | 
			
		||||
			if (tmp < 0 || tmp > 10)
 | 
			
		||||
				printf("gpu busy load needs to be bigger than 0 and smaller than 10\n");
 | 
			
		||||
				igt_info("gpu busy load needs to be bigger than 0 and smaller than 10\n");
 | 
			
		||||
			else {
 | 
			
		||||
				printf("gpu busy load factor set to %i\n", tmp);
 | 
			
		||||
				igt_info("gpu busy load factor set to %i\n", tmp);
 | 
			
		||||
				gpu_busy_load = options.gpu_busy_load = tmp;
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
		case 'c':
 | 
			
		||||
			options.num_buffers = atoi(optarg);
 | 
			
		||||
			printf("buffer count set to %i\n", options.num_buffers);
 | 
			
		||||
			igt_info("buffer count set to %i\n", options.num_buffers);
 | 
			
		||||
			break;
 | 
			
		||||
		case 't':
 | 
			
		||||
			options.trace_tile = atoi(optarg);
 | 
			
		||||
			printf("tracing tile %i\n", options.trace_tile);
 | 
			
		||||
			igt_info("tracing tile %i\n", options.trace_tile);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'r':
 | 
			
		||||
			options.use_render = 0;
 | 
			
		||||
			printf("disabling render copy\n");
 | 
			
		||||
			igt_info("disabling render copy\n");
 | 
			
		||||
			break;
 | 
			
		||||
		case 'b':
 | 
			
		||||
			options.use_blt = 0;
 | 
			
		||||
			printf("disabling blt copy\n");
 | 
			
		||||
			igt_info("disabling blt copy\n");
 | 
			
		||||
			break;
 | 
			
		||||
		case 'u':
 | 
			
		||||
			options.forced_tiling = I915_TILING_NONE;
 | 
			
		||||
			printf("disabling tiling\n");
 | 
			
		||||
			igt_info("disabling tiling\n");
 | 
			
		||||
			break;
 | 
			
		||||
		case 'x':
 | 
			
		||||
			if (options.use_cpu_maps) {
 | 
			
		||||
				printf("tiling not possible with cpu maps\n");
 | 
			
		||||
				igt_info("tiling not possible with cpu maps\n");
 | 
			
		||||
			} else {
 | 
			
		||||
				options.forced_tiling = I915_TILING_X;
 | 
			
		||||
				printf("using only X-tiling\n");
 | 
			
		||||
				igt_info("using only X-tiling\n");
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
		case 'm':
 | 
			
		||||
			options.use_cpu_maps = 1;
 | 
			
		||||
			options.forced_tiling = I915_TILING_NONE;
 | 
			
		||||
			printf("disabling tiling\n");
 | 
			
		||||
			igt_info("disabling tiling\n");
 | 
			
		||||
			break;
 | 
			
		||||
		case 'o':
 | 
			
		||||
			options.total_rounds = atoi(optarg);
 | 
			
		||||
			printf("total rounds %i\n", options.total_rounds);
 | 
			
		||||
			igt_info("total rounds %i\n", options.total_rounds);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'f':
 | 
			
		||||
			options.fail = 0;
 | 
			
		||||
			printf("not failing when detecting errors\n");
 | 
			
		||||
			igt_info("not failing when detecting errors\n");
 | 
			
		||||
			break;
 | 
			
		||||
		case 'p':
 | 
			
		||||
			options.tiles_per_buf = atoi(optarg);
 | 
			
		||||
			printf("tiles per buffer %i\n", options.tiles_per_buf);
 | 
			
		||||
			igt_info("tiles per buffer %i\n", options.tiles_per_buf);
 | 
			
		||||
			break;
 | 
			
		||||
		case DUCTAPE:
 | 
			
		||||
			options.ducttape = 0;
 | 
			
		||||
			printf("applying duct-tape\n");
 | 
			
		||||
			igt_info("applying duct-tape\n");
 | 
			
		||||
			break;
 | 
			
		||||
		case TILESZ:
 | 
			
		||||
			options.tile_size = atoi(optarg);
 | 
			
		||||
			sanitize_tiles_per_buf();
 | 
			
		||||
			printf("til size %i\n", options.tile_size);
 | 
			
		||||
			igt_info("til size %i\n", options.tile_size);
 | 
			
		||||
			break;
 | 
			
		||||
		case CHCK_RENDER:
 | 
			
		||||
			options.check_render_cpyfn = 1;
 | 
			
		||||
			printf("checking render copy function\n");
 | 
			
		||||
			igt_info("checking render copy function\n");
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			printf("unkown command options\n");
 | 
			
		||||
			igt_info("unkown command options\n");
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (optind < argc)
 | 
			
		||||
		printf("unkown command options\n");
 | 
			
		||||
		igt_info("unkown command options\n");
 | 
			
		||||
 | 
			
		||||
	/* actually 32767, according to docs, but that kills our nice pot calculations. */
 | 
			
		||||
	options.max_dimension = 16*1024;
 | 
			
		||||
@ -784,8 +776,7 @@ static void parse_options(int argc, char **argv)
 | 
			
		||||
		else
 | 
			
		||||
			options.max_dimension = 8192;
 | 
			
		||||
	}
 | 
			
		||||
	printf("Limiting buffer to %dx%d\n",
 | 
			
		||||
	       options.max_dimension, options.max_dimension);
 | 
			
		||||
	igt_info("Limiting buffer to %dx%d\n", options.max_dimension, options.max_dimension);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void init(void)
 | 
			
		||||
@ -798,7 +789,7 @@ static void init(void)
 | 
			
		||||
		tmp = tmp > 256*(1024*1024) ? 256*(1024*1024) : tmp;
 | 
			
		||||
		num_buffers = 2 * tmp / options.scratch_buf_size / 3;
 | 
			
		||||
		num_buffers /= 2;
 | 
			
		||||
		printf("using %u buffers\n", num_buffers);
 | 
			
		||||
		igt_info("using %u buffers\n", num_buffers);
 | 
			
		||||
	} else
 | 
			
		||||
		num_buffers = options.num_buffers;
 | 
			
		||||
 | 
			
		||||
@ -862,8 +853,7 @@ static void check_render_copyfunc(void)
 | 
			
		||||
			ptr = (uint32_t*)((char *)dst.data + dx*4 + (dy+j) * dst.stride);
 | 
			
		||||
			for (i = 0; i < options.tile_size; i++)
 | 
			
		||||
				if (ptr[i] != j * options.tile_size + i) {
 | 
			
		||||
					printf("render copyfunc mismatch at (%d, %d): found %d, expected %d\n",
 | 
			
		||||
					       i, j, ptr[i], j*options.tile_size + i);
 | 
			
		||||
					igt_info("render copyfunc mismatch at (%d, %d): found %d, expected %d\n", i, j, ptr[i], j * options.tile_size + i);
 | 
			
		||||
				}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@ -898,10 +888,10 @@ int main(int argc, char **argv)
 | 
			
		||||
	fan_out();
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < options.total_rounds; i++) {
 | 
			
		||||
		printf("round %i\n", i);
 | 
			
		||||
		igt_info("round %i\n", i);
 | 
			
		||||
		if (i % 64 == 63) {
 | 
			
		||||
			fan_in_and_check();
 | 
			
		||||
			printf("everything correct after %i rounds\n", i + 1);
 | 
			
		||||
			igt_info("everything correct after %i rounds\n", i + 1);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		target_set = (current_set + 1) & 1;
 | 
			
		||||
@ -924,8 +914,7 @@ int main(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	fan_in_and_check();
 | 
			
		||||
 | 
			
		||||
	fprintf(stdout, "num failed tiles %u, max incoherent bytes %zd\n",
 | 
			
		||||
		stats.num_failed, stats.max_failed_reads*sizeof(uint32_t));
 | 
			
		||||
	igt_info("num failed tiles %u, max incoherent bytes %zd\n", stats.num_failed, stats.max_failed_reads * sizeof(uint32_t));
 | 
			
		||||
 | 
			
		||||
	intel_batchbuffer_free(batch);
 | 
			
		||||
	drm_intel_bufmgr_destroy(bufmgr);
 | 
			
		||||
 | 
			
		||||
@ -173,7 +173,7 @@ static bool run_single_test(data_t *data, enum pipe pipe, igt_output_t *output)
 | 
			
		||||
		igt_plane_set_fb(primary, &fb[!(i&1)]);
 | 
			
		||||
		igt_display_commit(display);
 | 
			
		||||
 | 
			
		||||
		printf(".");
 | 
			
		||||
		igt_info(".");
 | 
			
		||||
		fflush(stdout);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -184,7 +184,7 @@ static bool run_single_test(data_t *data, enum pipe pipe, igt_output_t *output)
 | 
			
		||||
	igt_remove_fb(data->drm_fd, &fb[1]);
 | 
			
		||||
	igt_remove_fb(data->drm_fd, &fb[0]);
 | 
			
		||||
 | 
			
		||||
	printf("\n");
 | 
			
		||||
	igt_info("\n");
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -269,8 +269,8 @@ static bool psr_sink_support(data_t *data)
 | 
			
		||||
	igt_require(file);
 | 
			
		||||
 | 
			
		||||
	ret = fscanf(file, "Sink_Support: %s\n", str);
 | 
			
		||||
	if (ret == 0)
 | 
			
		||||
	    igt_skip("i915_edp_psr_status format not supported by this test case\n");
 | 
			
		||||
	igt_skip_on_f(ret == 0,
 | 
			
		||||
		      "i915_edp_psr_status format not supported by this test case\n");
 | 
			
		||||
 | 
			
		||||
	fclose(file);
 | 
			
		||||
	return strcmp(str, "yes") == 0;
 | 
			
		||||
@ -381,7 +381,7 @@ static void test_crc(data_t *data)
 | 
			
		||||
		ptr = gem_mmap__gtt(data->drm_fd, handle, 4096, PROT_WRITE);
 | 
			
		||||
		gem_set_domain(data->drm_fd, handle,
 | 
			
		||||
			       I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
 | 
			
		||||
		fprintf(stdout, "Sleeping for 10 sec...\n");
 | 
			
		||||
		igt_info("Sleeping for 10 sec...\n");
 | 
			
		||||
                sleep(10);
 | 
			
		||||
		memset(ptr, 0xff, 4);
 | 
			
		||||
		munmap(ptr, 4096);
 | 
			
		||||
@ -390,12 +390,12 @@ static void test_crc(data_t *data)
 | 
			
		||||
		ptr = gem_mmap__gtt(data->drm_fd, handle, 4096, PROT_WRITE);
 | 
			
		||||
		gem_set_domain(data->drm_fd, handle,
 | 
			
		||||
			       I915_GEM_DOMAIN_GTT, I915_GEM_DOMAIN_GTT);
 | 
			
		||||
		fprintf(stdout, "Sleeping for 10 sec...\n");
 | 
			
		||||
		igt_info("Sleeping for 10 sec...\n");
 | 
			
		||||
		sleep(10);
 | 
			
		||||
		fill_blt(data, handle, 0xff);
 | 
			
		||||
		igt_assert(wait_psr_entry(data, 10));
 | 
			
		||||
		get_sink_crc(data, ref_crc);
 | 
			
		||||
		fprintf(stdout, "Sleeping for 10 sec...\n");
 | 
			
		||||
		igt_info("Sleeping for 10 sec...\n");
 | 
			
		||||
		sleep(10);
 | 
			
		||||
		memset(ptr, 0xff, 4);
 | 
			
		||||
		munmap(ptr, 4096);
 | 
			
		||||
@ -404,12 +404,12 @@ static void test_crc(data_t *data)
 | 
			
		||||
		ptr = gem_mmap__cpu(data->drm_fd, handle, 4096, PROT_WRITE);
 | 
			
		||||
		gem_set_domain(data->drm_fd, handle,
 | 
			
		||||
			       I915_GEM_DOMAIN_CPU, I915_GEM_DOMAIN_CPU);
 | 
			
		||||
		fprintf(stdout, "Sleeping for 10 sec...\n");
 | 
			
		||||
		igt_info("Sleeping for 10 sec...\n");
 | 
			
		||||
		sleep(10);
 | 
			
		||||
		fill_blt(data, handle, 0xff);
 | 
			
		||||
		igt_assert(wait_psr_entry(data, 10));
 | 
			
		||||
		get_sink_crc(data, ref_crc);
 | 
			
		||||
		fprintf(stdout, "Sleeping for 10 sec...\n");
 | 
			
		||||
		igt_info("Sleeping for 10 sec...\n");
 | 
			
		||||
		sleep(10);
 | 
			
		||||
		memset(ptr, 0xff, 4);
 | 
			
		||||
		munmap(ptr, 4096);
 | 
			
		||||
 | 
			
		||||
@ -118,45 +118,36 @@ static void dump_connectors_fd(int drmfd)
 | 
			
		||||
	drmModeRes *mode_resources = drmModeGetResources(drmfd);
 | 
			
		||||
 | 
			
		||||
	if (!mode_resources) {
 | 
			
		||||
		fprintf(stderr, "drmModeGetResources failed: %s\n",
 | 
			
		||||
			strerror(errno));
 | 
			
		||||
		igt_warn("drmModeGetResources failed: %s\n", strerror(errno));
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	printf("Connectors:\n");
 | 
			
		||||
	printf("id\tencoder\tstatus\t\ttype\tsize (mm)\tmodes\n");
 | 
			
		||||
	igt_info("Connectors:\n");
 | 
			
		||||
	igt_info("id\tencoder\tstatus\t\ttype\tsize (mm)\tmodes\n");
 | 
			
		||||
	for (i = 0; i < mode_resources->count_connectors; i++) {
 | 
			
		||||
		drmModeConnector *connector;
 | 
			
		||||
 | 
			
		||||
		connector = drmModeGetConnector(drmfd, mode_resources->connectors[i]);
 | 
			
		||||
		if (!connector) {
 | 
			
		||||
			fprintf(stderr, "could not get connector %i: %s\n",
 | 
			
		||||
				mode_resources->connectors[i], strerror(errno));
 | 
			
		||||
			igt_warn("could not get connector %i: %s\n", mode_resources->connectors[i], strerror(errno));
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		printf("%d\t%d\t%s\t%s\t%dx%d\t\t%d\n",
 | 
			
		||||
		       connector->connector_id,
 | 
			
		||||
		       connector->encoder_id,
 | 
			
		||||
		       kmstest_connector_status_str(connector->connection),
 | 
			
		||||
		       kmstest_connector_type_str(connector->connector_type),
 | 
			
		||||
		       connector->mmWidth, connector->mmHeight,
 | 
			
		||||
		       connector->count_modes);
 | 
			
		||||
		igt_info("%d\t%d\t%s\t%s\t%dx%d\t\t%d\n", connector->connector_id, connector->encoder_id, kmstest_connector_status_str(connector->connection), kmstest_connector_type_str(connector->connector_type), connector->mmWidth, connector->mmHeight, connector->count_modes);
 | 
			
		||||
 | 
			
		||||
		if (!connector->count_modes)
 | 
			
		||||
			continue;
 | 
			
		||||
 | 
			
		||||
		printf("  modes:\n");
 | 
			
		||||
		printf("  name refresh (Hz) hdisp hss hse htot vdisp "
 | 
			
		||||
		       "vss vse vtot flags type clock\n");
 | 
			
		||||
		igt_info("  modes:\n");
 | 
			
		||||
		igt_info("  name refresh (Hz) hdisp hss hse htot vdisp ""vss vse vtot flags type clock\n");
 | 
			
		||||
		for (j = 0; j < connector->count_modes; j++){
 | 
			
		||||
			fprintf(stdout, "[%d]", j );
 | 
			
		||||
			igt_info("[%d]", j);
 | 
			
		||||
			kmstest_dump_mode(&connector->modes[j]);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		drmModeFreeConnector(connector);
 | 
			
		||||
	}
 | 
			
		||||
	printf("\n");
 | 
			
		||||
	igt_info("\n");
 | 
			
		||||
 | 
			
		||||
	drmModeFreeResources(mode_resources);
 | 
			
		||||
}
 | 
			
		||||
@ -166,27 +157,22 @@ static void dump_crtcs_fd(int drmfd)
 | 
			
		||||
	int i;
 | 
			
		||||
	drmModeRes *mode_resources = drmModeGetResources(drmfd);
 | 
			
		||||
 | 
			
		||||
	printf("CRTCs:\n");
 | 
			
		||||
	printf("id\tfb\tpos\tsize\n");
 | 
			
		||||
	igt_info("CRTCs:\n");
 | 
			
		||||
	igt_info("id\tfb\tpos\tsize\n");
 | 
			
		||||
	for (i = 0; i < mode_resources->count_crtcs; i++) {
 | 
			
		||||
		drmModeCrtc *crtc;
 | 
			
		||||
 | 
			
		||||
		crtc = drmModeGetCrtc(drmfd, mode_resources->crtcs[i]);
 | 
			
		||||
		if (!crtc) {
 | 
			
		||||
			fprintf(stderr, "could not get crtc %i: %s\n",
 | 
			
		||||
				mode_resources->crtcs[i], strerror(errno));
 | 
			
		||||
			igt_warn("could not get crtc %i: %s\n", mode_resources->crtcs[i], strerror(errno));
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
		printf("%d\t%d\t(%d,%d)\t(%dx%d)\n",
 | 
			
		||||
		       crtc->crtc_id,
 | 
			
		||||
		       crtc->buffer_id,
 | 
			
		||||
		       crtc->x, crtc->y,
 | 
			
		||||
		       crtc->width, crtc->height);
 | 
			
		||||
		igt_info("%d\t%d\t(%d,%d)\t(%dx%d)\n", crtc->crtc_id, crtc->buffer_id, crtc->x, crtc->y, crtc->width, crtc->height);
 | 
			
		||||
		kmstest_dump_mode(&crtc->mode);
 | 
			
		||||
 | 
			
		||||
		drmModeFreeCrtc(crtc);
 | 
			
		||||
	}
 | 
			
		||||
	printf("\n");
 | 
			
		||||
	igt_info("\n");
 | 
			
		||||
 | 
			
		||||
	drmModeFreeResources(mode_resources);
 | 
			
		||||
}
 | 
			
		||||
@ -343,8 +329,8 @@ static void set_single(void)
 | 
			
		||||
 | 
			
		||||
	sigemptyset(&sa.sa_mask);
 | 
			
		||||
 | 
			
		||||
	if (sigaction(sigs[0], &sa, NULL) == -1)
 | 
			
		||||
		perror("Could not set signal handler");
 | 
			
		||||
	igt_warn_on_f(sigaction(sigs[0], &sa, NULL) == -1,
 | 
			
		||||
		      "Could not set signal handler");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@ -384,13 +370,11 @@ set_mode(struct connector *c)
 | 
			
		||||
		paint_output_info(c, &fb_info[current_fb]);
 | 
			
		||||
		paint_color_key(&fb_info[current_fb]);
 | 
			
		||||
 | 
			
		||||
		fprintf(stdout, "CRTC(%u):[%d]",c->crtc, j);
 | 
			
		||||
		igt_info("CRTC(%u):[%d]", c->crtc, j);
 | 
			
		||||
		kmstest_dump_mode(&c->mode);
 | 
			
		||||
		if (drmModeSetCrtc(drm_fd, c->crtc, fb_id, 0, 0,
 | 
			
		||||
				   &c->id, 1, &c->mode)) {
 | 
			
		||||
			fprintf(stderr, "failed to set mode (%dx%d@%dHz): %s\n",
 | 
			
		||||
				width, height, c->mode.vrefresh,
 | 
			
		||||
				strerror(errno));
 | 
			
		||||
			igt_warn("failed to set mode (%dx%d@%dHz): %s\n", width, height, c->mode.vrefresh, strerror(errno));
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@ -541,12 +525,8 @@ static void do_set_stereo_mode(struct connector *c)
 | 
			
		||||
 | 
			
		||||
	fb_id = create_stereo_fb(&c->mode, &fb_info);
 | 
			
		||||
 | 
			
		||||
	if (drmModeSetCrtc(drm_fd, c->crtc, fb_id, 0, 0,
 | 
			
		||||
			   &c->id, 1, &c->mode)) {
 | 
			
		||||
		fprintf(stderr, "failed to set mode (%dx%d@%dHz): %s\n",
 | 
			
		||||
			width, height, c->mode.vrefresh,
 | 
			
		||||
			strerror(errno));
 | 
			
		||||
	}
 | 
			
		||||
	igt_warn_on_f(drmModeSetCrtc(drm_fd, c->crtc, fb_id, 0, 0, &c->id, 1, &c->mode),
 | 
			
		||||
		      "failed to set mode (%dx%d@%dHz): %s\n", width, height, c->mode.vrefresh, strerror(errno));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@ -570,7 +550,7 @@ set_stereo_mode(struct connector *c)
 | 
			
		||||
		if (!(c->mode.flags & DRM_MODE_FLAG_3D_MASK))
 | 
			
		||||
			continue;
 | 
			
		||||
 | 
			
		||||
		fprintf(stdout, "CRTC(%u): [%d]", c->crtc, i);
 | 
			
		||||
		igt_info("CRTC(%u): [%d]", c->crtc, i);
 | 
			
		||||
		kmstest_dump_mode(&c->mode);
 | 
			
		||||
		do_set_stereo_mode(c);
 | 
			
		||||
 | 
			
		||||
@ -607,8 +587,7 @@ int update_display(void)
 | 
			
		||||
 | 
			
		||||
	resources = drmModeGetResources(drm_fd);
 | 
			
		||||
	if (!resources) {
 | 
			
		||||
		fprintf(stderr, "drmModeGetResources failed: %s\n",
 | 
			
		||||
			strerror(errno));
 | 
			
		||||
		igt_warn("drmModeGetResources failed: %s\n", strerror(errno));
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -675,22 +654,22 @@ static char optstr[] = "3hiaf:s:d:p:mrto:j:";
 | 
			
		||||
 | 
			
		||||
static void __attribute__((noreturn)) usage(char *name)
 | 
			
		||||
{
 | 
			
		||||
	fprintf(stdout, "usage: %s [-hiasdpmtf]\n", name);
 | 
			
		||||
	fprintf(stdout, "\t-i\tdump info\n");
 | 
			
		||||
	fprintf(stdout, "\t-a\ttest all modes\n");
 | 
			
		||||
	fprintf(stdout, "\t-s\t<duration>\tsleep between each mode test\n");
 | 
			
		||||
	fprintf(stdout, "\t-d\t<depth>\tbit depth of scanout buffer\n");
 | 
			
		||||
	fprintf(stdout, "\t-p\t<planew,h>,<crtcx,y>,<crtcw,h> test overlay plane\n");
 | 
			
		||||
	fprintf(stdout, "\t-m\ttest the preferred mode\n");
 | 
			
		||||
	fprintf(stdout, "\t-3\ttest all 3D modes\n");
 | 
			
		||||
	fprintf(stdout, "\t-t\tuse a tiled framebuffer\n");
 | 
			
		||||
	fprintf(stdout, "\t-j\tdo dpms off, optional arg to select dpms leve (1-3)\n");
 | 
			
		||||
	fprintf(stdout, "\t-r\tprint a QR code on the screen whose content is \"pass\" for the automatic test\n");
 | 
			
		||||
	fprintf(stdout, "\t-o\t<id of the display>,<number of the mode>\tonly test specified mode on the specified display\n");
 | 
			
		||||
	fprintf(stdout, "\t-f\t<clock MHz>,<hdisp>,<hsync-start>,<hsync-end>,<htotal>,\n");
 | 
			
		||||
	fprintf(stdout, "\t\t<vdisp>,<vsync-start>,<vsync-end>,<vtotal>\n");
 | 
			
		||||
	fprintf(stdout, "\t\ttest force mode\n");
 | 
			
		||||
	fprintf(stdout, "\tDefault is to test all modes.\n");
 | 
			
		||||
	igt_info("usage: %s [-hiasdpmtf]\n", name);
 | 
			
		||||
	igt_info("\t-i\tdump info\n");
 | 
			
		||||
	igt_info("\t-a\ttest all modes\n");
 | 
			
		||||
	igt_info("\t-s\t<duration>\tsleep between each mode test\n");
 | 
			
		||||
	igt_info("\t-d\t<depth>\tbit depth of scanout buffer\n");
 | 
			
		||||
	igt_info("\t-p\t<planew,h>,<crtcx,y>,<crtcw,h> test overlay plane\n");
 | 
			
		||||
	igt_info("\t-m\ttest the preferred mode\n");
 | 
			
		||||
	igt_info("\t-3\ttest all 3D modes\n");
 | 
			
		||||
	igt_info("\t-t\tuse a tiled framebuffer\n");
 | 
			
		||||
	igt_info("\t-j\tdo dpms off, optional arg to select dpms leve (1-3)\n");
 | 
			
		||||
	igt_info("\t-r\tprint a QR code on the screen whose content is \"pass\" for the automatic test\n");
 | 
			
		||||
	igt_info("\t-o\t<id of the display>,<number of the mode>\tonly test specified mode on the specified display\n");
 | 
			
		||||
	igt_info("\t-f\t<clock MHz>,<hdisp>,<hsync-start>,<hsync-end>,<htotal>,\n");
 | 
			
		||||
	igt_info("\t\t<vdisp>,<vsync-start>,<vsync-end>,<vtotal>\n");
 | 
			
		||||
	igt_info("\t\ttest force mode\n");
 | 
			
		||||
	igt_info("\tDefault is to test all modes.\n");
 | 
			
		||||
	exit(0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -797,7 +776,7 @@ int main(int argc, char **argv)
 | 
			
		||||
			break;
 | 
			
		||||
		case 'd':
 | 
			
		||||
			depth = atoi(optarg);
 | 
			
		||||
			fprintf(stdout, "using depth %d\n", depth);
 | 
			
		||||
			igt_info("using depth %d\n", depth);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'p':
 | 
			
		||||
			if (sscanf(optarg, "%d,%d,%d,%d,%d,%d", &plane_width,
 | 
			
		||||
@ -843,7 +822,7 @@ int main(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	if (test_stereo_modes &&
 | 
			
		||||
	    drmSetClientCap(drm_fd, DRM_CLIENT_CAP_STEREO_3D, 1) < 0) {
 | 
			
		||||
		fprintf(stderr, "DRM_CLIENT_CAP_STEREO_3D failed\n");
 | 
			
		||||
		igt_warn("DRM_CLIENT_CAP_STEREO_3D failed\n");
 | 
			
		||||
		goto out_close;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -856,26 +835,26 @@ int main(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	mainloop = g_main_loop_new(NULL, FALSE);
 | 
			
		||||
	if (!mainloop) {
 | 
			
		||||
		fprintf(stderr, "failed to create glib mainloop\n");
 | 
			
		||||
		igt_warn("failed to create glib mainloop\n");
 | 
			
		||||
		ret = -1;
 | 
			
		||||
		goto out_close;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!testdisplay_setup_hotplug()) {
 | 
			
		||||
		fprintf(stderr, "failed to initialize hotplug support\n");
 | 
			
		||||
		igt_warn("failed to initialize hotplug support\n");
 | 
			
		||||
		goto out_mainloop;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	stdinchannel = g_io_channel_unix_new(0);
 | 
			
		||||
	if (!stdinchannel) {
 | 
			
		||||
		fprintf(stderr, "failed to create stdin GIO channel\n");
 | 
			
		||||
		igt_warn("failed to create stdin GIO channel\n");
 | 
			
		||||
		goto out_hotplug;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ret = g_io_add_watch(stdinchannel, G_IO_IN | G_IO_ERR, input_event,
 | 
			
		||||
			     NULL);
 | 
			
		||||
	if (ret < 0) {
 | 
			
		||||
		fprintf(stderr, "failed to add watch on stdin GIO channel\n");
 | 
			
		||||
		igt_warn("failed to add watch on stdin GIO channel\n");
 | 
			
		||||
		goto out_stdio;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -30,6 +30,8 @@
 | 
			
		||||
#include "config.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "igt_core.h"
 | 
			
		||||
 | 
			
		||||
#if HAVE_UDEV
 | 
			
		||||
#include <libudev.h>
 | 
			
		||||
static struct udev_monitor *uevent_monitor;
 | 
			
		||||
@ -69,13 +71,13 @@ gboolean testdisplay_setup_hotplug(void)
 | 
			
		||||
 | 
			
		||||
	udev = udev_new();
 | 
			
		||||
	if (!udev) {
 | 
			
		||||
		fprintf(stderr, "failed to create udev object\n");
 | 
			
		||||
		igt_warn("failed to create udev object\n");
 | 
			
		||||
		goto out;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	uevent_monitor = udev_monitor_new_from_netlink(udev, "udev");
 | 
			
		||||
	if (!uevent_monitor) {
 | 
			
		||||
		fprintf(stderr, "failed to create udev event monitor\n");
 | 
			
		||||
		igt_warn("failed to create udev event monitor\n");
 | 
			
		||||
		goto out;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -83,27 +85,27 @@ gboolean testdisplay_setup_hotplug(void)
 | 
			
		||||
							      "drm",
 | 
			
		||||
							      "drm_minor");
 | 
			
		||||
	if (ret < 0) {
 | 
			
		||||
		fprintf(stderr, "failed to filter for drm events\n");
 | 
			
		||||
		igt_warn("failed to filter for drm events\n");
 | 
			
		||||
		goto out;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ret = udev_monitor_enable_receiving(uevent_monitor);
 | 
			
		||||
	if (ret < 0) {
 | 
			
		||||
		fprintf(stderr, "failed to enable udev event reception\n");
 | 
			
		||||
		igt_warn("failed to enable udev event reception\n");
 | 
			
		||||
		goto out;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	udevchannel =
 | 
			
		||||
		g_io_channel_unix_new(udev_monitor_get_fd(uevent_monitor));
 | 
			
		||||
	if (!udevchannel) {
 | 
			
		||||
		fprintf(stderr, "failed to create udev GIO channel\n");
 | 
			
		||||
		igt_warn("failed to create udev GIO channel\n");
 | 
			
		||||
		goto out;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ret = g_io_add_watch(udevchannel, G_IO_IN | G_IO_ERR, hotplug_event,
 | 
			
		||||
			     udev);
 | 
			
		||||
	if (ret < 0) {
 | 
			
		||||
		fprintf(stderr, "failed to add watch on udev GIO channel\n");
 | 
			
		||||
		igt_warn("failed to add watch on udev GIO channel\n");
 | 
			
		||||
		goto out;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -126,7 +128,7 @@ void testdisplay_cleanup_hotplug(void)
 | 
			
		||||
#else
 | 
			
		||||
gboolean testdisplay_setup_hotplug(void)
 | 
			
		||||
{
 | 
			
		||||
	fprintf(stderr, "no hotplug support on this platform\n");
 | 
			
		||||
	igt_warn("no hotplug support on this platform\n");
 | 
			
		||||
	return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user