lkml.org 
[lkml]   [2013]   [Feb]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[ 02/66] xhci: Fix isoc TD encoding.
    3.2-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Sarah Sharp <sarah.a.sharp@linux.intel.com>

    commit 760973d2a74b93eb1697981f7448f0e62767cfc4 upstream.

    An isochronous TD is comprised of one isochronous TRB chained to zero or
    more normal TRBs. Only the isoc TRB has the TBC and TLBPC fields. The
    normal TRBs must set those fields to zeroes. The code was setting the
    TBC and TLBPC fields for both isoc and normal TRBs. Fix this.

    This should be backported to stable kernels as old as 3.0, that contain
    the commit b61d378f2da41c748aba6ca19d77e1e1c02bcea5 " xhci 1.0: Set
    transfer burst last packet count field."

    Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    drivers/usb/host/xhci-ring.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
    index 59fb5c6..d1ff133 100644
    --- a/drivers/usb/host/xhci-ring.c
    +++ b/drivers/usb/host/xhci-ring.c
    @@ -3664,9 +3664,11 @@ static int xhci_queue_isoc_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
    td = urb_priv->td[i];
    for (j = 0; j < trbs_per_td; j++) {
    u32 remainder = 0;
    - field = TRB_TBC(burst_count) | TRB_TLBPC(residue);
    + field = 0;

    if (first_trb) {
    + field = TRB_TBC(burst_count) |
    + TRB_TLBPC(residue);
    /* Queue the isoc TRB */
    field |= TRB_TYPE(TRB_ISOC);
    /* Assume URB_ISO_ASAP is set */



    \
     
     \ /
      Last update: 2013-02-18 01:21    [W:16.757 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site