Re: CSW endpoint status returned STALL after BOT MSC Reset

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Thanks a lot Alan for your help.


On Wed, Oct 30, 2013 at 9:38 PM, Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> wrote:
>
> On Wed, 30 Oct 2013, Pratyush Anand wrote:
>
> > I am using dwc3 driver. I my case kernel version is even a bit old
> > 3.3, but dwc3 patches are almost updated. I am using g_mass_storage.
> >
> > >
> > > Why don't you try running an up-to-date kernel, like 3.11, instead?
> >
> > Yaa, I am trying to upgrade my kernel to 3.12.RC5.
> >
> > To me, it seems more like a mass storage layer issue rather than
> > peripheral layer. I do not have any expertize of mass storage
> > internals, so meanwhile I am providing few more inputs, if some expert
> > from mass storage can give any advice.
>
> I think you have found a bug in the dwc3 driver.
>
> > Please see attached snapshot of lecroy capture for a failing and
> > passing error recovery test. Transfer 10 is a BULK IN transfer, in
> > which SBSU Tag, Residue and status is expected. I see that Verbatim
> > usb3.0 disk passes here, while Linux g_mass_storage stalls.
> >
> > I am also providing usbcv log, if that tells something...
> >
> > INFO  Start time: Wed Oct 30 11:54:06 2013
> > INFO  Configuring device, set configuration = 0x1
> > INFO  NOTE: It is expected the device has reset the data toggles on all Bulk endpoints after the above SetConfiguration call
> > INFO  Setting device interface, interface number = 0x0 and alternate setting = 0x0
> > INFO  NOTE: It is expected the device has reset the data toggles on all Bulk endpoints after the above SetInterface call
> > INFO  Issuing Get Max LUN request
> > INFO  Max LUN value = 0
> > INFO  Issue CBW with invalid signature
>
> At this point, the IGNORE_BULK_OUT bit in g_mass_storage gets set:
>
>                 /*
>                  * The Bulk-only spec says we MUST stall the IN endpoint
>                  * (6.6.1), so it's unavoidable.  It also says we must
>                  * retain this state until the next reset, but there's
>                  * no way to tell the controller driver it should ignore
>                  * Clear-Feature(HALT) requests.
>                  *
>                  * We aren't required to halt the OUT endpoint; instead
>                  * we can simply accept and discard any data received
>                  * until the next reset.
>                  */
>                 wedge_bulk_in_endpoint(fsg);
>                 set_bit(IGNORE_BULK_OUT, &fsg->atomic_bitflags);
>
> > INFO  Issuing invalid CBW
> > INFO  CBW successful
> > INFO  Issuing CSW 2 times, CSW should stall in every case
> > INFO  Issuing CSW 1
> > INFO  Issuing CSW 2
> > INFO  Retrieving status on CSW endpoint
> > INFO  CSW endpoint status = 0x1
> > INFO  CSW endpoint stalled
> > INFO  Clearing stalled CSW endpoint
> > INFO  Issuing CSW 2 times, CSW should stall in every case
> > INFO  Issuing CSW 1
> > INFO  Issuing CSW 2
> > INFO  Issuing CBW 2 times, CBW should either stall or return success
> > INFO  Issuing CBW 1
> > INFO  CBW successful
> > INFO  Issuing BOT MSC Reset, reset should always succeed
>
> At this point, because the IGNORE_BULK_OUT bit is set, g_mass_storage
> issues a usb_ep_clear_halt() call for the bulk-in (CSW) endpoint.
> This tells the dwc3 driver to change the endpoint's status back to 0:
>
>                 if (test_and_clear_bit(IGNORE_BULK_OUT,
>                                        &common->fsg->atomic_bitflags))
>                         usb_ep_clear_halt(common->fsg->bulk_in);
>
> > INFO  Retrieving status on CBW endpoint
> > INFO  CBW endpoint status = 0x0
> > INFO  Retrieving status on CSW endpoint
> > INFO  CSW endpoint status = 0x1
>
> But the status is still set to 1.  Clearly this is a bug in dwc3.

Yes, I had concluded the same at the end of the day.
Hopefully, will have solution tomorrow.

Regards
Pratyush

>
> > ERROR CSW endpoint status returned STALL after BOT MSC Reset
> >
> > FAIL  (5.5.4) The device must support the Bulk-Only Mass Storage Reset.
>
> Alan Stern
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-usb" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux