diff options
author | Masahiro Yamada <yamada.masahiro@socionext.com> | 2015-07-25 12:52:38 (GMT) |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2015-08-06 13:44:29 (GMT) |
commit | 40b6f2d020ca8074ed38a1b6bfa170aead1a170e (patch) | |
tree | b61bf406f3a446982869d10aa7fdd6fb82e0f934 /drivers | |
parent | e2282d70763ddf06f9b02007445729c841ef4083 (diff) | |
download | u-boot-fsl-qoriq-40b6f2d020ca8074ed38a1b6bfa170aead1a170e.tar.xz |
devres: add debug command to dump device resources
This new command can dump all device resources associated to
each device. The fields in every line shows:
- The address of the resource
- The size of the resource
- The name of the release function
- The stage in which the resource has been acquired (BIND/PROBE)
Currently, there is no driver using devres, but if such drivers are
implemented, the output of this command should look like this:
=> dm devres
- root_driver
- soc
- extbus
- serial@54006800
bfb541e8 (8 byte) devm_kmalloc_release BIND
bfb54440 (4 byte) devm_kmalloc_release PROBE
bfb54460 (4 byte) devm_kmalloc_release PROBE
- serial@54006900
bfb54270 (8 byte) devm_kmalloc_release BIND
- gpio@55000000
- i2c@58780000
bfb5bce8 (12 byte) devm_kmalloc_release PROBE
bfb5bd10 (4 byte) devm_kmalloc_release PROBE
- eeprom
bfb54418 (12 byte) devm_kmalloc_release BIND
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Acked-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/core/Kconfig | 3 | ||||
-rw-r--r-- | drivers/core/devres.c | 29 |
2 files changed, 31 insertions, 1 deletions
diff --git a/drivers/core/Kconfig b/drivers/core/Kconfig index 8ae0072..c82b564 100644 --- a/drivers/core/Kconfig +++ b/drivers/core/Kconfig @@ -93,10 +93,11 @@ config DEVRES devm_kmalloc() to kmalloc(), etc. config DEBUG_DEVRES - bool "Managed device resources verbose debug messages" + bool "Managed device resources debugging functions" depends on DEVRES help If this option is enabled, devres debug messages are printed. + Also, a function is available to dump a list of device resources. Select this if you are having a problem with devres or want to debug resource management for a managed device. diff --git a/drivers/core/devres.c b/drivers/core/devres.c index f235c1b..605295b 100644 --- a/drivers/core/devres.c +++ b/drivers/core/devres.c @@ -13,6 +13,8 @@ #include <linux/kernel.h> #include <linux/list.h> #include <dm/device.h> +#include <dm/root.h> +#include <dm/util.h> /** * struct devres - Bookkeeping info for managed device resource @@ -195,6 +197,33 @@ void devres_release_all(struct udevice *dev) release_nodes(dev, &dev->devres_head, false); } +#ifdef CONFIG_DEBUG_DEVRES +static void dump_resources(struct udevice *dev, int depth) +{ + struct devres *dr; + struct udevice *child; + + printf("- %s\n", dev->name); + + list_for_each_entry(dr, &dev->devres_head, entry) + printf(" %p (%lu byte) %s %s\n", dr, + (unsigned long)dr->size, dr->name, + dr->probe ? "PROBE" : "BIND"); + + list_for_each_entry(child, &dev->child_head, sibling_node) + dump_resources(child, depth + 1); +} + +void dm_dump_devres(void) +{ + struct udevice *root; + + root = dm_root(); + if (root) + dump_resources(root, 0); +} +#endif + /* * Managed kmalloc/kfree */ |