trb_link->ctrl |= DWC3_TRB_CTRL_HWO;
        }
 
+       /*
+        * Issue StartTransfer here with no-op TRB so we can always rely on No
+        * Response Update Transfer command.
+        */
+       if (usb_endpoint_xfer_bulk(desc)) {
+               struct dwc3_gadget_ep_cmd_params params;
+               struct dwc3_trb *trb;
+               dma_addr_t trb_dma;
+               u32 cmd;
+
+               memset(¶ms, 0, sizeof(params));
+               trb = &dep->trb_pool[0];
+               trb_dma = dwc3_trb_dma_offset(dep, trb);
+
+               params.param0 = upper_32_bits(trb_dma);
+               params.param1 = lower_32_bits(trb_dma);
+
+               cmd = DWC3_DEPCMD_STARTTRANSFER;
+
+               ret = dwc3_send_gadget_ep_cmd(dep, cmd, ¶ms);
+               if (ret < 0)
+                       return ret;
+
+               dep->flags |= DWC3_EP_BUSY;
+
+               dep->resource_index = dwc3_gadget_ep_get_transfer_index(dep);
+               WARN_ON_ONCE(!dep->resource_index);
+       }
+
        return 0;
 }