Skip to content

Commit 8b50d37

Browse files
MarekPietacarlescufi
authored andcommitted
drivers: usb: udc_dwc2: Notify upper layer on failed TX
Change ensures that `dwc2_handle_xfer_next` would notify upper layer if `dwc2_tx_fifo_write` fails. This is necessary to ensure that upper layer is aware of the failed TX for the submitted transfer. It also ensures that the submitted transfer is removed from the TX queue. Signed-off-by: Marek Pieta <[email protected]> Signed-off-by: Kamil Piszczek <[email protected]>
1 parent da97542 commit 8b50d37

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

drivers/usb/udc/udc_dwc2.c

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -639,9 +639,18 @@ static void dwc2_handle_xfer_next(const struct device *dev,
639639
if (USB_EP_DIR_IS_OUT(cfg->addr)) {
640640
dwc2_prep_rx(dev, buf, cfg);
641641
} else {
642-
if (dwc2_tx_fifo_write(dev, cfg, buf)) {
643-
LOG_ERR("Failed to start write to TX FIFO, ep 0x%02x",
644-
cfg->addr);
642+
int err = dwc2_tx_fifo_write(dev, cfg, buf);
643+
644+
if (err) {
645+
LOG_ERR("Failed to start write to TX FIFO, ep 0x%02x (err: %d)",
646+
cfg->addr, err);
647+
648+
buf = udc_buf_get(dev, cfg->addr);
649+
if (udc_submit_ep_event(dev, buf, -ECONNREFUSED)) {
650+
LOG_ERR("Failed to submit endpoint event");
651+
};
652+
653+
return;
645654
}
646655
}
647656

0 commit comments

Comments
 (0)