Hi Simon,
2015-07-24 8:21 GMT+09:00 Simon Glass <s...@chromium.org>: > Hi Masahiro, > > On 23 July 2015 at 00:17, Masahiro Yamada <yamada.masah...@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.masah...@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". -- Best Regards Masahiro Yamada _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot