[U-Boot] [PATCH 1/2] ush: ehci: initialize altnext pointers in QH

Marek Vasut marex at denx.de
Fri Feb 7 03:53:08 CET 2014


On Thursday, February 06, 2014 at 09:13:05 PM, Stephen Warren wrote:
> From: Stephen Warren <swarren at nvidia.com>
> 
> A QH's overlay QTD altnext pointer should be explicitly marked invalid
> so that the EHCI controller knows to look at the QTD next pointer. Update
> the driver to do this.

Can you please add a reference to the spec where this is stated ?

> Signed-off-by: Stephen Warren <swarren at nvidia.com>
> ---
>  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 17187caed482..7068b762d8a4 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;
> 
> @@ -1186,6 +1187,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;

So next is td and altnext is terminate here ?

>  		qh->qh_endpt1 = (0 << 28) | /* No NAK reload (ehci 4.9) */
>  			(usb_maxpacket(dev, pipe) << 16) | /* MPS */
>  			(1 << 14) |

Best regards,
Marek Vasut


More information about the U-Boot mailing list