All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lukasz Majewski <lukma@denx.de>
To: u-boot@lists.denx.de
Subject: [PATCH] fastboot: add UUU command UCmd and ACmd support
Date: Wed, 27 Jan 2021 09:06:30 +0100	[thread overview]
Message-ID: <20210127090630.170b670e@jawa> (raw)
In-Reply-To: <d253a190-e8fc-5d7f-a018-01b9521f141d@denx.de>

Hi Heiko,

> Hello Tom,
> 
> Am 26.01.21 um 12:46 schrieb Tom Rini:
> > 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.  
> 
> Ok, so I moved the patch in patchwork to Lukasz.
> 
> Thanks!
> 
> bye,
> Heiko
> 
> 
> >   
> >>
> >> 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  
> >   
> 

As Roman has re-send the cmd:bcb:* patches I will take this one and
prepare PR in a few days time.


Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma at denx.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20210127/1bc1b486/attachment.sig>

  reply	other threads:[~2021-01-27  8:06 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
2021-01-26 12:08     ` Heiko Schocher
2021-01-27  8:06       ` Lukasz Majewski [this message]
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=20210127090630.170b670e@jawa \
    --to=lukma@denx.de \
    --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.