From: Sergei Shtylyov <sshtylyov@mvista.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH] EHCI: zero out QH transfer overlay in ehci_submit_async()
Date: Mon, 28 Jun 2010 21:23:30 +0400 [thread overview]
Message-ID: <4C28DA92.9080101@mvista.com> (raw)
In-Reply-To: <AANLkTimJNejrKEGg5Dzi12TBxB9-mFBsMu6s1vnK3MF7@mail.gmail.com>
Hello.
Remy Bohmer wrote:
> 2010/6/25 Sergei Shtylyov <sshtylyov@ru.mvista.com>:
>> ehci_submit_async() doesn't really zero out the QH transfer overlay (as the EHCI
>> specification suggests) which leads to the controller seeing the 'token' field
>> as the previous call has left it, i.e.:
>> - if a timeout occured on the previous call (Active bit left as 1), controller
>> incorrectly tries to complete a previous transaction on a newly programmed
>> endpoint;
>> - if a halt occured on the previous call (Halted bit set to 1), controller just
>> ignores the newly programmed TD(s) and the function then keeps returning error
>> ad infinitum.
>> This turned out to be caused by the wrong orger of the arguments to the memset()
>> call in ehci_alloc(), so the allocated TDs weren't cleared either.
>> While at it, stop needlessly initializing the "next" pointers in the QH transfer
>> overlay...
>> Signed-off-by: Sergei Shtylyov <sshtylyov@mvista.com>
> Acked-by: Remy Bohmer <linux@bohmer.net>
> Wolfgang, can you please pull this patch in the v2010.06 release?
Don't pull it yet, I have a fixed up version coming shortly.
> Kind regards,
> Remy
>> ---
>> This is quite serious error, so would be good to have the patch in v2010.06...
>> drivers/usb/host/ehci-hcd.c | 4 +---
>> 1 file changed, 1 insertion(+), 3 deletions(-)
>> Index: u-boot/drivers/usb/host/ehci-hcd.c
>> ===================================================================
>> --- u-boot.orig/drivers/usb/host/ehci-hcd.c
>> +++ u-boot/drivers/usb/host/ehci-hcd.c
>> @@ -275,7 +275,7 @@ static void *ehci_alloc(size_t sz, size_
>> return NULL;
>> }
>>
>> - memset(p, sz, 0);
>> + memset(p, 0, sz);
>> return p;
>> }
>>
>> @@ -349,8 +349,6 @@ ehci_submit_async(struct usb_device *dev
>> (dev->portnr << 23) |
>> (dev->parent->devnum << 16) | (0 << 8) | (0 << 0);
>> qh->qh_endpt2 = cpu_to_hc32(endpt);
>> - qh->qh_overlay.qt_next = cpu_to_hc32(QT_NEXT_TERMINATE);
This line is still needed as it turned out.
WBR, Sergei
prev parent reply other threads:[~2010-06-28 17:23 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-25 19:08 [U-Boot] [PATCH] EHCI: zero out QH transfer overlay in ehci_submit_async() Sergei Shtylyov
2010-06-25 19:44 ` Remy Bohmer
2010-06-28 17:23 ` Sergei Shtylyov [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4C28DA92.9080101@mvista.com \
--to=sshtylyov@mvista.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.