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