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
_______________________________________________
freebsd-usb@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-usb
To unsubscribe, send any mail to "freebsd-usb-unsubscr...@freebsd.org"

Reply via email to