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