Hi, Felipe Balbi <felipe.balbi@xxxxxxxxxxxxxxx> writes: >> Thinh Nguyen <Thinh.Nguyen@xxxxxxxxxxxx> writes: >>>> drivers/usb/dwc3/gadget.c | 5 +++++ >>>> 1 file changed, 5 insertions(+) >>>> >>>> diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c >>>> index 6faf484e5dfc..0a664d8eba3f 100644 >>>> --- a/drivers/usb/dwc3/gadget.c >>>> +++ b/drivers/usb/dwc3/gadget.c >>>> @@ -1379,6 +1379,9 @@ int __dwc3_gadget_ep_set_halt(struct dwc3_ep >>>> *dep, int value, int protocol) >>>> unsigned transfer_in_flight; >>>> unsigned started; >>>> >>>> + if (dep->flags & DWC3_EP_STALL) >>>> + return 0; >>>> + >>>> if (dep->number > 1) >>>> trb = dwc3_ep_prev_trb(dep, dep->trb_enqueue); >>>> else >>>> @@ -1400,6 +1403,8 @@ int __dwc3_gadget_ep_set_halt(struct dwc3_ep >>>> *dep, int value, int protocol) >>>> else >>>> dep->flags |= DWC3_EP_STALL; >>>> } else { >>>> + if (!(dep->flags & DWC3_EP_STALL)) >>>> + return 0; >>>> >>>> ret = dwc3_send_clear_stall_ep_cmd(dep); >>>> if (ret) >>>> -- >>>> 2.11.0.295.gd7dffce1ce >>>> >>>> -- >>> >>> I encounter an issue when I test mainline with USB 3 CV MSC test and >>> bisected to this patch. >>> >>> Tester: USB 3 CV test (v2.1.3.0). >>> Function Driver: f_mass_storage >>> Reproducibility: always >>> >>> The failure occurs under MSC Error Recovery Test (TD 1.4). >>> >>> Failure from the test sequence as follow (MSC compliance test spec) : >>> 1. Place the device in the desired starting state. >>> 2. Issue a Case 9 CBW (see Table 2) but with invalid signature of 0xDEADBEEF. >>> 3. Issue several In requests to the Bulk-Only Data Interface Bulk In endpoint. Verify a >>> STALL handshake is returned. If STALL handshake is not returned, skip to step 11. >>> 4. Issue a Get_Status(endpoint) request targeting the Bulk-Only Data Interface bulk In >>> endpoint. Verify that it completes normally, reports endpoint halt status. >>> >>> ***After this point the device idles for 10 seconds and resets. *** >>> >>> Test fails. >> >> I've been looking at this and based on sniffer and dwc3 tracepoints, it >> seems like dwc3 is behaving properly. The real issue seems to be that >> g_mass_storage isn't queueing a new request to IN endpoint. >> >> I'll continue debugging this and try to find a solution that doesn't >> involve reverting $subject. > > oh no, wait. ep2out misses XferInProgress: > > file-storage-1592 [000] d..1 152.809922: dwc3_ep_queue: ep2out: req ffff88003cd6ee40 length 0/512 zsI ==> -115 > file-storage-1592 [000] d..1 152.809931: dwc3_prepare_trb: ep2out: 3/8 trb ffff88003a196050 buf 000000002d5e4000 size 512 ctrl 00000819 (HlcS:sC:normal) > file-storage-1592 [000] d..1 152.809942: dwc3_gadget_ep_cmd: ep2out: cmd 'Update Transfer' [262151] params 00000000 00000000 00000000 --> status: Successful > file-storage-1592 [000] .... 152.809951: usb_ep_queue: ep2out: length 0/512 sgs 0/0 stream 0 zsI status -115 --> 0 > irq/34-dwc3-1593 [001] d..1 152.810212: dwc3_event: event (0000c040): ep0out: Transfer Complete [Setup Phase] > irq/34-dwc3-1593 [001] d..1 152.810218: dwc3_ctrl_req: bRequestType 02 bRequest 01 wValue 0000 wIndex 0002 wLength 0 > irq/34-dwc3-1593 [001] d..1 152.810228: __dwc3_gadget_ep_set_halt: ep2out: NOT stalled > > Sniffer shows me this completing, but I don't see IRQ for this. BTW, I just tested without $subject and it fails the same way. This is caused by something else. Can you rerun your bisect while I look at the problem here? -- balbi
Attachment:
signature.asc
Description: PGP signature