PlayOS Kernel Configuration Guide

Repository: playos-refdistro/br2-external/configs/
Cross-references: build-guide.md, Sprint-3.md, architecture.md §18


Philosophy

Start from a working ROG Ally configuration and remove features gradually.
Do not begin from an aggressively minimal embedded configuration — you will spend weeks re-enabling drivers you removed.

Only remove a subsystem after confirming it is absent from the supported hardware list and no test regression occurs.


Kernel Branch Policy

TrackPurpose
playos-kernel-ltsRelease and qualification — upstream Linux LTS
playos-kernel-nextHardware evaluation — newer stable branch

The LTS branch is the shipping kernel. The next branch is used to evaluate new hardware enablement (new Ally revisions, Intel support) before promotion to LTS.


Required Subsystems

Core x86_64 and Boot

CONFIG_X86_64=y
CONFIG_EFI=y
CONFIG_EFI_STUB=y           # Kernel acts as its own EFI loader
CONFIG_BLK_DEV_INITRD=y     # Embedded initramfs
CONFIG_INITRAMFS_SOURCE=""  # Buildroot fills this in
CONFIG_ACPI=y
CONFIG_ACPI_SLEEP=y
CONFIG_PCI=y
CONFIG_PCI_MSI=y
CONFIG_PCIEPORTBUS=y
CONFIG_AMD_IOMMU=y          # ROG Ally uses AMD IOMMU
CONFIG_INTEL_IOMMU=y        # Intel target

Virtual Filesystems (required for PID 1)

CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_PROC_FS=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_CGROUPS=y            # optional but useful for future process isolation

Storage

CONFIG_BLK_DEV_NVME=y       # ROG Ally internal SSD
CONFIG_EFI_PARTITION=y
CONFIG_MSDOS_PARTITION=y    # for USB drives
CONFIG_VFAT_FS=y            # ESP (FAT32)
CONFIG_EXT4_FS=y            # Data partition
CONFIG_EXT4_USE_FOR_EXT2=y
CONFIG_SQUASHFS=y           # Read-only system root (A/B squashfs slots)
# CONFIG_XFS_FS is not needed
# CONFIG_BTRFS_FS is not needed

Graphics — AMD (ROG Ally)

CONFIG_DRM=y
CONFIG_DRM_KMS_HELPER=y
CONFIG_DRM_AMDGPU=y
CONFIG_DRM_AMD_DC=y         # AMD Display Core — required for DisplayPort/eDP
CONFIG_DRM_AMD_DC_DCN=y     # DCN (Display Core Next) for RDNA GPUs
CONFIG_DRM_SIMPLEDRM=y      # Firmware framebuffer fallback (recovery mode)
CONFIG_FRAMEBUFFER_CONSOLE=n # No VT framebuffer console in production
CONFIG_DRM_FBDEV_EMULATION=n

Graphics — Intel (Sprint 13)

# For Gen 9–12 (Ice Lake, Tiger Lake, Alder Lake):
CONFIG_DRM_I915=y
# For Gen 12.5+ (Meteor Lake, Lunar Lake) — choose one:
# CONFIG_DRM_XE=y

USB and Input

CONFIG_USB=y
CONFIG_USB_XHCI_HCD=y       # USB 3.x host controller
CONFIG_USB_HID=y
CONFIG_HID=y
CONFIG_HID_GENERIC=y
CONFIG_HID_ASUS=y            # ROG Ally vendor-specific HID quirks
CONFIG_INPUT=y
CONFIG_INPUT_EVDEV=y         # evdev interface for playos-platform-api
CONFIG_INPUT_JOYSTICK=y
CONFIG_JOYSTICK_XPAD=n       # We use HID not xpad for the Ally

Audio — ROG Ally (AMD ACP / HDA)

CONFIG_SOUND=y
CONFIG_SND=y
CONFIG_SND_HDA_INTEL=y
CONFIG_SND_HDA_CODEC_REALTEK=y   # ROG Ally uses Realtek codec
CONFIG_SND_SOC=y
CONFIG_SND_SOC_AMD_ACP=y         # AMD Audio Co-Processor
CONFIG_SND_SOC_AMD_MACH=y        # or specific machine driver
# CONFIG_SND_USB_AUDIO=y         # Add for USB audio adapter support

Networking (development / Wi-Fi post-MVP)

# Minimal for first sprints
CONFIG_NET=y
CONFIG_UNIX=y                    # Required for Wayland sockets

# Sprint 11.6 — wired developer SSH (USB-C Ethernet + QEMU test NIC).
# No wireless in this sprint:
CONFIG_NETDEVICES=y
CONFIG_ETHERNET=y
CONFIG_MII=y
CONFIG_USB_NET_DRIVERS=y
CONFIG_USB_USBNET=y
CONFIG_USB_NET_AX8817X=y
CONFIG_USB_NET_AX88179_178A=y
CONFIG_USB_RTL8152=y
CONFIG_USB_NET_CDCETHER=y
CONFIG_USB_NET_CDC_NCM=y
CONFIG_USB_NET_CDC_EEM=y
CONFIG_USB_NET_RNDIS_HOST=y
CONFIG_USB_NET_SMSC95XX=y
CONFIG_USB_NET_MCS7830=y
CONFIG_VIRTIO_NET=y
CONFIG_E1000=y
CONFIG_E1000E=y

