diff mbox

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

Message ID 1437828758-26412-6-git-send-email-yamada.masahiro@socionext.com
State Accepted
Delegated to: Simon Glass
Headers show

Commit Message

Masahiro Yamada July 25, 2015, 12:52 p.m. UTC
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)

Currently, there is no driver using devres, but if such drivers are
implemented, the output of this command should look like this:

=> dm devres
- root_driver
- soc
- extbus
- serial@54006800
    bfb541e8 (8 byte) devm_kmalloc_release  BIND
    bfb54440 (4 byte) devm_kmalloc_release  PROBE
    bfb54460 (4 byte) devm_kmalloc_release  PROBE
- serial@54006900
    bfb54270 (8 byte) devm_kmalloc_release  BIND
- gpio@55000000
- i2c@58780000
    bfb5bce8 (12 byte) devm_kmalloc_release  PROBE
    bfb5bd10 (4 byte) devm_kmalloc_release  PROBE
- eeprom
    bfb54418 (12 byte) devm_kmalloc_release  BIND

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
---

Changes in v4:
  - Drop "0x" from the devres address in the dump commend
  - Change the command name "devres" to "dm devres"
  - Update git-description.

Changes in v3: None
Changes in v2:
  - add static to dump_resources()

 drivers/core/Kconfig  |  3 ++-
 drivers/core/devres.c | 29 +++++++++++++++++++++++++++++
 include/dm/util.h     |  9 +++++++++
 test/dm/cmd_dm.c      | 12 +++++++++++-
 4 files changed, 51 insertions(+), 2 deletions(-)

Comments

Simon Glass July 28, 2015, 6:07 p.m. UTC | #1
On 25 July 2015 at 06:52, 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)
>
> Currently, there is no driver using devres, but if such drivers are
> implemented, the output of this command should look like this:
>
> => dm devres
> - root_driver
> - soc
> - extbus
> - serial@54006800
>     bfb541e8 (8 byte) devm_kmalloc_release  BIND
>     bfb54440 (4 byte) devm_kmalloc_release  PROBE
>     bfb54460 (4 byte) devm_kmalloc_release  PROBE
> - serial@54006900
>     bfb54270 (8 byte) devm_kmalloc_release  BIND
> - gpio@55000000
> - i2c@58780000
>     bfb5bce8 (12 byte) devm_kmalloc_release  PROBE
>     bfb5bd10 (4 byte) devm_kmalloc_release  PROBE
> - eeprom
>     bfb54418 (12 byte) devm_kmalloc_release  BIND
>
> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
> ---
>
> Changes in v4:
>   - Drop "0x" from the devres address in the dump commend
>   - Change the command name "devres" to "dm devres"
>   - Update git-description.
>
> Changes in v3: None
> Changes in v2:
>   - add static to dump_resources()
>
>  drivers/core/Kconfig  |  3 ++-
>  drivers/core/devres.c | 29 +++++++++++++++++++++++++++++
>  include/dm/util.h     |  9 +++++++++
>  test/dm/cmd_dm.c      | 12 +++++++++++-
>  4 files changed, 51 insertions(+), 2 deletions(-)

Acked-by: Simon Glass <sjg@chromium.org>
Simon Glass July 29, 2015, 3:30 a.m. UTC | #2
On 28 July 2015 at 12:07, Simon Glass <sjg@chromium.org> wrote:
> On 25 July 2015 at 06:52, 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)
>>
>> Currently, there is no driver using devres, but if such drivers are
>> implemented, the output of this command should look like this:
>>
>> => dm devres
>> - root_driver
>> - soc
>> - extbus
>> - serial@54006800
>>     bfb541e8 (8 byte) devm_kmalloc_release  BIND
>>     bfb54440 (4 byte) devm_kmalloc_release  PROBE
>>     bfb54460 (4 byte) devm_kmalloc_release  PROBE
>> - serial@54006900
>>     bfb54270 (8 byte) devm_kmalloc_release  BIND
>> - gpio@55000000
>> - i2c@58780000
>>     bfb5bce8 (12 byte) devm_kmalloc_release  PROBE
>>     bfb5bd10 (4 byte) devm_kmalloc_release  PROBE
>> - eeprom
>>     bfb54418 (12 byte) devm_kmalloc_release  BIND
>>
>> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
>> ---
>>
>> Changes in v4:
>>   - Drop "0x" from the devres address in the dump commend
>>   - Change the command name "devres" to "dm devres"
>>   - Update git-description.
>>
>> Changes in v3: None
>> Changes in v2:
>>   - add static to dump_resources()
>>
>>  drivers/core/Kconfig  |  3 ++-
>>  drivers/core/devres.c | 29 +++++++++++++++++++++++++++++
>>  include/dm/util.h     |  9 +++++++++
>>  test/dm/cmd_dm.c      | 12 +++++++++++-
>>  4 files changed, 51 insertions(+), 2 deletions(-)
>
> Acked-by: Simon Glass <sjg@chromium.org>

