xref: /rk3399_rockchip-uboot/cmd/iotrace.c (revision 2e192b245ed36a63bab0ef576999a95e23f60ecd)
1*2e192b24SSimon Glass /*
2*2e192b24SSimon Glass  * Copyright (c) 2014 Google, Inc
3*2e192b24SSimon Glass  *
4*2e192b24SSimon Glass  * SPDX-License-Identifier:	GPL-2.0+
5*2e192b24SSimon Glass  */
6*2e192b24SSimon Glass 
7*2e192b24SSimon Glass #include <common.h>
8*2e192b24SSimon Glass #include <command.h>
9*2e192b24SSimon Glass #include <iotrace.h>
10*2e192b24SSimon Glass 
do_print_stats(void)11*2e192b24SSimon Glass static void do_print_stats(void)
12*2e192b24SSimon Glass {
13*2e192b24SSimon Glass 	ulong start, size, offset, count;
14*2e192b24SSimon Glass 
15*2e192b24SSimon Glass 	printf("iotrace is %sabled\n", iotrace_get_enabled() ? "en" : "dis");
16*2e192b24SSimon Glass 	iotrace_get_buffer(&start, &size, &offset, &count);
17*2e192b24SSimon Glass 	printf("Start:  %08lx\n", start);
18*2e192b24SSimon Glass 	printf("Size:   %08lx\n", size);
19*2e192b24SSimon Glass 	printf("Offset: %08lx\n", offset);
20*2e192b24SSimon Glass 	printf("Output: %08lx\n", start + offset);
21*2e192b24SSimon Glass 	printf("Count:  %08lx\n", count);
22*2e192b24SSimon Glass 	printf("CRC32:  %08lx\n", (ulong)iotrace_get_checksum());
23*2e192b24SSimon Glass }
24*2e192b24SSimon Glass 
do_set_buffer(int argc,char * const argv[])25*2e192b24SSimon Glass static int do_set_buffer(int argc, char * const argv[])
26*2e192b24SSimon Glass {
27*2e192b24SSimon Glass 	ulong addr = 0, size = 0;
28*2e192b24SSimon Glass 
29*2e192b24SSimon Glass 	if (argc == 2) {
30*2e192b24SSimon Glass 		addr = simple_strtoul(*argv++, NULL, 16);
31*2e192b24SSimon Glass 		size = simple_strtoul(*argv++, NULL, 16);
32*2e192b24SSimon Glass 	} else if (argc != 0) {
33*2e192b24SSimon Glass 		return CMD_RET_USAGE;
34*2e192b24SSimon Glass 	}
35*2e192b24SSimon Glass 
36*2e192b24SSimon Glass 	iotrace_set_buffer(addr, size);
37*2e192b24SSimon Glass 
38*2e192b24SSimon Glass 	return 0;
39*2e192b24SSimon Glass }
40*2e192b24SSimon Glass 
do_iotrace(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])41*2e192b24SSimon Glass int do_iotrace(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
42*2e192b24SSimon Glass {
43*2e192b24SSimon Glass 	const char *cmd = argc < 2 ? NULL : argv[1];
44*2e192b24SSimon Glass 
45*2e192b24SSimon Glass 	if (!cmd)
46*2e192b24SSimon Glass 		return cmd_usage(cmdtp);
47*2e192b24SSimon Glass 	switch (*cmd) {
48*2e192b24SSimon Glass 	case 'b':
49*2e192b24SSimon Glass 		return do_set_buffer(argc - 2, argv + 2);
50*2e192b24SSimon Glass 	case 'p':
51*2e192b24SSimon Glass 		iotrace_set_enabled(0);
52*2e192b24SSimon Glass 		break;
53*2e192b24SSimon Glass 	case 'r':
54*2e192b24SSimon Glass 		iotrace_set_enabled(1);
55*2e192b24SSimon Glass 		break;
56*2e192b24SSimon Glass 	case 's':
57*2e192b24SSimon Glass 		do_print_stats();
58*2e192b24SSimon Glass 		break;
59*2e192b24SSimon Glass 	default:
60*2e192b24SSimon Glass 		return CMD_RET_USAGE;
61*2e192b24SSimon Glass 	}
62*2e192b24SSimon Glass 
63*2e192b24SSimon Glass 	return 0;
64*2e192b24SSimon Glass }
65*2e192b24SSimon Glass 
66*2e192b24SSimon Glass U_BOOT_CMD(
67*2e192b24SSimon Glass 	iotrace,	4,	1,	do_iotrace,
68*2e192b24SSimon Glass 	"iotrace utility commands",
69*2e192b24SSimon Glass 	"stats                        - display iotrace stats\n"
70*2e192b24SSimon Glass 	"iotrace buffer <address> <size>      - set iotrace buffer\n"
71*2e192b24SSimon Glass 	"iotrace pause                        - pause tracing\n"
72*2e192b24SSimon Glass 	"iotrace resume                       - resume tracing"
73*2e192b24SSimon Glass );
74