Files
c630/config/device.env
rob thijssen 477d43aacd
Some checks failed
build image / build (push) Has been cancelled
Survive kernel updates on a /boot this small
A dnf upgrade to 7.1.8 installed the kernel rpm cleanly, then ran /boot out
of space. dracut wrote no initramfs, and because kernel-install stops at the
first failing plugin, 95-c630-devicetree never ran either — leaving a boot
entry with neither an initrd nor a devicetree line, which on this machine can
never boot. dnf reported success and nothing retried.

A kernel costs ~336 MiB here: a 210 MiB hostonly=no initramfs, a 98 MiB
dtb-<kver> directory carrying every board's device tree, plus vmlinuz and
System.map. Three of those cannot fit 1 GiB, so /boot goes to 2 GiB and
installonly_limit drops to 2.

Also fixes the quieter half of the same trap. snd-soc-wsa881x lives outside
the kernel package, so the speakers go silent after any kernel update with
nothing in the logs to explain it. c630-wsa881x rebuilds it and
96-c630-wsa881x.install calls it on each kernel-install add — always exiting
0, since a plugin failure is precisely what caused the damage above.

grub.cfg gains the next_entry one-shot block that has been carried by hand all
along, so testing a kernel costs a power cycle rather than a rescue.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011XgGF5wfxLDAybVnNz6eNQ
2026-08-14 16:17:52 +03:00

66 lines
3.1 KiB
Bash

# Device parameters for the Lenovo Yoga C630 13Q50 (81JL) — Qualcomm SDM850.
#
# Sourced by build/stage2.sh. Everything here is overridable from the
# environment, so CI can tweak a value without editing this file.
# --- identity -----------------------------------------------------------
: "${DEVICE_NAME:=lenovo-yoga-c630}"
: "${DEVICE_DESC:=Lenovo Yoga C630 13Q50}"
# Device tree shipped by Fedora's kernel-core, relative to /boot/dtb-$KVER/.
: "${DEVICE_DTB:=qcom/sdm850-lenovo-yoga-c630.dtb}"
# --- kernel command line ------------------------------------------------
#
# clk_ignore_unused / pd_ignore_unused
# The SDM850 clock and power-domain trees are only partially described in
# the device tree. Without these the kernel gates clocks and power domains
# that nothing has claimed but that the machine still needs, and the boot
# dies somewhere between the pivot and the display coming up.
#
# efi=noruntime
# The C630's EFI runtime services are not usable from Linux. Since 6.7 the
# qcom_uefisecapp driver provides efivars through SCM instead, so turning
# runtime services off costs nothing and avoids the hangs.
#
# arm64.nopauth
# Harmless on Cortex-A75/A55 (no pointer auth), kept for parity with the
# rest of the Snapdragon WoA laptop fleet.
: "${DEVICE_CMDLINE:=clk_ignore_unused pd_ignore_unused efi=noruntime arm64.nopauth}"
# Uncomment if USB dies during boot before the Windows DSP firmware has been
# extracted — the ADSP reset puts the USB-C PHY into high-Z briefly.
# DEVICE_CMDLINE="$DEVICE_CMDLINE modprobe.blacklist=qcom_q6v5_pas"
# --- image geometry (MiB) -----------------------------------------------
: "${ESP_SIZE_MIB:=512}"
# /boot has to hold whole kernels, and this machine's are fat: the initramfs is
# built hostonly=no (~210 MiB) and kernel-core's dtb directory carries every
# board's device tree (~98 MiB), so an installed kernel costs ~336 MiB. 1024
# fits only two with nothing to spare, and running out mid-update leaves an
# unbootable entry — see overlay/etc/dnf/libdnf5.conf.d/50-c630-installonly.conf.
: "${BOOT_SIZE_MIB:=2048}"
# Total image size. The root partition takes whatever is left, and grows to
# fill the target medium on first boot.
: "${IMAGE_SIZE_MIB:=8192}"
# --- distro -------------------------------------------------------------
: "${FEDORA_RELEASE:=44}"
: "${TARGET_ARCH:=aarch64}"
# --- selinux ------------------------------------------------------------
# The build labels the filesystem offline with setfiles, so enforcing is
# viable. It ships permissive anyway: an unlabelled or mislabelled filesystem
# takes PID 1 down with "Failed to allocate manager object" before anything can
# be logged in and fixed, and on a machine this awkward to debug that trade is
# not worth making by default. Switch with `sudo setenforce 1` once it is up,
# or set this to enforcing and rebuild.
: "${SELINUX_MODE:=permissive}"
# --- default account ----------------------------------------------------
# Password is expired at first login, so it must be changed immediately.
: "${DEFAULT_USER:=grenade}"
: "${DEFAULT_PASSWORD:=grenade}"