<feed xmlns='http://www.w3.org/2005/Atom'>
<title>tinyusb.git/src/portable/nordic, branch worktree-ch569-hydrausb3</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.</subtitle>
<id>http://cgit.235523.xyz/tinyusb.git/atom/src/portable/nordic?h=worktree-ch569-hydrausb3</id>
<link rel='self' href='http://cgit.235523.xyz/tinyusb.git/atom/src/portable/nordic?h=worktree-ch569-hydrausb3'/>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/'/>
<updated>2026-07-06T18:23:38Z</updated>
<entry>
<title>address review round 2 (4 fixed, 1 answered)</title>
<updated>2026-07-06T18:23:38Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-07-06T18:23:38Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=abd8769781e38bb14153dd6f9dedcc5b3c7b7be2'/>
<id>urn:sha1:abd8769781e38bb14153dd6f9dedcc5b3c7b7be2</id>
<content type='text'>
- dcd(nrf5x): dcd_edpt_iso_activate drops a stale armed transfer (started/
  data_received/iso_in_transfer_ready) — there is no dcd close on this port, so
  a transfer armed before SET_INTERFACE would trip TU_ASSERT(!xfer-&gt;started) on
  the class's next arm after usbd reset the endpoint's claim state.
- class(vendor): tud_vendor_n_mounted() counts the interrupt endpoints, so an
  interrupt-only vendor interface (bulk absent) reports mounted.
- example(usbtest): int/iso write lengths follow the negotiated speed
  (tud_speed_get), not the compile-time capability — a high-speed build
  enumerated at full speed serves the FS descriptor (mps 64/128) and must not
  submit HS-sized packets.
- test/hil: test_example() return annotation matches the (err, status, metric)
  3-tuple it returns.

Verified: feather_nrf52840_express and raspberry_pi_pico 30/30 through the HIL
battery; pico/feather/ch32v307-usbhs builds clean.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01HeF2gZ1M7GWkz6Av4BpKPg
</content>
</entry>
<entry>
<title>Merge remote-tracking branch 'origin/master' into usbtest</title>
<updated>2026-07-06T09:17:17Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-07-06T09:17:17Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=2d73cf58de9a41278a9c6e1e3c9e5c6626bf95b7'/>
<id>urn:sha1:2d73cf58de9a41278a9c6e1e3c9e5c6626bf95b7</id>
<content type='text'>
# Conflicts:
#	lib/rt-thread/port/msc_device_port.c
#	src/device/usbd.c
</content>
</entry>
<entry>
<title>dcd(nrf5x): implement Errata 199 workaround (USBD drops tokens during DMA)</title>
<updated>2026-07-04T01:50:34Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-07-04T01:50:34Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=90f9aa9c7963cac70c5241e4ed4977ef5df71e2a'/>
<id>urn:sha1:90f9aa9c7963cac70c5241e4ed4977ef5df71e2a</id>
<content type='text'>
The nRF52840 has anomaly 199 "USBD cannot receive tasks during DMA": while an
EasyDMA transfer is in progress the controller can drop an incoming SETUP/IN/OUT
token, producing a lost event that stalls EP0. Under rapid back-to-back control
transfers this hangs the device -- reproducible with the Linux usbtest "queued
control" case (test 10), which wedged testusb into an unrecoverable D-state.

TinyUSB included nrf_erratas.h but implemented none of the workaround. Latch the
undocumented "DMA in progress" test register (0x40027C1C = 0x82) around each real
EasyDMA in start_dma() and clear it (0x00) in edpt_dma_end(), gated on
nrf52_errata_199() so unaffected nRF52 parts skip it. Mirrors nrfx's
usbd_dma_pending_set()/usbd_dma_pending_clear().

Verified on feather_nrf52840_express: usbtest test 10 now passes across 12
isolated runs (was a hard hang) and the full tier-4 battery is 30/30.

Co-Authored-By: Claude Opus 4.8 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01HeF2gZ1M7GWkz6Av4BpKPg
</content>
</entry>
<entry>
<title>dcd: retire dcd_edpt_close() on the iso-migrated drivers</title>
<updated>2026-07-03T10:46:21Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-07-03T10:46:21Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=b218b477a3c841f3f59cf0a6d34cfcd7a86ca8fb'/>
<id>urn:sha1:b218b477a3c841f3f59cf0a6d34cfcd7a86ca8fb</id>
<content type='text'>
Now that ip3511, rusb2 and nrf5x are on ISO_ALLOC, the stack's usbd_edpt_close()
is a no-op for them, so dcd_edpt_close() is no longer a public DCD entry point.
Audit of the remaining callers:

- ip3511, nrf5x: dcd_edpt_close_all() does its own teardown and no longer calls
  dcd_edpt_close() -&gt; it is dead code, removed.
- rusb2: dcd_edpt_close_all() still tears down each pipe via it -&gt; kept but made
  a static internal helper (edpt_close), not a public dcd_ API.

Revert dcd.h to declaring dcd_edpt_close() only under TUP_DCD_EDPT_CLOSE_API (for
the remaining close-API MCUs); ISO_ALLOC IPs declare iso alloc/activate instead.