# Wi-Fi deferred to post-MVP / Sprint 16:
# CONFIG_CFG80211=y
# CONFIG_MAC80211=y
# CONFIG_IWLWIFI=y               # Intel Wi-Fi
# CONFIG_ATH11K=y / CONFIG_MT7921E=y  # AMD/Mediatek (Ally has AMD Wi-Fi)

Power Management

CONFIG_ACPI_BATTERY=y
CONFIG_POWER_SUPPLY=y
CONFIG_THERMAL=y
CONFIG_THERMAL_HWMON=y
CONFIG_X86_THERMAL_VECTOR=y
CONFIG_X86_AMD_PSTATE=y          # AMD P-state driver (ROG Ally)
CONFIG_X86_AMD_PSTATE_UT=n       # Skip unit test driver
CONFIG_X86_INTEL_PSTATE=y        # Intel P-state (Sprint 13)
CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
CONFIG_SUSPEND=y                  # System suspend (post-MVP full support)
CONFIG_PM_SLEEP=y
CONFIG_HIBERNATION=n              # Not needed for MVP

Watchdog

CONFIG_WATCHDOG=y
CONFIG_WATCHDOG_NOWAYOUT=y
CONFIG_SP5100_TCO=y              # AMD SB800 / FCH watchdog (ROG Ally)

Security (Sprint 12)

CONFIG_SECCOMP=y
CONFIG_SECCOMP_FILTER=y
CONFIG_SECURITY=y
CONFIG_SECURITY_LANDLOCK=y       # Landlock LSM
CONFIG_LSM="landlock,lockdown,yama"
CONFIG_DM_VERITY=y               # dm-verity for system image integrity
CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG=n  # Signature check optional initially
CONFIG_MODULE_SIG=y              # Module signing
CONFIG_MODULE_SIG_ALL=y

EFI Variables (needed for A/B boot counting)

CONFIG_EFI_VARS=y
CONFIG_EFIVAR_FS=y

What to Remove

Only after verifying the feature is not used by any supported hardware:

# Server filesystems
CONFIG_XFS_FS=n
CONFIG_BTRFS_FS=n
CONFIG_NFS_FS=n
CONFIG_NFSD=n

# Unused network protocols
CONFIG_IPV6=n       # unless needed for Wi-Fi
CONFIG_NETFILTER=n  # no iptables

# Unused GPU drivers
CONFIG_DRM_RADEON=n     # Legacy AMD — not RDNA
CONFIG_DRM_NOUVEAU=n    # NVIDIA
CONFIG_DRM_VMWGFX=n     # VMware

# Legacy buses
CONFIG_ISA=n
CONFIG_PARPORT=n
CONFIG_PCMCIA=n

# Virtualization host features
CONFIG_KVM=n
CONFIG_XEN=n

# Debug features (production builds)
CONFIG_DEBUG_KERNEL=n
CONFIG_KGDB=n
CONFIG_SLUB_DEBUG=n
CONFIG_KALLSYMS=n       # Remove after bring-up is stable

Config File Locations

br2-external/configs/playos_qemu_x86_64_defconfig    QEMU target
br2-external/configs/playos_rog_ally_defconfig        ROG Ally (primary)
br2-external/configs/playos_intel_pc_defconfig        Intel (Sprint 13)

Each defconfig sets BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE to point to a kernel config fragment in board/playos/<target>/linux.config.


Kernel Config Workflow

# Edit kernel config interactively
make -C buildroot O=build/rog-ally linux-menuconfig

# Save changes back to the fragment
make -C buildroot O=build/rog-ally linux-update-defconfig

# Check for missing dependencies
make -C buildroot O=build/rog-ally linux-check-package

Firmware

ROG Ally requires AMD GPU firmware. Firmware blobs are non-redistributable and must be sourced from:

  • An existing ROG Ally Linux installation: /lib/firmware/amdgpu/
  • The linux-firmware repository (check licensing)

In Buildroot, firmware is placed in:

board/playos/rog-ally/rootfs-overlay/lib/firmware/amdgpu/

Required blobs (exact filenames vary by GPU revision — check dmesg for requests):

amdgpu/gc_11_0_4_pfp.bin
amdgpu/gc_11_0_4_me.bin
amdgpu/gc_11_0_4_ce.bin
amdgpu/gc_11_0_4_rlc.bin
amdgpu/gc_11_0_4_mec.bin
amdgpu/dcn_3_1_4_dmcub.bin
... (and others — check dmesg on first boot)

CPU microcode:

board/playos/rog-ally/rootfs-overlay/lib/firmware/amd-ucode/microcode_amd_fam19h.bin