On 9/6/26 3:02 PM, Carlo Caione wrote:
> Some recovery and initial-provisioning flows run before usable firmware
> is available in persistent storage. In these flows the SoC ROM loads a
> small first stage, but that stage must still provide a standard protocol
> with which the host can provision the device.
>
...
> diff --git a/drivers/fastboot/fb_command.c b/drivers/fastboot/fb_command.c
> index 111516fd1b3..a2a89fc04f8 100644
> --- a/drivers/fastboot/fb_command.c
> +++ b/drivers/fastboot/fb_command.c
> @@ -48,10 +48,59 @@ static void oem_board(char *, char *);
> static void run_ucmd(char *, char *);
> static void run_acmd(char *, char *);
>
> -static const struct {
> +struct fastboot_command {
> const char *command;
> void (*dispatch)(char *cmd_parameter, char *response);
> -} commands[FASTBOOT_COMMAND_COUNT] = {
> +};
> +
> +#ifdef CONFIG_XPL_BUILD
> +static const struct fastboot_command commands[FASTBOOT_COMMAND_COUNT] = {
> + [FASTBOOT_COMMAND_GETVAR] = {
> + .command = "getvar",
> + .dispatch = getvar
> + },
> + [FASTBOOT_COMMAND_DOWNLOAD] = {
> + .command = "download",
> + .dispatch = download
> + },
> + [FASTBOOT_COMMAND_FLASH] = {
> + .command = "flash",
> + .dispatch = CONFIG_IS_ENABLED(FASTBOOT_FLASH, (flash), (NULL))
> + },
> + [FASTBOOT_COMMAND_ERASE] = {
> + .command = "erase",
> + .dispatch = CONFIG_IS_ENABLED(FASTBOOT_FLASH, (erase), (NULL))
> + },
> + [FASTBOOT_COMMAND_CONTINUE] = {
> + .command = "continue",
> + .dispatch = okay
> + },
> + [FASTBOOT_COMMAND_REBOOT] = {
> + .command = "reboot",
> + .dispatch = CONFIG_IS_ENABLED(FASTBOOT_REBOOT, (okay), (NULL))
> + },
> + [FASTBOOT_COMMAND_REBOOT_BOOTLOADER] = {
> + .command = "reboot-bootloader",
> + .dispatch = CONFIG_IS_ENABLED(FASTBOOT_REBOOT,
> + (reboot_bootloader), (NULL))
> + },
> + [FASTBOOT_COMMAND_REBOOT_FASTBOOTD] = {
> + .command = "reboot-fastboot",
> + .dispatch = CONFIG_IS_ENABLED(FASTBOOT_REBOOT,
> + (reboot_fastbootd), (NULL))
> + },
> + [FASTBOOT_COMMAND_REBOOT_RECOVERY] = {
> + .command = "reboot-recovery",
> + .dispatch = CONFIG_IS_ENABLED(FASTBOOT_REBOOT,
> + (reboot_recovery), (NULL))
> + },
> + [FASTBOOT_COMMAND_SET_ACTIVE] = {
> + .command = "set_active",
> + .dispatch = okay
> + },
> +};
Do we really need to make a complete second table or can we just #ifndef
the indivdual commands in the existing table?
> +#else
> +static const struct fastboot_command commands[FASTBOOT_COMMAND_COUNT] = {
> [FASTBOOT_COMMAND_GETVAR] = {
> .command = "getvar",
> .dispatch = getvar