xref: /kvm-unit-tests/powerpc/selftest.c (revision c76b0d0a3842ba312a2d8512f7a3728f4598bf94)
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>
11*c76b0d0aSNicholas Piggin #include <asm/smp.h>
121e95c7ccSAndrew Jones 
check_setup(int argc,char ** argv)13d72b0449SAndrew Jones static void check_setup(int argc, char **argv)
141e95c7ccSAndrew Jones {
15d72b0449SAndrew Jones 	int nr_tests = 0, len, i;
16d72b0449SAndrew Jones 	long val;
17d72b0449SAndrew Jones 
18d72b0449SAndrew Jones 	for (i = 0; i < argc; ++i) {
19d72b0449SAndrew Jones 
20d72b0449SAndrew Jones 		len = parse_keyval(argv[i], &val);
21d72b0449SAndrew Jones 		if (len == -1)
22d72b0449SAndrew Jones 			continue;
23d72b0449SAndrew Jones 
24d72b0449SAndrew Jones 		argv[i][len] = '\0';
25d72b0449SAndrew Jones 		report_prefix_push(argv[i]);
26d72b0449SAndrew Jones 
27d72b0449SAndrew Jones 		if (strcmp(argv[i], "mem") == 0) {
28d72b0449SAndrew Jones 
29d72b0449SAndrew Jones 			phys_addr_t memsize = PHYSICAL_END - PHYSICAL_START;
30d72b0449SAndrew Jones 			phys_addr_t expected = ((phys_addr_t)val)*1024*1024;
31d72b0449SAndrew Jones 
32a299895bSThomas Huth 			report(memsize == expected, "size = %" PRIu64 " MB",
33d72b0449SAndrew Jones 							memsize/1024/1024);
34d72b0449SAndrew Jones 			++nr_tests;
35d72b0449SAndrew Jones 
36d72b0449SAndrew Jones 		} else if (strcmp(argv[i], "smp") == 0) {
37d72b0449SAndrew Jones 
38*c76b0d0aSNicholas Piggin 			report(nr_cpus_present == (int)val,
39*c76b0d0aSNicholas Piggin 				"nr_cpus_present = %d", nr_cpus_present);
40d72b0449SAndrew Jones 			++nr_tests;
41d72b0449SAndrew Jones 		}
42d72b0449SAndrew Jones 
43d72b0449SAndrew Jones 		report_prefix_pop();
44d72b0449SAndrew Jones 	}
45d72b0449SAndrew Jones 
46d72b0449SAndrew Jones 	if (nr_tests < 2)
47d72b0449SAndrew Jones 		report_abort("missing input");
48d72b0449SAndrew Jones }
49d72b0449SAndrew Jones 
main(int argc,char ** argv)50d72b0449SAndrew Jones int main(int argc, char **argv)
51d72b0449SAndrew Jones {
52d72b0449SAndrew Jones 	report_prefix_push("selftest");
53d72b0449SAndrew Jones 
54a9abb1b8SAndrew Jones 	if (argc < 2)
55d72b0449SAndrew Jones 		report_abort("no test specified");
56d72b0449SAndrew Jones 
57a9abb1b8SAndrew Jones 	report_prefix_push(argv[1]);
58d72b0449SAndrew Jones 
59a9abb1b8SAndrew Jones 	if (strcmp(argv[1], "setup") == 0) {
60d72b0449SAndrew Jones 
61a9abb1b8SAndrew Jones 		check_setup(argc-2, &argv[2]);
62d72b0449SAndrew Jones 
63d72b0449SAndrew Jones 	}
64d72b0449SAndrew Jones 
65d72b0449SAndrew Jones 	return report_summary();
661e95c7ccSAndrew Jones }
67