[U-Boot] [PATCH v4 0/6] Raspberry Pi4: add support for DFU over USB

Marek Szyprowski
2019-12-02T11:11:12Z

Hi All!

This patchset enables support for DFU over USB protocol on Raspberry Pi4
board. The board has DWC2 UDC controller connected to the USB-C power
connector. Enabling DFU on it, make the u-boot development much more
convenient, as one no longer needs to swap SD-card between RPi4 board and
host machine to update the u-boot binary.

Patches are based on current 'master' u-boot branch. They were tested on
the 2019-07-10-raspbian-buster-lite.img sd-card image with the following
lines added to config.txt:
dtoverlay=dwc2,dr_mode=peripheral
dtparam=i2c_arm=on
dtparam=spi=on
enable_uart=1
uart_2ndstage=1
kernel=u-boot.bin

To enable DFU, one has to enter follwing command:
# dfu 0 mmc 0

During the development of this feature I've encountered a serious bugs
in FAT write code. Over-writing discontiguous files always caused serious
filesystem corruption. This was especially anoying, because the system
environment is kept on FAT volume in uboot.env file, so 'saveenv'
basically corrupted the boot partiting on the second call. Another bunch
of the issues in the FAT write code has been revealed while removing
predefined file size limit in DFU MMC code and then running sandbox
tests.

I hope that my fixes for FAT code will be helpful for non-RPi users too.

Best regards
Marek Szyprowski
Samsung R&D Institute Poland

Changelog:

v4:
- rechecked the FAT related fixes, it turned out that much simpler patch
fixes both issues discovered while working on DFU support; added simple
sandbox based tests reveleaing the issue and showing correctness
of the fix
- rebased patches onto current u-boot's master branch: 4b19b89ca4a8
("Merge tag 'rpi-next-2020.01' of https://github.com/mbgg/u-boot")

v3: https://patchwork.ozlabs.org/cover/1200793/
- fixed one more FAT issue revealed by sandbox tests

v3: (patch 6/6 posted separately): https://patchwork.ozlabs.org/patch/1195645/
- fixed non-RPi4 builds (missing #else ENV_DFU_SETTINGS def)
- removed config.txt entity (not needed in uboot-based boot)
- switched arm64 kernel filename to 'Image'

v2: https://patchwork.ozlabs.org/cover/1166589/
- added changes to rpi_4_defconfig too (arm64 version)
- extended DFU entity list by confix.txt, cmdline.txt and Image.gz
- fixed missing '\0' at the end of dfu_alt_info env
- added reviewed-by tags
- added patches for DFU MMC to remove file size limit
- added patch for fat write to fix issues on non-zero file offset
(revealed by previous patch)

v1: https://patchwork.ozlabs.org/cover/1162770/
- initial version

Patch summary:

Marek Szyprowski (6):
fat: write: fix broken write to fragmented files
fat: write: adjust data written in each partial write
dfu: mmc: rearrange the code
dfu: mmc: remove file size limit for io operations
usb: dwc2_udc_otg: add bcm2835 SoC (Raspberry Pi4) support
config: enable DFU over USB on Raspberry Pi4 boards

configs/rpi_4_32b_defconfig | 11 +++
configs/rpi_4_defconfig | 11 +++
drivers/dfu/dfu_mmc.c | 93 +++++++++++++---------
drivers/usb/gadget/dwc2_udc_otg.c | 2 +
drivers/usb/gadget/dwc2_udc_otg_xfer_dma.c | 12 +--
fs/fat/fat_write.c | 8 +-
include/configs/rpi.h | 20 +++++
7 files changed, 112 insertions(+), 45 deletions(-)

--
2.17.1