Phase 3: GPU, the Adreno X1-85 boots its GMU (2026-11-03)
Attempt 2026-11-03-5. Image d862b3e055610ddf, kernel #6 (2026-11-03 2:23 PM ET), commit d67114c. Sources: the
netlog dumps/firstboot/2026-11-03-netlog.txt (1308 lines) and the AP console log dumps/firstboot/2026-11-03-ap.log
(both gitignored), plus the owner looking at the panel.
Why
In attempt 2026-11-03-4 (display-2026-11-03.md) the display bound only because the command
line carried msm.skip_gpu=1. The GPU SMMU 3da0000.iommu stayed deferred (“supplier 3d90000.clock-controller not
ready”). scripts/dt-kconfig-map.py on the mica-el2 DTB showed gpucc (CLK_X1E80100_GPUCC) as the only GPU-path
driver still at =m.
Changes (commit d67114c)
- Kernel:
kernel/mica-gpu.configsetsCLK_X1E80100_GPUCC=y. - Command line:
msm.separate_gpu_kms=1replacesmsm.skip_gpu=1. The GPU gets its own DRM device throughmsm_gpu_probe(adreno_device.c:275,msm_drv.c:1102-1121), so a GPU failure can’t unbind the display. - Firmware:
qcom/gen70500_sqe.fwandqcom/gen70500_gmu.bin(names froma6xx_catalog.c:1573-1577).- They come from
linux-firmware-qcom 20260916-1, downloaded into~/.cache/gbook/pkgs, signature-checked against pacman’s keyring and never installed on the build host. - sha256
05ae89e6…(sqe) and5dfba247…(gmu), the same as kernel.org linux-firmware tag20260916. scripts/stage-firmware.shgained this “pkg” source.
- They come from
/init: after the display block, it opens the GPU’s render node in a background subshell that is never waited for. That open triggersmsm_open→load_gpu.
Result: pass
- SMMU:
arm-smmu 3da0000.iommuprobed at 0.506 s (SMMUv2, 25 context banks).3d00000.gpuand3d6a000.gmujoined iommu groups 0 and 1.3da0000.iommuis gone from every deferred list. - GPU DRM device:
[drm] Initialized msm 1.13.0 for 3d00000.gpu on minor 1at 0.542 s./initfound it asrenderD128, driveradreno.- The display is a separate device:
msm-kmsforae01000.display-controlleron minor 2 (card2).
- Firmware and GMU, when
/initopened the node at 57.8 s:loaded qcom/gen70500_sqe.fw from new locationandloaded qcom/gen70500_gmu.bin from new locationLoaded GMU firmware v4.3.17Zap shader not enabled - using SECVID_TRUST_CNTL instead. This is the expected EL2 path:x1-el2.dtsodisablesgpu_zap_shader, anda6xx_gpu.c:1507-1516falls back.
- No GPU errors after the load: no GMU timeout, hang or fault in the rest of the log.
gpu-open=opened. - devfreq:
3d00000.gpuat 300 MHz, max 1250 MHz. - Display unchanged from attempt -4:
card2-eDP-1connected at 2560x1600.VREG_EDP_3P3andVBL9enabled after 40 s; backlight 2048/4095.- The owner saw the panel stay lit with the banner.
- Panel identity (the
edid_idfix2d2f2b5):mfr=LGD product=0804 text="RNYV4?LP134WQ". That’s an LG DisplayLP134WQ…13.4“ panel. The 0xfe text descriptor is cut at 13 bytes, and?replaces a non-printing byte. - Shutdown: clean.
/initsent netlog at about 68 s and ranreboot -fat 128 s. The kernel disabled the panel and both SMMUs, then printedreboot: Restarting systemat 128.6 s (2:29 PM ET). With the image stick still in, the firmware stayed on its boot screen. Once the owner pulled the stick, stock booted. - Deferred at the end: only
arm-scmi(mailbox17430000).
Leftovers (not failures)
gcc-x1e80100andgpucc-x1e80100reportsync_state() pending due to 3d6a000.gmu. Inference: the GMU node has no platform driver of its own (the a6xx code drives it during the GPU bind), so these providers never get theirsync_state(). Not checked against the source yet.clk_ignore_unused pd_ignore_unusedare on the command line anyway.adreno 3d00000.gpu: supply vdd not foundandvddcx not found: the GPU node inhamoa.dtsinames neither supply, so the driver uses dummy regulators.- No rendering test: the initramfs has no Mesa or freedreno userspace. The GPU is up as far as the kernel is concerned.
Next for the GPU
- A real workload needs a userspace with Mesa freedreno (a rootfs, not this initramfs).
- The zap shader under EL1 (stock firmware
qcdxkmsuc8380.mbn) only matters for a non-EL2 boot.