hilink: record verified USB HS hardware results and bound the fault domain
This commit is contained in:
@@ -10,9 +10,39 @@ USB 2.0 EHCI port (`Sstar-ehci-1`).
|
|||||||
unbind/rebind cycles.
|
unbind/rebind cycles.
|
||||||
- The active device tree reports `dpdm_swap = <0>` and
|
- The active device tree reports `dpdm_swap = <0>` and
|
||||||
`power-enable-pad = <PAD_UNKNOWN>` (0xffff).
|
`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.
|
- 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.
|
- 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 sources
|
||||||
|
|
||||||
Audited 2026-10-02. Everything the firmware ships is stock upstream of this
|
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
|
## HiLink D+/D- hardware / rework investigation boundary
|
||||||
|
|
||||||
The remaining candidates are analog/hardware and are explicitly **outside
|
With the software and software-adjacent candidates ruled out (see the
|
||||||
software scope**:
|
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
|
- D+/D- pair routing on the HiLink carrier: continuity and symmetry from the
|
||||||
SSC338Q pads to the module socket, series resistors / ESD protection parts
|
SSC338Q pads to the module socket; controlled impedance along the pair;
|
||||||
on the pair, connector solder joints.
|
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:
|
- 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,
|
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.
|
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)
|
- Any board rework (series resistor changes, pair shortening, shielding)
|
||||||
invalidates prior software observations; re-verify from the on-device
|
invalidates prior software observations; re-verify from the on-device
|
||||||
commands below after any hardware change.
|
commands below after any hardware change.
|
||||||
|
|
||||||
No physical hardware validation has been performed for this document; nothing
|
Evidence status: the platform-driver re-probe (step 5 below) and the
|
||||||
below has been executed on the actual board and no boot image was built.
|
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
|
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
|
(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
|
reads are read-only `devmem` accesses; do **not** write UTMI/USBC/UHC
|
||||||
registers from userspace (a write can wedge the bus until reboot).
|
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
|
Register addresses (physical; the RIU window maps virtual `0xFD200000` to
|
||||||
physical `0x1F200000` — `MS_IO_OFFSET 0xDE000000`,
|
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
|
the 16-bit value at UTMI+0x78 masked with `0xFFF0` reading `0x0000` or
|
||||||
`0xFFF0` — a failed RX calibration suppresses chirp detection and points
|
`0xFFF0` — a failed RX calibration suppresses chirp detection and points
|
||||||
at power/analog, not software. `dmesg` also prints `WARNING: CA Fail !!`.
|
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
|
ls /sys/bus/platform/drivers/Sstar-ehci-1/ # note the device name
|
||||||
echo <device> > /sys/bus/platform/drivers/Sstar-ehci-1/unbind
|
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.
|
restart) rather than poking WiFi config.
|
||||||
Rebind re-runs `Titania3_series_start_ehc()` (USBC reset handshake, CA
|
Rebind re-runs `Titania3_series_start_ehc()` (USBC reset handshake, CA
|
||||||
calibration, squelch/eye init) and then re-enumerates the radio. Expected
|
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
|
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
|
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`
|
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
|
identical FS results across cold boot, re-probe and replug indicate the
|
||||||
condition is stable (analog/hardware), while an occasional HS success
|
condition is stable (analog/hardware), while an occasional HS success
|
||||||
would point at marginal timing.
|
would point at marginal timing.
|
||||||
|
|||||||
Reference in New Issue
Block a user