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