hilink: record verified USB HS hardware results and bound the fault domain

This commit is contained in:
2026-10-03 12:27:25 +02:00
parent e28472c5bd
commit 17caa64ed7
@@ -10,9 +10,39 @@ USB 2.0 EHCI port (`Sstar-ehci-1`).
unbind/rebind cycles.
- The active device tree reports `dpdm_swap = <0>` and
`power-enable-pad = <PAD_UNKNOWN>` (0xffff).
- **Verified on hardware (2026-10, Piotr):** the full `soc:Sstar-ehci-1`
platform-driver unbind/bind cycle (step 5 below) was performed over
Ethernet, waited out, and `/sys/bus/usb/devices/1-1/speed` still returned
`12`. A complete HCD/UTMI re-initialization therefore **does not** restore
high-speed negotiation on this board.
- **Verified on hardware (2026-10, Piotr):** changing the input supply
capacity did not improve negotiation. Supply-headroom tuning is ruled out.
- RF/FEC configuration is not a USB fix and is out of scope for this issue.
- This document contains no credentials, pairing or RF-access material.
## Conclusion (current fault-domain classification)
Combined with the exact vendor EHCI/UTMI source audit below (which found no
HiLink-specific software discrepancy in anything this overlay or the shipped
kernel build controls), the verified on-hardware results above eliminate the
remaining software-adjacent candidates that are cheap to test:
- **Ruled out:** wifibroadcast/OpenIPC configuration, RF/FEC settings,
ordinary userspace timing, a simple USB-device rebind, a full
HCD/UTMI re-initialization (done on hardware, no change), and
input-supply-capacity tuning (done on hardware, no change).
- **Remaining fault domain:** the USB **high-speed physical path / signal
integrity / rework** — D+/D− routing and symmetry, controlled impedance
and stubs, series/ESD components on the pair, connector and solder
integrity, or PHY-side / device-side silicon-level hardware — exactly the
boundary detailed in the hardware section below.
Two caveats stay attached to this classification: it does not prove that
every conceivable undocumented analog register in the vendor PHY block is
irrelevant (the audited paths cover what the shipped source programs, not
the full register space), and it does **not** claim any high-speed success —
the fault is unresolved; only its domain is now sharply bounded.
## Audited sources
Audited 2026-10-02. Everything the firmware ships is stock upstream of this
@@ -175,28 +205,49 @@ All tuning is compile-time; there are no runtime knobs in this repo.
## HiLink D+/D- hardware / rework investigation boundary
The remaining candidates are analog/hardware and are explicitly **outside
software scope**:
With the software and software-adjacent candidates ruled out (see the
conclusion above), the remaining fault domain is the USB **high-speed
physical path / signal integrity / rework**, explicitly outside software
scope:
- D+/D- pair routing on the HiLink carrier: continuity and symmetry from the
SSC338Q pads to the module socket, series resistors / ESD protection parts
on the pair, connector solder joints.
SSC338Q pads to the module socket; controlled impedance along the pair;
stubs or test points hanging off it; series resistors / ESD protection
parts on the pair; connector and solder joint integrity.
- HS chirp failure with FS working is the classic marginal-analog signature:
the same pair carries FS traffic fine while the HS chirp (a short,
amplitude-critical burst at reset) is missed by the host squelch detector.
- Concrete next hardware diagnostics, cheapest first (1-2 need the port or
module to be reachable — the radio is a directly attached module, so this
may mean a rework socket or a piggyback cable):
1. Try a **known-good HS USB device** (any USB 2.0 flash disk) on the same
port. HS on the disk but not on the radio points at the
module/device side; FS on both points at the board-side pair.
2. Try the **same RTL8812EU module on a different known-good HS host**
(a PC). HS there isolates the fault to this board's physical path.
3. Measure D+/D- continuity and symmetry against the SSC338Q pads, and
inspect series/ESD parts and connector solder under magnification.
4. With suitable equipment, capture the HS chirp amplitude/eye at the
host-side connector against the USB 2.0 electrical limits.
- Any board rework (series resistor changes, pair shortening, shielding)
invalidates prior software observations; re-verify from the on-device
commands below after any hardware change.
No physical hardware validation has been performed for this document; nothing
below has been executed on the actual board and no boot image was built.
Evidence status: the platform-driver re-probe (step 5 below) and the
input-supply-capacity change were performed on hardware (2026-10, Piotr) —
both completed with no improvement, recorded above. The register-read
diagnostics (steps 1-4 below) have not been reported yet; no HS negotiation
has been observed at any point, and this document does not claim any.
## Safe on-device verification (reads only, plus one reversible re-probe)
## On-device verification (read-only diagnostics; step 5 re-probe already completed on hardware)
Run from a root shell on the device over a link that is **not** the USB radio
(Ethernet or serial console — see the wlan0 warning in step 5). All register
reads are read-only `devmem` accesses; do **not** write UTMI/USBC/UHC
registers from userspace (a write can wedge the bus until reboot).
Steps 1-4 have not been run/reported on the affected board yet and remain
the cheapest way to capture register-level evidence (CA calibration result,
squelch value, line state, force-FS latch) alongside the hardware work.
Register addresses (physical; the RIU window maps virtual `0xFD200000` to
physical `0x1F200000` — `MS_IO_OFFSET 0xDE000000`,
@@ -245,7 +296,9 @@ number `n` sits at byte offset `2*n`, except odd `n` which sits at `2*n - 1`
the 16-bit value at UTMI+0x78 masked with `0xFFF0` reading `0x0000` or
`0xFFF0` — a failed RX calibration suppresses chirp detection and points
at power/analog, not software. `dmesg` also prints `WARNING: CA Fail !!`.
5. **Full PHY re-init (in-kernel equivalent of a power cycle)**
5. **Full PHY re-init (in-kernel equivalent of a power cycle) — COMPLETED,
no improvement** (2026-10, Piotr: performed over Ethernet, device still
enumerated at 12 Mbit/s). Kept here for reproducibility:
```
ls /sys/bus/platform/drivers/Sstar-ehci-1/ # note the device name
echo <device> > /sys/bus/platform/drivers/Sstar-ehci-1/unbind
@@ -259,12 +312,15 @@ number `n` sits at byte offset `2*n`, except odd `n` which sits at `2*n - 1`
restart) rather than poking WiFi config.
Rebind re-runs `Titania3_series_start_ehc()` (USBC reset handshake, CA
calibration, squelch/eye init) and then re-enumerates the radio. Expected
dmesg on success: `Sstar-ehci-1 H.W init`, `[USB] init squelch level 0x..`
dmesg on HS success: `Sstar-ehci-1 H.W init`, `[USB] init squelch level 0x..`
and a `new high-speed USB device number N` line. Re-running steps 1-4
afterwards gives the post-init register state.
afterwards gives the post-init register state. Observed on hardware: the
device re-enumerated at full speed again.
6. **True analog power cycle** — only a full board re-power removes power
from the UTMI PHY and the module (VBUS is hardwired; `power-enable-pad`
is not driven by Linux). Power-cycle, then repeat steps 1-5 and compare:
is not driven by Linux). Note this is distinct from the already-tested
input-supply-*capacity* change, which alters headroom but was recorded as
not improving negotiation. Power-cycle, then repeat steps 1-5 and compare:
identical FS results across cold boot, re-probe and replug indicate the
condition is stable (analog/hardware), while an occasional HS success
would point at marginal timing.