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