<feed xmlns='http://www.w3.org/2005/Atom'>
<title>tinyusb.git/src/portable/nxp, 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/nxp?h=worktree-ch569-hydrausb3</id>
<link rel='self' href='http://cgit.235523.xyz/tinyusb.git/atom/src/portable/nxp?h=worktree-ch569-hydrausb3'/>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/'/>
<updated>2026-07-07T04:21:06Z</updated>
<entry>
<title>usbtest: address Codex re-review (5 findings)</title>
<updated>2026-07-07T04:21:06Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-07-07T03:54:31Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=9422d113479cfe36a4915690617c15b7bf617806'/>
<id>urn:sha1:9422d113479cfe36a4915690617c15b7bf617806</id>
<content type='text'>
- rp2040 dcd_edpt_clear_stall: the toggle-reset re-issue rewound remaining_len
  only for IN, but bufctrl_prepare16() pre-subtracts it for OUT too, so an OUT
  re-issue was short by the still-armed buffers. Rewind both directions (user_buf
  only for IN, which advances at DPRAM-copy time). Validated: pico usbtest 30/30.

- usb_recover.sh: refuse pci-rebind/reset/bind on a BDF that is not a USB
  controller (class 0x0c03xx), so a stray/mistyped address can't disturb storage
  or NICs on the shared HIL host. Guard tested against real BDFs.

- ip3511 dcd_edpt_open: make it tolerant of reopening a still-armed endpoint
  instead of asserting it disabled -- retire via EPSKIP (UM11126 41.7.6/41.8.3)
  then force disabled. This is the correct ISO_ALLOC reopen contract, since
  usbd_edpt_close() is a no-op there. NOTE: audio/video streaming EPs already use
  usbd_edpt_iso_activate() on ISO_ALLOC, so there is no in-tree trigger; this is
  defensive hardening for a class that reopens a non-iso EP via usbd_edpt_open
  (e.g. a UVC device with a notification EP + VC SET_INTERFACE). Verified on HW:
  lpc11u37 usbtest 30/30 and video_capture SET_INTERFACE cycling both fine.

- vendor_device set_alt: abort the outgoing altsetting's bulk/interrupt endpoints
  before dropping them, so an endpoint absent from the target altsetting can't
  stay armed and hold its usbd claim. (No in-tree trigger: usbtest uses a single
  non-zero altsetting; defensive robustness for multi-alt vendor devices.)

- vendor_device tud_vendor_n_mounted(): count iso endpoints too, so an iso-only
  altsetting reports mounted. (No in-tree trigger: usbtest alt1 always has bulk.)

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01HeF2gZ1M7GWkz6Av4BpKPg
</content>
</entry>
<entry>
<title>address Codex/Copilot review findings (9 fixed, 3 refuted with evidence)</title>
<updated>2026-07-06T17:30:07Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-07-06T17:30:07Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=f41c1827b2b59d1a0bdfc28bbe6580e5c44ef961'/>
<id>urn:sha1:f41c1827b2b59d1a0bdfc28bbe6580e5c44ef961</id>
<content type='text'>
- dcd(rp2040): rewind IN staging before the clear-halt re-issue. Staging advances
  user_buf/remaining_len when packets are copied into DPRAM, before the host has
  consumed them; aborting and re-issuing from the advanced pointer silently
  skipped the staged-but-unsent bytes.
- dcd(ip3511): dcd_edpt_iso_activate aborts a transfer still armed from the
  previous altsetting (clear Active on both buffer slots) so the hardware can't
  keep servicing the old descriptor against the class's fresh queueing.
- dcd(rusb2): reuse an endpoint's existing pipe in dcd_edpt_open. usbd_edpt_close
  is a no-op on ISO_ALLOC ports, so a class's close/open across SET_INTERFACE
  would allocate a second pipe with the same EPNUM and leak pipes.
- class(vendor): the buffered-mode free-slot check also tests the interrupt
  endpoints, so an interrupt-only vendor interface isn't clobbered as "free".
- bsp(ch32v30x): board_get_unique_id respects max_len and copies bytes
  (alignment-safe) instead of writing 12 bytes through a uint32_t cast.
- test/hil/usbtest.py: treat same-serial multi-matches as ambiguous and retry
  until the dual-port stale node drops (nanoch32v203/ch32v307 variants); reprobe
  a binding that predates the dynamic-id re-registration so a stale capability
  profile can't survive; skip the remove_id/unbind cleanup after an unrecovered
  kernel-side hang (it would join the D-state convoy and deadlock the bus).
- usbtest skip.txt: add the families whose DCD refuses dcd_edpt_iso_alloc
  (CXD56, FT90X, LPC175X_6X, LPC40XX, NUC100/120/505, PIC32MZ, SAMG, SAMX7X,
  VALENTYUSB_EPTRI) — tier 4 cannot enumerate there.
- test/hil/tinyusb-sudoer: note that '#1000' is a sudoers UID specifier, not a
  comment (the review misread the grants as commented out).

Refuted in review threads: nrf5x ISOSPLIT keeps reserve-max per-configuration
allocation semantics (iso_alloc is per-config, not per-alt); the LPC EP-number
claim (default descriptor uses EP1-3; lpcxpresso11u37 passes 30/30 on HW); the
vendor alt-0 "abort" concern (host cannot address endpoints outside the active
altsetting; usbd_edpt_iso_activate resets state on re-entry).

Verified on hardware: raspberry_pi_pico, lpcxpresso11u37, ra4m1_ek all 30/30
through the HIL battery after the changes; builds clean incl. buffered-mode
vendor (webusb_serial).

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(ip3511): clear Active before Stall so a queued endpoint actually halts</title>
<updated>2026-07-03T10:56:21Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-07-03T10:56:21Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=53f3182d2daf564d6a0d46c897267a11c833515c'/>
<id>urn:sha1:53f3182d2daf564d6a0d46c897267a11c833515c</id>
<content type='text'>
dcd_edpt_stall() only set cmd_sts.stall, leaving an armed transfer's Active bit
set. The hardware services the Active buffer instead of returning STALL, so a
SET_FEATURE(HALT) issued while a transfer was queued did not actually stall the
endpoint - the host's verify transfer succeeded instead of getting EPIPE, so
usbtest case 13 failed with EINVAL. Clear Active when setting Stall (software
must not leave both set).

lpcxpresso11u37 now passes the full usbtest battery 30/30 (was 29/30).

Co-Authored-By: Claude Fable 5 &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>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 typo</title>
<updated>2026-03-10T10:17:59Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-03-10T10:17:59Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=3eb2b1fe52cdca89be082295e5ff8c4fed43cc39'/>
<id>urn:sha1:3eb2b1fe52cdca89be082295e5ff8c4fed43cc39</id>
<content type='text'>
</content>
</entry>
<entry>
<title>update LPC54</title>
<updated>2025-12-13T20:08:42Z</updated>
<author>
<name>HiFiPhile</name>
<email>admin@hifiphile.com</email>
</author>
<published>2025-12-12T11:30:36Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=ba9bc1a79d2c00290e64a93907f37cd3db7140f8'/>
<id>urn:sha1:ba9bc1a79d2c00290e64a93907f37cd3db7140f8</id>
<content type='text'>
Signed-off-by: HiFiPhile &lt;admin@hifiphile.com&gt;
</content>
</entry>
</feed>
