diff --git a/overlay/default.nix b/overlay/default.nix index cc91487..9142720 100644 --- a/overlay/default.nix +++ b/overlay/default.nix @@ -1,36 +1,26 @@ final: prev: let - rpi-kernel = { kernel, version, fw, extraConfig ? null }: + rpi-kernel = { kernel, version, fw, wireless-fw, argsOverride ? null }: let new-kernel = prev.linux_rpi4.override { argsOverride = { src = kernel; inherit version; modDirVersion = version; - } // (if builtins.isNull extraConfig then - { } - else { - inherit extraConfig; - }); + } // (if builtins.isNull argsOverride then { } else argsOverride); }; new-fw = prev.raspberrypifw.overrideAttrs (oldfw: { src = fw; }); + new-wireless-fw = final.callPackage wireless-fw { }; version-slug = builtins.replaceStrings [ "." ] [ "_" ] version; in { - "linux_rpi-${version-slug}" = new-kernel; - "raspberrypifw-${version-slug}" = new-fw; + "v${version-slug}" = { + kernel = new-kernel; + firmware = new-fw; + wireless-firmware = new-wireless-fw; + }; }; rpi-kernels = builtins.foldl' (b: a: b // rpi-kernel a) { }; in { - # newer version of libcamera - # libcamera = prev.libcamera.overrideAttrs (old: { - # src = prev.fetchgit { - # url = "https://git.libcamera.org/libcamera/libcamera.git"; - # rev = "44d59841e1ce59042b8069b8078bc9f7b1bfa73b"; - # sha256 = "1nzkvy2y772ak9gax456ws2fmjc9ncams0m1w27h1rzpxn5yphqr"; - # }; - # mesonFlags = [ "-Dv4l2=true" "-Dqcam=disabled" "-Dlc-compliance=disabled" ]; - # patches = (old.patches or [ ]) ++ [ ./libcamera.patch ]; - # }); libcamera-apps = final.callPackage ./libcamera-apps.nix { }; @@ -46,111 +36,62 @@ in { }; }; - raspberrypiWirelessFirmware = prev.raspberrypiWirelessFirmware.overrideAttrs - (old: { - version = "2023-01-19"; - srcs = [ - (prev.fetchFromGitHub { - name = "bluez-firmware"; - owner = "RPi-Distro"; - repo = "bluez-firmware"; - rev = "9556b08ace2a1735127894642cc8ea6529c04c90"; - sha256 = "gKGK0XzNrws5REkKg/JP6SZx3KsJduu53SfH3Dichkc="; - }) - (prev.fetchFromGitHub { - name = "firmware-nonfree"; - owner = "RPi-Distro"; - repo = "firmware-nonfree"; - rev = "8e349de20c8cb5d895b3568777ec53cbb333398f"; - sha256 = "45/FnaaZTEG6jLmbaXohpNpS6BEZu3DBDHqquq8ukXc="; - }) - ]; - }); + # raspberrypiWirelessFirmware = prev.raspberrypiWirelessFirmware.overrideAttrs + # (old: { + # version = "2023-01-19"; + # srcs = [ + # (prev.fetchFromGitHub { + # name = "bluez-firmware"; + # owner = "RPi-Distro"; + # repo = "bluez-firmware"; + # rev = "9556b08ace2a1735127894642cc8ea6529c04c90"; + # sha256 = "gKGK0XzNrws5REkKg/JP6SZx3KsJduu53SfH3Dichkc="; + # }) + # (prev.fetchFromGitHub { + # name = "firmware-nonfree"; + # owner = "RPi-Distro"; + # repo = "firmware-nonfree"; + # rev = "8e349de20c8cb5d895b3568777ec53cbb333398f"; + # sha256 = "45/FnaaZTEG6jLmbaXohpNpS6BEZu3DBDHqquq8ukXc="; + # }) + # ]; + # }); -} // (rpi-kernels [ - { - version = "5.10.110"; - kernel = prev.fetchFromGitHub { - owner = "raspberrypi"; - repo = "linux"; - rev = "8e1110a580887f4b82303b9354c25d7e2ff5860e"; - sha256 = "G0XLIpiuszbHKetBQPSBxnyPggFDxUJ4B8F5poS9Tfg="; - fetchSubmodules = true; - }; - extraConfig = '' - DRM_AST n - DRM_AMDGPU n - DRM_TIDSS n - ''; - fw = prev.fetchFromGitHub { - owner = "raspberrypi"; - repo = "firmware"; - rev = "e1e3dc004ec45c0a6ab3f32eb02c1e0c8846796c"; - sha256 = "Smn3wQ81zzmj+Wpt2Xwby+0Zt7YGhmhlaEscbaZaMmI="; - }; - } - { - version = "5.15.36"; - kernel = prev.fetchFromGitHub { - owner = "raspberrypi"; - repo = "linux"; - rev = "9af1cc301e4dffb830025207a54d0bc63bec16c7"; - sha256 = "fsMTUdz1XZhPaSXpU1uBV4V4VxoZKi6cwP0QJcrCy1o="; - fetchSubmodules = true; - }; - fw = prev.fetchFromGitHub { - owner = "raspberrypi"; - repo = "firmware"; - rev = "2cf8a179b3f2e6e5e5ceba4e8e544def10a49020"; - sha256 = "YG1bryflbV3W62MhZ/XMSgUJXMhCl/fe86x+CT7XZ4U="; - }; - } - { - version = "5.15.56"; - kernel = prev.fetchFromGitHub { - owner = "raspberrypi"; - repo = "linux"; - rev = "912b039b7c55d40ae930f2602e45c66055c375a8"; - sha256 = "igtTOPbDw9FJAzZe7u4trCkHLOIQX0RZdUwtWpBX1Ag="; - fetchSubmodules = true; - }; - fw = prev.fetchFromGitHub { - owner = "raspberrypi"; - repo = "firmware"; - rev = "e1e3dc004ec45c0a6ab3f32eb02c1e0c8846796c"; - sha256 = "Smn3wQ81zzmj+Wpt2Xwby+0Zt7YGhmhlaEscbaZaMmI="; - }; - } - { - version = "5.15.61"; - kernel = prev.fetchFromGitHub { - owner = "raspberrypi"; - repo = "linux"; - rev = "004a1de4f5d866c7a62e6f96ac10bdd908c2d28c"; - sha256 = "K4yjgova6COikjUgQpX13N5ygpGXDH9Uy54FAg+NKpc="; - fetchSubmodules = true; - }; - fw = prev.fetchFromGitHub { - owner = "raspberrypi"; - repo = "firmware"; - rev = "8ca25048d08420eac28a97b00ab134ee3535e105"; - sha256 = "9nM0GbKZHiGOM5C5g9WFnFC0ONQ+g+pbPBl5djOCiLE="; - }; - } - { - version = "5.15.87"; - kernel = prev.fetchFromGitHub { - owner = "raspberrypi"; - repo = "linux"; - rev = "da4c8e0ffe7a868b989211045657d600be3046a1"; - sha256 = "hNLVfhalmRhhRfvu2mR/qDmmGl//Ic1eqR7N1HFj2CY="; - fetchSubmodules = true; - }; - fw = prev.fetchFromGitHub { - owner = "raspberrypi"; - repo = "firmware"; - rev = "2e7137e0840f76f056589aba7f82d5b7236d8f1c"; - sha256 = "jIKhQxp9D83OAZ8X2Vra9THHBE0j5Z2gRMDSVqIhopY="; - }; - } -]) +} // { + rpi-kernels = rpi-kernels [ + { + version = "5.15.36"; + kernel = prev.fetchFromGitHub { + owner = "raspberrypi"; + repo = "linux"; + rev = "9af1cc301e4dffb830025207a54d0bc63bec16c7"; + sha256 = "fsMTUdz1XZhPaSXpU1uBV4V4VxoZKi6cwP0QJcrCy1o="; + fetchSubmodules = true; + }; + fw = prev.fetchFromGitHub { + owner = "raspberrypi"; + repo = "firmware"; + rev = "2cf8a179b3f2e6e5e5ceba4e8e544def10a49020"; + sha256 = "YG1bryflbV3W62MhZ/XMSgUJXMhCl/fe86x+CT7XZ4U="; + }; + wireless-fw = import ./raspberrypi-wireless-firmware/5.10.36.nix; + } + { + version = "5.15.87"; + kernel = prev.fetchFromGitHub { + owner = "raspberrypi"; + repo = "linux"; + rev = "da4c8e0ffe7a868b989211045657d600be3046a1"; + sha256 = "hNLVfhalmRhhRfvu2mR/qDmmGl//Ic1eqR7N1HFj2CY="; + fetchSubmodules = true; + }; + fw = prev.fetchFromGitHub { + owner = "raspberrypi"; + repo = "firmware"; + rev = "2e7137e0840f76f056589aba7f82d5b7236d8f1c"; + sha256 = "jIKhQxp9D83OAZ8X2Vra9THHBE0j5Z2gRMDSVqIhopY="; + }; + wireless-fw = import ./raspberrypi-wireless-firmware/5.10.87.nix; + } + ]; +} diff --git a/overlay/raspberrypi-wireless-firmware/5.10.36.nix b/overlay/raspberrypi-wireless-firmware/5.10.36.nix new file mode 100644 index 0000000..ff3e405 --- /dev/null +++ b/overlay/raspberrypi-wireless-firmware/5.10.36.nix @@ -0,0 +1,56 @@ +{ lib, stdenv, fetchFromGitHub }: + +stdenv.mkDerivation { + pname = "raspberrypi-wireless-firmware"; + version = "2021-06-28"; + + srcs = [ + (fetchFromGitHub { + name = "bluez-firmware"; + owner = "RPi-Distro"; + repo = "bluez-firmware"; + rev = "e7fd166981ab4bb9a36c2d1500205a078a35714d"; + sha256 = "1dkg8mzn7n4afi50ibrda2s33nw2qj52jjjdv9w560q601gms47b"; + }) + (fetchFromGitHub { + name = "firmware-nonfree"; + owner = "RPi-Distro"; + repo = "firmware-nonfree"; + rev = "00de3194a96397c913786945ac0af1fd6fbec45b"; + sha256 = "1xnr364dkiq6gmr21lcrj23hwc0g9y5qad8dm2maij647bgzp07r"; + }) + ]; + + sourceRoot = "."; + + dontBuild = true; + # Firmware blobs do not need fixing and should not be modified + dontFixup = true; + + installPhase = '' + runHook preInstall + mkdir -p "$out/lib/firmware/brcm" + + # Wifi firmware + for filename in firmware-nonfree/brcm/brcmfmac434??-sdio.*; do + cp "$filename" "$out/lib/firmware/brcm" + done + + # Bluetooth firmware + cp bluez-firmware/broadcom/*.hcd "$out/lib/firmware/brcm" + runHook postInstall + ''; + + outputHashMode = "recursive"; + outputHashAlgo = "sha256"; + outputHash = "0a54gyrq6jfxxvimaa4yjfiyfwf7wv58v0a32l74yrzyarr3ldby"; + + meta = with lib; { + description = + "Firmware for builtin Wifi/Bluetooth devices in the Raspberry Pi 3+ and Zero W"; + homepage = "https://github.com/RPi-Distro/firmware-nonfree"; + license = licenses.unfreeRedistributableFirmware; + platforms = platforms.linux; + maintainers = with maintainers; [ lopsided98 ]; + }; +} diff --git a/overlay/raspberrypi-wireless-firmware/5.10.87.nix b/overlay/raspberrypi-wireless-firmware/5.10.87.nix new file mode 100644 index 0000000..6161783 --- /dev/null +++ b/overlay/raspberrypi-wireless-firmware/5.10.87.nix @@ -0,0 +1,56 @@ +{ lib, stdenvNoCC, fetchFromGitHub }: + +stdenvNoCC.mkDerivation { + pname = "raspberrypi-wireless-firmware"; + version = "2023-01-19"; + + srcs = [ + (fetchFromGitHub { + name = "bluez-firmware"; + owner = "RPi-Distro"; + repo = "bluez-firmware"; + rev = "9556b08ace2a1735127894642cc8ea6529c04c90"; + sha256 = "gKGK0XzNrws5REkKg/JP6SZx3KsJduu53SfH3Dichkc="; + }) + (fetchFromGitHub { + name = "firmware-nonfree"; + owner = "RPi-Distro"; + repo = "firmware-nonfree"; + rev = "8e349de20c8cb5d895b3568777ec53cbb333398f"; + sha256 = "45/FnaaZTEG6jLmbaXohpNpS6BEZu3DBDHqquq8ukXc="; + }) + ]; + + sourceRoot = "."; + + dontBuild = true; + # Firmware blobs do not need fixing and should not be modified + dontFixup = true; + + installPhase = '' + runHook preInstall + mkdir -p "$out/lib/firmware/brcm" + + # Wifi firmware + cp -rv "$NIX_BUILD_TOP/firmware-nonfree/debian/config/brcm80211/." "$out/lib/firmware/" + + # Bluetooth firmware + cp -rv "$NIX_BUILD_TOP/bluez-firmware/broadcom/." "$out/lib/firmware/brcm" + + # CM4 symlink must be added since it's missing from upstream + pushd $out/lib/firmware/brcm &>/dev/null + ln -s "./brcmfmac43455-sdio.txt" "$out/lib/firmware/brcm/brcmfmac43455-sdio.raspberrypi,4-compute-module.txt" + popd &>/dev/null + + runHook postInstall + ''; + + meta = with lib; { + description = + "Firmware for builtin Wifi/Bluetooth devices in the Raspberry Pi 3+ and Zero W"; + homepage = "https://github.com/RPi-Distro/firmware-nonfree"; + license = licenses.unfreeRedistributableFirmware; + platforms = platforms.linux; + maintainers = with maintainers; [ lopsided98 ]; + }; +} diff --git a/rpi-3b-plus/default.nix b/rpi-3b-plus/default.nix index 438aade..b378229 100644 --- a/rpi-3b-plus/default.nix +++ b/rpi-3b-plus/default.nix @@ -3,6 +3,17 @@ rpi: { imports = [ rpi ]; + nixpkgs = { + overlays = [ + (final: prev: { + raspberrypiWirelessFirmware = + final.rpi-kernels.v5_15_87.wireless-firmware; + raspberrypifw = final.rpi-kernels.v5_15_87.firmware; + }) + ]; + }; + boot.kernelPackages = + pkgs.linuxPackagesFor (pkgs.rpi-kernels.v5_15_87.kernel); hardware.raspberry-pi.deviceTree = { base-dtb = "bcm2710-rpi-3-b-plus.dtb"; # u-boot expects bcm2837-rpi-3-b-plus.dtb for the 3b+ (as of diff --git a/rpi-4b/default.nix b/rpi-4b/default.nix index c9141e2..1c3c825 100644 --- a/rpi-4b/default.nix +++ b/rpi-4b/default.nix @@ -2,7 +2,18 @@ rpi: { lib, pkgs, config, ... }: { + nixpkgs = { + overlays = [ + (final: prev: { + raspberrypiWirelessFirmware = + final.rpi-kernels.v5_15_87.wireless-firmware; + raspberrypifw = final.rpi-kernels.v5_15_87.firmware; + }) + ]; + }; imports = [ rpi ]; hardware.raspberry-pi.deviceTree.base-dtb = "bcm2711-rpi-4-b.dtb"; + boot.kernelPackages = + pkgs.linuxPackagesFor (pkgs.rpi-kernels.v5_15_87.kernel); } diff --git a/rpi-zero-2-w/default.nix b/rpi-zero-2-w/default.nix index ac2d958..93dd016 100644 --- a/rpi-zero-2-w/default.nix +++ b/rpi-zero-2-w/default.nix @@ -3,6 +3,15 @@ rpi: { imports = [ rpi ]; + nixpkgs = { + overlays = [ + (final: prev: { + raspberrypiWirelessFirmware = + final.rpi-kernels.v5_15_36.wireless-firmware; + raspberrypifw = final.rpi-kernels.v5_15_36.firmware; + }) + ]; + }; hardware.raspberry-pi.deviceTree.base-dtb = "bcm2710-rpi-zero-2.dtb"; # u-boot expects bcm2837-rpi-zero-2.dtb for the zero 2 w (as of # 2020.04), although the kernel has 2710. We rename it to satisfy @@ -10,4 +19,6 @@ rpi: hardware.raspberry-pi.deviceTree.postInstall = '' mv $out/broadcom/bcm2710-rpi-zero-2.dtb $out/broadcom/bcm2837-rpi-zero-2.dtb ''; + boot.kernelPackages = + pkgs.linuxPackagesFor (pkgs.rpi-kernels.v5_15_36.kernel); } diff --git a/rpi/default.nix b/rpi/default.nix index 05c5d71..9969816 100644 --- a/rpi/default.nix +++ b/rpi/default.nix @@ -13,7 +13,6 @@ nixpkgs = { overlays = [ overlay ]; }; boot = { - kernelPackages = pkgs.linuxPackagesFor (pkgs.linux_rpi-5_15_87); initrd.availableKernelModules = [ "usbhid" "usb_storage" "vc4" ]; loader = { diff --git a/sd-image/default.nix b/sd-image/default.nix index 66a811f..5450687 100644 --- a/sd-image/default.nix +++ b/sd-image/default.nix @@ -13,7 +13,7 @@ sdImage = { populateFirmwareCommands = let - raspberrypifw = pkgs.raspberrypifw-5_15_87; + inherit (pkgs) raspberrypifw; configTxt = pkgs.writeText "config.txt" '' [pi02] kernel=u-boot-rpi_arm64.bin