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