1*1dc7864bSJoseph Chen /* 2*1dc7864bSJoseph Chen * (C) Copyright 2017 Rockchip Electronics Co., Ltd 3*1dc7864bSJoseph Chen * 4*1dc7864bSJoseph Chen * SPDX-License-Identifier: GPL-2.0+ 5*1dc7864bSJoseph Chen */ 6*1dc7864bSJoseph Chen 7*1dc7864bSJoseph Chen #include <common.h> 8*1dc7864bSJoseph Chen #include <command.h> 9*1dc7864bSJoseph Chen #include "test-rockchip.h" 10*1dc7864bSJoseph Chen 11*1dc7864bSJoseph Chen typedef struct board_module { 12*1dc7864bSJoseph Chen char *name; 13*1dc7864bSJoseph Chen int (*test)(int argc, char * const argv[]); 14*1dc7864bSJoseph Chen } board_module_t; 15*1dc7864bSJoseph Chen 16*1dc7864bSJoseph Chen static board_module_t g_board_modules[] = { 17*1dc7864bSJoseph Chen { .name = "timer", .test = board_timer_test }, 18*1dc7864bSJoseph Chen { .name = "key", .test = board_key_test }, 19*1dc7864bSJoseph Chen }; 20*1dc7864bSJoseph Chen 21*1dc7864bSJoseph Chen static int do_rockchip_test(cmd_tbl_t *cmdtp, int flag, 22*1dc7864bSJoseph Chen int argc, char * const argv[]) 23*1dc7864bSJoseph Chen { 24*1dc7864bSJoseph Chen ulong ms_start = 0, ms = 0, sec = 0; 25*1dc7864bSJoseph Chen board_module_t *module = NULL; 26*1dc7864bSJoseph Chen char *module_name = NULL; 27*1dc7864bSJoseph Chen int index = 0, err = 0; 28*1dc7864bSJoseph Chen 29*1dc7864bSJoseph Chen if (argc >= 2) { 30*1dc7864bSJoseph Chen module_name = argv[1]; 31*1dc7864bSJoseph Chen } else { 32*1dc7864bSJoseph Chen printf("cmd format: test_rockchip [module_name] [args...]\n"); 33*1dc7864bSJoseph Chen return 0; 34*1dc7864bSJoseph Chen } 35*1dc7864bSJoseph Chen 36*1dc7864bSJoseph Chen if (!module_name) 37*1dc7864bSJoseph Chen return 0; 38*1dc7864bSJoseph Chen 39*1dc7864bSJoseph Chen printf("***********************************************************\n"); 40*1dc7864bSJoseph Chen printf("Rockchip Board Module [%s] Test start.\n", module_name); 41*1dc7864bSJoseph Chen printf("***********************************************************\n"); 42*1dc7864bSJoseph Chen 43*1dc7864bSJoseph Chen for (index = 0; index < ARRAY_SIZE(g_board_modules); index++) { 44*1dc7864bSJoseph Chen module = &g_board_modules[index]; 45*1dc7864bSJoseph Chen if (module && !strcmp(module->name, module_name)) { 46*1dc7864bSJoseph Chen ms_start = get_timer(0); 47*1dc7864bSJoseph Chen 48*1dc7864bSJoseph Chen err = module->test(argc, argv); 49*1dc7864bSJoseph Chen 50*1dc7864bSJoseph Chen ms = get_timer(ms_start); 51*1dc7864bSJoseph Chen if (ms >= 1000) { 52*1dc7864bSJoseph Chen sec = ms / 1000; 53*1dc7864bSJoseph Chen ms = ms % 1000; 54*1dc7864bSJoseph Chen } 55*1dc7864bSJoseph Chen } 56*1dc7864bSJoseph Chen } 57*1dc7864bSJoseph Chen 58*1dc7864bSJoseph Chen printf("-----------------------------------------------------------\n"); 59*1dc7864bSJoseph Chen printf("Rockchip Board Module [%s] Test end <%s>.. Total: %lu.%lus\n", 60*1dc7864bSJoseph Chen module->name, err ? "FAILED" : "PASS", sec, ms); 61*1dc7864bSJoseph Chen printf("-----------------------------------------------------------\n\n\n"); 62*1dc7864bSJoseph Chen 63*1dc7864bSJoseph Chen return 0; 64*1dc7864bSJoseph Chen } 65*1dc7864bSJoseph Chen 66*1dc7864bSJoseph Chen U_BOOT_CMD( 67*1dc7864bSJoseph Chen rktest, 10, 0, do_rockchip_test, 68*1dc7864bSJoseph Chen "Rockchip Board Module Test", 69*1dc7864bSJoseph Chen "" 70*1dc7864bSJoseph Chen ); 71