Rafal Jaworowski wrote:
> On 2009-08-19, at 17:30, Sam Leffler wrote:
>> Rafal Jaworowski wrote:
>>> Author: raj
>>> Date: Wed Aug 19 14:39:08 2009
>>> New Revision: 196380
>>> URL: http://svn.freebsd.org/changeset/base/196380
>>> Fix USB cache sync operations for platforms with non-coherent DMA.
>>> - usb_pc_cpu_invalidate() is called between [consecutive] reads
>>> from a device,
>>> so a sequence of BUS_DMASYNC_POSTREAD and _PREREAD should be used.
>>> Note we
>>> cannot use or'ed shorthand ( _POSTREAD | _PREREAD) for BUS_DMASYNC
>>> flags, as
>>> the low level bus dma sync operation is implementation dependent
>>> and we
>>> cannot assume the required order of operations to be guaranteed.
>>> - usb_pc_cpu_flush() is called before writing to a device, so
>>> BUS_DMASYNC_PREWRITE should be used.
>>> Submitted by: Grzegorz Bernacki
>>> Reviewed by: HPS, arm@, usb@ ML
>>> Tested by: HPS, Mike Tancsa
>>> Approved by: re (kib)
>>> Obtained from: Semihalf
>> Is this different from the patch I tested on Gateworks 2358 boards
>> which didn't completely resolve problems?
> Hm, not sure what patch you have tested with GW. There was an initial
> workaround for this problem from late June time frame, and this commit
> is a refined fix identical to the patch posted 05 Aug to arm@. There
> were other ARM patches in the meantime involving cache sync, but they
> were pmap-related.
I'm pretty sure it's the same one and was combined with other changes
you describe. Unfortunately reproducing the problem requires an
out-of-tree driver so we can't be sure whether all issues are resolved
on the platform.