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