summaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
37 hoursaudio: fix IAR goto warninghathach
38 hoursdwc2: fix IAR volatile access warninghathach
2 daysohci: enumerate a device that was already attached at inithathach
hcd_init() clears every pending interrupt flag before enabling its own set: OHCI_REG->interrupt_status = OHCI_REG->interrupt_status; If a device is already connected at that point, that write drops the RHSC which went with the connect, while the root hub keeps ConnectStatusChange set. The device stays put, so no new edge follows and the attach is never reported - the port sits at CCS=1, CSC=1, PES=0 forever. Host-only builds got away with it because the connect is usually detected after that clear. In a dual build the device stack initialises first and enables the shared USB interrupt, which moves the detection into the window that gets cleared, and the host then never sees the device. Scan the root-hub ports once at the end of hcd_init and raise the attach ourselves, clearing the stale change bit so the next RHSC does not report the same device again. Verified on ea4088_quickstart: dual/host_info_to_device_cdc now enumerates on a plain reset (HIL test passes, "Device 1: ID 1a86:8010 SN 7FD88F0604B5"), host/device_info still enumerates, and device/cdc_msc is unaffected. host/device_info also builds for lpcxpresso55s69, lpcxpresso1769 and mcb1800.
3 daysMerge pull request #3774 from zjzhang-cn/feature/tuh-audio-uac-1.0Zixun LI
feat(audio): add USB Audio Host (UAC 1.0/2.0) support
4 daysMerge pull request #3799 from hathach/codex/dfu-buffer-fixZixun LI
device/dfu: fix transfer buffer overwrite issue
4 daysMerge pull request #3808 from hathach/cdc_persistentZixun LI
device/cdc: avoid flushing tx buffer on connection
5 daysimprove example detailsHiFiPHile
Signed-off-by: HiFiPHile <[email protected]>
5 daysfix(dwc2): bound periodic intervals to HFNUM rangeHiFiPHile
HFNUM retains only 16384 host-frame positions, while valid periodic endpoint intervals can be longer. Resubmission after the counter wraps can therefore alias the elapsed time and skip the next established service phase. Cap the host-selected interval to one HFNUM cycle using the root-port frame unit. USB permits a shorter host-provided period, and the bounded interval keeps phase calculation unambiguous for native and split endpoints.
5 daysfix(dwc2): defer periodic DMA abort cleanup until haltHiFiPHile
Periodic DMA channels use their natural service-boundary halt instead of a software CHDIS request. Keep the endpoint busy after an abort so a replacement transfer cannot reuse its state or buffer while the channel remains active. When HCINT.HALTED arrives, release the channel without reporting completion for the aborted transfer. If endpoint closure is also pending, release the endpoint from the same halt path.
5 daysimplement per channel volume controlHiFiPHile
Signed-off-by: HiFiPHile <[email protected]>
5 daysremove bloat checkHiFiPHile
Signed-off-by: HiFiPHile <[email protected]>
5 daysMerge remote-tracking branch 'origin/master' into ↵HiFiPHile
agent/fix-dwc2-host-fifo-allocation
5 daysUSBH: fail enumeration cleanly after disconnectHiFiPHile
A disconnect can close endpoint zero after an enumeration control stage completes but before USBH submits the next stage or request. HCD submission then legitimately returns false; treating that result as an invariant violation asserts during rapid replug and can leave enumeration unfinished. Complete an in-progress control request as failed when its DATA or status stage cannot be submitted. Propagate submission failures from every asynchronous enumeration continuation and finish enumeration through the normal failure cleanup path. This keeps controller teardown races out of assertions without fabricating a successful transfer. Validated by interrupting enumeration during rapid STM32U5A5 replug tests with DWC2 DMA and slave modes.
5 daysDWC2 host: clean up channels on disconnectHiFiPHile
A root-port disconnect invalidates every active transfer. Retire channel and FIFO interrupt sources plus host-channel state in the disconnect ISR using the Linux DWC2 cleanup model instead of reinitializing the core and PHY, which can sleep on STM32 HS PHYs. Flush posted slave requests, request halts for enabled channels, clear channel interrupt and software ownership, and keep endpoint records closing until USBH processes the remove event. Reject transfer submissions to closing endpoints, preserve fast-replug notification, and re-enable the global host-channel interrupt when a new channel is initialized.
5 daysfix(dwc2): queue initial slave OUT packet immediatelyHiFiPHile
In slave mode, channel_xfer_start() enabled an OUT channel but left every FIFO write to a later PTXFEMP interrupt. DWC2 creates the request-queue entry only when the packet's final FIFO word is written, so unrelated interrupt work could consume the selected service frame before the transfer was actually queued. Factor FIFO writes into a capacity-checked helper and write the initial packet while the channel-enable operation is still protected from DWC2 interrupts. Keep FIFO-empty interrupts only for data that does not fit immediately. The protected section never waits for FIFO or request-queue space. When initial periodic OUT submission is too close to the frame boundary, release the unused channel and defer the still-pending endpoint to the next SOF. Internal retries bypass this initial boundary guard. A hardware trace showed HCCHAR enabled for frame 0x0378 while the packet's final FIFO word was delayed until frame 0x03ae. The complete five-commit fix set passed 600 seconds in every O0/O2 and slave/DMA mode. Signed-off-by: HiFiPHile <[email protected]>
5 daysfix(dwc2): enable periodic channels in the selected frameHiFiPHile
Periodic IN and DMA-backed transfers selected ODDFRM before waiting for request-queue space. A DWC2 interrupt could also run between reading HFNUM and writing HCCHAR.CHENA, allowing the selected frame to pass while the transfer still appeared active. Wait for request-queue capacity with controller interrupts enabled, then mask only GAHBCFG.GINT while sampling HFNUM and enabling a new periodic channel. Record the periodic phase from that same HFNUM sample so a boundary after channel enable cannot shift later interval calculations. The bounded critical section contains no queue wait, callback, disable, or allocation loop. Retries that already selected their frame bypass the new selection step. Also clear a retained HCCHAR.CHDIS before every channel enable. A halted channel can otherwise be re-enabled as CHENA|CHDIS and wait for a terminal interrupt that never arrives. Hardware traces captured periodic IN selections at frames 0x3303 and 0x3266 but activation only after 0x330c and 0x3273, respectively.
5 daysfix(dwc2): fail missed isochronous framesHiFiPHile
A frame-overrun interrupt means the selected periodic service interval has already been missed. Retrying an isochronous transfer after that point cannot deliver the original packet and can leave the class waiting indefinitely for a terminal result. Enable frame-overrun interrupts for slave periodic channels. Complete isochronous IN and OUT overruns as XFER_RESULT_FAILED in both slave and DMA modes, accounting for bytes already written on OUT. Preserve the existing retry behavior for non-isochronous DMA transfers. This reports the missed packet honestly through the normal HCD completion path: no fabricated success and no class-level abort workaround.
5 daysfix(dwc2): let DMA periodic channels halt naturallyHiFiPHile
DWC2 buffer/external DMA mode automatically halts a periodic channel at its next service boundary. Programming HCCHAR.CHDIS|CHENA for a non-split periodic channel is explicitly disallowed by the controller programming guide, yet channel_disable() skipped that write only for split periodic transfers. Return without programming channel disable for every periodic DMA channel. Non-periodic DMA and slave-mode channels retain the existing explicit-disable path. The previous path reproduced after 420 seconds in O2/DMA with a closing capture transfer left INVALID while HCCHAR retained CHENA|CHDIS and HCINT was clear.
5 daysfix(dwc2): preserve simultaneous slave channel haltHiFiPHile
Slave-mode channel handlers process one interrupt cause per pass, but the dispatcher acknowledged every HCINT bit before invoking them. When ChHltd arrived together with another cause, the handler consumed the other cause and the halt was lost. A subsequent disable could then leave CHENA|CHDIS asserted with HCINT and HAINT clear, so the submitted periodic transfer never completed. When a slave channel reports ChHltd with another cause, acknowledge only the non-halt causes and leave ChHltd pending for the next channel-IRQ pass. DMA handlers retain their existing combined-cause behavior. The uninstrumented negative capture reproduced the lost terminal state with HCCHAR=0xe044881c, HCTSIZ=0x0008001c, HCINT=0, and XFER_RESULT_INVALID.
5 daysfix(dwc2): serialize deferred transfer abortHiFiPHile
Protect periodic deferral cancellation from the SOF interrupt. Re-enable the host interrupt before disabling an active channel because slave-mode channel disable may wait for request-queue space.
5 daysMerge remote-tracking branch 'origin/master' into ↵HiFiPHile
agent/fix-dwc2-host-fifo-allocation
5 daysfix(dwc2): drain host RX status before channel IRQHiFiPHile
Popping an IN transfer-completion entry from GRXSTSP asserts HCINT.XferCompl. Drain the receive FIFO first, then read the live masked global status so the newly asserted channel completion is handled without waiting for another interrupt.
5 daysMerge branch 'master' into agent/fix-dwc2-host-fifo-allocationHiFiPHile
5 daysfix(dwc2): preserve periodic transfer phaseHiFiPHile
Anchor resubmitted periodic transfers to the endpoint service interval and defer early submissions through SOF. This prevents callback latency from shifting the cadence or causing intervals to be skipped, while keeping pending transfers abortable. Signed-off-by: HiFiPHile <[email protected]>
6 daysMerge pull request #3872 from runelauridsen/dwc2-pid-desyncZixun LI
Fix DWC2 DMA data toggle mismatch in IN-transfers
6 daysMerge pull request #3828 from dxbjavid/ep2drv-endpoint-boundZixun LI
bound endpoint number in tu_bind_driver_to_ep_itf
6 dayspropagate the endpoint-bound failure on the host pathHiFiPHile
tu_bind_driver_to_ep_itf() now returns false when ep_num >= CFG_TUH_ENDPOINT_MAX, but the host caller ignores that result and continues enumeration. Configurations such as host/bare_api set the limit to 8, while valid USB devices may use endpoints 8–15. A recognized class can therefore continue and later index ep_status[epnum] or ep2drv[epnum] out of bounds. Wrap this call in TU_ASSERT(...), as the device path already does, so parsing fails immediately. Signed-off-by: HiFiPHile <[email protected]>
6 daysFix DWC2 DMA data toggle mismatch in IN-transfersrunelauridsen
6 daysimprove feedback flow controlHiFiPHile
Signed-off-by: HiFiPHile <[email protected]>
6 daysimprove architecture documentationHiFiPHile
Signed-off-by: HiFiPHile <[email protected]>
8 daysremove unnecessary commentMike Ajax
8 daysSuppress USB-C attached callback unless cable state changed from ↵Mike Ajax
disconnected->connected or connected->disconnected
8 daysAdd "attached" state callback for UCPDMike Ajax
11 daysImprove audio host stream event reportingHiFiPHile
Report asynchronous start and stop completion with transfer results. Replace the ambiguous stream error callback and byte count with explicit transfer-failure events, and ignore stale completions after stopping.
11 daysaudio: correct host API documentationHiFiPHile
Describe configuration limits by their actual storage scope, document asynchronous stream startup and shutdown, clarify that FIFO APIs are always non-blocking, and correct playback callback ordering. Signed-off-by: HiFiPHile <[email protected]>
11 daysaudio: expose generic Audio Control requestsHiFiPHile
Remove the narrow public Feature Unit request API while retaining managed mute and volume helpers. Expose validated Audio Control descriptors during enumeration and provide raw asynchronous and synchronous entity requests for advanced controls. Signed-off-by: HiFiPHile <[email protected]>
11 daysaudio: clarify host driver commentsHiFiPHile
Group comments with the structures and helpers they describe, remove review-specific wording, and explain feedback-rate staging and control-buffer lifetimes in terms of runtime behavior. Signed-off-by: HiFiPHile <[email protected]>
11 daysaudio: classify feedback endpoints by protocolHiFiPHile
Use UAC1 synchronization attributes and UAC2 endpoint usage fields according to the active protocol. This prevents UAC2 audio-data IN endpoints from being mistaken for explicit feedback endpoints. Signed-off-by: HiFiPHile <[email protected]>
11 daysaudio: normalize Feature Unit volume requestsHiFiPHile
Accept the defined silence value and round ordinary volume requests to the nearest supported resolution step within the cached range. Add tests for silence, clamping, and step alignment. Signed-off-by: HiFiPHile <[email protected]>
11 daysaudio: harden streaming descriptor parsingHiFiPHile
Validate descriptor lengths before typed access, keep supported alternate settings when neighboring formats are unsupported, and reject MIDI 1.0 and 2.0 streaming interfaces from the Audio host parser. Extend parser coverage for malformed and mixed descriptor layouts. Signed-off-by: HiFiPHile <[email protected]>
11 daysaudio: allow stopped duplex streams to change rateHiFiPHile
Enforce a shared capture/playback sample rate only while the opposite stream is running. This lets both stopped streams be configured in either order while preventing a live shared clock from changing underneath a transfer. Signed-off-by: HiFiPHile <[email protected]>
11 daysaudio: reduce USB-accessible control storageHiFiPHile
Move control-transfer bookkeeping out of USB memory and overlay mount-only Clock RANGE storage with cache-aligned runtime control payload buffers. Keep explicit feedback separate because it may overlap runtime requests. Signed-off-by: HiFiPHile <[email protected]>
11 daysaudio: preserve feedback scheduler remainderHiFiPHile
Keep the fractional packet accumulator when a new explicit-feedback value is latched. Repeated feedback updates no longer bias high-speed fractional rates toward alternating undersized and oversized packets. Signed-off-by: HiFiPHile <[email protected]>
11 daysaudio: add UAC2 host streaming supportHiFiPHile
Add protocol-selectable UAC1/UAC2 parsing, UAC2 terminal and Feature Unit topology, Clock Source discovery, sampling-frequency ranges, and protocol-specific stream controls. Cover UAC2 playback, capture, control discovery, and malformed descriptors with unit tests. Signed-off-by: HiFiPHile <[email protected]>
11 daysaudio: preserve descriptor sample-rate entriesHiFiPHile
Retain every valid discrete rate in descriptor order, including duplicate public tuples. Alternate settings remain independently selectable without disruptive validation or deduplication during enumeration. Signed-off-by: HiFiPHile <[email protected]>
11 daysaudio: compact alternate-setting storageHiFiPHile
Store each Audio Streaming alternate setting once and flatten its sample rates only at the public API boundary. Keep feedback and pacing state playback-only, eliminating duplicate configuration fields from capture streams. Signed-off-by: HiFiPHile <[email protected]>
12 daysimplement explicit feeback supportHiFiPHile
Signed-off-by: HiFiPHile <[email protected]>
13 daysaddress copilot review findingsHiFiPHile
Signed-off-by: HiFiPHile <[email protected]>
13 daysMerge remote-tracking branch 'origin/master' into feature/tuh-audio-uac-1.0HiFiPHile
13 daysfeat(audio): discover stream mute and volume controlsHiFiPHile
Inspect each associated Feature Unit during mount, cache master mute support and the common MIN, MAX, and RES volume range, and ignore units with neither control. Add typed asynchronous and synchronous mute and volume APIs and demonstrate them in the host example. Signed-off-by: HiFiPHile <[email protected]>