summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhathach <[email protected]>2026-06-13 00:17:30 +0700
committerhathach <[email protected]>2026-06-13 23:34:57 +0700
commit87eeab605ff571a5ac1784c2c26e944aa0129d7e (patch)
treeb4a516cd3a3e3b9963232f39af8bea422016cd43 /src
parent06b8f4f013a6ce0d91d2f713c88313569d8a722c (diff)
dcd/musb: restore EP0 OUT RXRDY flow-control comment
The pre-existing comment explaining why the OUT branch does not ack RxPktRdy was dropped when the SETUP handling moved into pipe0_start_setup(). It is load-bearing: acking before edpt0_xfer() arms the drain buffer would let the host send data with nowhere to put it. Restore it with the databook-deviation rationale so the branches don't get "unified" later. Review follow-up for #3643 (dcd_musb.c l.116 finding). Co-Authored-By: Claude Fable 5 <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/portable/mentor/musb/dcd_musb.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/portable/mentor/musb/dcd_musb.c b/src/portable/mentor/musb/dcd_musb.c
index 08d7dd700..fdd2eaac9 100644
--- a/src/portable/mentor/musb/dcd_musb.c
+++ b/src/portable/mentor/musb/dcd_musb.c
@@ -128,6 +128,9 @@ static void pipe0_start_setup(uint8_t rhport, musb_ep_csr_t* ep_csr,
_dcd.pipe0.state = PIPE0_STATE_DATA_IN;
ep_csr->csr0l = MUSB_CSRL0_RXRDYC;
} else {
+ // If OUT (rx) direction, let edpt0_xfer() clear RXRDY when it's ready to receive data.
+ // Deliberate deviation from the databook's canonical flow (ack right after unload),
+ // used as NAK flow control until usbd arms the drain buffer.
_dcd.pipe0.state = PIPE0_STATE_DATA_OUT;
}
}