cmd: Add command to dump drivers and compatible strings
authorSean Anderson <seanga2@gmail.com>
Fri, 17 Jan 2020 19:48:09 +0000 (14:48 -0500)
committerSimon Glass <sjg@chromium.org>
Thu, 6 Feb 2020 02:33:46 +0000 (19:33 -0700)
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@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
cmd/dm.c
drivers/core/dump.c
include/dm/util.h

index 7b271db0bbe7b1ad7da85adb337b29216bb49fde..108707c298a4d6fb35e148b7768e34bdd796b8b4 100644 (file)
--- 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\n"
 );
index 4704049aee5e16113c7d08fdd27fdd46e547359c..e73ebeabcc9a6a8d2bb876d4b1390b8e9fc976bd 100644 (file)
@@ -96,3 +96,22 @@ 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->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);
+       }
+}
index 348c2ace3c3bdea8152a47fef647700927b670ba..0ccb3fbadf4bdd17a662fb485adcee188b11322e 100644 (file)
@@ -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.
  *