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