[U-Boot] [PATCH v3 5/5] devres: add debug command to dump device resources

Simon Glass sjg at chromium.org
Fri Jul 24 01:21:06 CEST 2015


Hi Masahiro,

On 23 July 2015 at 00:17, Masahiro Yamada <yamada.masahiro at 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 at 54006800
>     0xbfb541e8 (8 byte) devm_kmalloc_release  BIND
>     0xbfb54440 (4 byte) devm_kmalloc_release  PROBE
>     0xbfb54460 (4 byte) devm_kmalloc_release  PROBE
> - serial at 54006900
>     0xbfb54270 (8 byte) devm_kmalloc_release  BIND
> - gpio at 55000000
> - i2c at 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 at 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


More information about the U-Boot mailing list