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
9 #include <common.h>
10 #include <command.h>
11 #include <dm.h>
12 #include <malloc.h>
13 #include <mapmem.h>
14 #include <errno.h>
15 #include <asm/io.h>
16 #include <dm/root.h>
17 #include <dm/util.h>
18
do_dm_dump_all(struct cmd_tbl * cmdtp,int flag,int argc,char * const argv[])19 static int do_dm_dump_all(struct cmd_tbl *cmdtp, int flag, int argc,
20 char *const argv[])
21 {
22 dm_dump_all();
23
24 return 0;
25 }
26
do_dm_dump_uclass(struct cmd_tbl * cmdtp,int flag,int argc,char * const argv[])27 static int do_dm_dump_uclass(struct cmd_tbl *cmdtp, int flag, int argc,
28 char *const argv[])
29 {
30 dm_dump_uclass();
31
32 return 0;
33 }
34
do_dm_dump_devres(struct cmd_tbl * cmdtp,int flag,int argc,char * const argv[])35 static int do_dm_dump_devres(struct cmd_tbl *cmdtp, int flag, int argc,
36 char *const argv[])
37 {
38 dm_dump_devres();
39
40 return 0;
41 }
42
do_dm_dump_drivers(struct cmd_tbl * cmdtp,int flag,int argc,char * const argv[])43 static int do_dm_dump_drivers(struct cmd_tbl *cmdtp, int flag, int argc,
44 char *const argv[])
45 {
46 dm_dump_drivers();
47
48 return 0;
49 }
50
do_dm_dump_driver_compat(struct cmd_tbl * cmdtp,int flag,int argc,char * const argv[])51 static int do_dm_dump_driver_compat(struct cmd_tbl *cmdtp, int flag, int argc,
52 char * const argv[])
53 {
54 dm_dump_driver_compat();
55
56 return 0;
57 }
58
do_dm_dump_static_driver_info(struct cmd_tbl * cmdtp,int flag,int argc,char * const argv[])59 static int do_dm_dump_static_driver_info(struct cmd_tbl *cmdtp, int flag, int argc,
60 char * const argv[])
61 {
62 dm_dump_static_driver_info();
63
64 return 0;
65 }
66
67 static struct cmd_tbl test_commands[] = {
68 U_BOOT_CMD_MKENT(tree, 0, 1, do_dm_dump_all, "", ""),
69 U_BOOT_CMD_MKENT(uclass, 1, 1, do_dm_dump_uclass, "", ""),
70 U_BOOT_CMD_MKENT(devres, 1, 1, do_dm_dump_devres, "", ""),
71 U_BOOT_CMD_MKENT(drivers, 1, 1, do_dm_dump_drivers, "", ""),
72 U_BOOT_CMD_MKENT(compat, 1, 1, do_dm_dump_driver_compat, "", ""),
73 U_BOOT_CMD_MKENT(static, 1, 1, do_dm_dump_static_driver_info, "", ""),
74 };
75
dm_reloc(void)76 static __maybe_unused void dm_reloc(void)
77 {
78 static int relocated;
79
80 if (!relocated) {
81 fixup_cmdtable(test_commands, ARRAY_SIZE(test_commands));
82 relocated = 1;
83 }
84 }
85
do_dm(struct cmd_tbl * cmdtp,int flag,int argc,char * const argv[])86 static int do_dm(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
87 {
88 struct cmd_tbl *test_cmd;
89 int ret;
90
91 #ifdef CONFIG_NEEDS_MANUAL_RELOC
92 dm_reloc();
93 #endif
94
95 if (argc < 2)
96 return CMD_RET_USAGE;
97 test_cmd = find_cmd_tbl(argv[1], test_commands,
98 ARRAY_SIZE(test_commands));
99 argc -= 2;
100 argv += 2;
101 if (!test_cmd || argc > test_cmd->maxargs)
102 return CMD_RET_USAGE;
103
104 ret = test_cmd->cmd(test_cmd, flag, argc, argv);
105
106 return cmd_process_error(test_cmd, ret);
107 }
108
109 U_BOOT_CMD(
110 dm, 3, 1, do_dm,
111 "Driver model low level access",
112 "tree Dump driver model tree ('*' = activated)\n"
113 "dm uclass Dump list of instances for each uclass\n"
114 "dm devres Dump list of device resources for each device\n"
115 "dm drivers Dump list of drivers with uclass and instances\n"
116 "dm compat Dump list of drivers with compatibility strings\n"
117 "dm static Dump list of drivers with static platform data"
118 );
119