07 Jan, 2020

2 commits

  • When the `dfu` command is called from the U-Boot environment,
    it now accepts an optional parameter that specifies a timeout (in seconds).
    If a DFU connection is not made within that time the `dfu` command exits
    (as it would if Ctrl+C was pressed). If the timeout is left empty or being
    zero the `dfu` command behaves as it does now.

    This is useful for allowing U-Boot to check to see if anything wants to
    upload new firmware before continuing to boot.

    The patch is based on the commit
    https://github.com/01org/edison-u-boot/commit/5e966ccc3c65c18c9783741fa04e0c45e021780c
    by Sebastien Colleur, which has been heavily reworked due to U-Boot changes
    in the past.

    Signed-off-by: Brad Campbell
    Signed-off-by: Andy Shevchenko

    Andy Shevchenko
     
  • In the future we may utilize optional argument in 'dfu' command line.
    As a preparation for this, refactor do_dfu().

    Signed-off-by: Andy Shevchenko
    Acked-by: Lukasz Majewski

    Andy Shevchenko
     

31 Oct, 2019

1 commit

  • Add support of DFU for several interface/device
    with one command.

    The format for "dfu_alt_info" in this case is :
    - '='alternate list (';' separated)
    - each interface is separated by '&'

    The previous behavior is always supported.

    One example for NOR (bootloaders) + NAND (rootfs in UBI):

    U-Boot> env set dfu_alt_info \
    "sf 0:0:10000000:0=spl part 0 1;u-boot part 0 2; \
    u-boot-env part 0 3&nand 0=UBI partubi 0,3"

    U-Boot> dfu 0 list

    DFU alt settings list:
    dev: SF alt: 0 name: spl layout: RAW_ADDR
    dev: SF alt: 1 name: ssbl layout: RAW_ADDR
    dev: SF alt: 2 name: u-boot-env layout: RAW_ADDR
    dev: NAND alt: 3 name: UBI layout: RAW_ADDR

    U-Boot> dfu 0

    $> dfu-util -l

    Found DFU: [0483:5720] ver=9999, devnum=96, cfg=1,\
    intf=0, alt=3, name="UBI", serial="002700333338511934383330"
    Found DFU: [0483:5720] ver=9999, devnum=96, cfg=1,\
    intf=0, alt=2, name="u-boot-env", serial="002700333338511934383330"
    Found DFU: [0483:5720] ver=9999, devnum=96, cfg=1,\
    intf=0, alt=1, name="u-boot", serial="002700333338511934383330"
    Found DFU: [0483:5720] ver=9999, devnum=96, cfg=1,\
    intf=0, alt=0, name="spl", serial="002700333338511934383330"

    Signed-off-by: Patrick Delaunay

    Patrick Delaunay
     

21 Apr, 2019

