1 /* 2 * (C) Copyright 2017 Rockchip Electronics Co., Ltd 3 * 4 * SPDX-License-Identifier: GPL-2.0+ 5 */ 6 7 #include <common.h> 8 #include <command.h> 9 #include "test-rockchip.h" 10 11 typedef struct board_module { 12 char *name; 13 int (*test)(int argc, char * const argv[]); 14 } board_module_t; 15 16 static board_module_t g_board_modules[] = { 17 { .name = "timer", .test = board_timer_test }, 18 { .name = "brom", .test = board_brom_dnl_test }, 19 20 #if defined(CONFIG_DM_KEY) 21 { .name = "key", .test = board_key_test }, 22 #endif 23 #if defined(CONFIG_MMC) 24 { .name = "emmc", .test = board_emmc_test }, 25 #endif 26 #if defined(CONFIG_DM_REGULATOR) 27 { .name = "regulator", .test = board_regulator_test }, 28 #endif 29 #if defined(CONFIG_RKNAND) 30 { .name = "rknand", .test = board_rknand_test }, 31 #endif 32 #if defined(CONFIG_GMAC_ROCKCHIP) 33 { .name = "eth", .test = board_eth_test }, 34 #endif 35 #if defined(CONFIG_RK_IR) 36 { .name = "ir", .test = board_ir_test }, 37 #endif 38 #if defined(CONFIG_ROCKCHIP_VENDOR_PARTITION) 39 { .name = "vendor", .test = board_vendor_storage_test }, 40 #endif 41 }; 42 43 static void help(void) 44 { 45 printf("Command: rktest [module] [args...]\n\n" 46 " - module: timer|key|emmc|rknand|regulator|eth|ir|brom|vendor\n" 47 " - args: depends on module\n"); 48 } 49 50 static int do_rockchip_test(cmd_tbl_t *cmdtp, int flag, 51 int argc, char * const argv[]) 52 { 53 ulong ms_start = 0, ms = 0, sec = 0; 54 board_module_t *module = NULL; 55 char *module_name = NULL; 56 int index = 0, err = 0; 57 bool found = false; 58 59 if (argc >= 2) { 60 module_name = argv[1]; 61 } else { 62 help(); 63 return 0; 64 } 65 66 if (!module_name) 67 return 0; 68 69 70 for (index = 0; index < ARRAY_SIZE(g_board_modules); index++) { 71 module = &g_board_modules[index]; 72 if (module && !strcmp(module->name, module_name)) { 73 found = true; 74 75 printf("***********************************************************\n"); 76 printf("Rockchip Board Module [%s] Test start.\n", module_name); 77 printf("***********************************************************\n"); 78 79 ms_start = get_timer(0); 80 81 err = module->test(argc, argv); 82 83 ms = get_timer(ms_start); 84 if (ms >= 1000) { 85 sec = ms / 1000; 86 ms = ms % 1000; 87 } 88 89 printf("-----------------------------------------------------------\n"); 90 printf("Rockchip Board Module [%s] Test end <%s>.. Total: %lu.%lus\n", 91 module->name, err ? "FAILED" : "PASS", sec, ms); 92 printf("-----------------------------------------------------------\n\n\n"); 93 } 94 } 95 96 if (!found) 97 printf("Rockchip Board Module [%s] is not support !\n", 98 module_name); 99 100 return 0; 101 } 102 103 U_BOOT_CMD( 104 rktest, 10, 0, do_rockchip_test, 105 "Rockchip Board Module Test", 106 "" 107 ); 108