I had this wrong. The claim that accelerated graphics works on the firmware Fedora ships does not survive contact with the device tree. Fedora does package an sdm845/a630_zap.mbn, which is what led me astray, but that is the generic Snapdragon 845 zap shader. The C630's node in sdm850-lenovo-yoga-c630.dts names qcom/sdm850/LENOVO/81JL/qcdxkmsuc850.mbn specifically — model-signed, present only in the machine's Windows partition. Until it is supplied the display is unaccelerated. Also add qcslpi850.mbn and qcvss850.mbn, which were missing entirely, and attribute the sensor hub to slpi_pas rather than cdsp_pas. The list is now every firmware-name property in the mainline device tree rather than a recollection of forum posts, so it should be complete: eight files, not five. WiFi and Bluetooth are unaffected — ath10k WCN3990 including wlanmdsp.mbn is genuinely redistributable and genuinely shipped. Add a section on locating the blobs on an old backup, for the case where Windows is long gone from the machine. Only comments changed in config/packages/base.pkgs, so the package set hashes identically and the staged base stays valid. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XWRjNJMistCy6ngXH5aJLS
4.6 KiB
Firmware
The C630's firmware splits into two groups, and the split is about licensing, not difficulty.
What ships in the image
Qualcomm permits redistribution of these, so Fedora packages them and the build installs them:
| Package | Files | Enables |
|---|---|---|
atheros-firmware |
ath10k/WCN3990/hw1.0/{firmware-5.bin,board-2.bin,wlanmdsp.mbn} |
WiFi and Bluetooth |
qcom-firmware |
qcom/a630_gmu.bin, qcom/a630_sqe.fw |
The generic half of the Adreno 630 — necessary but not sufficient |
Networking therefore works on a freshly written image. Graphics does not: see below.
What has to come off the Windows partition
These are signed against per-model keys, so nobody can redistribute them and
they exist on your machine only inside its Windows install. The list is not a
guess — it is every firmware-name property in the mainline device tree,
arch/arm64/boot/dts/qcom/sdm850-lenovo-yoga-c630.dts:
| File | Device tree node | Lost without it |
|---|---|---|
qcdxkmsuc850.mbn |
gpu_zap_shader |
Accelerated graphics |
qcadsp850.mbn |
adsp_pas |
Audio — speakers, microphone |
qcslpi850.mbn |
slpi_pas |
Sensor hub — lid switch, accelerometer, auto-rotate |
qccdsp850.mbn |
cdsp_pas |
Compute DSP offload |
qcvss850.mbn |
venus |
Hardware video decode |
qcdsp1v2850.mbn |
mss_pil |
Modem, stage 1 |
qcdsp2850.mbn |
mss_pil |
Modem, stage 2 |
ipa_fws.elf |
ipa |
IPA datapath, needed by the modem |
They belong under /lib/firmware/updates/qcom/sdm850/LENOVO/81JL/.
The GPU one is worth calling out, because it is easy to assume otherwise:
Fedora does ship an sdm845/a630_zap.mbn, but that is the generic
Snapdragon 845 zap shader and not what this device asks for. The C630's
device tree names qcom/sdm850/LENOVO/81JL/qcdxkmsuc850.mbn specifically, so
until you supply it you get an unaccelerated display.
Each file is independent, so a partial recovery is still worth having —
qcdxkmsuc850.mbn on its own buys you working graphics.
Finding them on a backup
If Windows is long gone from the machine but you kept a copy of the files, one search catches all eight, since seven share a suffix:
find /mnt/backup -type f \
\( -iname 'qc*850.mbn' -o -iname 'ipa_fws.elf' -o -iname 'bdwlan*.bin' \) \
-printf '%10s %p\n'
They originally lived in C:\Windows\System32\DriverStore\FileRepository\, in
directories named qcdx850.inf_arm64_* and qcadsp*.inf_arm64_*. If the loose
files turn up nothing, look for those directories wholesale:
find /mnt/backup -type d -iname 'qc*.inf_arm64_*'
Expect a few hundred KB to a few MB each. file reports them as data — they
are signed Qualcomm MBN containers, not ELF, apart from ipa_fws.elf.
Lenovo does not appear to publish a driver package for the 81JL containing these, so an old backup or a surviving Windows partition are the only routes.
Extracting them
The image ships Fedora's qcom-firmware-extract. Run it once:
sudo c630-firmware
sudo reboot
That wraps qcom-firmware-extract and regenerates the initramfs afterwards,
which matters — the ADSP firmware has to be available before the root
filesystem is mounted, and overlay/etc/dracut.conf.d/10-c630.conf only takes
effect on a rebuild.
If it cannot find Windows, mount it yourself and point the tool at it:
lsblk -o NAME,SIZE,FSTYPE,LABEL # find the NTFS partition
sudo mkdir -p /mnt/windows
sudo mount /dev/sda4 /mnt/windows
sudo qcom-firmware-extract --windows-dir /mnt/windows
qcom-firmware-extract was written for the Snapdragon 8cx and X Elite laptops.
If it does not recognise the SDM850, copy the files by hand — they are in
Windows/System32/DriverStore/FileRepository/ under a qcdx*.inf_arm64_*
directory:
sudo find /mnt/windows/Windows/System32/DriverStore/FileRepository \
-iname 'qc*850.mbn' -o -iname 'ipa_fws.elf' -o -iname 'qcdxkmsuc850.mbn'
sudo mkdir -p /lib/firmware/updates/qcom/sdm850/LENOVO/81JL
sudo cp <each file> /lib/firmware/updates/qcom/sdm850/LENOVO/81JL/
sudo dracut --force --regenerate-all
Check it took:
dmesg | grep -iE 'remoteproc|adsp|cdsp'
Baking firmware into the image
If you would rather not repeat the extraction on every reinstall, drop the files
into firmware/local/ in this repo, mirroring the /usr/lib/firmware/updates/
layout:
firmware/local/qcom/sdm850/LENOVO/81JL/qcadsp850.mbn
firmware/local/qcom/sdm850/LENOVO/81JL/qccdsp850.mbn
...
build/stage2.sh picks them up automatically. They are gitignored, and should
stay that way — this repository is public and the blobs are not yours to
publish.