xref: /rk3399_rockchip-uboot/test/rockchip/test-rockchip.c (revision 1e7c429d5d4fa84a0a74287f1edd55f4e7812500)
11dc7864bSJoseph Chen /*
21dc7864bSJoseph Chen  * (C) Copyright 2017 Rockchip Electronics Co., Ltd
31dc7864bSJoseph Chen  *
41dc7864bSJoseph Chen  * SPDX-License-Identifier:     GPL-2.0+
51dc7864bSJoseph Chen  */
61dc7864bSJoseph Chen 
71dc7864bSJoseph Chen #include <common.h>
81dc7864bSJoseph Chen #include <command.h>
91dc7864bSJoseph Chen #include "test-rockchip.h"
101dc7864bSJoseph Chen 
111dc7864bSJoseph Chen typedef struct board_module {
121dc7864bSJoseph Chen 	char *name;
13*1e7c429dSJoseph Chen 	char *desc;
141dc7864bSJoseph Chen 	int (*test)(int argc, char * const argv[]);
151dc7864bSJoseph Chen } board_module_t;
161dc7864bSJoseph Chen 
171dc7864bSJoseph Chen static board_module_t g_board_modules[] = {
18dbe1e39cSJoseph Chen #if defined(CONFIG_IRQ)
19*1e7c429dSJoseph Chen 	{
20*1e7c429dSJoseph Chen 		.name = "timer",
21*1e7c429dSJoseph Chen 		.desc = "test timer and interrupt",
22*1e7c429dSJoseph Chen 		.test = board_timer_test
23*1e7c429dSJoseph Chen 	},
24dbe1e39cSJoseph Chen #endif
25*1e7c429dSJoseph Chen 	{
26*1e7c429dSJoseph Chen 		.name = "brom",
27*1e7c429dSJoseph Chen 		.desc = "enter bootrom download mode",
28*1e7c429dSJoseph Chen 		.test = board_brom_dnl_test
29*1e7c429dSJoseph Chen 	},
30b40c07fcSJoseph Chen 
31b40c07fcSJoseph Chen #if defined(CONFIG_DM_KEY)
32*1e7c429dSJoseph Chen 	{
33*1e7c429dSJoseph Chen 		.name = "key",
34*1e7c429dSJoseph Chen 		.desc = "test board keys",
35*1e7c429dSJoseph Chen 		.test = board_key_test
36*1e7c429dSJoseph Chen 	},
37b40c07fcSJoseph Chen #endif
38b40c07fcSJoseph Chen #if defined(CONFIG_MMC)
39*1e7c429dSJoseph Chen 	{
40*1e7c429dSJoseph Chen 		.name = "emmc",
41*1e7c429dSJoseph Chen 		.desc = "test emmc read/write speed",
42*1e7c429dSJoseph Chen 		.test = board_emmc_test
43*1e7c429dSJoseph Chen 	},
44b40c07fcSJoseph Chen #endif
45b40c07fcSJoseph Chen #if defined(CONFIG_RKNAND)
46*1e7c429dSJoseph Chen 	{
47*1e7c429dSJoseph Chen 		.name = "rknand",
48*1e7c429dSJoseph Chen 		.desc = "test rknand read/write speed",
49*1e7c429dSJoseph Chen 		.test = board_rknand_test
50*1e7c429dSJoseph Chen 	},
51*1e7c429dSJoseph Chen #endif
52*1e7c429dSJoseph Chen 
53*1e7c429dSJoseph Chen #if defined(CONFIG_DM_REGULATOR)
54*1e7c429dSJoseph Chen 	{
55*1e7c429dSJoseph Chen 		.name = "regulator",
56*1e7c429dSJoseph Chen 		.desc = "test regulator volatge set and show regulator status",
57*1e7c429dSJoseph Chen 		.test = board_regulator_test
58*1e7c429dSJoseph Chen 	},
59b40c07fcSJoseph Chen #endif
60e630a69bSDavid Wu #if defined(CONFIG_GMAC_ROCKCHIP)
61*1e7c429dSJoseph Chen 	{
62*1e7c429dSJoseph Chen 		.name = "eth",
63*1e7c429dSJoseph Chen 		.desc = "test ethernet",
64*1e7c429dSJoseph Chen 		.test = board_eth_test
65*1e7c429dSJoseph Chen 	},
66e630a69bSDavid Wu #endif
6708af5e36SZhangbin Tong #if defined(CONFIG_RK_IR)
68*1e7c429dSJoseph Chen 	{
69*1e7c429dSJoseph Chen 		.name = "ir",
70*1e7c429dSJoseph Chen 		.desc = "test pwm ir remoter for box product",
71*1e7c429dSJoseph Chen 		.test = board_ir_test
72*1e7c429dSJoseph Chen 	},
7308af5e36SZhangbin Tong #endif
7444e08075SJoseph Chen #if defined(CONFIG_ROCKCHIP_VENDOR_PARTITION)
75*1e7c429dSJoseph Chen 	{
76*1e7c429dSJoseph Chen 		.name = "vendor",
77*1e7c429dSJoseph Chen 		.desc = "test vendor storage partition read/write",
78*1e7c429dSJoseph Chen 		.test = board_vendor_storage_test
79*1e7c429dSJoseph Chen 	},
8044e08075SJoseph Chen #endif
811dc7864bSJoseph Chen };
821dc7864bSJoseph Chen 
83336e1992SJoseph Chen static void help(void)
84336e1992SJoseph Chen {
85*1e7c429dSJoseph Chen 	int i;
86*1e7c429dSJoseph Chen 
87*1e7c429dSJoseph Chen 	printf("Command: rktest [module] [args...]\n"
88b40c07fcSJoseph Chen 	       "  - module: timer|key|emmc|rknand|regulator|eth|ir|brom|vendor\n"
89*1e7c429dSJoseph Chen 	       "  - args: depends on module, try 'rktest [module]' for test or more help\n\n");
90*1e7c429dSJoseph Chen 
91*1e7c429dSJoseph Chen 	printf("  - Enabled modules:\n");
92*1e7c429dSJoseph Chen 	for (i = 0; i < ARRAY_SIZE(g_board_modules); i++)
93*1e7c429dSJoseph Chen 		printf("     - %10s%s %s\n",
94*1e7c429dSJoseph Chen 		       g_board_modules[i].name,
95*1e7c429dSJoseph Chen 		       g_board_modules[i].desc ? ":" : "",
96*1e7c429dSJoseph Chen 		       g_board_modules[i].desc ? g_board_modules[i].desc : "");
97336e1992SJoseph Chen }
98336e1992SJoseph Chen 
991dc7864bSJoseph Chen static int do_rockchip_test(cmd_tbl_t *cmdtp, int flag,
1001dc7864bSJoseph Chen 			    int argc, char * const argv[])
1011dc7864bSJoseph Chen {
1021dc7864bSJoseph Chen 	ulong ms_start = 0, ms = 0, sec = 0;
1031dc7864bSJoseph Chen 	board_module_t *module = NULL;
1041dc7864bSJoseph Chen 	char *module_name = NULL;
1051dc7864bSJoseph Chen 	int index = 0, err = 0;
10635573213SJoseph Chen 	bool found = false;
1071dc7864bSJoseph Chen 
1081dc7864bSJoseph Chen 	if (argc >= 2) {
1091dc7864bSJoseph Chen 		module_name = argv[1];
1101dc7864bSJoseph Chen 	} else {
111336e1992SJoseph Chen 		help();
1121dc7864bSJoseph Chen 		return 0;
1131dc7864bSJoseph Chen 	}
1141dc7864bSJoseph Chen 
1151dc7864bSJoseph Chen 	if (!module_name)
1161dc7864bSJoseph Chen 		return 0;
1171dc7864bSJoseph Chen 
1181dc7864bSJoseph Chen 	for (index = 0; index < ARRAY_SIZE(g_board_modules); index++) {
1191dc7864bSJoseph Chen 		module = &g_board_modules[index];
1201dc7864bSJoseph Chen 		if (module && !strcmp(module->name, module_name)) {
12135573213SJoseph Chen 			found = true;
12235573213SJoseph Chen 
12335573213SJoseph Chen 			printf("***********************************************************\n");
12435573213SJoseph Chen 			printf("Rockchip Board Module [%s] Test start.\n", module_name);
12535573213SJoseph Chen 			printf("***********************************************************\n");
12635573213SJoseph Chen 
1271dc7864bSJoseph Chen 			ms_start = get_timer(0);
1281dc7864bSJoseph Chen 
1291dc7864bSJoseph Chen 			err = module->test(argc, argv);
1301dc7864bSJoseph Chen 
1311dc7864bSJoseph Chen 			ms = get_timer(ms_start);
1321dc7864bSJoseph Chen 			if (ms >= 1000) {
1331dc7864bSJoseph Chen 				sec = ms / 1000;
1341dc7864bSJoseph Chen 				ms = ms % 1000;
1351dc7864bSJoseph Chen 			}
1361dc7864bSJoseph Chen 
1371dc7864bSJoseph Chen 			printf("-----------------------------------------------------------\n");
1381dc7864bSJoseph Chen 			printf("Rockchip Board Module [%s] Test end <%s>.. Total: %lu.%lus\n",
1391dc7864bSJoseph Chen 			       module->name, err ? "FAILED" : "PASS", sec, ms);
1401dc7864bSJoseph Chen 			printf("-----------------------------------------------------------\n\n\n");
14135573213SJoseph Chen 		}
14235573213SJoseph Chen 	}
14335573213SJoseph Chen 
14435573213SJoseph Chen 	if (!found)
14535573213SJoseph Chen 		printf("Rockchip Board Module [%s] is not support !\n",
14635573213SJoseph Chen 		       module_name);
1471dc7864bSJoseph Chen 
1481dc7864bSJoseph Chen 	return 0;
1491dc7864bSJoseph Chen }
1501dc7864bSJoseph Chen 
1511dc7864bSJoseph Chen U_BOOT_CMD(
1521dc7864bSJoseph Chen 	rktest, 10, 0, do_rockchip_test,
1531dc7864bSJoseph Chen 	"Rockchip Board Module Test",
1541dc7864bSJoseph Chen 	""
1551dc7864bSJoseph Chen );
156