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 char *desc; 14 int (*test)(int argc, char * const argv[]); 15 } board_module_t; 16 17 static int board_rockusb_test(int argc, char * const argv[]) 18 { 19 return run_command_list("rockusb 0 ${devtype} ${devnum}", -1, 0); 20 } 21 22 static int board_fastboot_test(int argc, char * const argv[]) 23 { 24 return run_command_list("fastboot usb 0", -1, 0); 25 } 26 27 static board_module_t g_board_modules[] = { 28 #if defined(CONFIG_IRQ) 29 { 30 .name = "timer", 31 .desc = "test timer and interrupt", 32 .test = board_timer_test 33 }, 34 #endif 35 { 36 .name = "brom", 37 .desc = "enter bootrom download mode", 38 .test = board_brom_dnl_test 39 }, 40 { 41 .name = "rockusb", 42 .desc = "enter rockusb download mode", 43 .test = board_rockusb_test 44 }, 45 { 46 .name = "fastboot", 47 .desc = "enter fastboot download mode", 48 .test = board_fastboot_test 49 }, 50 #if defined(CONFIG_DM_KEY) 51 { 52 .name = "key", 53 .desc = "test board keys", 54 .test = board_key_test 55 }, 56 #endif 57 #if defined(CONFIG_MMC) 58 { 59 .name = "emmc", 60 .desc = "test emmc read/write speed", 61 .test = board_emmc_test 62 }, 63 #endif 64 #if defined(CONFIG_RKNAND) 65 { 66 .name = "rknand", 67 .desc = "test rknand read/write speed", 68 .test = board_rknand_test 69 }, 70 #endif 71 72 #if defined(CONFIG_DM_REGULATOR) 73 { 74 .name = "regulator", 75 .desc = "test regulator volatge set and show regulator status", 76 .test = board_regulator_test 77 }, 78 #endif 79 #if defined(CONFIG_GMAC_ROCKCHIP) 80 { 81 .name = "eth", 82 .desc = "test ethernet", 83 .test = board_eth_test 84 }, 85 #endif 86 #if defined(CONFIG_RK_IR) 87 { 88 .name = "ir", 89 .desc = "test pwm ir remoter for box product", 90 .test = board_ir_test 91 }, 92 #endif 93 #if defined(CONFIG_ROCKCHIP_VENDOR_PARTITION) 94 { 95 .name = "vendor", 96 .desc = "test vendor storage partition read/write", 97 .test = board_vendor_storage_test 98 }, 99 #endif 100 }; 101 102 static void help(void) 103 { 104 int i; 105 106 printf("Command: rktest [module] [args...]\n" 107 " - module: timer|key|emmc|rknand|regulator|eth|ir|brom|rockusb|fastboot|vendor\n" 108 " - args: depends on module, try 'rktest [module]' for test or more help\n\n"); 109 110 printf(" - Enabled modules:\n"); 111 for (i = 0; i < ARRAY_SIZE(g_board_modules); i++) 112 printf(" - %10s%s %s\n", 113 g_board_modules[i].name, 114 g_board_modules[i].desc ? ":" : "", 115 g_board_modules[i].desc ? g_board_modules[i].desc : ""); 116 } 117 118 static int do_rockchip_test(cmd_tbl_t *cmdtp, int flag, 119 int argc, char * const argv[]) 120 { 121 ulong ms_start = 0, ms = 0, sec = 0; 122 board_module_t *module = NULL; 123 char *module_name = NULL; 124 int index = 0, err = 0; 125 bool found = false; 126 127 if (argc >= 2) { 128 module_name = argv[1]; 129 } else { 130 help(); 131 return 0; 132 } 133 134 if (!module_name) 135 return 0; 136 137 for (index = 0; index < ARRAY_SIZE(g_board_modules); index++) { 138 module = &g_board_modules[index]; 139 if (module && !strcmp(module->name, module_name)) { 140 found = true; 141 142 printf("***********************************************************\n"); 143 printf("Rockchip Board Module [%s] Test start.\n", module_name); 144 printf("***********************************************************\n"); 145 146 ms_start = get_timer(0); 147 148 err = module->test(argc, argv); 149 150 ms = get_timer(ms_start); 151 if (ms >= 1000) { 152 sec = ms / 1000; 153 ms = ms % 1000; 154 } 155 156 printf("-----------------------------------------------------------\n"); 157 printf("Rockchip Board Module [%s] Test end <%s>.. Total: %lu.%lus\n", 158 module->name, err ? "FAILED" : "PASS", sec, ms); 159 printf("-----------------------------------------------------------\n\n\n"); 160 } 161 } 162 163 if (!found) 164 printf("Rockchip Board Module [%s] is not support !\n", 165 module_name); 166 167 return 0; 168 } 169 170 U_BOOT_CMD( 171 rktest, 10, 0, do_rockchip_test, 172 "Rockchip Board Module Test", 173 "" 174 ); 175