All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tom Rini <trini@konsulko.com>
To: u-boot@lists.denx.de
Subject: [PATCH] fastboot: add UUU command UCmd and ACmd support
Date: Tue, 26 Jan 2021 06:46:45 -0500	[thread overview]
Message-ID: <20210126114645.GS7530@bill-the-cat> (raw)
In-Reply-To: <2cc13053-094f-3811-0b44-d62541c4392e@denx.de>

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@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>

  reply	other threads:[~2021-01-26 11:46 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-11 10:19 [PATCH] fastboot: add UUU command UCmd and ACmd support Heiko Schocher
2021-01-13 16:10 ` Simon Glass
2021-01-26  5:23 ` Heiko Schocher
2021-01-26 11:46   ` Tom Rini [this message]
2021-01-26 12:08     ` Heiko Schocher
2021-01-27  8:06       ` Lukasz Majewski
2021-01-27  9:34 ` Roman Stratiienko
2021-01-27 10:11   ` Heiko Schocher
2021-02-01  7:56     ` Lukasz Majewski
2021-02-01  8:21       ` Heiko Schocher

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210126114645.GS7530@bill-the-cat \
    --to=trini@konsulko.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.