usb_pc_cpu_flush
Hans Petter Selasky
hps at selasky.org
Tue Jan 13 15:26:32 UTC 2015
On 01/13/15 15:49, Ian Lepore wrote:
> On Tue, 2015-01-13 at 00:14 -0700, kott wrote:
>> Yes with cache disabled, this problem is not seen. Seems to be with a issue
>> with l2 cache.
>> Thanks kott
>
> Except that there are no known problems with l2 cache on armv7 right
> now. There are known problems with the USB driver using the busdma
> routines incorrectly, which accidentally works okay on x86 platforms but
> likely not so well on others.
>
Hi,
If there is a problem it is in "usb_pc_cpu_flush()" or
"usb_pc_cpu_invalidate()":
void
usb_pc_cpu_flush(struct usb_page_cache *pc)
{
if (pc->page_offset_end == pc->page_offset_buf) {
/* nothing has been loaded into this page cache! */
return;
}
bus_dmamap_sync(pc->tag, pc->map, BUS_DMASYNC_PREWRITE);
}
USB has a very simple DMA sync language, either flush or invalidate.
These are used correctly from what I can see with regard to the FreeBSD
USB specification.
If the "usb_pc_cpu_flush()" function does not cause the CPU cache to be
written to RAM before the function returns, please let me know.
--HPS
More information about the freebsd-usb
mailing list