u-boot/include
Lukasz Majewski fc18f8d170 dfu: usb: f_dfu: Set deferred call for dfu_flush() function
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 <l.majewski@samsung.com>
Reported-by: Alex Gdalevich <agdalevich@axion-biosystems.com>
Tested-by: Stephen Warren <swarren@nvidia.com>
Tested-by: Heiko Schocher <hs@denx.de>
2016-02-24 19:12:32 +01:00
..
andestech
asm-generic Remove unused CONFIG_MODEM_SUPPORT option and associated dead code. 2016-02-08 10:22:44 -05:00
bedbug
cavium armv8: cavium: Add an implementation of ATF calling functions 2016-01-19 22:26:12 +00:00
configs Merge branch 'master' of http://git.denx.de/u-boot-sunxi 2016-02-23 15:35:47 -05:00
cramfs
dm dm: implement a DMA uclass 2016-02-23 16:14:45 +05:30
dt-bindings tegra: dts: Sync up the tegra124 device tree files with Linux 2016-02-16 09:17:50 -07:00
faraday
fsl-mc driver: net: fsl-mc: flib changes for MC FW 9.0.0 2016-01-27 08:13:10 -08:00
grlib
jffs2
linux Use correct spelling of "U-Boot" 2016-02-06 12:00:59 +01:00
lzma
mtd
net
pcmcia
power power: Add base support for the RK808 PMIC 2016-01-21 20:42:34 -07:00
samsung
synopsys
test
u-boot Add more SPDX-License-Identifier tags 2016-01-19 08:31:21 -05:00
usb Add more SPDX-License-Identifier tags 2016-01-19 08:31:21 -05:00
zfs
.gitignore
_exports.h
ACEX1K.h
adc.h
addr_map.h Add more SPDX-License-Identifier tags 2016-01-19 08:31:21 -05:00
aes.h
ahci.h dm: ahci: Convert to use new DM PCI API 2016-01-12 10:19:09 -07:00
ali512x.h
altera.h
ambapp.h
ambapp_ids.h
android_image.h
ansi.h
api_public.h
armcoremodule.h
asm-offsets.h
ata.h
atmel_hlcdc.h
atmel_lcd.h
atmel_lcdc.h
atmel_mci.h
autoboot.h
axp152.h
axp209.h
axp221.h sunxi: Implement poweroff support for axp221 pmic 2016-01-26 16:20:04 +01:00
axp818.h power: axp818: Remove duplicate register definition macros 2016-01-26 16:20:05 +01:00
axp_pmic.h power: axp: merge separate DLDO functions into 1 2016-01-26 16:20:05 +01:00
backlight.h dm: backlight: Add a backlight uclass 2016-01-21 20:42:36 -07:00
bcd.h
bios_emul.h dm: pci: Convert bios_emu to use the driver model PCI API 2016-01-24 12:07:19 +08:00
bitfield.h
bmp_layout.h
bootcount.h
bootm.h
bootretry.h
bootstage.h
bouncebuf.h
bus_vcxk.h
bzlib.h bzip2: Support compression for sandbox 2016-01-20 19:06:23 -07:00
cbfs.h
circbuf.h
cli.h
cli_hush.h
clk.h dm: clk: Add support for decoding clocks from the device tree 2016-01-21 19:47:29 -07:00
cmd_spl.h
command.h cmd_boot: Add a poweroff command 2016-01-13 21:05:25 -05:00
common.h bug.h: move BUILD_BUG_* defines to include/linux/bug.h 2016-01-25 10:39:59 -05:00
common_timing_params.h Add more SPDX-License-Identifier tags 2016-01-19 08:31:21 -05:00
commproc.h
compiler.h Revert "include/linux: move typdef for uintptr_t" 2015-12-16 07:11:15 -05:00
config_cmd_all.h Remove unused CONFIG_CMD_HWFLOW option and associated dead code. 2016-02-08 10:22:44 -05:00
config_defaults.h
config_distro_bootcmd.h distro bootcmd: enumerate PCI before network operations 2016-01-28 21:01:23 -07:00
config_distro_defaults.h Use correct spelling of "U-Boot" 2016-02-06 12:00:59 +01:00
config_fallbacks.h
config_fsl_chain_trust.h secure_boot: split the secure boot functionality in two parts 2016-01-27 08:12:32 -08:00
config_phylib_all_drivers.h
config_uncmd_spl.h spl: dm: Add SPL_DM_SEQ_ALIAS config option 2016-01-13 13:20:02 +01:00
console.h
cortina.h
cpsw.h
cpu.h
crc.h
cros_ec.h
cros_ec_message.h
dataflash.h
ddr_spd.h Add more SPDX-License-Identifier tags 2016-01-19 08:31:21 -05:00
debug_uart.h
dfu.h dfu: usb: f_dfu: Set deferred call for dfu_flush() function 2016-02-24 19:12:32 +01:00
dialog_pmic.h
display.h dm: video: Repurpose the 'displayport' uclass to 'display' 2016-01-21 20:42:36 -07:00
display_options.h
div64.h
dm-demo.h
dm.h
dm9000.h
dma.h dm: implement a DMA uclass 2016-02-23 16:14:45 +05:30
dp83848.h
ds1722.h
ds4510.h Add more SPDX-License-Identifier tags 2016-01-19 08:31:21 -05:00
dtt.h
dwc3-omap-uboot.h
dwc3-uboot.h
dwmmc.h
e500.h
ec_commands.h
edid.h dm: video: Repurpose the 'displayport' uclass to 'display' 2016-01-21 20:42:36 -07:00
efi.h
efi_api.h
elf.h
env_attr.h
env_callback.h
env_default.h
env_flags.h tools: env validate: pass values as 0-based array 2016-02-08 10:10:29 -05:00
environment.h
errno.h
ethsw.h drivers: net: vsc9953: Add LAG support 2016-01-28 12:22:19 -06:00
exports.h
ext4fs.h
ext_common.h
exynos_lcd.h
fastboot.h
fat.h
fb_mmc.h
fb_nand.h
fdt.h
fdt_simplefb.h
fdt_support.h
fdtdec.h tegra: nyan-big: Move the LCD driver to driver model 2016-02-16 09:17:51 -07:00
fis.h
flash.h
fm_eth.h
fpga.h fpga: Add bitstream type BIT_NONE 2016-01-27 15:55:54 +01:00
fs.h Add more SPDX-License-Identifier tags 2016-01-19 08:31:21 -05:00
fsl_csu.h
fsl_dcu_fb.h
fsl_ddr.h Add more SPDX-License-Identifier tags 2016-01-19 08:31:21 -05:00
fsl_ddr_dimm_params.h Add more SPDX-License-Identifier tags 2016-01-19 08:31:21 -05:00
fsl_ddr_sdram.h driver/ddr/fsl: Add workaround for A009663 2016-01-25 08:24:15 -08:00
fsl_ddrc_version.h
fsl_debug_server.h
fsl_devdis.h
fsl_diu_fb.h
fsl_dspi.h
fsl_dtsec.h
fsl_errata.h fsl/ddr: updated ddr errata-A008378 for arm and power SoCs 2015-12-13 18:27:28 -08:00
fsl_esdhc.h ARM: imx: fsl_esdhc: fix usage of low 4 bits of sysctl register 2016-01-03 15:21:21 +01:00
fsl_fman.h
fsl_ifc.h
fsl_immap.h
fsl_mdio.h net: tsec: fsl_mdio: Fix several cosmetic issues 2016-01-28 12:22:49 -06:00
fsl_memac.h
fsl_pmic.h
fsl_sec.h imx: Refactoring CAAM Job Ring structure and Secure Memory for imx7 2016-02-21 11:20:54 +01:00
fsl_sec_mon.h
fsl_secboot_err.h
fsl_sfp.h
fsl_tgec.h
fsl_usb.h
fsl_validate.h secure_boot: enable chain of trust for ARM platforms 2016-01-27 08:12:49 -08:00
fsl_wdog.h imx_watchdog: always set minimal timeout in reset_cpu 2016-01-07 17:54:53 +01:00
fuse.h
g_dnl.h
gdsys_fpga.h
gt64120.h
hash.h hash.c: Conditionally compile hash_command, static hash_show 2016-01-13 21:05:08 -05:00
hw_sha.h
hwconfig.h
i2c.h
i2c_eeprom.h
i2s.h
i8042.h
ide.h block: pass block dev not num to read/write/erase() 2016-01-13 21:05:18 -05:00
image-sparse.h
image.h
imx_thermal.h
initcall.h
input.h
inttypes.h
iomux.h
ioports.h
iotrace.h
ipu_pixfmt.h
key_matrix.h
keyboard.h
kgdb.h
lattice.h
lcd.h lcd: fix the color testpattern in 16bit mode 2016-01-24 00:38:40 +01:00
lcd_console.h
lcdvideo.h
ld9040.h
led-display.h
led.h
libata.h
libfdt.h
libfdt_env.h
libtizen.h
linker_lists.h
linux_logo.h
lmb.h
logbuff.h
lxt971a.h
lynxkdi.h
malloc.h
mapmem.h
mb862xx.h
mc9sdz60.h
mc13783.h
mc13892.h
mc34704.h
MCD_dma.h
MCD_progCheck.h
MCD_tasksInit.h
memalign.h
membuff.h
menu.h
micrel.h
mii_phy.h
miiphy.h
mipi_display.h
misc.h include: Correct "requset" typoes in misc.h 2016-01-08 10:15:42 -05:00
mk48t59.h
mmc.h mmc: add missing prototype for mmc_get_env_dev 2016-02-01 17:08:44 -05:00
mpc5xx.h
mpc5xxx.h
mpc5xxx_sdma.h
mpc8xx.h
mpc8xx_irq.h
mpc83xx.h powerpc/83xx: fix build failure 2016-01-20 10:19:40 -05:00
mpc85xx.h
mpc86xx.h
mpc106.h
mpc823_lcd.h
mpc8260.h
mpc8260_irq.h
msc01.h
mtd.h
mtd_node.h
mv88e6352.h
mvebu_mmc.h
mvmfp.h
nand.h Add more SPDX-License-Identifier tags 2016-01-19 08:31:21 -05:00
net.h Merge branch 'master' of git://git.denx.de/u-boot-net 2016-01-28 18:42:10 -05:00
netdev.h net: emaclite: Move driver to DM 2016-01-27 15:55:52 +01:00
ns16550.h dm: ns16550: Add support for reg-offset property 2016-02-22 16:21:10 +01:00
ns87308.h
onenand_uboot.h
os.h
palmas.h
panel.h dm: panel: Add a panel uclass 2016-01-21 20:42:36 -07:00
part.h part: Drop duplication declaration of block_dev_desc_t 2016-01-25 10:39:46 -05:00
part_efi.h
pc_keyb.h
pca953x.h Add more SPDX-License-Identifier tags 2016-01-19 08:31:21 -05:00
pca9564.h
pca9698.h
pch.h dm: pch: Add get_io_base op 2016-02-05 12:47:21 +08:00
pci.h dm: pci: Add missing forward declarations 2016-02-05 12:47:24 +08:00
pci_gt64120.h
pci_ids.h
pci_msc01.h
pci_rom.h dm: pci: video: Convert video and pci_rom to use DM PCI API 2016-01-12 10:19:09 -07:00
pcmcia.h
phy.h net: phy: introduce a quirk PHY_FLAG_BROKEN_RESET 2016-01-28 13:20:30 -06:00
phys2bus.h
physmem.h
post.h
ppc_asm.tmpl
ppc_defs.h
ps2mult.h
pwm.h dm: pwm: Add a PWM uclass 2016-01-21 20:42:36 -07:00
pwrseq.h dm: Add a power sequencing uclass 2016-01-21 20:42:34 -07:00
pxa_lcd.h
radeon.h
ram.h
rc4.h
regmap.h
reiserfs.h
remoteproc.h
reset.h
rtc.h
rtc_def.h
s6e63d6.h
s_record.h
SA-1100.h
samsung-usb-phy-uboot.h
sandbox-adc.h
sandboxblockdev.h
sandboxfs.h
sata.h
scf0403_lcd.h
scsi.h
sdhci.h
search.h
sed156x.h
sed13806.h
serial.h
sh_pfc.h
sh_tmu.h
sja1000.h
slre.h
sm501.h
smsc_lpc47m.h
smsc_sio1007.h superio: Add SMSC SIO1007 driver 2016-02-21 13:42:52 +08:00
sound.h
sparse_defs.h
sparse_format.h
spartan2.h
spartan3.h
spd.h
spd_sdram.h
spi.h spi: Add support for dual and quad mode 2016-01-13 18:47:27 +05:30
spi_flash.h Add more SPDX-License-Identifier tags 2016-01-19 08:31:21 -05:00
spl.h
splash.h
status_led.h
stdio_dev.h
stdlib.h
stratixII.h
sx151x.h
sy8106a.h sunxi: power: add support for sy8106a driver 2016-02-23 20:50:07 +01:00
sym53c8xx.h
syscon.h dm: syscon: Allow finding devices by driver data 2016-01-24 12:07:19 +08:00
systemace.h
tca642x.h
tegra-kbc.h
thermal.h
thor.h
ti-usb-phy-uboot.h
timer.h dm: timer: uclass: add timer init in uclass driver to add timer device 2016-01-20 19:06:21 -07:00
timestamp.h
tmu.h
tpm.h
tps6586x.h
trace.h
tsec.h net: tsec: Use priv->tbiaddr to initialize TBI PHY address 2016-01-28 12:23:19 -06:00
tsi108.h
tsi148.h
twl4030.h
twl6030.h
tws.h
ubi_uboot.h
ubifs_uboot.h
universe.h
usb.h usb: Allow up to 7 storage devices 2016-01-07 10:27:07 -07:00
usb_cdc_acm.h
usb_defs.h
usb_ether.h usb: eth: add Realtek RTL8152B/RTL8153 DRIVER 2016-01-23 16:22:34 +01:00
usb_mass_storage.h ums: support multiple LUNs at once 2016-01-13 21:05:19 -05:00
usbdescriptors.h
usbdevice.h
usbroothubdes.h
uuid.h
vbe.h
version.h
video.h video: Correct 'tor' typo in comment 2016-01-30 10:58:47 +01:00
video_bridge.h
video_console.h video: Provide a backspace method 2016-01-30 10:55:37 +01:00
video_easylogo.h
video_fb.h
video_font.h
video_font_4x6.h
video_font_data.h
video_logo.h
virtex2.h
vsc7385.h
vsc9953.h drivers: net: vsc9953: Add LAG support 2016-01-28 12:22:19 -06:00
vsprintf.h vsprintf.c: Always enable CONFIG_SYS_VSNPRINTF 2016-01-19 08:31:16 -05:00
vxworks.h
w83c553f.h
wait_bit.h lib: Add wait_for_bit 2016-01-25 10:39:47 -05:00
watchdog.h
winbond_w83627.h misc: Add simple driver to enable the legacy UART on Winbond Super IO chips 2016-01-28 13:53:30 +08:00
xilinx.h
xyzModem.h
zfs_common.h
zynqpl.h