提交 72b663a9 编写于 作者: C Chunfeng Yun 提交者: Greg Kroah-Hartman

usb: xhci: fix TDS for MTK xHCI1.1

For MTK's xHCI 1.0 or latter, TD size is the number of max
packet sized packets remaining in the TD, not including
this TRB (following spec).

For MTK's xHCI 0.96 and older, TD size is the number of max
packet sized packets remaining in the TD, including this TRB
(not following spec).

Cc: stable <stable@vger.kernel.org>
Signed-off-by: NChunfeng Yun <chunfeng.yun@mediatek.com>
Signed-off-by: NMathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
上级 5d9b70f7
...@@ -3112,7 +3112,7 @@ static u32 xhci_td_remainder(struct xhci_hcd *xhci, int transferred, ...@@ -3112,7 +3112,7 @@ static u32 xhci_td_remainder(struct xhci_hcd *xhci, int transferred,
{ {
u32 maxp, total_packet_count; u32 maxp, total_packet_count;
/* MTK xHCI is mostly 0.97 but contains some features from 1.0 */ /* MTK xHCI 0.96 contains some features from 1.0 */
if (xhci->hci_version < 0x100 && !(xhci->quirks & XHCI_MTK_HOST)) if (xhci->hci_version < 0x100 && !(xhci->quirks & XHCI_MTK_HOST))
return ((td_total_len - transferred) >> 10); return ((td_total_len - transferred) >> 10);
...@@ -3121,8 +3121,8 @@ static u32 xhci_td_remainder(struct xhci_hcd *xhci, int transferred, ...@@ -3121,8 +3121,8 @@ static u32 xhci_td_remainder(struct xhci_hcd *xhci, int transferred,
trb_buff_len == td_total_len) trb_buff_len == td_total_len)
return 0; return 0;
/* for MTK xHCI, TD size doesn't include this TRB */ /* for MTK xHCI 0.96, TD size include this TRB, but not in 1.x */
if (xhci->quirks & XHCI_MTK_HOST) if ((xhci->quirks & XHCI_MTK_HOST) && (xhci->hci_version < 0x100))
trb_buff_len = 0; trb_buff_len = 0;
maxp = usb_endpoint_maxp(&urb->ep->desc); maxp = usb_endpoint_maxp(&urb->ep->desc);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册