1 commit

  • The compiler is not happy when neither USB nor TFTP transport for DFU defined:

    cmd/dfu.c: In function ‘do_dfu’:
    cmd/dfu.c:31:8: warning: unused variable ‘devstring’ [-Wunused-variable]
    char *devstring = argv[3];
    ^~~~~~~~~
    cmd/dfu.c:30:8: warning: unused variable ‘interface’ [-Wunused-variable]
    char *interface = argv[2];
    ^~~~~~~~~

    Surround those variables by #ifdef expression.

    More serious, that comes under same circumstances, is a compilation error due
    to absence of macro parameter:

    In file included from include/image.h:45,
    from include/common.h:35,
    from cmd/dfu.c:13:
    include/command.h:207:24: error: expected expression before ‘,’ token
    # define _CMD_HELP(x) x,
    ^
    include/command.h:286:18: note: in expansion of macro ‘_CMD_HELP’
    _cmd, _usage, _CMD_HELP(_help) _CMD_COMPLETE(_comp) }
    ^~~~~~~~~
    include/command.h:290:3: note: in expansion of macro ‘U_BOOT_CMD_MKENT_COMPLETE’
    U_BOOT_CMD_MKENT_COMPLETE(_name, _maxargs, _rep, _cmd, \
    ^~~~~~~~~~~~~~~~~~~~~~~~~
    include/command.h:332:2: note: in expansion of macro ‘U_BOOT_CMD_COMPLETE’
    U_BOOT_CMD_COMPLETE(_name, _maxargs, _rep, _cmd, _usage, _help, NULL)
    ^~~~~~~~~~~~~~~~~~~
    cmd/dfu.c:70:1: note: in expansion of macro ‘U_BOOT_CMD’
    U_BOOT_CMD(dfu, CONFIG_SYS_MAXARGS, 1, do_dfu,
    ^~~~~~~~~~
    make[1]: *** [scripts/Makefile.build:279: cmd/dfu.o] Error 1
    make: *** [Makefile:1518: cmd] Error 2

    Put empty string unconditionally to have macro parameter present.

    Fixes: 0f44d33536a5 ("dfu: Fix up the Kconfig mess")
    Cc: Marek Vasut
    Signed-off-by: Andy Shevchenko
    Acked-by: Lukasz Majewski

    Andy Shevchenko
     

07 May, 2018

1 commit

  • When U-Boot started using SPDX tags we were among the early adopters and
    there weren't a lot of other examples to borrow from. So we picked the
    area of the file that usually had a full license text and replaced it
    with an appropriate SPDX-License-Identifier: entry. Since then, the
    Linux Kernel has adopted SPDX tags and they place it as the very first
    line in a file (except where shebangs are used, then it's second line)
    and with slightly different comment styles than us.

    In part due to community overlap, in part due to better tag visibility
    and in part for other minor reasons, switch over to that style.

    This commit changes all instances where we have a single declared
    license in the tag as both the before and after are identical in tag
    contents. There's also a few places where I found we did not have a tag
    and have introduced one.

    Signed-off-by: Tom Rini

    Tom Rini
     

22 Feb, 2018

2 commits

  • Do the following to make the symbol names less confusing.

    sed -i "s/\([TU][^_]\+\)_FUNCTION_DFU/DFU_OVER_\1/g" \
    `git grep _FUNCTION_DFU | cut -d ":" -f 1 | sort -u`

    Signed-off-by: Marek Vasut
    Cc: Lukasz Majewski

    Marek Vasut
     
  • Clean up the screaming mess of configuration options that DFU is.
    It was impossible to configure DFU such that TFTP is enabled and
    USB is not, this patch fixes that and assures that DFU TFTP and
    DFU USB can be enabled separatelly and that the correct pieces
    of code are compiled in.

    Signed-off-by: Marek Vasut
    Cc: Lukasz Majewski

    Marek Vasut
     

28 Sep, 2016

1 commit


25 Feb, 2016

1 commit

  • This patch fixes situation when one would like to write large file into
    medium with the file system (fat, ext4, etc).
    This change sets file size limitation to the DFU internal buffer size.

    Since u-boot is not supporting interrupts and seek on file systems, it
    becomes challenging to store large file appropriately.

    To reproduce this error - create large file (around 26 MiB) and sent it
    to the target board.

    Lets examine the flow of USB transactions:

    0. DFU uses EP0 with 64B MPS [Max Packet Size]

    1. Send file - OUT (PC->target) - dat_26MiB.img is sent with 4096 B transactions

    2. Get status - OUT (PC->target) - wait for DFU_STATE_dfuDNLOAD_IDLE (0x05) sent
    from target board - IN transaction
    (target->PC)

    3. The whole file content is sent to target - OUT (PC->target) with ZLP [Zero
    Length Packet]

    Now the interesting part starts:

    4. OUT (PC->target) Setup transaction (request to share DFU state)

    5. IN (target->PC) - reply the current DFU state
    - In the UDC driver the req->completion (with dfu_flush) is called
    after successful IN transfer.
    - The dfu_flush() (called from req->completion callback) saves the
    whole file at once (u-boot doesn't support seek on fs).
    Such operation takes considerable time. When the file
    is large - e.g. 26MiB - this time may be more than 5 seconds.

    6. OUT (PC->target) - ZLP, is send in the same time when dfu_flush()
    writes data to eMMC memory.
    The dfu-util application has hard coded timeout on USB transaction
    completion set to 5 seconds (it uses libusb calls).

    When the file to store is large (e.g. 26 MiB) the time needed to write it
    may excess the dfu-util timeout and following error message will be displayed:
    "unable to read DFU status" on the HOST PC console.

    This change is supposed to leverage DFU's part responsible for storing files
    on file systems. Other DFU operations - i.e. raw/partition write to NAND and
    eMMC should work as before.

    The only functional change is the error reporting. When dfu_flush() fails
    the u-boot prompt will exit with error information and dfu-util application
    exits afterwards as well.

    Test HW:
    - Odroid XU3 (Exynos5433) - test with large file
    - Trats (Exynos4210) - test for regression - eMMC, raw,

    Signed-off-by: Lukasz Majewski
    Reported-by: Alex Gdalevich
    Tested-by: Stephen Warren
    Tested-by: Heiko Schocher

    Lukasz Majewski
     

25 Jan, 2016

1 commit

  • Now that they are in their own directory, we can remove this prefix.
    This makes it easier to find a file since the prefix does not get in the
    way.

    Signed-off-by: Simon Glass
    Reviewed-by: Bin Meng
    Reviewed-by: Heiko Schocher
    Acked-by: Stefan Roese
    Acked-by: Przemyslaw Marczak

    Simon Glass