
On Sat, 1 Feb 2014 03:55:20 +0100 Marek Vasut marex@denx.de wrote:
On Friday, January 31, 2014 at 01:16:27 PM, Lukasz Majewski wrote:
The Samsung's UDC driver is not anymore copying data from USB requests to data aligned internal buffers. Now it works directly in data allocated in the upper layers like UMS, DFU, THOR.
This change is possible since those gadgets now take care to allocate buffers aligned to cache line (CONFIG_SYS_CACHELINE_SIZE ).
Previously the UDC needed to copy this data to internal aligned buffer to prevent from unaligned access exceptions.
Test condition
- test HW + measurement: Trats - Exynos4210 rev.1
- test HW Trats2 - Exynos4412 rev.1
400 MiB compressed rootfs image download with `thor 0 mmc 0`
Measurement: Transmission speed: 27.04 MiB/s
Change-Id: I1df1fbafc72ec703f0367ddee3fedf3a3f5523ed Signed-off-by: Lukasz Majewski l.majewski@samsung.com Cc: Marek Vasut marex@denx.de
You should use ROUND_UP(), not ROUND() throughout the patch. Otherwise you might fail to flush/invalidate the last little bit of data in some cacheline.
I might overlooked something, so please correct me if needed.
I allocate buffers in gadgets which are aligned to cache line with starting address and its size is a multiplication of cache line size (so I will not trash data allocated next to it when I invalidate cache).
In the code I'm using ROUND to invalidate/flush more data than needed (ROUND(176, 32) = 192). I'm prepared for this since buffer in gadget is properly allocated (with DEFINE_CACHE_ALIGN_BUFFER() which uses roundup() internally).
Best regards, Lukasz Majewski
Best regards, Marek Vasut _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot