On Wed, Sep 09, 2026 at 16:16:16 +0100, David Lechner wrote:
> 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?

That was actually suggested by Mattijs here
https://lore.kernel.org/all/[email protected]/



Reply via email to