xref: /rk3399_rockchip-uboot/test/rockchip/test-rockchip.c (revision 1dc7864b9b15e2ddbe18cd7e35a874d4fbef9b97)
1*1dc7864bSJoseph Chen /*
2*1dc7864bSJoseph Chen  * (C) Copyright 2017 Rockchip Electronics Co., Ltd
3*1dc7864bSJoseph Chen  *
4*1dc7864bSJoseph Chen  * SPDX-License-Identifier:     GPL-2.0+
5*1dc7864bSJoseph Chen  */
6*1dc7864bSJoseph Chen 
7*1dc7864bSJoseph Chen #include <common.h>
8*1dc7864bSJoseph Chen #include <command.h>
9*1dc7864bSJoseph Chen #include "test-rockchip.h"
10*1dc7864bSJoseph Chen 
11*1dc7864bSJoseph Chen typedef struct board_module {
12*1dc7864bSJoseph Chen 	char *name;
13*1dc7864bSJoseph Chen 	int (*test)(int argc, char * const argv[]);
14*1dc7864bSJoseph Chen } board_module_t;
15*1dc7864bSJoseph Chen 
16*1dc7864bSJoseph Chen static board_module_t g_board_modules[] = {
17*1dc7864bSJoseph Chen 	{ .name = "timer",	.test = board_timer_test },
18*1dc7864bSJoseph Chen 	{ .name = "key",	.test = board_key_test },
19*1dc7864bSJoseph Chen };
20*1dc7864bSJoseph Chen 
21*1dc7864bSJoseph Chen static int do_rockchip_test(cmd_tbl_t *cmdtp, int flag,
22*1dc7864bSJoseph Chen 			    int argc, char * const argv[])
23*1dc7864bSJoseph Chen {
24*1dc7864bSJoseph Chen 	ulong ms_start = 0, ms = 0, sec = 0;
25*1dc7864bSJoseph Chen 	board_module_t *module = NULL;
26*1dc7864bSJoseph Chen 	char *module_name = NULL;
27*1dc7864bSJoseph Chen 	int index = 0, err = 0;
28*1dc7864bSJoseph Chen 
29*1dc7864bSJoseph Chen 	if (argc >= 2) {
30*1dc7864bSJoseph Chen 		module_name = argv[1];
31*1dc7864bSJoseph Chen 	} else {
32*1dc7864bSJoseph Chen 		printf("cmd format: test_rockchip [module_name] [args...]\n");
33*1dc7864bSJoseph Chen 		return 0;
34*1dc7864bSJoseph Chen 	}
35*1dc7864bSJoseph Chen 
36*1dc7864bSJoseph Chen 	if (!module_name)
37*1dc7864bSJoseph Chen 		return 0;
38*1dc7864bSJoseph Chen 
39*1dc7864bSJoseph Chen 	printf("***********************************************************\n");
40*1dc7864bSJoseph Chen 	printf("Rockchip Board Module [%s] Test start.\n", module_name);
41*1dc7864bSJoseph Chen 	printf("***********************************************************\n");
42*1dc7864bSJoseph Chen 
43*1dc7864bSJoseph Chen 	for (index = 0; index < ARRAY_SIZE(g_board_modules); index++) {
44*1dc7864bSJoseph Chen 		module = &g_board_modules[index];
45*1dc7864bSJoseph Chen 		if (module && !strcmp(module->name, module_name)) {
46*1dc7864bSJoseph Chen 			ms_start = get_timer(0);
47*1dc7864bSJoseph Chen 
48*1dc7864bSJoseph Chen 			err = module->test(argc, argv);
49*1dc7864bSJoseph Chen 
50*1dc7864bSJoseph Chen 			ms = get_timer(ms_start);
51*1dc7864bSJoseph Chen 			if (ms >= 1000) {
52*1dc7864bSJoseph Chen 				sec = ms / 1000;
53*1dc7864bSJoseph Chen 				ms = ms % 1000;
54*1dc7864bSJoseph Chen 			}
55*1dc7864bSJoseph Chen 		}
56*1dc7864bSJoseph Chen 	}
57*1dc7864bSJoseph Chen 
58*1dc7864bSJoseph Chen 	printf("-----------------------------------------------------------\n");
59*1dc7864bSJoseph Chen 	printf("Rockchip Board Module [%s] Test end <%s>.. Total: %lu.%lus\n",
60*1dc7864bSJoseph Chen 	       module->name, err ? "FAILED" : "PASS", sec, ms);
61*1dc7864bSJoseph Chen 	printf("-----------------------------------------------------------\n\n\n");
62*1dc7864bSJoseph Chen 
63*1dc7864bSJoseph Chen 	return 0;
64*1dc7864bSJoseph Chen }
65*1dc7864bSJoseph Chen 
66*1dc7864bSJoseph Chen U_BOOT_CMD(
67*1dc7864bSJoseph Chen 	rktest, 10, 0, do_rockchip_test,
68*1dc7864bSJoseph Chen 	"Rockchip Board Module Test",
69*1dc7864bSJoseph Chen 	""
70*1dc7864bSJoseph Chen );
71