iotrace.c 2.1 KB

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