* [U-Boot] [PATCH V2] ush: ehci: initialize altnext pointers in QH
@ 2014-02-07 16:53 Stephen Warren
2014-02-08 14:01 ` Marek Vasut
0 siblings, 1 reply; 2+ messages in thread
From: Stephen Warren @ 2014-02-07 16:53 UTC (permalink / raw)
To: u-boot
From: Stephen Warren <swarren@nvidia.com>
Section 4.10.2 "Advance Queue" of ehci-specification-for-usb.pdf
specifies how an EHCI controller loads a new QTD for processing if the
QH is not already marked as active. It states:
=====
If the field Bytes to Transfer is not zero and the T-bit in the Alternate
Next qTD Pointer is set to zero, then the host controller uses the
Alternate Next qTD Pointer. Otherwise, the host controller uses the Next
qTD Pointer. If Next qTD Pointer?s T-bit is set to a one, then the host
controller exits this state and uses the horizontal pointer to the next
schedule data structure.
=====
Hence, we must ensure that the alternate next QTD pointer's T-bit
(TERMINATE) is set, so the EHCI controller knows to use the next QTD
pointer.
Signed-off-by: Stephen Warren <swarren@nvidia.com>
---
v2: Quote text from the EHCI specification to justify the change.
---
drivers/usb/host/ehci-hcd.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
index ffc7dbdc215a..6017090ebeec 100644
--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -395,6 +395,7 @@ ehci_submit_async(struct usb_device *dev, unsigned long pipe, void *buffer,
QH_ENDPT2_UFCMASK(0) | QH_ENDPT2_UFSMASK(0);
qh->qh_endpt2 = cpu_to_hc32(endpt);
qh->qh_overlay.qt_next = cpu_to_hc32(QT_NEXT_TERMINATE);
+ qh->qh_overlay.qt_altnext = cpu_to_hc32(QT_NEXT_TERMINATE);
tdp = &qh->qh_overlay.qt_next;
@@ -1188,6 +1189,7 @@ create_int_queue(struct usb_device *dev, unsigned long pipe, int queuesize,
qh->qh_link = QH_LINK_TERMINATE;
qh->qh_overlay.qt_next = (uint32_t)td;
+ qh->qh_overlay.qt_altnext = QT_NEXT_TERMINATE;
qh->qh_endpt1 = (0 << 28) | /* No NAK reload (ehci 4.9) */
(usb_maxpacket(dev, pipe) << 16) | /* MPS */
(1 << 14) |
--
1.8.1.5
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [U-Boot] [PATCH V2] ush: ehci: initialize altnext pointers in QH
2014-02-07 16:53 [U-Boot] [PATCH V2] ush: ehci: initialize altnext pointers in QH Stephen Warren
@ 2014-02-08 14:01 ` Marek Vasut
0 siblings, 0 replies; 2+ messages in thread
From: Marek Vasut @ 2014-02-08 14:01 UTC (permalink / raw)
To: u-boot
On Friday, February 07, 2014 at 05:53:50 PM, Stephen Warren wrote:
> From: Stephen Warren <swarren@nvidia.com>
>
> Section 4.10.2 "Advance Queue" of ehci-specification-for-usb.pdf
> specifies how an EHCI controller loads a new QTD for processing if the
> QH is not already marked as active. It states:
>
> =====
> If the field Bytes to Transfer is not zero and the T-bit in the Alternate
> Next qTD Pointer is set to zero, then the host controller uses the
> Alternate Next qTD Pointer. Otherwise, the host controller uses the Next
> qTD Pointer. If Next qTD Pointer?s T-bit is set to a one, then the host
> controller exits this state and uses the horizontal pointer to the next
> schedule data structure.
> =====
>
> Hence, we must ensure that the alternate next QTD pointer's T-bit
> (TERMINATE) is set, so the EHCI controller knows to use the next QTD
> pointer.
>
> Signed-off-by: Stephen Warren <swarren@nvidia.com>
Applied, thanks.
Best regards,
Marek Vasut
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2014-02-08 14:01 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-02-07 16:53 [U-Boot] [PATCH V2] ush: ehci: initialize altnext pointers in QH Stephen Warren
2014-02-08 14:01 ` Marek Vasut
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox