
Hi Masahiro,
On 23 July 2015 at 00:17, Masahiro Yamada yamada.masahiro@socionext.com wrote:
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)
The output looks like this:
=> devres
- root_driver
- soc
- extbus
- serial@54006800 0xbfb541e8 (8 byte) devm_kmalloc_release BIND 0xbfb54440 (4 byte) devm_kmalloc_release PROBE 0xbfb54460 (4 byte) devm_kmalloc_release PROBE
- serial@54006900 0xbfb54270 (8 byte) devm_kmalloc_release BIND
- gpio@55000000
- i2c@58780000 0xbfb5bce8 (12 byte) devm_kmalloc_release PROBE 0xbfb5bd10 (4 byte) devm_kmalloc_release PROBE
- eeprom 0xbfb54418 (12 byte) devm_kmalloc_release BIND
Did I miss the bit where you make device.c call devm functions for its allocation? Otherwise how will you get this output?
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com
Changes in v3: None Changes in v2:
- add static to dump_resources()
drivers/core/Kconfig | 6 ++++++ drivers/core/devres.c | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+)
diff --git a/drivers/core/Kconfig b/drivers/core/Kconfig index e1d8a6a..7dca35c 100644 --- a/drivers/core/Kconfig +++ b/drivers/core/Kconfig @@ -81,3 +81,9 @@ config DEBUG_DEVRES debug resource management for a managed device.
If you are unsure about this, Say N here.
+config CMD_DEVRES
bool "Managed device resources dump command"
depends on DEBUG_DEVRES
help
This command displays all resources allociated to each device.
diff --git a/drivers/core/devres.c b/drivers/core/devres.c index ae0c191..77f39a5 100644 --- a/drivers/core/devres.c +++ b/drivers/core/devres.c @@ -13,6 +13,7 @@ #include <linux/kernel.h> #include <linux/list.h> #include <dm/device.h> +#include <dm/root.h>
struct devres { struct list_head entry; @@ -186,6 +187,42 @@ void devres_release_all(struct udevice *dev) release_nodes(dev, &dev->devres_head, false); }
+#ifdef CONFIG_CMD_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(" 0x%p (%lu byte) %s %s\n", dr,
We shouldn't need the 0x, everything is hex in U-Boot
(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);
+}
+static int do_devres(cmd_tbl_t *cmdtp, int flag, int argc,
char * const argv[])
+{
struct udevice *root;
root = dm_root();
if (root)
dump_resources(root, 0);
return 0;
+}
+U_BOOT_CMD(
devres, 1, 1, do_devres,
"show device resources",
""
+);
I think this should be 'dm devres'
Regards, Simon