If DCD supports queuing of stall requests then USB MSC delay work-around is not necessary
This commit is contained in:
parent
c6127ad09d
commit
b0c2b54ec9
@ -81,18 +81,27 @@
|
|||||||
|
|
||||||
/* Configuration ************************************************************/
|
/* Configuration ************************************************************/
|
||||||
|
|
||||||
/* Race condition workaround found by David Hewson. This race condition
|
/* Race condition workaround found by David Hewson. This race condition:
|
||||||
|
*
|
||||||
* "seems to relate to stalling the endpoint when a short response is
|
* "seems to relate to stalling the endpoint when a short response is
|
||||||
* generated which causes a residue to exist when the CSW would be returned.
|
* generated which causes a residue to exist when the CSW would be returned.
|
||||||
* I think there's two issues here. The first being if the transfer which
|
* I think there's two issues here. The first being if the transfer which
|
||||||
* had just been queued before the stall had not completed then it wouldn't
|
* had just been queued before the stall had not completed then it wouldn't
|
||||||
* then complete once the endpoint was stalled? The second is that the
|
* then complete once the endpoint was stalled? The second is that the
|
||||||
* subsequent transfer for the CSW would be dropped on the floor (by the
|
* subsequent transfer for the CSW would be dropped on the floor (by the
|
||||||
* epsubmit() function) if the end point was still stalled as the control
|
* epsubmit() function) if the end point was still stalled as the control
|
||||||
* transfer to resume it hadn't occurred."
|
* transfer to resume it hadn't occurred."
|
||||||
|
*
|
||||||
|
* If queuing of stall requests is supported by DCD then this workaround is
|
||||||
|
* not required. In this case, (1) the stall is not sent until all write
|
||||||
|
* requests preceding the stall request are sent, (2) the stall is sent,
|
||||||
|
* and then after the stall is cleared, (3) all write requests queued after
|
||||||
|
* the stall are sent.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define CONFIG_USBMSC_RACEWAR 1
|
#ifndef CONFIG_ARCH_USBDEV_STALLQUEUE
|
||||||
|
# define USBMSC_STALL_RACEWAR 1
|
||||||
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Private Types
|
* Private Types
|
||||||
@ -2343,7 +2352,7 @@ static int usbmsc_cmdfinishstate(FAR struct usbmsc_dev_s *priv)
|
|||||||
{
|
{
|
||||||
usbtrace(TRACE_CLSERROR(USBMSC_TRACEERR_CMDFINISHRESIDUE), (uint16_t)priv->residue);
|
usbtrace(TRACE_CLSERROR(USBMSC_TRACEERR_CMDFINISHRESIDUE), (uint16_t)priv->residue);
|
||||||
|
|
||||||
#ifdef CONFIG_USBMSC_RACEWAR
|
#ifdef USBMSC_STALL_RACEWAR
|
||||||
/* (See description of the workaround at the top of the file).
|
/* (See description of the workaround at the top of the file).
|
||||||
* First, wait for the transfer to complete, then stall the endpoint
|
* First, wait for the transfer to complete, then stall the endpoint
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user