[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