From 3ce889823b13dd51a8bb449b34dfcd9e0d890826 Mon Sep 17 00:00:00 2001 From: Ari Gerus Date: Wed, 3 Apr 2024 15:28:36 +0200 Subject: [PATCH] n/akamanto: use rpi4 for now, until we can at least debug rpi5 reliably --- flake.lock | 41 +++++++++++++++------- flake.nix | 1 + nixos/akamanto/default.nix | 72 ++++++++++++++++++++++++++++---------- 3 files changed, 83 insertions(+), 31 deletions(-) diff --git a/flake.lock b/flake.lock index a96ecb7..ef1c080 100644 --- a/flake.lock +++ b/flake.lock @@ -8,11 +8,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1707830867, - "narHash": "sha256-PAdwm5QqdlwIqGrfzzvzZubM+FXtilekQ/FA0cI49/o=", + "lastModified": 1712079060, + "narHash": "sha256-/JdiT9t+zzjChc5qQiF+jhrVhRt8figYH29rZO7pFe4=", "owner": "ryantm", "repo": "agenix", - "rev": "8cb01a0e717311680e0cbca06a76cbceba6f3ed6", + "rev": "1381a759b205dff7a6818733118d02253340fd5e", "type": "github" }, "original": { @@ -105,11 +105,11 @@ "utils": "utils" }, "locked": { - "lastModified": 1711733382, - "narHash": "sha256-XuKlYhc9Hk6jMIIwWTP6CTQVUWi0Sq3nJApnUJk6bu8=", + "lastModified": 1711973905, + "narHash": "sha256-UFKME/N1pbUtn+2Aqnk+agUt8CekbpuqwzljivfIme8=", "owner": "serokell", "repo": "deploy-rs", - "rev": "2bad21828ee2c5d1e42588d5f4c53f5b10300c6a", + "rev": "88b3059b020da69cbe16526b8d639bd5e0b51c8b", "type": "github" }, "original": { @@ -304,11 +304,11 @@ ] }, "locked": { - "lastModified": 1711625603, - "narHash": "sha256-W+9dfqA9bqUIBV5u7jaIARAzMe3kTq/Hp2SpSVXKRQw=", + "lastModified": 1712093955, + "narHash": "sha256-94I0sXz6fiVBvUAk2tg6t3UpM5rOImj4JTSTNFbg64s=", "owner": "nix-community", "repo": "home-manager", - "rev": "c0ef0dab55611c676ad7539bf4e41b3ec6fa87d2", + "rev": "80546b220e95a575c66c213af1b09fe255299438", "type": "github" }, "original": { @@ -469,11 +469,11 @@ ] }, "locked": { - "lastModified": 1711249705, - "narHash": "sha256-h/NQECj6mIzF4XR6AQoSpkCnwqAM+ol4+qOdYi2ykmQ=", + "lastModified": 1711854532, + "narHash": "sha256-JPStavwlT7TfxxiXHk6Q7sbNxtnXAIjXQJMLO0KB6M0=", "owner": "Mic92", "repo": "nix-index-database", - "rev": "34519f3bb678a5abbddf7b200ac5347263ee781b", + "rev": "2844b5f3ad3b478468151bd101370b9d8ef8a3a7", "type": "github" }, "original": { @@ -482,6 +482,22 @@ "type": "github" } }, + "nixos-hardware": { + "locked": { + "lastModified": 1711352745, + "narHash": "sha256-luvqik+i3HTvCbXQZgB6uggvEcxI9uae0nmrgtXJ17U=", + "owner": "NixOS", + "repo": "nixos-hardware", + "rev": "9a763a7acc4cfbb8603bb0231fec3eda864f81c0", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "master", + "repo": "nixos-hardware", + "type": "github" + } + }, "nixpkgs": { "locked": { "lastModified": 1703013332, @@ -653,6 +669,7 @@ "nix-colors": "nix-colors", "nix-formatter-pack": "nix-formatter-pack", "nix-index-database": "nix-index-database", + "nixos-hardware": "nixos-hardware", "nixpkgs": "nixpkgs_4", "simple-nixos-mailserver": "simple-nixos-mailserver" } diff --git a/flake.nix b/flake.nix index 069940d..acad9b7 100644 --- a/flake.nix +++ b/flake.nix @@ -33,6 +33,7 @@ url = "github:Jovian-Experiments/Jovian-NixOS"; inputs.nixpkgs.follows = "nixpkgs"; }; + nixos-hardware.url = "github:NixOS/nixos-hardware/master"; }; outputs = { self, nixpkgs, deploy-rs, ... }@inputs: diff --git a/nixos/akamanto/default.nix b/nixos/akamanto/default.nix index 6d5669a..ee993ad 100644 --- a/nixos/akamanto/default.nix +++ b/nixos/akamanto/default.nix @@ -40,10 +40,9 @@ in { imports = with inputs.self.nixosModules; [ "${inputs.nixpkgs}/nixos/modules/installer/sd-card/sd-image.nix" common + inputs.nixos-hardware.nixosModules.raspberry-pi-4 ]; - nixpkgs.overlays = [ inputs.self.overlays.rpi5 ]; - # don't want to pull in all of installer stuff, so we need to copy some things from sd-image-aarch64.nix: sdImage = { compressImage = false; @@ -54,6 +53,27 @@ in { [pi3] kernel=u-boot-rpi3.bin + [pi02] + kernel=u-boot-rpi3.bin + + [pi4] + kernel=u-boot-rpi4.bin + enable_gic=1 + armstub=armstub8-gic.bin + + # Otherwise the resolution will be weird in most cases, compared to + # what the pi3 firmware does by default. + disable_overscan=1 + + # Supported in newer board revisions + arm_boost=1 + + [cm4] + # Enable host mode on the 2711 built-in XHCI USB controller. + # This line should be removed if the legacy DWC2 controller is required + # (e.g. for USB device mode) or if USB support is not required. + otg_mode=1 + [all] # Boot in 64-bit mode. arm_64bit=1 @@ -66,22 +86,24 @@ in { # Prevent the firmware from smashing the framebuffer setup done by the mainline kernel # when attempting to show low-voltage or overtemperature warnings. avoid_warnings=1 - - # avoid display issues - hdmi_cvt=800 480 60 3 0 0 0 - hdmi_force_hotplug=1 - hdmi_group=2 - hdmi_mode=87 ''; - in '' - (cd ${pkgs.raspberrypifw}/share/raspberrypi/boot && cp bootcode.bin fixup*.dat start*.elf $NIX_BUILD_TOP/firmware/) + in '' + (cd ${pkgs.raspberrypifw}/share/raspberrypi/boot && cp bootcode.bin fixup*.dat start*.elf $NIX_BUILD_TOP/firmware/) - # Add the config - cp ${configTxt} firmware/config.txt + # Add the config + cp ${configTxt} firmware/config.txt - # Add pi3 specific files - cp ${pkgs.ubootRaspberryPi3_64bit}/u-boot.bin firmware/u-boot-rpi3.bin - ''; + # Add pi3 specific files + cp ${pkgs.ubootRaspberryPi3_64bit}/u-boot.bin firmware/u-boot-rpi3.bin + + # Add pi4 specific files + cp ${pkgs.ubootRaspberryPi4_64bit}/u-boot.bin firmware/u-boot-rpi4.bin + cp ${pkgs.raspberrypi-armstubs}/armstub8-gic.bin firmware/armstub8-gic.bin + cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2711-rpi-4-b.dtb firmware/ + cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2711-rpi-400.dtb firmware/ + cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2711-rpi-cm4.dtb firmware/ + cp ${pkgs.raspberrypifw}/share/raspberrypi/boot/bcm2711-rpi-cm4s.dtb firmware/ + ''; populateRootCommands = '' mkdir -p ./files/boot ${config.boot.loader.generic-extlinux-compatible.populateCmd} -c ${config.system.build.toplevel} -d ./files/boot @@ -90,16 +112,26 @@ in { hardware.enableRedistributableFirmware = lib.mkForce false; hardware.firmware = with pkgs; [ raspberrypiWirelessFirmware wireless-regdb ]; + + hardware = { + raspberry-pi."4".apply-overlays-dtmerge.enable = true; + deviceTree = { + enable = true; + filter = "*rpi-4-*.dtb"; + }; + }; boot = { + kernelPackages = lib.mkForce pkgs.linuxKernel.packages.linux_rpi4; supportedFilesystems = lib.mkForce [ "vfat" "ext4" ]; kernelParams = [ "console=ttyS1,115200n8" "fbcon=rotate:2" ]; loader.grub.enable = false; loader.generic-extlinux-compatible.enable = true; - - kernelPackages = pkgs.linuxPackages_rpi5; - # rpi5 defconfig is missing some modules initrd.availableKernelModules = lib.mkForce [ - "ahci" "ata_piix" "sata_inic162x" "sata_nv" "sata_promise" "sata_qstor""sata_sil" "sata_sil24" "sata_sis" "sata_svw" "sata_sx4" "sata_uli" "sata_via" "sata_vsc" "pata_ali" "pata_amd" "pata_artop" "pata_atiixp" "pata_efar" "pata_hpt366" "pata_hpt37x" "pata_hpt3x2n" "pata_hpt3x3" "pata_it8213" "pata_it821x" "pata_jmicron" "pata_marvell" "pata_mpiix" "pata_netcell" "pata_ns87410" "pata_oldpiix" "pata_pcmcia" "pata_pdc2027x" "pata_rz1000" "pata_serverworks" "pata_sil680" "pata_sis" "pata_sl82c105" "pata_triflex" "pata_via" "3w-9xxx" "3w-xxxx" "aic79xx" "aic7xxx" "arcmsr" "hpsa" "virtio_net" "virtio_pci" "virtio_mmio" "virtio_blk" "virtio_scsi" "virtio_balloon" "virtio_console" "mptspi" "vmxnet3" "vsock" "vc4" "dw-hdmi" "panel-simple" "pinctrl-axp209" "mp8859" "xhci-pci-renesas" "analogix-anx6345" "ext2" "ahci" "sata_nv" "sata_via" "sata_sis" "sata_uli" "ata_piix" "pata_marvell" "sr_mod" + "usbhid" + "usb_storage" + "vc4" + "pcie_brcmstb" # required for the pcie bus to work + "reset-raspberrypi" # required for vl805 firmware to load ]; }; @@ -196,6 +228,8 @@ in { neovim tmux uhubctl + libraspberrypi + raspberrypi-eeprom # strictly unnecessary mpv