Applied to u-boot-dm, thanks!
diff mbox

Patch

diff --git a/drivers/core/Kconfig b/drivers/core/Kconfig
index db2ec1c..c153b3f 100644
--- a/drivers/core/Kconfig
+++ b/drivers/core/Kconfig
@@ -74,10 +74,11 @@  config DEVRES
 	  devm_kmalloc() to kmalloc(), etc.
 
 config DEBUG_DEVRES
-	bool "Managed device resources verbose debug messages"
+	bool "Managed device resources debugging functions"
 	depends on DEVRES
 	help
 	  If this option is enabled, devres debug messages are printed.
+	  Also, a function is available to dump a list of device resources.
 	  Select this if you are having a problem with devres or want to
 	  debug resource management for a managed device.
 
diff --git a/drivers/core/devres.c b/drivers/core/devres.c
index f235c1b..605295b 100644
--- a/drivers/core/devres.c
+++ b/drivers/core/devres.c
@@ -13,6 +13,8 @@ 
 #include <linux/kernel.h>
 #include <linux/list.h>
 #include <dm/device.h>
+#include <dm/root.h>
+#include <dm/util.h>
 
 /**
  * struct devres - Bookkeeping info for managed device resource
@@ -195,6 +197,33 @@  void devres_release_all(struct udevice *dev)
 	release_nodes(dev, &dev->devres_head, false);
 }
 
+#ifdef CONFIG_DEBUG_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("    %p (%lu byte) %s  %s\n", dr,
+		       (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);
+}
+
+void dm_dump_devres(void)
+{
+	struct udevice *root;
+
+	root = dm_root();
+	if (root)
+		dump_resources(root, 0);
+}
+#endif
+
 /*
  * Managed kmalloc/kfree
  */
diff --git a/include/dm/util.h b/include/dm/util.h
index 7dbed67..15daa3d 100644
--- a/include/dm/util.h
+++ b/include/dm/util.h
@@ -39,4 +39,13 @@  void dm_dump_all(void);
 /* Dump out a list of uclasses and their devices */
 void dm_dump_uclass(void);
 
+#ifdef CONFIG_DEBUG_DEVRES
+/* Dump out a list of device resources */
+void dm_dump_devres(void);
+#else
+static inline void dm_dump_devres(void)
+{
+}
+#endif
+
 #endif
diff --git a/test/dm/cmd_dm.c b/test/dm/cmd_dm.c
index 5c501ec..caff49a 100644
--- a/test/dm/cmd_dm.c
+++ b/test/dm/cmd_dm.c
@@ -32,9 +32,18 @@  static int do_dm_dump_uclass(cmd_tbl_t *cmdtp, int flag, int argc,
 	return 0;
 }
 
+static int do_dm_dump_devres(cmd_tbl_t *cmdtp, int flag, int argc,
+			     char * const argv[])
+{
+	dm_dump_devres();
+
+	return 0;
+}
+
 static cmd_tbl_t test_commands[] = {
 	U_BOOT_CMD_MKENT(tree, 0, 1, do_dm_dump_all, "", ""),
 	U_BOOT_CMD_MKENT(uclass, 1, 1, do_dm_dump_uclass, "", ""),
+	U_BOOT_CMD_MKENT(devres, 1, 1, do_dm_dump_devres, "", ""),
 };
 
 static int do_dm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
@@ -60,5 +69,6 @@  U_BOOT_CMD(
 	dm,	3,	1,	do_dm,
 	"Driver model low level access",
 	"tree         Dump driver model tree ('*' = activated)\n"
-	"dm uclass        Dump list of instances for each uclass"
+	"dm uclass        Dump list of instances for each uclass\n"
+	"dm devres        Dump list of device resources for each device"
 );