dm.c 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * Copyright (c) 2013 Google, Inc
  4. *
  5. * (C) Copyright 2012
  6. * Marek Vasut <marex@denx.de>
  7. */
  8. #include <common.h>
  9. #include <command.h>
  10. #include <dm.h>
  11. #include <malloc.h>
  12. #include <mapmem.h>
  13. #include <errno.h>
  14. #include <asm/io.h>
  15. #include <dm/root.h>
  16. #include <dm/util.h>
  17. static int do_dm_dump_all(cmd_tbl_t *cmdtp, int flag, int argc,
  18. char * const argv[])
  19. {
  20. dm_dump_all();
  21. return 0;
  22. }
  23. static int do_dm_dump_uclass(cmd_tbl_t *cmdtp, int flag, int argc,
  24. char * const argv[])
  25. {
  26. dm_dump_uclass();
  27. return 0;
  28. }
  29. static int do_dm_dump_devres(cmd_tbl_t *cmdtp, int flag, int argc,
  30. char * const argv[])
  31. {
  32. dm_dump_devres();
  33. return 0;
  34. }
  35. static int do_dm_dump_drivers(cmd_tbl_t *cmdtp, int flag, int argc,
  36. char * const argv[])
  37. {
  38. dm_dump_drivers();
  39. return 0;
  40. }
  41. static cmd_tbl_t test_commands[] = {
  42. U_BOOT_CMD_MKENT(tree, 0, 1, do_dm_dump_all, "", ""),
  43. U_BOOT_CMD_MKENT(uclass, 1, 1, do_dm_dump_uclass, "", ""),
  44. U_BOOT_CMD_MKENT(devres, 1, 1, do_dm_dump_devres, "", ""),
  45. U_BOOT_CMD_MKENT(drivers, 1, 1, do_dm_dump_drivers, "", ""),
  46. };
  47. static __maybe_unused void dm_reloc(void)
  48. {
  49. static int relocated;
  50. if (!relocated) {
  51. fixup_cmdtable(test_commands, ARRAY_SIZE(test_commands));
  52. relocated = 1;
  53. }
  54. }
  55. static int do_dm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
  56. {
  57. cmd_tbl_t *test_cmd;
  58. int ret;
  59. #ifdef CONFIG_NEEDS_MANUAL_RELOC
  60. dm_reloc();
  61. #endif
  62. if (argc < 2)
  63. return CMD_RET_USAGE;
  64. test_cmd = find_cmd_tbl(argv[1], test_commands,
  65. ARRAY_SIZE(test_commands));
  66. argc -= 2;
  67. argv += 2;
  68. if (!test_cmd || argc > test_cmd->maxargs)
  69. return CMD_RET_USAGE;
  70. ret = test_cmd->cmd(test_cmd, flag, argc, argv);
  71. return cmd_process_error(test_cmd, ret);
  72. }
  73. U_BOOT_CMD(
  74. dm, 3, 1, do_dm,
  75. "Driver model low level access",
  76. "tree Dump driver model tree ('*' = activated)\n"
  77. "dm uclass Dump list of instances for each uclass\n"
  78. "dm devres Dump list of device resources for each device\n"
  79. "dm drivers Dump list of drivers and their compatible strings"
  80. );