diff options
Diffstat (limited to 'drivers/usb/host/isp1760-hcd.c')
-rw-r--r-- | drivers/usb/host/isp1760-hcd.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/usb/host/isp1760-hcd.c b/drivers/usb/host/isp1760-hcd.c index 9600a58299db..9f01293600b0 100644 --- a/drivers/usb/host/isp1760-hcd.c +++ b/drivers/usb/host/isp1760-hcd.c | |||
@@ -17,7 +17,9 @@ | |||
17 | #include <linux/debugfs.h> | 17 | #include <linux/debugfs.h> |
18 | #include <linux/uaccess.h> | 18 | #include <linux/uaccess.h> |
19 | #include <linux/io.h> | 19 | #include <linux/io.h> |
20 | #include <linux/mm.h> | ||
20 | #include <asm/unaligned.h> | 21 | #include <asm/unaligned.h> |
22 | #include <asm/cacheflush.h> | ||
21 | 23 | ||
22 | #include "../core/hcd.h" | 24 | #include "../core/hcd.h" |
23 | #include "isp1760-hcd.h" | 25 | #include "isp1760-hcd.h" |
@@ -904,6 +906,14 @@ __acquires(priv->lock) | |||
904 | status = 0; | 906 | status = 0; |
905 | } | 907 | } |
906 | 908 | ||
909 | if (usb_pipein(urb->pipe) && usb_pipetype(urb->pipe) != PIPE_CONTROL) { | ||
910 | void *ptr; | ||
911 | for (ptr = urb->transfer_buffer; | ||
912 | ptr < urb->transfer_buffer + urb->transfer_buffer_length; | ||
913 | ptr += PAGE_SIZE) | ||
914 | flush_dcache_page(virt_to_page(ptr)); | ||
915 | } | ||
916 | |||
907 | /* complete() can reenter this HCD */ | 917 | /* complete() can reenter this HCD */ |
908 | usb_hcd_unlink_urb_from_ep(priv_to_hcd(priv), urb); | 918 | usb_hcd_unlink_urb_from_ep(priv_to_hcd(priv), urb); |
909 | spin_unlock(&priv->lock); | 919 | spin_unlock(&priv->lock); |
@@ -1039,12 +1049,12 @@ static void do_atl_int(struct usb_hcd *usb_hcd) | |||
1039 | if (!nakcount && (dw3 & DW3_QTD_ACTIVE)) { | 1049 | if (!nakcount && (dw3 & DW3_QTD_ACTIVE)) { |
1040 | u32 buffstatus; | 1050 | u32 buffstatus; |
1041 | 1051 | ||
1042 | /* XXX | 1052 | /* |
1043 | * NAKs are handled in HW by the chip. Usually if the | 1053 | * NAKs are handled in HW by the chip. Usually if the |
1044 | * device is not able to send data fast enough. | 1054 | * device is not able to send data fast enough. |
1045 | * This did not trigger for a long time now. | 1055 | * This happens mostly on slower hardware. |
1046 | */ | 1056 | */ |
1047 | printk(KERN_ERR "Reloading ptd %p/%p... qh %p readed: " | 1057 | printk(KERN_NOTICE "Reloading ptd %p/%p... qh %p read: " |
1048 | "%d of %zu done: %08x cur: %08x\n", qtd, | 1058 | "%d of %zu done: %08x cur: %08x\n", qtd, |
1049 | urb, qh, PTD_XFERRED_LENGTH(dw3), | 1059 | urb, qh, PTD_XFERRED_LENGTH(dw3), |
1050 | qtd->length, done_map, | 1060 | qtd->length, done_map, |