]>
git.ipfire.org Git - people/ms/u-boot.git/blob - test/dm/cmd_dm.c
2 * Copyright (c) 2013 Google, Inc
5 * Marek Vasut <marex@denx.de>
7 * SPDX-License-Identifier: GPL-2.0+
17 #include <dm/uclass-internal.h>
20 * dm_display_line() - Display information about a single device
22 * Displays a single line of information with an option prefix
24 * @dev: Device to display
25 * @buf: Prefix to display at the start of the line
27 static void dm_display_line(struct udevice
*dev
, char *buf
)
29 printf("%s- %c %s @ %08lx", buf
,
30 dev
->flags
& DM_FLAG_ACTIVATED
? '*' : ' ',
31 dev
->name
, (ulong
)map_to_sysmem(dev
));
32 if (dev
->req_seq
!= -1)
33 printf(", %d", dev
->req_seq
);
37 static int display_succ(struct udevice
*in
, char *buf
)
42 struct udevice
*pos
, *n
, *prev
= NULL
;
44 dm_display_line(in
, buf
);
46 if (list_empty(&in
->child_head
))
50 strncpy(local
, buf
, sizeof(local
));
51 snprintf(local
+ len
, 2, "|");
52 if (len
&& local
[len
- 1] == '`')
55 list_for_each_entry_safe(pos
, n
, &in
->child_head
, sibling_node
) {
57 display_succ(prev
, local
);
61 snprintf(local
+ len
, 2, "`");
62 display_succ(prev
, local
);
67 static int dm_dump(struct udevice
*dev
)
71 return display_succ(dev
, "");
74 static int do_dm_dump_all(cmd_tbl_t
*cmdtp
, int flag
, int argc
,
80 printf("ROOT %08lx\n", (ulong
)map_to_sysmem(root
));
84 static int do_dm_dump_uclass(cmd_tbl_t
*cmdtp
, int flag
, int argc
,
91 for (id
= 0; id
< UCLASS_COUNT
; id
++) {
94 ret
= uclass_get(id
, &uc
);
98 printf("uclass %d: %s\n", id
, uc
->uc_drv
->name
);
99 if (list_empty(&uc
->dev_head
))
101 list_for_each_entry(dev
, &uc
->dev_head
, uclass_node
) {
102 dm_display_line(dev
, "");
110 #ifdef CONFIG_DM_TEST
111 static int do_dm_test(cmd_tbl_t
*cmdtp
, int flag
, int argc
,
114 return dm_test_main();
116 #define TEST_HELP "\ndm test Run tests"
121 static cmd_tbl_t test_commands
[] = {
122 U_BOOT_CMD_MKENT(tree
, 0, 1, do_dm_dump_all
, "", ""),
123 U_BOOT_CMD_MKENT(uclass
, 1, 1, do_dm_dump_uclass
, "", ""),
124 #ifdef CONFIG_DM_TEST
125 U_BOOT_CMD_MKENT(test
, 1, 1, do_dm_test
, "", ""),
129 static int do_dm(cmd_tbl_t
*cmdtp
, int flag
, int argc
, char * const argv
[])
135 return CMD_RET_USAGE
;
136 test_cmd
= find_cmd_tbl(argv
[1], test_commands
,
137 ARRAY_SIZE(test_commands
));
140 if (!test_cmd
|| argc
> test_cmd
->maxargs
)
141 return CMD_RET_USAGE
;
143 ret
= test_cmd
->cmd(test_cmd
, flag
, argc
, argv
);
145 return cmd_process_error(test_cmd
, ret
);
150 "Driver model low level access",
151 "tree Dump driver model tree ('*' = activated)\n"
152 "dm uclass Dump list of instances for each uclass"