
Hi Simon,
2015-07-24 8:21 GMT+09:00 Simon Glass sjg@chromium.org:
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?
No, you did not miss anything.
This output came from v1, where I replaced the manual malloc&free in the DM core with devm_kmalloc().
In v3, I dropped the patches that touched the DM core, so there exists no driver using devres funcs. Nothing should be displayed.
I updated the git-description to excuse: The output should look like this (if you use devres funcs in your drivers)
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
OK, dropped in v4.
(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'
Done.
In v4, this dump command is called from test/dm/cmd_dm.c, like you did for "dm tree" and "dm uclass".