Author: hselasky
Date: Fri Jan 24 07:40:58 2014
New Revision: 261102
URL: http://svnweb.freebsd.org/changeset/base/261102

Log:
  MFC r260563:
  Make sure reserved fields of the EHCI DMA descriptors are not dirty
  after previous transfers.

Modified:
  stable/8/sys/dev/usb/controller/ehci.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/dev/   (props changed)
  stable/8/sys/dev/usb/   (props changed)

Modified: stable/8/sys/dev/usb/controller/ehci.c
==============================================================================
--- stable/8/sys/dev/usb/controller/ehci.c      Fri Jan 24 07:35:27 2014        
(r261101)
+++ stable/8/sys/dev/usb/controller/ehci.c      Fri Jan 24 07:40:58 2014        
(r261102)
@@ -1647,12 +1647,17 @@ restart:
                        }
                        td->len = 0;
 
+                       /* properly reset reserved fields */
                        td->qtd_buffer[0] = 0;
-                       td->qtd_buffer_hi[0] = 0;
-
                        td->qtd_buffer[1] = 0;
+                       td->qtd_buffer[2] = 0;
+                       td->qtd_buffer[3] = 0;
+                       td->qtd_buffer[4] = 0;
+                       td->qtd_buffer_hi[0] = 0;
                        td->qtd_buffer_hi[1] = 0;
-
+                       td->qtd_buffer_hi[2] = 0;
+                       td->qtd_buffer_hi[3] = 0;
+                       td->qtd_buffer_hi[4] = 0;
                } else {
 
                        uint8_t x;
@@ -1707,6 +1712,12 @@ restart:
                            htohc32(temp->sc,
                            buf_res.physaddr & (~0xFFF));
                        td->qtd_buffer_hi[x] = 0;
+
+                       /* properly reset reserved fields */
+                       while (++x < EHCI_QTD_NBUFFERS) {
+                               td->qtd_buffer[x] = 0;
+                               td->qtd_buffer_hi[x] = 0;
+                       }
                }
 
                if (td_next) {
@@ -1994,6 +2005,18 @@ ehci_setup_standard_chain(struct usb_xfe
        qh->qh_qtd.qtd_altnext =
            htohc32(temp.sc, EHCI_LINK_TERMINATE);
 
+       /* properly reset reserved fields */
+       qh->qh_qtd.qtd_buffer[0] = 0;
+       qh->qh_qtd.qtd_buffer[1] = 0;
+       qh->qh_qtd.qtd_buffer[2] = 0;
+       qh->qh_qtd.qtd_buffer[3] = 0;
+       qh->qh_qtd.qtd_buffer[4] = 0;
+       qh->qh_qtd.qtd_buffer_hi[0] = 0;
+       qh->qh_qtd.qtd_buffer_hi[1] = 0;
+       qh->qh_qtd.qtd_buffer_hi[2] = 0;
+       qh->qh_qtd.qtd_buffer_hi[3] = 0;
+       qh->qh_qtd.qtd_buffer_hi[4] = 0;
+
        usb_pc_cpu_flush(qh->page_cache);
 
        if (xfer->xroot->udev->flags.self_suspended == 0) {
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to