Behaviour-neutral (removed/renamed uncalled functions); dwc2 still builds and
nrf5x still passes bulk/iso/halt on hardware.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01HeF2gZ1M7GWkz6Av4BpKPg
</content>
</entry>
<entry>
<title>dcd: implement iso alloc/activate for rusb2, ip3511, nrf5x; deprecate CLOSE_API for them</title>
<updated>2026-07-03T10:14:20Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-07-03T10:14:20Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=d28628b52beb40b10258eb063acb247ce59a6bc8'/>
<id>urn:sha1:d28628b52beb40b10258eb063acb247ce59a6bc8</id>
<content type='text'>
Migrate the ip3511, rusb2 and nrf5x DCDs off the deprecated TUP_DCD_EDPT_CLOSE_API
path onto the unified ISO_ALLOC model by implementing dcd_edpt_iso_alloc/activate
(previously #if0 stubs / returning false):

- rusb2: iso_alloc reserves an ISO-capable pipe (1/2) once and configures it;
  iso_activate re-arms it in place (PIPEMAXP + SQCLR + PID_BUF) with no pipe
  free/realloc, avoiding PIPESEL/PIPECFG churn across altsetting changes.
- ip3511: iso_alloc reserves the EP command/status entry (type=ISO, INTEN);
  iso_activate clears stall + resets the data toggle.
- nrf5x: iso_alloc validates the fixed EP8; iso_activate enables ISOOUT/ISOIN
  (with ISOSPLIT when both directions are active) + SOF, mirroring dcd_edpt_open.

tusb_mcu.h no longer defines CLOSE_API for these three (they fall through to
ISO_ALLOC); dcd_edpt_close is now declared unconditionally in dcd.h since these
drivers still use it internally from dcd_edpt_close_all(). The remaining CLOSE_API
MCUs (mm32, pic, da1469x, f1c100s, ch32-usbhs) are left for a later per-board pass.

Verified on hardware: ip3511 (lpcxpresso11u37) 29/30 and nrf5x (feather_nrf52840)
iso 11/11 via the new path (identical to their prior CLOSE_API results); dwc2,
fsdev, rp2040 + audio/video still build. rusb2 (ra4m1) has a separate,
iso-independent set_interface wedge (still 1/30) tracked for follow-up.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01HeF2gZ1M7GWkz6Av4BpKPg
</content>
</entry>
<entry>
<title>license: use SPDX identifiers for src/ headers (#3749)</title>
<updated>2026-07-02T14:55:45Z</updated>
<author>
<name>Ha Thach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-07-02T14:55:45Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=7a4111b96ef6279e75579f9a18443834f6a0871d'/>
<id>urn:sha1:7a4111b96ef6279e75579f9a18443834f6a0871d</id>
<content type='text'>
* license: use SPDX identifiers for src/ headers

Replace the full ~20-line MIT license boilerplate on every src/ file with a
two-line SPDX tag (SPDX-FileCopyrightText + SPDX-License-Identifier), following
the REUSE convention used by CircuitPython and the Linux kernel. Removes ~3500
lines of duplicated boilerplate.</content>
</entry>
<entry>
<title>nrf5x: request HFCLK in USB_EVT_READY to fix post-SoftDevice deadlock</title>
<updated>2026-05-08T14:27:53Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-05-08T14:27:53Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=6af4ee2c50da68a9bca276b69fccbacf96e2b3ce'/>
<id>urn:sha1:6af4ee2c50da68a9bca276b69fccbacf96e2b3ce</id>
<content type='text'>
USB_EVT_DETECTED runs hfclk_enable() which, when SoftDevice is not yet
enabled, starts HFXO via direct CLOCK register access. After
sd_softdevice_enable() takes over CLOCK, HFXO is physically off again
and SD's HFCLK reference count is 0.

If USB_EVT_READY is fired post-SD (e.g. on nRF52 via Bluefruit's
usb_softdevice_post_enable() when the pre-SD nrfx_power READY callback
didn't get to run before nrfx_power was uninited), the wait loop
'while (!hfclk_running()) {}' calls sd_clock_hfclk_is_running() which
returns false forever -&gt; deadlock that blocks both USB enumeration and
any further app code on the calling thread.

Call hfclk_enable() right before the wait so HFCLK is requested in
whichever context (SD or direct) is current. hfclk_enable() is
idempotent.

Reproduces reliably with bleuart on Feather nRF52840 Express flashed
via JLink: chip wedges in sd_clock_hfclk_is_running SVC, no USB
enumeration, no BLE advertising. With the fix, USB enumerates and BLE
advertises as expected.
</content>
</entry>
<entry>
<title>fix some Wconversion warnings</title>
<updated>2026-04-17T03:16:31Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-04-16T17:10:44Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=a6dcc3f089bd4468949ea9e138fea9f80025577e'/>
<id>urn:sha1:a6dcc3f089bd4468949ea9e138fea9f80025577e</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix build with zephyr with latest nrfx v4</title>
<updated>2025-11-28T06:34:00Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2025-11-28T05:55:56Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=7d012b014eb27de9a5f34da543c707109c653045'/>
<id>urn:sha1:7d012b014eb27de9a5f34da543c707109c653045</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Merge remote-tracking branch 'tinyusb/master' into copilot/fix-dcd-edpt-xfer-issue</title>
<updated>2025-11-19T21:05:07Z</updated>
<author>
<name>HiFiPhile</name>
<email>admin@hifiphile.com</email>
</author>
<published>2025-11-19T21:05:07Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=85adf694e659bde41b34e2f585cb2db552279064'/>
<id>urn:sha1:85adf694e659bde41b34e2f585cb2db552279064</id>
<content type='text'>
Signed-off-by: HiFiPhile &lt;admin@hifiphile.com&gt;
</content>
</entry>
</feed>
