Patchwork Bug #757654: UHCI fails to signal stall response patch

login
register
mail settings
Submitter Jan Vesely
Date May 6, 2011, 8:07 a.m.
Message ID <BANLkTik=gr0K9-_fOTqPQORo37xs2D+9Yg@mail.gmail.com>
Download mbox | patch
Permalink /patch/94343/
State New
Headers show

Comments

Jan Vesely - May 6, 2011, 8:07 a.m.
hi,
using the modified (single line) patch only works half-way, it sets
the value in status register (guess that's what that line does :))
but hw interrupt is not generated.

I tried adding uhci_update_irq and this patch:

works.

jan

On Thu, May 5, 2011 at 2:05 PM, Gerd Hoffmann <kraxel@redhat.com> wrote:
>> diff --git a/hw/usb-uhci.c b/hw/usb-uhci.c
>> index 346db3e..a51d89b 100644
>> --- a/hw/usb-uhci.c
>> +++ b/hw/usb-uhci.c
>> @@ -732,11 +732,21 @@ out:
>>      case USB_RET_STALL:
>>          td->ctrl |= TD_CTRL_STALL;
>>          td->ctrl&= ~TD_CTRL_ACTIVE;
>> +        s->status |= UHCI_STS_USBERR;
>
> Just this line should be enougth.
>
>>      case USB_RET_BABBLE:
>>          td->ctrl |= TD_CTRL_BABBLE | TD_CTRL_STALL;
>>          td->ctrl&= ~TD_CTRL_ACTIVE;
>> +        s->status |= UHCI_STS_USBERR;
>
> Likewise.
>
> Tried that?
>
> cheers,
>  Gerd
>
>
Gerd Hoffmann - May 9, 2011, 7:55 a.m.
On 05/06/11 10:07, Jan Vesely wrote:
> hi,
> using the modified (single line) patch only works half-way, it sets
> the value in status register (guess that's what that line does :))
> but hw interrupt is not generated.
>
> I tried adding uhci_update_irq and this patch:

> +        s->status |= UHCI_STS_USBERR;
> +        uhci_update_irq(s);

> works.

Good.  Can you create a patch with a changelog entry & signed-off 
please?  I'll go queue it up then.

thanks,
   Gerd

Patch

diff --git a/hw/usb-uhci.c b/hw/usb-uhci.c
index a65e0b3..1e9c1e7 100644
--- a/hw/usb-uhci.c
+++ b/hw/usb-uhci.c
@@ -702,11 +702,15 @@  out:
     case USB_RET_STALL:
         td->ctrl |= TD_CTRL_STALL;
         td->ctrl &= ~TD_CTRL_ACTIVE;
+        s->status |= UHCI_STS_USBERR;
+        uhci_update_irq(s);
         return 1;

     case USB_RET_BABBLE:
         td->ctrl |= TD_CTRL_BABBLE | TD_CTRL_STALL;
         td->ctrl &= ~TD_CTRL_ACTIVE;
+        s->status |= UHCI_STS_USBERR;
+        uhci_update_irq(s);
         /* frame interrupted */
         return -1;