diff options
Diffstat (limited to 'cmd')
| -rw-r--r-- | cmd/Kconfig | 2 | ||||
| -rw-r--r-- | cmd/extension_board.c | 50 |
2 files changed, 48 insertions, 4 deletions
diff --git a/cmd/Kconfig b/cmd/Kconfig index 986eeeba807..721bdb87c8a 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -548,7 +548,7 @@ config CMD_FDT config CMD_EXTENSION bool "Extension board management command" select CMD_FDT - depends on SUPPORT_EXTENSION_SCAN + depends on SUPPORT_EXTENSION_SCAN || SUPPORT_DM_EXTENSION_SCAN help Enables the "extension" command, which allows to detect extension boards connected to the system, and apply diff --git a/cmd/extension_board.c b/cmd/extension_board.c index 129f3db9e4c..1f1eddbe976 100644 --- a/cmd/extension_board.c +++ b/cmd/extension_board.c @@ -4,6 +4,7 @@ * Köry Maincent, Bootlin, <[email protected]> */ +#include <alist.h> #include <exports.h> #include <command.h> #include <extension_board.h> @@ -11,9 +12,28 @@ static int do_extension_list(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) { +#if CONFIG_IS_ENABLED(SUPPORT_DM_EXTENSION_SCAN) + struct alist *dm_extension_list; +#endif struct extension *extension; int i = 0; +#if CONFIG_IS_ENABLED(SUPPORT_DM_EXTENSION_SCAN) + dm_extension_list = dm_extension_get_list(); + + if (!alist_get_ptr(dm_extension_list, 0)) { + printf("No extension registered - Please run \"extension scan\"\n"); + return CMD_RET_SUCCESS; + } + + alist_for_each(extension, dm_extension_list) { + printf("Extension %d: %s\n", i++, extension->name); + printf("\tManufacturer: \t\t%s\n", extension->owner); + printf("\tVersion: \t\t%s\n", extension->version); + printf("\tDevicetree overlay: \t%s\n", extension->overlay); + printf("\tOther information: \t%s\n", extension->other); + } +#else if (list_empty(&extension_list)) { printf("No extension registered - Please run \"extension scan\"\n"); return CMD_RET_SUCCESS; @@ -26,6 +46,7 @@ static int do_extension_list(struct cmd_tbl *cmdtp, int flag, printf("\tDevicetree overlay: \t%s\n", extension->overlay); printf("\tOther information: \t%s\n", extension->other); } +#endif return CMD_RET_SUCCESS; } @@ -34,9 +55,19 @@ static int do_extension_scan(struct cmd_tbl *cmdtp, int flag, { int extension_num; +#if CONFIG_IS_ENABLED(SUPPORT_DM_EXTENSION_SCAN) + extension_num = dm_extension_scan(); + if (extension_num == -ENODEV) + extension_num = 0; + else if (extension_num < 0) + return CMD_RET_FAILURE; + + printf("Found %d extension board(s).\n", extension_num); +#else extension_num = extension_scan(true); - if (extension_num < 0) + if (extension_num < 0 && extension_num != -ENODEV) return CMD_RET_FAILURE; +#endif return CMD_RET_SUCCESS; } @@ -44,22 +75,34 @@ static int do_extension_scan(struct cmd_tbl *cmdtp, int flag, static int do_extension_apply(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) { +#if !CONFIG_IS_ENABLED(SUPPORT_DM_EXTENSION_SCAN) struct extension *extension = NULL; - int i = 0, extension_id, ret; struct list_head *entry; + int i = 0; +#endif + int extension_id, ret; if (argc < 2) return CMD_RET_USAGE; if (strcmp(argv[1], "all") == 0) { ret = CMD_RET_FAILURE; +#if CONFIG_IS_ENABLED(SUPPORT_DM_EXTENSION_SCAN) + if (dm_extension_apply_all()) + return CMD_RET_FAILURE; +#else list_for_each_entry(extension, &extension_list, list) { ret = extension_apply(extension); if (ret != CMD_RET_SUCCESS) break; } +#endif } else { extension_id = simple_strtol(argv[1], NULL, 10); +#if CONFIG_IS_ENABLED(SUPPORT_DM_EXTENSION_SCAN) + if (dm_extension_apply(extension_id)) + return CMD_RET_FAILURE; +#else list_for_each(entry, &extension_list) { if (i == extension_id) { extension = list_entry(entry, struct extension, list); @@ -74,9 +117,10 @@ static int do_extension_apply(struct cmd_tbl *cmdtp, int flag, } ret = extension_apply(extension); +#endif } - return ret; + return CMD_RET_SUCCESS; } static struct cmd_tbl cmd_extension[] = { |
