Commit b5d335e5 authored by Felipe Balbi's avatar Felipe Balbi

usb: dwc3: ep0: fix setup_packet_pending initialization

It just ocurred to me that dwc3 already gives a
really hint of when a setup packet is pending and
that's the SETUP_PENDING TRB Status for EP0 IRQs.

Fix setup_packet_pending initialization based on
that. While at that, also make sure the comment in
gadget.c matches what code is doing.
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent ac7bdcc1
...@@ -817,6 +817,8 @@ static void dwc3_ep0_complete_data(struct dwc3 *dwc, ...@@ -817,6 +817,8 @@ static void dwc3_ep0_complete_data(struct dwc3 *dwc,
status = DWC3_TRB_SIZE_TRBSTS(trb->size); status = DWC3_TRB_SIZE_TRBSTS(trb->size);
if (status == DWC3_TRBSTS_SETUP_PENDING) { if (status == DWC3_TRBSTS_SETUP_PENDING) {
dwc->setup_packet_pending = true;
dwc3_trace(trace_dwc3_ep0, "Setup Pending received"); dwc3_trace(trace_dwc3_ep0, "Setup Pending received");
if (r) if (r)
...@@ -916,8 +918,10 @@ static void dwc3_ep0_complete_status(struct dwc3 *dwc, ...@@ -916,8 +918,10 @@ static void dwc3_ep0_complete_status(struct dwc3 *dwc,
} }
status = DWC3_TRB_SIZE_TRBSTS(trb->size); status = DWC3_TRB_SIZE_TRBSTS(trb->size);
if (status == DWC3_TRBSTS_SETUP_PENDING) if (status == DWC3_TRBSTS_SETUP_PENDING) {
dwc->setup_packet_pending = true;
dwc3_trace(trace_dwc3_ep0, "Setup Pending received"); dwc3_trace(trace_dwc3_ep0, "Setup Pending received");
}
dwc->ep0state = EP0_SETUP_PHASE; dwc->ep0state = EP0_SETUP_PHASE;
dwc3_ep0_out_start(dwc); dwc3_ep0_out_start(dwc);
...@@ -1063,8 +1067,6 @@ static void dwc3_ep0_end_control_data(struct dwc3 *dwc, struct dwc3_ep *dep) ...@@ -1063,8 +1067,6 @@ static void dwc3_ep0_end_control_data(struct dwc3 *dwc, struct dwc3_ep *dep)
static void dwc3_ep0_xfernotready(struct dwc3 *dwc, static void dwc3_ep0_xfernotready(struct dwc3 *dwc,
const struct dwc3_event_depevt *event) const struct dwc3_event_depevt *event)
{ {
dwc->setup_packet_pending = true;
switch (event->status) { switch (event->status) {
case DEPEVT_STATUS_CONTROL_DATA: case DEPEVT_STATUS_CONTROL_DATA:
dwc3_trace(trace_dwc3_ep0, "Control Data"); dwc3_trace(trace_dwc3_ep0, "Control Data");
......
...@@ -2230,8 +2230,8 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc) ...@@ -2230,8 +2230,8 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc)
* *
* Our suggested workaround is to follow the Disconnect * Our suggested workaround is to follow the Disconnect
* Event steps here, instead, based on a setup_packet_pending * Event steps here, instead, based on a setup_packet_pending
* flag. Such flag gets set whenever we have a XferNotReady * flag. Such flag gets set whenever we have a SETUP_PENDING
* event on EP0 and gets cleared on XferComplete for the * status for EP0 TRBs and gets cleared on XferComplete for the
* same endpoint. * same endpoint.
* *
* Refers to: * Refers to:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment