From 841b8456e33aec9169c9a20c7221398903f2ceda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yann=20B=C3=BCchau?= Date: Wed, 25 Jun 2025 19:50:49 +0200 Subject: [PATCH] rpi4: Introduce raspberry-pi."4".enable Don't enable anything unless explicitly enabled. Otherwise e.g. the specified kernel complicates running a x86_64 vm of a rpi4 NixOS system --- raspberry-pi/4/cpu-revision.nix | 35 +++++++++++---------- raspberry-pi/4/default.nix | 54 +++++++++++++++++++-------------- 2 files changed, 49 insertions(+), 40 deletions(-) diff --git a/raspberry-pi/4/cpu-revision.nix b/raspberry-pi/4/cpu-revision.nix index 54db83af8..9520bcace 100644 --- a/raspberry-pi/4/cpu-revision.nix +++ b/raspberry-pi/4/cpu-revision.nix @@ -1,24 +1,23 @@ -{ - hardware.deviceTree.overlays = [ - { - name = "rpi4-cpu-revision"; - dtsText = '' - /dts-v1/; - /plugin/; +{ config, lib, ... }: +lib.mkIf config.hardware.raspberry-pi."4".enable { + hardware.deviceTree.overlays = [{ + name = "rpi4-cpu-revision"; + dtsText = '' + /dts-v1/; + /plugin/; - / { - compatible = "raspberrypi,4-model-b"; + / { + compatible = "raspberrypi,4-model-b"; - fragment@0 { - target-path = "/"; - __overlay__ { - system { - linux,revision = <0x00d03114>; - }; + fragment@0 { + target-path = "/"; + __overlay__ { + system { + linux,revision = <0x00d03114>; }; }; }; - ''; - } - ]; + }; + ''; + }]; } diff --git a/raspberry-pi/4/default.nix b/raspberry-pi/4/default.nix index e02ba0b3f..f4b62d3af 100644 --- a/raspberry-pi/4/default.nix +++ b/raspberry-pi/4/default.nix @@ -27,31 +27,41 @@ ./xhci.nix ]; - boot = { - kernelPackages = lib.mkDefault pkgs.linuxKernel.packages.linux_rpi4; - initrd.availableKernelModules = [ - "usbhid" - "usb_storage" - "vc4" - "pcie_brcmstb" # required for the pcie bus to work - "reset-raspberrypi" # required for vl805 firmware to load - ]; - - loader = { - grub.enable = lib.mkDefault false; - generic-extlinux-compatible.enable = lib.mkDefault true; + options = { + hardware.raspberry-pi."4" = { + enable = lib.mkEnableOption "basic config for a RaspberryPi 4"; }; }; - hardware.deviceTree.filter = lib.mkDefault "bcm2711-rpi-*.dtb"; + config = lib.mkIf config.hardware.raspberry-pi."4".enable { + - assertions = [ - { - assertion = (lib.versionAtLeast config.boot.kernelPackages.kernel.version "6.1"); - message = "This version of raspberry pi 4 dts overlays requires a newer kernel version (>=6.1). Please upgrade nixpkgs for this system."; - } - ]; + boot = { + kernelPackages = lib.mkDefault pkgs.linuxKernel.packages.linux_rpi4; + initrd.availableKernelModules = [ + "usbhid" + "usb_storage" + "vc4" + "pcie_brcmstb" # required for the pcie bus to work + "reset-raspberrypi" # required for vl805 firmware to load + ]; + + loader = { + grub.enable = lib.mkDefault false; + generic-extlinux-compatible.enable = lib.mkDefault true; + }; + }; + + hardware.deviceTree.filter = lib.mkDefault "bcm2711-rpi-*.dtb"; - # Required for the Wireless firmware - hardware.enableRedistributableFirmware = true; + assertions = [{ + assertion = + (lib.versionAtLeast config.boot.kernelPackages.kernel.version "6.1"); + message = + "This version of raspberry pi 4 dts overlays requires a newer kernel version (>=6.1). Please upgrade nixpkgs for this system."; + }]; + + # Required for the Wireless firmware + hardware.enableRedistributableFirmware = true; + }; }