All checks were successful
build image / build (push) Successful in 24m42s
The blobs turned out to be a public download rather than something to recover from a lost backup. WOA-Project/Qualcomm-Reference-Drivers collects the Windows-on-ARM driver cabinets by SoC, and three of them cover this machine completely: qcdx850.cab has the zap shader and venus, qcipa850.cab has ipa_fws.elf, and qcsubsys850.cab has the four DSP images plus WLANMDSP.MBN — the WiFi firmware, which is not in the device tree's firmware-name list at all and so was never on our list of things to look for. Correct three claims elsewhere in the file that this disproves. `file` reports these as ELF QUALCOMM DSP6 images, not as `data` — worth stating precisely, since it is the quickest way to tell a real blob from a download that returned an HTML error page. The sizes span 14KB to 60MB rather than "a few hundred KB to a few MB". And the heading claiming they must come off the Windows partition is no longer true of the easiest route. Also narrow what c630-firmware puts in the initramfs. It globbed every .mbn in the firmware directory, which would have pulled in the 60MB qcdsp2850.mbn and inflated the initramfs roughly twentyfold. Only the GPU needs to be there — msm_dpu probes at six seconds, while the initramfs is still root; the ADSP, CDSP, SLPI, venus and modem all probe around forty seconds in and load from the real root perfectly happily. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XWRjNJMistCy6ngXH5aJLS
69 lines
2.5 KiB
Bash
Executable File
69 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/bash
|
|
#
|
|
# Pull the model-specific Qualcomm blobs off this machine's Windows partition.
|
|
#
|
|
# Fedora ships everything for the C630 that Qualcomm allows to be
|
|
# redistributed, which covers ath10k WCN3990 (WiFi/Bluetooth) outright. What it
|
|
# cannot ship is the per-model signed firmware, which is signed against this
|
|
# machine's own keys and lives only in its Windows install.
|
|
#
|
|
# Without those you lose accelerated graphics, audio, the sensor hub (lid
|
|
# switch, accelerometer, auto-rotate) and hardware video decode.
|
|
#
|
|
# Graphics is the surprising one. The generic Adreno 630 pieces are packaged,
|
|
# but this device's tree asks for a model-signed zap shader —
|
|
# qcom/sdm850/LENOVO/81JL/qcdxkmsuc850.mbn — and Fedora's generic
|
|
# sdm845/a630_zap.mbn is a different device's file.
|
|
|
|
set -euo pipefail
|
|
|
|
if [ "$(id -u)" -ne 0 ]; then
|
|
echo "c630-firmware: needs root — try: sudo c630-firmware" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "Looking for a Windows installation to extract firmware from..."
|
|
echo
|
|
|
|
if ! command -v qcom-firmware-extract >/dev/null; then
|
|
echo "qcom-firmware-extract is not installed. Install it with:" >&2
|
|
echo " sudo dnf install qcom-firmware-extract" >&2
|
|
exit 1
|
|
fi
|
|
|
|
qcom-firmware-extract "$@"
|
|
|
|
echo
|
|
# Only the GPU zap shader has to travel in the initramfs. msm_dpu probes around
|
|
# six seconds in, while the initramfs is still the root filesystem, and never
|
|
# retries. Everything else — ADSP, CDSP, SLPI, venus, modem — is probed well
|
|
# after the real root is mounted and loads from there quite happily.
|
|
#
|
|
# This matters: qcdsp2850.mbn alone is 60MB. Globbing the whole directory into
|
|
# the initramfs, which is what this used to do, would have bloated it roughly
|
|
# twentyfold to no purpose.
|
|
FW_DIR=/usr/lib/firmware/updates/qcom/sdm850/LENOVO/81JL
|
|
if [ -f "${FW_DIR}/qcdxkmsuc850.mbn" ]; then
|
|
printf 'install_items+=" %s/qcdxkmsuc850.mbn "\n' "$FW_DIR" \
|
|
> /etc/dracut.conf.d/20-c630-zap-shader.conf
|
|
echo "GPU zap shader will be included in the initramfs."
|
|
fi
|
|
|
|
echo "Regenerating the initramfs..."
|
|
dracut --force --regenerate-all
|
|
|
|
cat <<'EOF'
|
|
|
|
Done. Reboot to pick up the new firmware.
|
|
|
|
If qcom-firmware-extract could not find the Windows partition, mount it by hand
|
|
and point the tool at it:
|
|
|
|
sudo mkdir -p /mnt/windows
|
|
sudo mount /dev/disk/by-partlabel/Windows /mnt/windows # adjust as needed
|
|
sudo qcom-firmware-extract --windows-dir /mnt/windows
|
|
|
|
See docs/firmware.md in the c630 repo for the full file list and the manual
|
|
fallback if the tool does not recognise this model.
|
|
EOF
|