xref: /rk3399_rockchip-uboot/test/rockchip/test-rockchip.c (revision dbe1e39c43687087fc857590d6b2c9feb97fbc80)
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;
131dc7864bSJoseph Chen 	int (*test)(int argc, char * const argv[]);
141dc7864bSJoseph Chen } board_module_t;
151dc7864bSJoseph Chen 
161dc7864bSJoseph Chen static board_module_t g_board_modules[] = {
17*dbe1e39cSJoseph Chen #if defined(CONFIG_IRQ)
181dc7864bSJoseph Chen 	{ .name = "timer",	.test = board_timer_test },
19*dbe1e39cSJoseph Chen #endif
20b40c07fcSJoseph Chen 	{ .name = "brom",	.test = board_brom_dnl_test },
21b40c07fcSJoseph Chen 
22b40c07fcSJoseph Chen #if defined(CONFIG_DM_KEY)
231dc7864bSJoseph Chen 	{ .name = "key",	.test = board_key_test },
24b40c07fcSJoseph Chen #endif
25b40c07fcSJoseph Chen #if defined(CONFIG_MMC)
26895be894SShawn Lin 	{ .name = "emmc",	.test = board_emmc_test },
27b40c07fcSJoseph Chen #endif
28b40c07fcSJoseph Chen #if defined(CONFIG_DM_REGULATOR)
29ed5ce517SJoseph Chen 	{ .name = "regulator",	.test = board_regulator_test },
30b40c07fcSJoseph Chen #endif
31b40c07fcSJoseph Chen #if defined(CONFIG_RKNAND)
326faa29c6SZhaoyifeng 	{ .name = "rknand",	.test = board_rknand_test },
33b40c07fcSJoseph Chen #endif
34e630a69bSDavid Wu #if defined(CONFIG_GMAC_ROCKCHIP)
35e630a69bSDavid Wu 	{ .name = "eth",        .test = board_eth_test },
36e630a69bSDavid Wu #endif
3708af5e36SZhangbin Tong #if defined(CONFIG_RK_IR)
3808af5e36SZhangbin Tong 	{ .name = "ir",		.test = board_ir_test },
3908af5e36SZhangbin Tong #endif
4044e08075SJoseph Chen #if defined(CONFIG_ROCKCHIP_VENDOR_PARTITION)
4144e08075SJoseph Chen 	{ .name = "vendor",	.test = board_vendor_storage_test },
4244e08075SJoseph Chen #endif
431dc7864bSJoseph Chen };
441dc7864bSJoseph Chen 
45336e1992SJoseph Chen static void help(void)
46336e1992SJoseph Chen {
47336e1992SJoseph Chen 	printf("Command: rktest [module] [args...]\n\n"
48b40c07fcSJoseph Chen 	       "  - module: timer|key|emmc|rknand|regulator|eth|ir|brom|vendor\n"
49336e1992SJoseph Chen 	       "  - args: depends on module\n");
50336e1992SJoseph Chen }
51336e1992SJoseph Chen 
521dc7864bSJoseph Chen static int do_rockchip_test(cmd_tbl_t *cmdtp, int flag,
531dc7864bSJoseph Chen 			    int argc, char * const argv[])
541dc7864bSJoseph Chen {
551dc7864bSJoseph Chen 	ulong ms_start = 0, ms = 0, sec = 0;
561dc7864bSJoseph Chen 	board_module_t *module = NULL;
571dc7864bSJoseph Chen 	char *module_name = NULL;
581dc7864bSJoseph Chen 	int index = 0, err = 0;
5935573213SJoseph Chen 	bool found = false;
601dc7864bSJoseph Chen 
611dc7864bSJoseph Chen 	if (argc >= 2) {
621dc7864bSJoseph Chen 		module_name = argv[1];
631dc7864bSJoseph Chen 	} else {
64336e1992SJoseph Chen 		help();
651dc7864bSJoseph Chen 		return 0;
661dc7864bSJoseph Chen 	}
671dc7864bSJoseph Chen 
681dc7864bSJoseph Chen 	if (!module_name)
691dc7864bSJoseph Chen 		return 0;
701dc7864bSJoseph Chen 
711dc7864bSJoseph Chen 
721dc7864bSJoseph Chen 	for (index = 0; index < ARRAY_SIZE(g_board_modules); index++) {
731dc7864bSJoseph Chen 		module = &g_board_modules[index];
741dc7864bSJoseph Chen 		if (module && !strcmp(module->name, module_name)) {
7535573213SJoseph Chen 			found = true;
7635573213SJoseph Chen 
7735573213SJoseph Chen 			printf("***********************************************************\n");
7835573213SJoseph Chen 			printf("Rockchip Board Module [%s] Test start.\n", module_name);
7935573213SJoseph Chen 			printf("***********************************************************\n");
8035573213SJoseph Chen 
811dc7864bSJoseph Chen 			ms_start = get_timer(0);
821dc7864bSJoseph Chen 
831dc7864bSJoseph Chen 			err = module->test(argc, argv);
841dc7864bSJoseph Chen 
851dc7864bSJoseph Chen 			ms = get_timer(ms_start);
861dc7864bSJoseph Chen 			if (ms >= 1000) {
871dc7864bSJoseph Chen 				sec = ms / 1000;
881dc7864bSJoseph Chen 				ms = ms % 1000;
891dc7864bSJoseph Chen 			}
901dc7864bSJoseph Chen 
911dc7864bSJoseph Chen 			printf("-----------------------------------------------------------\n");
921dc7864bSJoseph Chen 			printf("Rockchip Board Module [%s] Test end <%s>.. Total: %lu.%lus\n",
931dc7864bSJoseph Chen 			       module->name, err ? "FAILED" : "PASS", sec, ms);
941dc7864bSJoseph Chen 			printf("-----------------------------------------------------------\n\n\n");
9535573213SJoseph Chen 		}
9635573213SJoseph Chen 	}
9735573213SJoseph Chen 
9835573213SJoseph Chen 	if (!found)
9935573213SJoseph Chen 		printf("Rockchip Board Module [%s] is not support !\n",
10035573213SJoseph Chen 		       module_name);
1011dc7864bSJoseph Chen 
1021dc7864bSJoseph Chen 	return 0;
1031dc7864bSJoseph Chen }
1041dc7864bSJoseph Chen 
1051dc7864bSJoseph Chen U_BOOT_CMD(
1061dc7864bSJoseph Chen 	rktest, 10, 0, do_rockchip_test,
1071dc7864bSJoseph Chen 	"Rockchip Board Module Test",
1081dc7864bSJoseph Chen 	""
1091dc7864bSJoseph Chen );
110