xref: /kvm-unit-tests/powerpc/selftest.c (revision a299895b7abb54e7ba6bb4108f202acbb484ac65)
1d72b0449SAndrew Jones /*
2d72b0449SAndrew Jones  * Test the framework itself. These tests confirm that setup works.
3d72b0449SAndrew Jones  *
4d72b0449SAndrew Jones  * Copyright (C) 2016, Red Hat Inc, Andrew Jones <drjones@redhat.com>
5d72b0449SAndrew Jones  *
6d72b0449SAndrew Jones  * This work is licensed under the terms of the GNU LGPL, version 2.
7d72b0449SAndrew Jones  */
81e95c7ccSAndrew Jones #include <libcflat.h>
9d72b0449SAndrew Jones #include <util.h>
10d72b0449SAndrew Jones #include <asm/setup.h>
111e95c7ccSAndrew Jones 
12d72b0449SAndrew Jones static void check_setup(int argc, char **argv)
131e95c7ccSAndrew Jones {
14d72b0449SAndrew Jones 	int nr_tests = 0, len, i;
15d72b0449SAndrew Jones 	long val;
16d72b0449SAndrew Jones 
17d72b0449SAndrew Jones 	for (i = 0; i < argc; ++i) {
18d72b0449SAndrew Jones 
19d72b0449SAndrew Jones 		len = parse_keyval(argv[i], &val);
20d72b0449SAndrew Jones 		if (len == -1)
21d72b0449SAndrew Jones 			continue;
22d72b0449SAndrew Jones 
23d72b0449SAndrew Jones 		argv[i][len] = '\0';
24d72b0449SAndrew Jones 		report_prefix_push(argv[i]);
25d72b0449SAndrew Jones 
26d72b0449SAndrew Jones 		if (strcmp(argv[i], "mem") == 0) {
27d72b0449SAndrew Jones 
28d72b0449SAndrew Jones 			phys_addr_t memsize = PHYSICAL_END - PHYSICAL_START;
29d72b0449SAndrew Jones 			phys_addr_t expected = ((phys_addr_t)val)*1024*1024;
30d72b0449SAndrew Jones 
31*a299895bSThomas Huth 			report(memsize == expected, "size = %" PRIu64 " MB",
32d72b0449SAndrew Jones 							memsize/1024/1024);
33d72b0449SAndrew Jones 			++nr_tests;
34d72b0449SAndrew Jones 
35d72b0449SAndrew Jones 		} else if (strcmp(argv[i], "smp") == 0) {
36d72b0449SAndrew Jones 
37*a299895bSThomas Huth 			report(nr_cpus == (int)val, "nr_cpus = %d", nr_cpus);
38d72b0449SAndrew Jones 			++nr_tests;
39d72b0449SAndrew Jones 		}
40d72b0449SAndrew Jones 
41d72b0449SAndrew Jones 		report_prefix_pop();
42d72b0449SAndrew Jones 	}
43d72b0449SAndrew Jones 
44d72b0449SAndrew Jones 	if (nr_tests < 2)
45d72b0449SAndrew Jones 		report_abort("missing input");
46d72b0449SAndrew Jones }
47d72b0449SAndrew Jones 
48d72b0449SAndrew Jones int main(int argc, char **argv)
49d72b0449SAndrew Jones {
50d72b0449SAndrew Jones 	report_prefix_push("selftest");
51d72b0449SAndrew Jones 
52a9abb1b8SAndrew Jones 	if (argc < 2)
53d72b0449SAndrew Jones 		report_abort("no test specified");
54d72b0449SAndrew Jones 
55a9abb1b8SAndrew Jones 	report_prefix_push(argv[1]);
56d72b0449SAndrew Jones 
57a9abb1b8SAndrew Jones 	if (strcmp(argv[1], "setup") == 0) {
58d72b0449SAndrew Jones 
59a9abb1b8SAndrew Jones 		check_setup(argc-2, &argv[2]);
60d72b0449SAndrew Jones 
61d72b0449SAndrew Jones 	}
62d72b0449SAndrew Jones 
63d72b0449SAndrew Jones 	return report_summary();
641e95c7ccSAndrew Jones }
65