<feed xmlns='http://www.w3.org/2005/Atom'>
<title>tinyusb.git/.github/workflows/build_util.yml, branch master</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.</subtitle>
<id>http://cgit.235523.xyz/tinyusb.git/atom/.github/workflows/build_util.yml?h=master</id>
<link rel='self' href='http://cgit.235523.xyz/tinyusb.git/atom/.github/workflows/build_util.yml?h=master'/>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/'/>
<updated>2026-07-17T04:54:14Z</updated>
<entry>
<title>hil: controller-aware scheduling of flash and usbtest concurrency</title>
<updated>2026-07-17T04:54:14Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-07-16T13:47:19Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=9b3259e60f3bd7e2d9637b61dc07265e4a73b362'/>
<id>urn:sha1:9b3259e60f3bd7e2d9637b61dc07265e4a73b362</id>
<content type='text'>
Full-fleet profiling (HIL_PROFILE=1 instrumentation, included) showed each
uPD720201 controller's serialized usbtest battery chain dominates wall time,
and a board whose marginal device port bounces during concurrent batteries
can wedge or kill the controller ("xHCI host not responding to stop endpoint
command"). Every such death traced to mimxrt1015's port (its old "kills the
uPD720201" reputation) - it is removed from the config until recabled;
mimxrt1064's enum-retry stalls were a loose device cable (re-seated).
nrf54lm20dk moves to boards-skip until its failing J-Link probe is replugged.
With the hardware fixed both cards run width-4 batteries plus full flash
churn clean, so scheduling stays simple: two symmetric knobs, flashes and
batteries budgeted per controller.

- schedule_boards(): dispatch boards round-robin across host controllers from
  a persisted hint cache (~/.cache/tinyusb-hil/ctrl_cache.json), learned and
  merge-on-write refreshed each run (concurrent HIL jobs keep each other's
  entries). Only the cached PCI address is consumed - dispatch order and
  first-flash budgeting, never battery serialization (batteries resolve live
  or fail closed to an all-slot permit).
- HIL_FLASH_PARALLEL (8) and HIL_USBTEST_PARALLEL (4) are budgeted per
  controller via lock slots assigned on first sight.
- re-runs: a failed run writes &lt;report dir&gt;/&lt;config&gt;.failed with the exact
  re-run spec (--accumulate -b &lt;failed board&gt; -bt &lt;board&gt;:&lt;its failed
  tests&gt;) instead of the inverted --skip-board list of everything that
  passed; --skip-board is gone, --flasher/--exclude-flasher scope a config
  across CI jobs by flasher type (no board names hardcoded in workflows),
  and -a/--accumulate merges a re-run into the existing report. The spec is
  stamped with GITHUB_RUN_ID and cleared on fresh runs, so a retry can never
  consume a spec left behind by a different run's dead or skipped attempt.
- CI: esp-idf firmware builds move out of hil-build into hil-build-esp, and
  the esptool-flashed boards run in their own hil-tinyusb-esp job, so the
  main hil-tinyusb run starts as soon as the fast toolchains finish instead
  of waiting on the slow esp-idf build (an esp toolchain flake previously
  skipped the whole rig run). Artifacts are namespaced per toolchain so the
  esp job downloads only esp-idf binaries.
- HIL_PROFILE=1: timestamped log lines, per-flash durations, permit-wait
  logging, uid-&gt;controller map dump for analysis.
- hil_report: per-variant test duration as a dedicated trailing column,
  recorded only by full runs.

Validated on the ci rig (fixed seeds 20260716/777, full fleet at 8/4):
738s/780s walls with only known-flake failures and no controller deaths,
vs 1134-1211s serialized-battery baseline.
</content>
</entry>
<entry>
<title>Merge pull request #3690 from hathach/claude/board-test-idle-park</title>
<updated>2026-06-10T11:04:54Z</updated>
<author>
<name>Ha Thach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-06-10T11:04:54Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=575a8fbcd0e5880791ea5f834649149a8f787d95'/>
<id>urn:sha1:575a8fbcd0e5880791ea5f834649149a8f787d95</id>
<content type='text'>
hil: park boards with idle board_test instead of erasing flash</content>
</entry>
<entry>
<title>Update several actions to latest version</title>
<updated>2026-03-17T17:31:01Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-03-17T17:26:18Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=6c895e7af45107702705cc532af4abb35d2546cf'/>
<id>urn:sha1:6c895e7af45107702705cc532af4abb35d2546cf</id>
<content type='text'>
</content>
</entry>
<entry>
<title>chore(workflows): update GitHub Actions dependencies and improve membrowse error handling</title>
<updated>2026-03-12T08:48:49Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-03-12T08:48:49Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=2052111bac10fc3184b1dd9558fc1b9ab5c85ea4'/>
<id>urn:sha1:2052111bac10fc3184b1dd9558fc1b9ab5c85ea4</id>
<content type='text'>
update AGENTS.md with metrics compare
</content>
</entry>
<entry>
<title>change membrowse target to board/target and remove redundant continue-on-error directive</title>
<updated>2026-02-12T16:59:48Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-02-12T16:42:34Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=a6d4c6d022a3dc597c24f2e312993046345683ad'/>
<id>urn:sha1:a6d4c6d022a3dc597c24f2e312993046345683ad</id>
<content type='text'>
fix defsym can be followed by = or ,
</content>
</entry>
<entry>
<title>refactor build scripts to support multiple build targets and improve argument handling</title>
<updated>2026-02-12T06:32:00Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-02-12T06:32:00Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=8a6012b0096cb71bb4cfaaa36813de4ac5003c18'/>
<id>urn:sha1:8a6012b0096cb71bb4cfaaa36813de4ac5003c18</id>
<content type='text'>
</content>
</entry>
<entry>
<title>clean up</title>
<updated>2026-02-12T05:15:26Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-02-12T04:30:40Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=c59447faa8935124bdeebeafbcb8ba65f7fc93f0'/>
<id>urn:sha1:c59447faa8935124bdeebeafbcb8ba65f7fc93f0</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix ci</title>
<updated>2026-02-11T17:31:06Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-02-11T17:22:21Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=39bc5cd933091c9c28b0f0bd468526d3d5d946a3'/>
<id>urn:sha1:39bc5cd933091c9c28b0f0bd468526d3d5d946a3</id>
<content type='text'>
</content>
</entry>
<entry>
<title>membrowse upload continue on error</title>
<updated>2026-02-11T17:10:18Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-02-11T17:10:18Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=4a5077a1aa78d2359f26b0c44ced025db45d77c2'/>
<id>urn:sha1:4a5077a1aa78d2359f26b0c44ced025db45d77c2</id>
<content type='text'>
</content>
</entry>
<entry>
<title>make membrowse command more visible</title>
<updated>2026-02-11T16:30:14Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-02-11T16:06:38Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=cec0ee53f60ed28d7c324f40cbebd0b677d94eb1'/>
<id>urn:sha1:cec0ee53f60ed28d7c324f40cbebd0b677d94eb1</id>
<content type='text'>
</content>
</entry>
</feed>
