status = DWC3_TRB_SIZE_TRBSTS(trb->size);
        if (status == DWC3_TRBSTS_SETUP_PENDING) {
+               dwc->setup_packet_pending = true;
+
                dwc3_trace(trace_dwc3_ep0, "Setup Pending received");
 
                if (r)
        }
 
        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");
+       }
 
        dwc->ep0state = EP0_SETUP_PHASE;
        dwc3_ep0_out_start(dwc);
 static void dwc3_ep0_xfernotready(struct dwc3 *dwc,
                const struct dwc3_event_depevt *event)
 {
-       dwc->setup_packet_pending = true;
-
        switch (event->status) {
        case DEPEVT_STATUS_CONTROL_DATA:
                dwc3_trace(trace_dwc3_ep0, "Control Data");
 
         *
         * Our suggested workaround is to follow the Disconnect
         * Event steps here, instead, based on a setup_packet_pending
-        * flag. Such flag gets set whenever we have a XferNotReady
-        * event on EP0 and gets cleared on XferComplete for the
+        * flag. Such flag gets set whenever we have a SETUP_PENDING
+        * status for EP0 TRBs and gets cleared on XferComplete for the
         * same endpoint.
         *
         * Refers to: