Re: [PATCH v6 0/5] Add multiple FFU modes based on eMMC specification 6.6.18 for flexible firmware updates

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 25 Oct 2024 at 22:35, Bean Huo <beanhuo@xxxxxxxx> wrote:
>
> Following the discussions with Avri at the 2024 ALPSS, I am submitting these patches to
> introduce multiple FFU modes, as defined in the eMMC specification 6.6.18.
>
> The new FFU implementation can support diverse vendor requirements and operational conditions.
> The key benefits include:
>
> 1, The host can select the most appropriate update mode based on device capabilities and
> firmware size.
> 2, The patches ensure that firmware downloads are treated as a single, uninterrupted operation,
> preventing partial updates that could compromise device stability.
> 3, Some new modes keep the device in FFU mode throughout the process, reducing the risk of
> premature exits and update failures.
>
> By supporting these modes, we can better accommodate varying firmware sizes and ensure smoother,
> more reliable firmware updates across different scenarios.
>
>
> Summary of Changes:
>
> Default FFU mode: "mmc ffu"
> Uses CMD6 to enter FFU mode, CMD23 to set the block count, CMD25 for multiple-block write, and
> CMD6 to exit FFU mode. This mode may exit FFU mode during the download if the firmware size exceeds
> the chunk size.
>
> Optional FFU mode 1:
> Similar to default FFU mode, but repeats CMD23+CMD25 for each chunk, ensuring FFU mode is maintained
> throughout the firmware download. FFU mode is only exited after the entire firmware has been
> successfully downloaded.
>
> Optional FFU mode 2: use CMD25+CMD12 for open-ended multiple-block write
> Introduces a method using CMD25 for open-ended multiple-block writes followed by CMD12 to stop
> the transmission. This allows for a smoother and more continuous firmware bundle download.
>
> Optional FFU mode 3: use CMD6 and CMD24 for single-block write
> A new mode that uses CMD6 to enter FFU mode, CMD24 for single-block writes, and CMD6 to exit FFU
> mode after each write cycle. This ensures granular control over each block but may introduce more
> frequent mode transitions.
>
> Optional FFU mode 4: use CMD6 and repeated CMD24 sequence
> In this mode, CMD6 is used to enter FFU mode, followed by repeated CMD24 single-block writes.
> After all firmware data is written, CMD6 is used to exit FFU mode, ensuring an atomic and
> uninterrupted download process.
>
>
> Changelog:
>
>  v1 -- v2:
>         1. Added memset() to clean command structure
>  v2 -- V3:
>         1. Refactor patch, and remove ffu dedicated file mmc_ffu.c
>  v3 -- v4:
>         1. Incorporated Avri’s comments
>         2. Due to "ERROR: in command 'ffu', 'ffu' is ambiguous" when using "mmc ffu", update
>            default FFU mode 'ffu' to 'ffu1'
> v4 -- v5:
>         1. Retain the default FFU mode as 'ffu' and rename the other FFU modes to 'opt_ffux' for consistency.
> v5 -- v6:
>         1. Fix a typo in patch [4/5] commit subject
>
> Bean Huo (5):
>   mmc-utils: Refactor common FFU code into functions to support
>     additional FFU modes
>   mmc-utils: Add FFU optional mode 1
>   mmc-utils: Add FFU optional mode 2 using CMD25+CMD12 for Open-ended
>     write download FW
>   mmc-utils: Add FFU optional mode 3 that uses CMD6 and CMD24
>     single-block write to download firmware
>   mmc-utils: Add FFU optional mode 4 for firmware download using
>     repeated CMD24 single-block write command
>
>  mmc.1      |  12 ++
>  mmc.c      |  20 +++
>  mmc.h      |   1 +
>  mmc_cmds.c | 492 ++++++++++++++++++++++++++++++++++++++---------------
>  mmc_cmds.h |   4 +
>  5 files changed, 389 insertions(+), 140 deletions(-)
>

The series applied to git.kernel.org/pub/scm/utils/mmc/mmc-utils.git
master, thanks!

Kind regards
Uffe





[Index of Archives]     [Linux Memonry Technology]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux