docs: record what firmware fixed, and what it turns out not to fix
Some checks failed
build image / build (push) Has been cancelled
Some checks failed
build image / build (push) Has been cancelled
The motd was the worst of it — it told anyone logging in that "WiFi and Bluetooth work with the firmware Fedora ships", which is precisely backwards for the onboard adapter, and pointed at a Windows partition this machine no longer has. What the blobs did fix, verified: the GPU initialises, ADSP/CDSP/SLPI all run, sensors appear as IIO devices, venus registers /dev/video0-3. What they did not, and why, so nobody repeats the search: Onboard WiFi is loaded by the modem — wlan*mdsp* is the WLAN Modem DSP — so ath10k_snoc binds and then waits silently on a QMI service that never arrives. The modem boots and dies at "RF stuck in QLINK start state", the RF front-end, which is board-specific wiring in a way the SoC-level blobs are not. These are Qualcomm *reference* drivers; good enough for the GPU and DSPs, evidently not for this machine's radio. Three plausible fixes that do not work are recorded too: rmtfs (correct to enable, does not help), the _nm firmware variants (rejected at PBL), and unplugging the USB dongle (different bus entirely — it was never competing). Audio gets further than expected. The codec answers over SLIMbus with its chip id, so hardware and ADSP are fine; what fails is the codec's SoundWire block declaring two data-in ports where the controller expects six. That is a kernel mismatch and needs a kernel change. Also record the mesa caveat properly: the GPU works, but freedreno's EGL path segfaults gnome-shell into a login loop, and LIBGL_ALWAYS_SOFTWARE does nothing because mutter uses EGL. MESA_LOADER_DRIVER_OVERRIDE=kms_swrast is what works. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XWRjNJMistCy6ngXH5aJLS
This commit is contained in:
49
README.md
49
README.md
@@ -31,22 +31,31 @@ login. Root is locked.
|
||||
|
||||
## Hardware status
|
||||
|
||||
| Works out of the box | Needs firmware from Windows | Not supported |
|
||||
|---------------------------------|-----------------------------|---------------|
|
||||
| UFS storage, USB, keyboard, touchpad, touchscreen | Graphics (Adreno 630 zap shader) | LTE modem |
|
||||
| WiFi + Bluetooth (ath10k WCN3990) | Audio | |
|
||||
| Battery and charging | Sensor hub — lid switch, accelerometer, auto-rotate | |
|
||||
| Display (unaccelerated) | Hardware video decode (venus) | |
|
||||
| Works | Works once you supply firmware | Does not work |
|
||||
|---|---|---|
|
||||
| UFS storage, USB, keyboard, touchpad, touchscreen | Adreno 630 initialises — see mesa note below | Audio — kernel driver, not firmware |
|
||||
| Display (unaccelerated), battery, charging | Sensor hub — accelerometer, auto-rotate | Onboard WiFi — needs modem firmware no public source provides |
|
||||
| USB WiFi dongles, USB phone tethering | Hardware video decode (venus, `/dev/video0-3`) | LTE modem — same reason |
|
||||
|
||||
Fedora ships everything Qualcomm permits to be redistributed, which covers
|
||||
WiFi and Bluetooth outright. Graphics is the awkward case: the generic Adreno
|
||||
pieces (`a630_gmu.bin`, `a630_sqe.fw`) are packaged, but the C630's device tree
|
||||
asks for a **model-signed** zap shader, `qcdxkmsuc850.mbn`, which exists only in
|
||||
your machine's Windows partition — Fedora's generic `sdm845/a630_zap.mbn` is not
|
||||
what this device requests. Audio, sensors and video decode are the same story.
|
||||
Verified on hardware. `docs/firmware.md` has the evidence for each, including
|
||||
the things that look like they should help and do not.
|
||||
|
||||
Run `sudo c630-firmware` once after installing — see
|
||||
[docs/firmware.md](docs/firmware.md) for the full list and a manual fallback.
|
||||
**Graphics comes with a caveat.** With `qcdxkmsuc850.mbn` in place the GPU
|
||||
genuinely initialises — `gpu-initialized: 1`, revision 630, executing
|
||||
submissions. But mesa's freedreno EGL path then segfaults in
|
||||
`dri2_drm_swap_buffers`, taking gnome-shell down in a login loop. Until that is
|
||||
fixed upstream, the desktop needs software rendering:
|
||||
|
||||
```sh
|
||||
echo 'MESA_LOADER_DRIVER_OVERRIDE=kms_swrast' | sudo tee /etc/environment
|
||||
```
|
||||
|
||||
Note `LIBGL_ALWAYS_SOFTWARE=1` does *not* work here — mutter uses EGL, which
|
||||
ignores it.
|
||||
|
||||
Getting the firmware: see
|
||||
[docs/firmware.md](docs/firmware.md). The cabinets from WOA-Project are the
|
||||
easiest route; `sudo c630-firmware` works if the Windows partition survives.
|
||||
|
||||
## Building
|
||||
|
||||
@@ -119,7 +128,7 @@ docs/ Installation, firmware, runner setup
|
||||
## Documentation
|
||||
|
||||
- [docs/install.md](docs/install.md) — writing the image and booting the laptop
|
||||
- [docs/firmware.md](docs/firmware.md) — what needs extracting from Windows and why
|
||||
- [docs/firmware.md](docs/firmware.md) — the per-model blobs: what they enable, where to get them, and what they do not fix
|
||||
- [docs/runner-setup.md](docs/runner-setup.md) — one-time Gitea runner preparation
|
||||
|
||||
## Boot status
|
||||
@@ -141,11 +150,11 @@ is installed and corrects the clock once the network is up. Until it does, rpm
|
||||
rejects package signatures dated after the (wrong) current time and reports
|
||||
installed packages as missing — see [docs/install.md](docs/install.md).
|
||||
|
||||
Onboard WiFi does not appear at all, and audio, sensors, video decode and
|
||||
accelerated graphics are all absent — every one of them waiting on the
|
||||
model-signed firmware described in [docs/firmware.md](docs/firmware.md). On
|
||||
this machine Windows has been wiped, so those blobs are gone; the kernel names
|
||||
each missing file explicitly in `dmesg`.
|
||||
With the per-model firmware supplied, the GPU initialises, the ADSP, CDSP and
|
||||
SLPI all run, sensors appear as IIO devices and venus registers `/dev/video0-3`.
|
||||
Audio and onboard WiFi remain broken for reasons unrelated to firmware — see
|
||||
[docs/firmware.md](docs/firmware.md), which records both the evidence and the
|
||||
several plausible fixes that turn out not to work.
|
||||
|
||||
The internal drive needs `build/install-to-disk.sh` rather than `dd`: its UFS
|
||||
uses 4096-byte logical sectors, which the 512-byte image geometry cannot be
|
||||
|
||||
Reference in New Issue
Block a user