Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | // SPDX-License-Identifier: GPL-2.0+ /* * Copyright (c) 2015 Google, Inc */ #include <common.h> #include <dm.h> #include <mapmem.h> #include <dm/root.h> #include <dm/util.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; /* print the first 20 characters to not break the tree-format. */ printf(" %-10.10s %3d [ %c ] %-20.20s ", dev->uclass->uc_drv->name, dev_get_uclass_index(dev, NULL), dev->flags & DM_FLAG_ACTIVATED ? '+' : ' ', dev->driver->name); 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); } } void dm_dump_all(void) { struct udevice *root; root = dm_root(); if (root) { printf(" Class Index Probed Driver Name\n"); printf("-----------------------------------------------------------\n"); show_devices(root, -1, 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, int index) { printf("%-3i %c %s @ %08lx", index, 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"); } void dm_dump_uclass(void) { struct uclass *uc; int ret; int id; for (id = 0; id < UCLASS_COUNT; id++) { struct udevice *dev; int i = 0; 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; uclass_foreach_dev(dev, uc) { dm_display_line(dev, i); i++; } puts("\n"); } } void dm_dump_drivers(void) { struct driver *d = ll_entry_start(struct driver, driver); const int n_ents = ll_entry_count(struct driver, driver); struct driver *entry; const struct udevice_id *match; puts("Driver Compatible\n"); puts("--------------------------------\n"); for (entry = d; entry < d + n_ents; entry++) { match = entry->of_match; printf("%-20.20s", entry->name); if (match) { printf(" %s", match->compatible); match++; } printf("\n"); for (; match && match->compatible; match++) printf("%-20.20s %s\n", "", match->compatible); } } |