5a45130d5c
This patch introduces a configuration option USBMSC_WRMULTIPLE, which is used to store multiple blocks into a larger chunk that then gets written via the mmcsd_writemultiple() (in case mmcsd is used). The bottleneck with the current implementation is the poor performance due to short block writes. USBMSC_DRVR_WRITE() always writes only one sector (with eMMC that's usually 512 bytes). eMMC devices usually erase much larger regions with near constant time (see Jedec JESD84-B51, Extended CSD register byte [225], SUPER_PAGE_SIZE): 'This register defines one or multiple of programmable boundary unit that is programmed at the same time.' If USBMSC_WRMULTIPLE is defined, then USBMSC_NWRREQS is used to allocate the write buffer size. We don't want this to be the default behavior yet as this may reveal unseen bugs in usb drivers due to the faster overall performance. Sample configurations with measured performance: - Without USBMSC_WRMULTIPLE: 470 Kb/s - With USBMSC_WRMULTIPLE, CONFIG_USBMSC_NWRREQS=4: 1.1 Mb/s (dd with bs=2k) - With USBMSC_WRMULTIPLE, CONFIG_USBMSC_NWRREQS=16: 5.2 Mb/s (dd with bs=8k) No doubt, this feature alone may make the mass storage work 10 times faster than before with eMMC cards. Signed-off-by: Eero Nurkkala <eero.nurkkala@offcode.fi> |
||
---|---|---|
.. | ||
adb.c | ||
cdcacm_desc.c | ||
cdcacm.c | ||
cdcacm.h | ||
cdcecm.c | ||
cdcecm.h | ||
composite_desc.c | ||
composite.c | ||
composite.h | ||
dfu.c | ||
Kconfig | ||
Make.defs | ||
pl2303.c | ||
rndis_std.h | ||
rndis.c | ||
usbdev_strings.c | ||
usbdev_trace.c | ||
usbdev_trprintf.c | ||
usbmsc_desc.c | ||
usbmsc_scsi.c | ||
usbmsc.c | ||
usbmsc.h |