[PATCH] fastboot: add UUU command UCmd and ACmd support
Tom Rini
trini at konsulko.com
Tue Jan 26 12:46:45 CET 2021
On Tue, Jan 26, 2021 at 06:23:24AM +0100, Heiko Schocher wrote:
> Hello Tom,
>
> this patch is assigned to you ... any issues with it, or can
> it go into master?
As Lukasz is back and reviewing code and making PRs, he should take it.
Thanks.
>
> Thanks!
>
> bye,
> Heiko
>
> Am 11.01.21 um 11:19 schrieb Heiko Schocher:
> > add support for the UUU commands ACmd and UCmd.
> >
> > Enable them through the Kconfig option
> > CONFIG_FASTBOOT_UUU_SUPPORT
> >
> > base was commit in NXP kernel
> > 9b149c2a2882: ("MLK-18591-3 android: Add FSL android fastboot support")
> >
> > and ported it to current mainline. Tested this patch
> > on imx6ul based board.
> >
> > Signed-off-by: Heiko Schocher <hs at denx.de>
> > ---
> > azure build:
> > https://dev.azure.com/hs0298/hs/_build/results?buildId=57&view=results
> >
> > version uuu tool used for tests:
> > commit 3870fb781b35: ("fastboot: default to logical-block-size 4096")
> >
> > doc/android/fastboot-protocol.rst | 5 +++
> > doc/android/fastboot.rst | 2 +
> > drivers/fastboot/Kconfig | 7 ++++
> > drivers/fastboot/fb_command.c | 62 +++++++++++++++++++++++++++++++
> > drivers/usb/gadget/f_fastboot.c | 17 +++++++++
> > include/fastboot.h | 7 ++++
> > 6 files changed, 100 insertions(+)
> >
> > diff --git a/doc/android/fastboot-protocol.rst b/doc/android/fastboot-protocol.rst
> > index e723659e49c..e8cbd7f24ea 100644
> > --- a/doc/android/fastboot-protocol.rst
> > +++ b/doc/android/fastboot-protocol.rst
> > @@ -144,6 +144,11 @@ Command Reference
> >
> > "powerdown" Power off the device.
> >
> > + "ucmd" execute any bootloader command and wait until it
> > + finishs.
> > +
> > + "acmd" execute any bootloader command, do not wait.
> > +
> > Client Variables
> > ----------------
> >
> > diff --git a/doc/android/fastboot.rst b/doc/android/fastboot.rst
> > index 2877c3cbaaa..b58d1b5b31a 100644
> > --- a/doc/android/fastboot.rst
> > +++ b/doc/android/fastboot.rst
> > @@ -19,6 +19,8 @@ The current implementation supports the following standard commands:
> > - ``reboot``
> > - ``reboot-bootloader``
> > - ``set_active`` (only a stub implementation which always succeeds)
> > +- ``ucmd`` (if enabled)
> > +- ``acmd`` (if enabled)
> >
> > The following OEM commands are supported (if enabled):
> >
> > diff --git a/drivers/fastboot/Kconfig b/drivers/fastboot/Kconfig
> > index 4352ba67a71..b1f8cd74a15 100644
> > --- a/drivers/fastboot/Kconfig
> > +++ b/drivers/fastboot/Kconfig
> > @@ -72,6 +72,13 @@ config FASTBOOT_FLASH
> > the downloaded image to a non-volatile storage device. Define
> > this to enable the "fastboot flash" command.
> >
> > +config FASTBOOT_UUU_SUPPORT
> > + bool "Enable FASTBOOT i.MX UUU special command"
> > + default y if ARCH_MX7 || ARCH_MX6 || ARCH_IMX8 || ARCH_IMX8M || ARCH_MX7ULP
> > + select FSL_FASTBOOT
> > + help
> > + The fastboot protocol includes "UCmd" command and "ACmd" command
> > +
> > choice
> > prompt "Flash provider for FASTBOOT"
> > depends on FASTBOOT_FLASH
> > diff --git a/drivers/fastboot/fb_command.c b/drivers/fastboot/fb_command.c
> > index d3c578672dc..31a47e46386 100644
> > --- a/drivers/fastboot/fb_command.c
> > +++ b/drivers/fastboot/fb_command.c
> > @@ -43,6 +43,11 @@ static void reboot_recovery(char *, char *);
> > static void oem_format(char *, char *);
> > #endif
> >
> > +#if CONFIG_IS_ENABLED(FASTBOOT_UUU_SUPPORT)
> > +static void run_ucmd(char *, char *);
> > +static void run_acmd(char *, char *);
> > +#endif
> > +
> > static const struct {
> > const char *command;
> > void (*dispatch)(char *cmd_parameter, char *response);
> > @@ -99,6 +104,16 @@ static const struct {
> > .dispatch = oem_format,
> > },
> > #endif
> > +#if CONFIG_IS_ENABLED(FASTBOOT_UUU_SUPPORT)
> > + [FASTBOOT_COMMAND_UCMD] = {
> > + .command = "UCmd",
> > + .dispatch = run_ucmd,
> > + },
> > + [FASTBOOT_COMMAND_ACMD] = {
> > + .command = "ACmd",
> > + .dispatch = run_acmd,
> > + },
> > +#endif
> > };
> >
> > /**
> > @@ -309,6 +324,53 @@ static void erase(char *cmd_parameter, char *response)
> > }
> > #endif
> >
> > +#if CONFIG_IS_ENABLED(FASTBOOT_UUU_SUPPORT)
> > +/**
> > + * run_ucmd() - Execute the UCmd command
> > + *
> > + * @cmd_parameter: Pointer to command parameter
> > + * @response: Pointer to fastboot response buffer
> > + */
> > +static void run_ucmd(char *cmd_parameter, char *response)
> > +{
> > + if (!cmd_parameter) {
> > + pr_err("missing slot suffix\n");
> > + fastboot_fail("missing command", response);
> > + return;
> > + }
> > +
> > + if (run_command(cmd_parameter, 0))
> > + fastboot_fail("", response);
> > + else
> > + fastboot_okay(NULL, response);
> > +}
> > +
> > +static char g_a_cmd_buff[64];
> > +
> > +void fastboot_acmd_complete(void)
> > +{
> > + run_command(g_a_cmd_buff, 0);
> > +}
> > +
> > +/**
> > + * run_acmd() - Execute the ACmd command
> > + *
> > + * @cmd_parameter: Pointer to command parameter
> > + * @response: Pointer to fastboot response buffer
> > + */
> > +static void run_acmd(char *cmd_parameter, char *response)
> > +{
> > + if (!cmd_parameter) {
> > + pr_err("missing slot suffix\n");
> > + fastboot_fail("missing command", response);
> > + return;
> > + }
> > +
> > + strcpy(g_a_cmd_buff, cmd_parameter);
> > + fastboot_okay(NULL, response);
> > +}
> > +#endif
> > +
> > /**
> > * reboot_bootloader() - Sets reboot bootloader flag.
> > *
> > diff --git a/drivers/usb/gadget/f_fastboot.c b/drivers/usb/gadget/f_fastboot.c
> > index d1d087e12b2..bf52d2505f4 100644
> > --- a/drivers/usb/gadget/f_fastboot.c
> > +++ b/drivers/usb/gadget/f_fastboot.c
> > @@ -419,6 +419,18 @@ static void do_bootm_on_complete(struct usb_ep *ep, struct usb_request *req)
> > do_exit_on_complete(ep, req);
> > }
> >
> > +#if CONFIG_IS_ENABLED(FASTBOOT_UUU_SUPPORT)
> > +static void do_acmd_complete(struct usb_ep *ep, struct usb_request *req)
> > +{
> > + /* When usb dequeue complete will be called
> > + * Need status value before call run_command.
> > + * otherwise, host can't get last message.
> > + */
> > + if (req->status == 0)
> > + fastboot_acmd_complete();
> > +}
> > +#endif
> > +
> > static void rx_handler_command(struct usb_ep *ep, struct usb_request *req)
> > {
> > char *cmdbuf = req->buf;
> > @@ -457,6 +469,11 @@ static void rx_handler_command(struct usb_ep *ep, struct usb_request *req)
> > case FASTBOOT_COMMAND_REBOOT_RECOVERY:
> > fastboot_func->in_req->complete = compl_do_reset;
> > break;
> > +#if CONFIG_IS_ENABLED(FASTBOOT_UUU_SUPPORT)
> > + case FASTBOOT_COMMAND_ACMD:
> > + fastboot_func->in_req->complete = do_acmd_complete;
> > + break;
> > +#endif
> > }
> > }
> >
> > diff --git a/include/fastboot.h b/include/fastboot.h
> > index 8e9ee80907d..ef8cd842bb3 100644
> > --- a/include/fastboot.h
> > +++ b/include/fastboot.h
> > @@ -38,6 +38,10 @@ enum {
> > #if CONFIG_IS_ENABLED(FASTBOOT_CMD_OEM_FORMAT)
> > FASTBOOT_COMMAND_OEM_FORMAT,
> > #endif
> > +#if CONFIG_IS_ENABLED(FASTBOOT_UUU_SUPPORT)
> > + FASTBOOT_COMMAND_ACMD,
> > + FASTBOOT_COMMAND_UCMD,
> > +#endif
> >
> > FASTBOOT_COMMAND_COUNT
> > };
> > @@ -172,4 +176,7 @@ void fastboot_data_download(const void *fastboot_data,
> > */
> > void fastboot_data_complete(char *response);
> >
> > +#if CONFIG_IS_ENABLED(FASTBOOT_UUU_SUPPORT)
> > +void fastboot_acmd_complete(void);
> > +#endif
> > #endif /* _FASTBOOT_H_ */
> >
>
> --
> DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> Phone: +49-8142-66989-52 Fax: +49-8142-66989-80 Email: hs at denx.de
--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20210126/560b1cba/attachment.sig>
More information about the U-Boot
mailing list