diff options
author | Simon Glass <sjg@chromium.org> | 2015-06-23 15:38:35 -0600 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2015-07-21 17:39:22 -0600 |
commit | 304fbef156b00d8d7005c8b156e64a6632d45008 (patch) | |
tree | b5de5bdd89b0ec45b3b4ed7cd175423fb0014b79 /test | |
parent | da229e4e57b7d028cf01d52ac70832a90453e289 (diff) |
dm: Move the tree/uclass dump code into its own file
In SPL it is sometimes useful to be able to obtain a dump of the current
driver model state. Since commands are not available, provide a way to
directly call the functions to output this information.
Adjust the existing commands to use these functions.
Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'test')
-rw-r--r-- | test/dm/cmd_dm.c | 82 |
1 files changed, 3 insertions, 79 deletions
diff --git a/test/dm/cmd_dm.c b/test/dm/cmd_dm.c index 5bb2a99c8f0..5c501ec2541 100644 --- a/test/dm/cmd_dm.c +++ b/test/dm/cmd_dm.c @@ -14,96 +14,20 @@ #include <errno.h> #include <asm/io.h> #include <dm/root.h> -#include <dm/uclass-internal.h> - -static void show_devices(struct udevice *dev, int depth, int last_flag) -{ - int i, is_last; - struct udevice *child; - char class_name[12]; - - /* print the first 11 characters to not break the tree-format. */ - strlcpy(class_name, dev->uclass->uc_drv->name, sizeof(class_name)); - printf(" %-11s [ %c ] ", class_name, - dev->flags & DM_FLAG_ACTIVATED ? '+' : ' '); - - for (i = depth; i >= 0; i--) { - is_last = (last_flag >> i) & 1; - if (i) { - if (is_last) - printf(" "); - else - printf("| "); - } else { - if (is_last) - printf("`-- "); - else - printf("|-- "); - } - } - - printf("%s\n", dev->name); - - list_for_each_entry(child, &dev->child_head, sibling_node) { - is_last = list_is_last(&child->sibling_node, &dev->child_head); - show_devices(child, depth + 1, (last_flag << 1) | is_last); - } -} +#include <dm/util.h> static int do_dm_dump_all(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { - struct udevice *root; - - root = dm_root(); - if (root) { - printf(" Class Probed Name\n"); - printf("----------------------------------------\n"); - show_devices(root, -1, 0); - } + dm_dump_all(); return 0; } -/** - * dm_display_line() - Display information about a single device - * - * Displays a single line of information with an option prefix - * - * @dev: Device to display - */ -static void dm_display_line(struct udevice *dev) -{ - printf("- %c %s @ %08lx", - dev->flags & DM_FLAG_ACTIVATED ? '*' : ' ', - dev->name, (ulong)map_to_sysmem(dev)); - if (dev->seq != -1 || dev->req_seq != -1) - printf(", seq %d, (req %d)", dev->seq, dev->req_seq); - puts("\n"); -} - static int do_dm_dump_uclass(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { - struct uclass *uc; - int ret; - int id; - - for (id = 0; id < UCLASS_COUNT; id++) { - struct udevice *dev; - - ret = uclass_get(id, &uc); - if (ret) - continue; - - printf("uclass %d: %s\n", id, uc->uc_drv->name); - if (list_empty(&uc->dev_head)) - continue; - list_for_each_entry(dev, &uc->dev_head, uclass_node) { - dm_display_line(dev); - } - puts("\n"); - } + dm_dump_uclass(); return 0; } |