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

Masahiro Yamada yamada.masahiro at socionext.com
Sat Jul 25 14:05:20 CEST 2015


Hi Simon,


2015-07-24 8:21 GMT+09:00 Simon Glass <sjg at chromium.org>:
> 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?


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 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

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


More information about the U-Boot mailing list