cmd: Add command to dump drivers and compatible strings

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>
This commit is contained in:
Sean Anderson 2020-01-17 14:48:09 -05:00 committed by Simon Glass
parent 2f7c53cbd3
commit 7b9d60fc1f
3 changed files with 33 additions and 1 deletions

View File

@ -40,10 +40,19 @@ static int do_dm_dump_devres(cmd_tbl_t *cmdtp, int flag, int argc,
return 0; 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[] = { static cmd_tbl_t test_commands[] = {
U_BOOT_CMD_MKENT(tree, 0, 1, do_dm_dump_all, "", ""), 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(uclass, 1, 1, do_dm_dump_uclass, "", ""),
U_BOOT_CMD_MKENT(devres, 1, 1, do_dm_dump_devres, "", ""), 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) static __maybe_unused void dm_reloc(void)
@ -84,5 +93,6 @@ U_BOOT_CMD(
"Driver model low level access", "Driver model low level access",
"tree Dump driver model tree ('*' = activated)\n" "tree Dump driver model tree ('*' = activated)\n"
"dm uclass Dump list of instances for each uclass\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"
); );

View File

@ -96,3 +96,22 @@ void dm_dump_uclass(void)
puts("\n"); 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);
}
}

View File

@ -39,6 +39,9 @@ static inline void dm_dump_devres(void)
} }
#endif #endif
/* Dump out a list of drivers */
void dm_dump_drivers(void);
/** /**
* Check if an of node should be or was bound before relocation. * Check if an of node should be or was bound before relocation.
* *