Skip to content
Snippets Groups Projects
cmd_iotrace.c 1.57 KiB
Newer Older
  • Learn to ignore specific revisions
  • Simon Glass's avatar
    Simon Glass committed
    /*
     * Copyright (c) 2014 Google, Inc
     *
     * SPDX-License-Identifier:	GPL-2.0+
     */
    
    #include <common.h>
    #include <command.h>
    #include <iotrace.h>
    
    static void do_print_stats(void)
    {
    	ulong start, size, offset, count;
    
    	printf("iotrace is %sabled\n", iotrace_get_enabled() ? "en" : "dis");
    	iotrace_get_buffer(&start, &size, &offset, &count);
    	printf("Start:  %08lx\n", start);
    	printf("Size:   %08lx\n", size);
    	printf("Offset: %08lx\n", offset);
    	printf("Output: %08lx\n", start + offset);
    	printf("Count:  %08lx\n", count);
    	printf("CRC32:  %08lx\n", (ulong)iotrace_get_checksum());
    }
    
    static int do_set_buffer(int argc, char * const argv[])
    {
    	ulong addr = 0, size = 0;
    
    	if (argc == 2) {
    		addr = simple_strtoul(*argv++, NULL, 16);
    		size = simple_strtoul(*argv++, NULL, 16);
    	} else if (argc != 0) {
    		return CMD_RET_USAGE;
    	}
    
    	iotrace_set_buffer(addr, size);
    
    	return 0;
    }
    
    int do_iotrace(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
    {
    	const char *cmd = argc < 2 ? NULL : argv[1];
    
    	if (!cmd)
    		return cmd_usage(cmdtp);
    	switch (*cmd) {
    	case 'b':
    		return do_set_buffer(argc - 2, argv + 2);
    	case 'p':
    		iotrace_set_enabled(0);
    		break;
    	case 'r':
    		iotrace_set_enabled(1);
    		break;
    	case 's':
    		do_print_stats();
    		break;
    	default:
    		return CMD_RET_USAGE;
    	}
    
    	return 0;
    }
    
    U_BOOT_CMD(
    	iotrace,	4,	1,	do_iotrace,
    	"iotrace utility commands",
    	"stats                        - display iotrace stats\n"
    	"iotrace buffer <address> <size>      - set iotrace buffer\n"
    	"iotrace pause                        - pause tracing\n"
    	"iotrace resume                       - resume tracing"
    );