diff mbox series

[v2] cmd: Add command to dump drivers and compatible strings

Message ID ec6a8c13-291a-4164-6c7f-ab56290f15cd@gmail.com
State Superseded
Headers show
Series [v2] cmd: Add command to dump drivers and compatible strings | expand

Commit Message

Sean Anderson Feb. 3, 2020, 8:51 p.m. UTC
This adds a subcommand to dm to dump out what drivers are installed, and their
compatible strings. I have found this useful in ensuring that I have the correct
drivers compiled, and that I have put in the correct compatible strings.

Signed-off-by: Sean Anderson <seanga2 at gmail.com>
---
  Changes for v2:
  - Check if entry->of_match is NULL before accessing it

 cmd/dm.c            | 12 +++++++++++-
 drivers/core/dump.c | 20 ++++++++++++++++++++
 include/dm/util.h   |  3 +++
 3 files changed, 34 insertions(+), 1 deletion(-)

Comments

Bin Meng Feb. 4, 2020, 9:54 a.m. UTC | #1
On Tue, Feb 4, 2020 at 4:51 AM Sean Anderson <seanga2 at gmail.com> wrote:
>
> This adds a subcommand to dm to dump out what drivers are installed, and their
> compatible strings. I have found this useful in ensuring that I have the correct
> drivers compiled, and that I have put in the correct compatible strings.
>
> Signed-off-by: Sean Anderson <seanga2 at gmail.com>
> ---
>   Changes for v2:
>   - Check if entry->of_match is NULL before accessing it
>
>  cmd/dm.c            | 12 +++++++++++-
>  drivers/core/dump.c | 20 ++++++++++++++++++++
>  include/dm/util.h   |  3 +++
>  3 files changed, 34 insertions(+), 1 deletion(-)
>

Reviewed-by: Bin Meng <bmeng.cn at gmail.com>
Tested-by: Bin Meng <bmeng.cn at gmail.com>
Simon Glass Feb. 5, 2020, 5:59 p.m. UTC | #2
Hi Sean,

On Mon, 3 Feb 2020 at 13:51, Sean Anderson <seanga2 at gmail.com> wrote:
>
> This adds a subcommand to dm to dump out what drivers are installed, and their
> compatible strings. I have found this useful in ensuring that I have the correct
> drivers compiled, and that I have put in the correct compatible strings.
>
> Signed-off-by: Sean Anderson <seanga2 at gmail.com>
> ---
>   Changes for v2:
>   - Check if entry->of_match is NULL before accessing it
>
>  cmd/dm.c            | 12 +++++++++++-
>  drivers/core/dump.c | 20 ++++++++++++++++++++
>  include/dm/util.h   |  3 +++
>  3 files changed, 34 insertions(+), 1 deletion(-)

Looks good. Please can you add a test?

If it helps u-boot-dm/.testing has 'test: Add a way to check each line
of console output' so you can write it in C.

Regards,
Simon
diff mbox series

Patch

diff --git a/cmd/dm.c b/cmd/dm.c
index 7b271db0bb..7a90685f8b 100644
--- a/cmd/dm.c
+++ b/cmd/dm.c
@@ -40,10 +40,19 @@  static int do_dm_dump_devres(cmd_tbl_t *cmdtp, int flag, int argc,
 	return 0;
 }
 
+static int do_dm_dump_drivers(cmd_tbl_t *cmdtp, int flag, int argc,
+			      char * const argv[])
+{
+	dm_dump_drivers();
+
+	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, "", ""),
+	U_BOOT_CMD_MKENT(drivers, 1, 1, do_dm_dump_drivers, "", ""),
 };
 
 static __maybe_unused void dm_reloc(void)
@@ -84,5 +93,6 @@  U_BOOT_CMD(
 	"Driver model low level access",
 	"tree          Dump driver model tree ('*' = activated)\n"
 	"dm uclass        Dump list of instances for each uclass\n"
-	"dm devres        Dump list of device resources for each device"
+	"dm devres        Dump list of device resources for each device\n"
+	"dm drivers       Dump list of drivers and their compatible strings"
 );
diff --git a/drivers/core/dump.c b/drivers/core/dump.c
index 4704049aee..b5046398d4 100644
--- a/drivers/core/dump.c
+++ b/drivers/core/dump.c
@@ -96,3 +96,23 @@  void dm_dump_uclass(void)
 		puts("\n");
 	}
 }
+
+void dm_dump_drivers(void)
+{
+	struct driver *d = ll_entry_start(struct driver, driver);
+	const int n_ents = ll_entry_count(struct driver, driver);
+	struct driver *entry;
+	const struct udevice_id *match;
+
+	puts("Driver                Compatible\n");
+	puts("--------------------------------\n");
+	for (entry = d; entry < d + n_ents; entry++) {
+		for (match = entry->of_match;
+		     match && match->compatible; match++)
+			printf("%-20.20s  %s\n",
+			       match == entry->of_match ? entry->name : "",
+			       match->compatible);
+		if (match == entry->of_match)
+			printf("%-20.20s\n", entry->name);
+	}
+}
diff --git a/include/dm/util.h b/include/dm/util.h
index 348c2ace3c..0ccb3fbadf 100644
--- a/include/dm/util.h
+++ b/include/dm/util.h
@@ -39,6 +39,9 @@  static inline void dm_dump_devres(void)
 }
 #endif
 
+/* Dump out a list of drivers */
+void dm_dump_drivers(void);
+
 /**
  * Check if an of node should be or was bound before relocation.
  *