xref: /rk3399_rockchip-uboot/test/rockchip/test-rockchip.c (revision ed5ce517739a2041dc32bb2c8aa2437f7889c5ce)
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[] = {
171dc7864bSJoseph Chen 	{ .name = "timer",	.test = board_timer_test },
181dc7864bSJoseph Chen 	{ .name = "key",	.test = board_key_test },
19895be894SShawn Lin 	{ .name = "emmc",	.test = board_emmc_test },
20*ed5ce517SJoseph Chen 	{ .name = "regulator",	.test = board_regulator_test },
211dc7864bSJoseph Chen };
221dc7864bSJoseph Chen 
231dc7864bSJoseph Chen static int do_rockchip_test(cmd_tbl_t *cmdtp, int flag,
241dc7864bSJoseph Chen 			    int argc, char * const argv[])
251dc7864bSJoseph Chen {
261dc7864bSJoseph Chen 	ulong ms_start = 0, ms = 0, sec = 0;
271dc7864bSJoseph Chen 	board_module_t *module = NULL;
281dc7864bSJoseph Chen 	char *module_name = NULL;
291dc7864bSJoseph Chen 	int index = 0, err = 0;
301dc7864bSJoseph Chen 
311dc7864bSJoseph Chen 	if (argc >= 2) {
321dc7864bSJoseph Chen 		module_name = argv[1];
331dc7864bSJoseph Chen 	} else {
341dc7864bSJoseph Chen 		printf("cmd format: test_rockchip [module_name] [args...]\n");
351dc7864bSJoseph Chen 		return 0;
361dc7864bSJoseph Chen 	}
371dc7864bSJoseph Chen 
381dc7864bSJoseph Chen 	if (!module_name)
391dc7864bSJoseph Chen 		return 0;
401dc7864bSJoseph Chen 
411dc7864bSJoseph Chen 	printf("***********************************************************\n");
421dc7864bSJoseph Chen 	printf("Rockchip Board Module [%s] Test start.\n", module_name);
431dc7864bSJoseph Chen 	printf("***********************************************************\n");
441dc7864bSJoseph Chen 
451dc7864bSJoseph Chen 	for (index = 0; index < ARRAY_SIZE(g_board_modules); index++) {
461dc7864bSJoseph Chen 		module = &g_board_modules[index];
471dc7864bSJoseph Chen 		if (module && !strcmp(module->name, module_name)) {
481dc7864bSJoseph Chen 			ms_start = get_timer(0);
491dc7864bSJoseph Chen 
501dc7864bSJoseph Chen 			err = module->test(argc, argv);
511dc7864bSJoseph Chen 
521dc7864bSJoseph Chen 			ms = get_timer(ms_start);
531dc7864bSJoseph Chen 			if (ms >= 1000) {
541dc7864bSJoseph Chen 				sec = ms / 1000;
551dc7864bSJoseph Chen 				ms = ms % 1000;
561dc7864bSJoseph Chen 			}
571dc7864bSJoseph Chen 		}
581dc7864bSJoseph Chen 	}
591dc7864bSJoseph Chen 
601dc7864bSJoseph Chen 	printf("-----------------------------------------------------------\n");
611dc7864bSJoseph Chen 	printf("Rockchip Board Module [%s] Test end <%s>.. Total: %lu.%lus\n",
621dc7864bSJoseph Chen 	       module->name, err ? "FAILED" : "PASS", sec, ms);
631dc7864bSJoseph Chen 	printf("-----------------------------------------------------------\n\n\n");
641dc7864bSJoseph Chen 
651dc7864bSJoseph Chen 	return 0;
661dc7864bSJoseph Chen }
671dc7864bSJoseph Chen 
681dc7864bSJoseph Chen U_BOOT_CMD(
691dc7864bSJoseph Chen 	rktest, 10, 0, do_rockchip_test,
701dc7864bSJoseph Chen 	"Rockchip Board Module Test",
711dc7864bSJoseph Chen 	""
721dc7864bSJoseph Chen );
73