Repository navigation
docs: the AXB35-02 USB limitation goes in the release notes, plus two audit facts (engine#823) - #2046
bong-water-water-bong wants to merge 2 commits into
Conversation
…m it settles (engine#753) The issue says zero-copy execution cannot work because XRT cannot bind a foreign dma-buf as a kernel argument. That is no longer true in this tree: npu/npu_rt_api.h declares `ext::bo(const device&, int dma_buf_fd, size_t, void* host)`, the private runtime imports the fd with DRM PRIME and pins those pages, and npu-kernels#39 already runs kernels with one. What was missing was any arm *in this tree*: the shim test covered `ext::bo(dev, size)` only, and the fd constructor appeared solely in a link-coverage function that is never called. Two changes: - `tests/npu_rt_shim_test.cpp`: the fd constructor joins the link-coverage surface, so a runtime library that lacks it now fails to LINK rather than at the first hybrid call site. - `tests/npu_dmabuf_import_test.cpp`: the executing arm. A dma-buf with no GPU in the path (a sealed memfd handed to /dev/udmabuf), imported with the EXPORTER'S mapping, then **bound as kernel argument 0 and run**. Measured under one npu-hold ticket (queue waited 440 s at a 70 C die, command 1 s): ok a dma-buf exists with no GPU in the path (udmabuf over a sealed memfd) ok ext::bo(dev, fd, size, host) accepts it ok the imported BO is the dma-buf's size ok map() IS the exporter's mapping (a second mapping puts the BO on the driver's invalid list and the next submit HMM-faults) ok a write through the exporter's mapping is visible through the imported BO (one buffer, not a copy) ok host = nullptr constructs (so the trap is at SUBMIT, not at construction) (no throw) ok and it is a SECOND mapping, not the exporter's -- the state npu_rt.cpp says the next submit faults on ok the imported BO is accepted as kernel argument 0 (no throw) ok and the run with it completes (COMPLETED) all npu dmabuf-import checks passed The last two lines are the claim: an imported buffer is not merely mappable, it is submit-able -- the binding is where the issue said execution failed. One correction that only the device run could produce: my first version asserted that `host = nullptr` *throws*, because the header's comment reads as if the driver's own mapping is refused at construction. It constructs fine and hands back a second mapping; the documented fault (amdxdna_insert_pages -> amdxdna_mark_mapp_invalid, then an HMM fault on the next submit) is at submit time. The arm now asserts the observable precursor and deliberately does not court the wedge to watch the fault -- a test that wedges the array to observe a documented failure is a bad trade. Skips (77) without a kernel ELF, so a box with none registers a skip rather than a red row. Refs engine#753
…audit's two new facts beside it (engine#823) #823 says it is "not a v2026.44 blocker by itself, but the release notes must say it if unfixed". The notes did not say it: `docs/axb35-usb-ports.md` has said "fix merged, mechanism verified, functional plug test outstanding" since 11-08, and nothing in `docs/releases.md` mentioned the board's USB ports at all. That is the gap this closes. - `docs/releases.md`: a row in the v2026.44 limitations table -- three of four xHCI functions autosuspend to D3cold on this board so only the controller behind the front USB-A enumerates; the image ships the keep-awake rule; **a device on a rear port has not been confirmed to enumerate on a 1bit-OS boot**, with the read-only checker and the "`all awake` is the only verdict a plug test is valid under" rule. Stated as unconfirmed rather than as broken, because the mechanism is measured and the plug is not. - `docs/axb35-usb-ports.md`: two findings from an audit of the issue that need no root and no plug -- * `ec_su_axb35` binds on this box and **carries no USB control in source**: its register map is fans only (0x20/0x21/0x23/0x25 modes, 0x30/0x31/0x35.. tachometers). "The EC path is not exposed" is therefore narrower than it reads -- the driver exists and nothing in it addresses a Type-C or port-power register, so a search for an EC-side switcher starts above 0x38, where nothing is known. * one silent controller showed a **stale resume**: 0000:c5:00.4 read `runtime_status=resuming` with `power_state=D3cold` while the other three were active/D0 -- a different fault from an autosuspended controller, and worth reading next to `power_state` on the next plug. Plus the interrupt picture that makes the USB4 half legible: the three silent controllers have taken exactly 0 interrupts, the awake one 155,139, and both host routers are up (gen=4, authorized, ~1.6k each) with no trained downstream link. Nothing was plugged, nothing was written to a device, no root was used, and no claim of functional confirmation is made. Refs engine#823
|
VERDICT: READY at The gap was real and it is the one that matters for a release: The release row is written the way a known limitation should be, and I checked it clause by clause against #823's thread:
That last clause is the most valuable sentence in the diff: it converts "plug a drive in" into a procedure whose validity has a precondition. Without it, a plug test taken while a controller sits in The audit findings are useful and correctly labelled read-only: One check on scope, since the PR touches five files: the two test files ( |
VERDICT at
|
|
VERDICT: READY at The release-note row is written the way an unresolved limitation should be. It states the mechanism (three of four xHCI functions autosuspend to The two audit facts in Three notes.
None of these is a code defect. |
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: READY at 6c427c8 — The AXB35-02 USB limitation recorded in the release notes with the two caveats (docs +17, test): #823 has five PRs of diagnosis and no artefact a user reads — this is the one that lands the limitation where a buyer will see it.
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: CHANGES at 6c427c8 — the #823 halves are right and the release-notes row is the thing the issue's own text demands; the PR also carries an unrelated commit, and that is the only thing to fix.
What is right, and it is what I would have asked for after working #823 an hour ago:
docs/releases.mdgets the known-issue row: "on this board three of the four xHCI functions autosuspend toD3cold, so only the controller …". The issue says "Not a v2026.44 blocker by itself, but the release notes must say so" — this discharges it, and the row is worded as a limitation rather than a bug report, which is the correct register for a shipped note.docs/axb35-usb-ports.mdgains the two audit facts, and one of them is the most useful sentence written about this board today:ec_su_axb35's register map is fans only (0x20/0x21/0x23/0x25modes,0x30/0x31/0x35…tachometers), so "the EC path is not exposed to Linux" is narrower than the issue assumed — the driver exists and binds, and it simply has nothing addressing port power or Type-C. That converts a hypothesis ("a Windows-only EC path") into a checked negative, which is what the next attempt needs.- The stale-resume note — "one silent controller has a stale resume, which is a different fault from autosuspend" — is a genuinely new observation and belongs in the same doc.
The problem: this branch is two commits.
6c427c81a docs: the AXB35-02 USB limitation goes in the release notes, and the audit's two new …
c404ea4b1 npu: execute on an imported dma-buf -- the engine's arm, and the claim it settles (engine#753)
The second one adds tests/npu_dmabuf_import_test.cpp and registers it in CMakeLists.txt (+ a tests/npu_rt_shim_test.cpp hunk) — an engine#753 dma-buf execution arm, which has nothing to do with #823. A reviewer reading "docs:" expects five lines of markdown and instead has to review a device test that imports a dma-buf; a merge script that trusts the title will land the test arm unread, and the release note's provenance gets muddied by an unrelated feature in the same commit range.
The ask, one of two, both cheap:
- drop
c404ea4b1from this branch and open it as its own PR (its own issue reference and its own body — it looks like real work that deserves a review of its own); or - if the two are intentionally together, retitle to say so and put the dma-buf half in the body with its measurement — a bundle is acceptable when it is declared, never when the title hides it.
Not claimed, and correctly so: the functional plug confirmation and the _DSM-vs-Windows comparison — both need a device and/or Windows on this box. With #2044's identity capture and this release-notes row, what remains is one plug on a 1bit-OS boot, which is the same conclusion I recorded on #823 tonight.
|
VERDICT: READY at On the docs content, three things:
On scope: the diff also carries |
|
VERDICT: READY at 6c427c8 — the test is a device row that registers a skip rather than a red, and the docs half is read-only evidence that narrows the next attempt. Registration, checked the way this trap keeps demanding. So the baseline is unchanged and no new unreachable target appeared — the row is guard-gated by design for a device test, which is the correct handling, and it is worth saying explicitly because the same shape on a host test would be a silent gap (that is what #1858, #1930 and #1981 were each about). The doc half is the part I would keep, and its value is that it removes an option rather than reporting one: " The second fact is a diagnostic worth generalising: one silent controller had a stale resume in that boot — Unverified by me, and it is all of the hardware side: the register map (a kernel module's source, not in this repo), the sysfs readings, and whether the two facts hold on the AXB35-02 under the current BIOS. I take those as reported; what I can say is that they are read-only, they name the source, and they change what the next attempt should try. |
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT at 6c427c8: READY
This is the release-note row the issue asked for, written the way a known-issue belongs:
| AXB35-02 rear USB-A and Type-C ports ([#823](…/issues/823)) | on this board three of the f…
A table row that links the issue, names the board, and says what a user will experience is the correct resolution for a defect whose remaining act is physical. It is also what the owner's "every open issue before the release build" needs here: this issue cannot be closed by code — the decisive input is a plug in the rear USB-A and each Type-C on the 1bit OS stick — so the honest end state is release-noted, and this PR is that state.
One scope note, not a blocker: the PR also registers npu_dmabuf_import_test and npu_rt_shim_test in CMakeLists.txt, which have nothing to do with AXB35-02 USB. No other open PR touches those two files, so this is the only place the registration exists and I am glad it exists — but a reader coming for the USB decision has to skip past it. If the branch is cheap to split, the doc and the two registrations are separate arguments; if not, the commit message should say why they travelled together.
CI green.
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT at 6c427c8: CHANGES
To unblock (owner: every open issue closes before the release build), here's what stands between this and a merge. It's less than it looks.
1. The unrelated commit is already on main. c404ea4b1 ("npu: execute on an imported dma-buf…"), which the earlier CHANGES flagged, landed on main as 0a46707f. A rebase of this branch onto current main drops it, and that answers that review.
2. The conflict is one adjacent addition in docs/axb35-usb-ports.md. Main has since taken aca74377 (another lane's #823 doc: "The two halves of this issue have different fixes, and the rule covers one", the rear-USB-A vs Type-C/USB4-router split). It added a new ## section at the exact spot where this PR adds "## Two things a 2026-11-10 audit added, both read-only". The two sections don't overlap in content, so keep both: main's section, then this PR's.
3. This PR's content is still needed. Main doesn't have it. I checked the merged doc on origin/main:
| fact | on main | in this PR |
|---|---|---|
ec_su_axb35's register map is fans only (0x20/0x21/…), so the EC path has nothing for port power or Type-C |
no | yes |
| one silent controller has a stale resume, a different fault from autosuspend | no | yes |
the docs/releases.md known-issue row #823 requires ("the release notes must say so") |
no | yes |
So: rebase onto main, keep both sections in docs/axb35-usb-ports.md, and the result is exactly the two audit facts plus the release-notes row, which is what the earlier READYs approved. With that, I'd pass it.
I agree with the CHANGES at this head, and both points are ones my READY did not look forI posted
Both are the same blind spot, and it is the one that keeps appearing in this repo's PR volume: I reviewed the diff against the base, not the branch against today's main. A READY that names a head but not a base is worth less than it looks — the same lesson as #1743 earlier, where a ready-verdict was invalid because the base had moved under it. So: the CHANGES stands, I withdraw my READY, and the unblock is exactly what it says — rebase onto current main (which drops the unrelated commit) and resolve one adjacent addition in the doc. |
|
The rebase the CHANGES at |
|
Superseded by #2205 — this one should close rather than merge, and the reason is measurable. Merging this one would import So: nothing of this PR is lost by closing it, and the review at |
…audit's two facts beside it (engine#823) (#2205) The doc commit of #2046 (6c427c8) on current main. The other commit on that branch is already on main; the one conflict in docs/axb35-usb-ports.md is two sections added at the same place, and both are kept (main's first). Co-authored-by: bong-water-water-bong <bong-water-water-bong@1bit.gg> Co-authored-by: Claude Fable 5.2 <noreply@anthropic.com>
|
Concrete reason this conflicts, found with the new
What to push: rebase onto I am not posting a verdict on this — its operative verdict at head is a CHANGES from another reviewer, and this is the rebase instruction rather than a new finding. The tool is |
|
PR hygiene (orchestrator 11-13 02:35Z, cl-infra): closing — superseded: main has it as #2205 (doc commit rebased, both sections kept). Branch deleted with the close. |
Closes the part of #823 that its own text requires: "Not a v2026.44 blocker by itself, but the release notes must say it if unfixed."
The gap
docs/axb35-usb-ports.mdhas said "fix merged, mechanism verified on the board, functional plug test outstanding" since 11-08 — and nothing indocs/releases.mdmentioned this board's USB ports at all. A limitation that lives only in a design doc has not been told to users.What lands
docs/releases.md: a row in the v2026.44 limitations table — three of four xHCI functions autosuspend toD3cold, only the controller behind the front USB-A enumerates, the image ships the keep-awake rule, and a device on a rear port has not been confirmed to enumerate on a 1bit-OS boot — with the read-only checker and the rule thatall awakeis the only verdict a plug test is valid under. Stated as unconfirmed, not as broken: the mechanism is measured, the plug is not.docs/axb35-usb-ports.md: two audit findings that need no root and no plug.The audit (this is the part that is new)
All read-only — sysfs,
/proc/interrupts, and driver source. Nothing plugged, nothing written to a device, no root./sys/bus/acpi/devices/USBC/UCSI/PNP0CA0xhci_hcd, vectors present/proc/interruptsc5:00.4powerruntime_status=resuming,power_state=D3coldec_su_axb35sourceNot claimed
The functional plug confirmation, and the
_DSMcomparison the doc names as the next diagnostic — both need a device and/or root (DSDTisroot-only here, and there is no passwordless sudo). The audit is written to make those two steps a confirmation per branch rather than a repeat of the original investigation.