xref: /rk3399_rockchip-uboot/test/rockchip/test-rockchip.c (revision 331c2375688d79920fb06b8f0c4c52a7df56fb29)
1 /*
2  * (C) Copyright 2017 Rockchip Electronics Co., Ltd
3  *
4  * SPDX-License-Identifier:     GPL-2.0+
5  */
6 
7 #include <common.h>
8 #include <command.h>
9 #include "test-rockchip.h"
10 
11 typedef struct board_module {
12 	char *name;
13 	char *desc;
14 	int (*test)(int argc, char * const argv[]);
15 } board_module_t;
16 
17 static int board_rockusb_test(int argc, char * const argv[])
18 {
19 	return run_command_list("rockusb 0 ${devtype} ${devnum}", -1, 0);
20 }
21 
22 static int board_fastboot_test(int argc, char * const argv[])
23 {
24 	return run_command_list("fastboot usb 0", -1, 0);
25 }
26 
27 static board_module_t g_board_modules[] = {
28 #if defined(CONFIG_IRQ)
29 	{
30 		.name = "timer",
31 		.desc = "test timer and interrupt",
32 		.test = board_timer_test
33 	},
34 #endif
35 	{
36 		.name = "brom",
37 		.desc = "enter bootrom download mode",
38 		.test = board_brom_dnl_test
39 	},
40 	{
41 		.name = "rockusb",
42 		.desc = "enter rockusb download mode",
43 		.test = board_rockusb_test
44 	},
45 	{
46 		.name = "fastboot",
47 		.desc = "enter fastboot download mode",
48 		.test = board_fastboot_test
49 	},
50 #if defined(CONFIG_DM_KEY)
51 	{
52 		.name = "key",
53 		.desc = "test board keys",
54 		.test = board_key_test
55 	},
56 #endif
57 #if defined(CONFIG_MMC)
58 	{
59 		.name = "emmc",
60 		.desc = "test emmc read/write speed",
61 		.test = board_emmc_test
62 	},
63 #endif
64 #if defined(CONFIG_RKNAND)
65 	{
66 		.name = "rknand",
67 		.desc = "test rknand read/write speed",
68 		.test = board_rknand_test
69 	},
70 #endif
71 
72 #if defined(CONFIG_DM_REGULATOR)
73 	{
74 		.name = "regulator",
75 		.desc = "test regulator volatge set and show regulator status",
76 		.test = board_regulator_test
77 	},
78 #endif
79 #if defined(CONFIG_GMAC_ROCKCHIP)
80 	{
81 		.name = "eth",
82 		.desc = "test ethernet",
83 		.test = board_eth_test
84 	},
85 #endif
86 #if defined(CONFIG_RK_IR)
87 	{
88 		.name = "ir",
89 		.desc = "test pwm ir remoter for box product",
90 		.test = board_ir_test
91 	},
92 #endif
93 #if defined(CONFIG_ROCKCHIP_VENDOR_PARTITION)
94 	{
95 		.name = "vendor",
96 		.desc = "test vendor storage partition read/write",
97 		.test = board_vendor_storage_test
98 	},
99 #endif
100 };
101 
102 static void help(void)
103 {
104 	int i;
105 
106 	printf("Command: rktest [module] [args...]\n"
107 	       "  - module: timer|key|emmc|rknand|regulator|eth|ir|brom|rockusb|fastboot|vendor\n"
108 	       "  - args: depends on module, try 'rktest [module]' for test or more help\n\n");
109 
110 	printf("  - Enabled modules:\n");
111 	for (i = 0; i < ARRAY_SIZE(g_board_modules); i++)
112 		printf("     - %10s%s %s\n",
113 		       g_board_modules[i].name,
114 		       g_board_modules[i].desc ? ":" : "",
115 		       g_board_modules[i].desc ? g_board_modules[i].desc : "");
116 }
117 
118 static int do_rockchip_test(cmd_tbl_t *cmdtp, int flag,
119 			    int argc, char * const argv[])
120 {
121 	ulong ms_start = 0, ms = 0, sec = 0;
122 	board_module_t *module = NULL;
123 	char *module_name = NULL;
124 	int index = 0, err = 0;
125 	bool found = false;
126 
127 	if (argc >= 2) {
128 		module_name = argv[1];
129 	} else {
130 		help();
131 		return 0;
132 	}
133 
134 	if (!module_name)
135 		return 0;
136 
137 	for (index = 0; index < ARRAY_SIZE(g_board_modules); index++) {
138 		module = &g_board_modules[index];
139 		if (module && !strcmp(module->name, module_name)) {
140 			found = true;
141 
142 			printf("***********************************************************\n");
143 			printf("Rockchip Board Module [%s] Test start.\n", module_name);
144 			printf("***********************************************************\n");
145 
146 			ms_start = get_timer(0);
147 
148 			err = module->test(argc, argv);
149 
150 			ms = get_timer(ms_start);
151 			if (ms >= 1000) {
152 				sec = ms / 1000;
153 				ms = ms % 1000;
154 			}
155 
156 			printf("-----------------------------------------------------------\n");
157 			printf("Rockchip Board Module [%s] Test end <%s>.. Total: %lu.%lus\n",
158 			       module->name, err ? "FAILED" : "PASS", sec, ms);
159 			printf("-----------------------------------------------------------\n\n\n");
160 		}
161 	}
162 
163 	if (!found)
164 		printf("Rockchip Board Module [%s] is not support !\n",
165 		       module_name);
166 
167 	return 0;
168 }
169 
170 U_BOOT_CMD(
171 	rktest, 10, 0, do_rockchip_test,
172 	"Rockchip Board Module Test",
173 	""
174 );
175