diff options
| author | Kory Maincent (TI.com) <[email protected]> | 2025-10-30 17:45:01 +0100 |
|---|---|---|
| committer | Tom Rini <[email protected]> | 2025-11-03 10:02:39 -0600 |
| commit | 78a06090f4860d52dfd1577619f53a7ec75122c9 (patch) | |
| tree | b0c3de30b114003baf8ffe4c1583d81fdd9a9a6b /cmd | |
| parent | b7edeac950dae10759527a1ed0d1c306710ec9de (diff) | |
boot: Add UCLASS support for extension boards
Introduce UCLASS-based extension board support to enable more
standardized and automatic loading of extension board device tree
overlays in preparation for integration with bootstd and pxe_utils.
Several #if CONFIG_IS_ENABLED are used in cmd/extension_board.c to ease the
development but don't worry they are removed later in the series.
Signed-off-by: Kory Maincent (TI.com) <[email protected]>
Reviewed-by: Simon Glass <[email protected]>
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[] = { |
