From c99a94189398b32d6c2947f9f9684c593bee1f70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charlotte=20=F0=9F=A6=9D=20Delenk?= Date: Thu, 30 Mar 2023 09:14:59 +0100 Subject: [PATCH 1/4] Add rpi kernel --- flake.nix | 7 +++ linux/rpi/default.nix | 111 ++++++++++++++++++++++++++++++++++++++++++ linux/rpi/source.json | 11 +++++ 3 files changed, 129 insertions(+) create mode 100644 linux/rpi/default.nix create mode 100644 linux/rpi/source.json diff --git a/flake.nix b/flake.nix index 309b310..4a8000c 100644 --- a/flake.nix +++ b/flake.nix @@ -103,6 +103,13 @@ vf2KernelPackages = pkgs.linuxPackagesFor vf2Kernel; } else {} + ) + // ( + if system == "aarch64-linux" + then rec { + rpiKernel = pkgs.CallPackage ./linux/rpi {kernelPatches = [];}; + } + else {} ); overlays = import ./overlays; diff --git a/linux/rpi/default.nix b/linux/rpi/default.nix new file mode 100644 index 0000000..72f0d79 --- /dev/null +++ b/linux/rpi/default.nix @@ -0,0 +1,111 @@ +{ + stdenv, + lib, + buildPackages, + fetchFromGitHub, + perl, + buildLinux, + rpiVersion, + ... +} @ args: let + # NOTE: raspberrypifw & raspberryPiWirelessFirmware should be updated with this + modDirVersion = "6.1.21"; + source = builtins.fromJSON (builtins.readFile ./source.json); +in + lib.overrideDerivation (buildLinux (args + // { + version = "${modDirVersion}-${tag}"; + inherit modDirVersion; + + src = fetchFromGitHub { + owner = "raspberrypi"; + repo = "linux"; + inherit (source) rev sha256; + }; + + defconfig = + { + "1" = "bcmrpi_defconfig"; + "2" = "bcm2709_defconfig"; + "3" = + if stdenv.hostPlatform.isAarch64 + then "bcmrpi3_defconfig" + else "bcm2709_defconfig"; + "4" = "bcm2711_defconfig"; + } + .${toString rpiVersion}; + + features = + { + efiBootStub = false; + } + // (args.features or {}); + + extraConfig = '' + # ../drivers/gpu/drm/ast/ast_mode.c:851:18: error: initialization of 'void (*)(struct drm_crtc *, struct drm_atomic_state *)' from incompatible pointer type 'void (*)(struct drm_crtc *, struct drm_crtc_state *)' [-Werror=incompatible-pointer-types] + # 851 | .atomic_flush = ast_crtc_helper_atomic_flush, + # | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ + # ../drivers/gpu/drm/ast/ast_mode.c:851:18: note: (near initialization for 'ast_crtc_helper_funcs.atomic_flush') + DRM_AST n + # ../drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c: In function 'amdgpu_dm_atomic_commit_tail': + # ../drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:7757:4: error: implicit declaration of function 'is_hdr_metadata_different' [-Werror=implicit-function-declaration] + # 7757 | is_hdr_metadata_different(old_con_state, new_con_state); + # | ^~~~~~~~~~~~~~~~~~~~~~~~~ + DRM_AMDGPU n + ''; + + extraMeta = + if (rpiVersion < 3) + then { + platforms = with lib.platforms; arm; + hydraPlatforms = []; + } + else { + platforms = with lib.platforms; arm ++ aarch64; + hydraPlatforms = ["aarch64-linux"]; + }; + } + // (args.argsOverride or {}))) (oldAttrs: { + postConfigure = '' + # The v7 defconfig has this set to '-v7' which screws up our modDirVersion. + sed -i $buildRoot/.config -e 's/^CONFIG_LOCALVERSION=.*/CONFIG_LOCALVERSION=""/' + sed -i $buildRoot/include/config/auto.conf -e 's/^CONFIG_LOCALVERSION=.*/CONFIG_LOCALVERSION=""/' + ''; + + # Make copies of the DTBs named after the upstream names so that U-Boot finds them. + # This is ugly as heck, but I don't know a better solution so far. + postFixup = + '' + dtbDir=${ + if stdenv.isAarch64 + then "$out/dtbs/broadcom" + else "$out/dtbs" + } + rm $dtbDir/bcm283*.dtb + copyDTB() { + cp -v "$dtbDir/$1" "$dtbDir/$2" + } + '' + + lib.optionalString (lib.elem stdenv.hostPlatform.system ["armv6l-linux"]) '' + copyDTB bcm2708-rpi-zero-w.dtb bcm2835-rpi-zero.dtb + copyDTB bcm2708-rpi-zero-w.dtb bcm2835-rpi-zero-w.dtb + copyDTB bcm2708-rpi-b.dtb bcm2835-rpi-a.dtb + copyDTB bcm2708-rpi-b.dtb bcm2835-rpi-b.dtb + copyDTB bcm2708-rpi-b.dtb bcm2835-rpi-b-rev2.dtb + copyDTB bcm2708-rpi-b-plus.dtb bcm2835-rpi-a-plus.dtb + copyDTB bcm2708-rpi-b-plus.dtb bcm2835-rpi-b-plus.dtb + copyDTB bcm2708-rpi-b-plus.dtb bcm2835-rpi-zero.dtb + copyDTB bcm2708-rpi-cm.dtb bcm2835-rpi-cm.dtb + '' + + lib.optionalString (lib.elem stdenv.hostPlatform.system ["armv7l-linux"]) '' + copyDTB bcm2709-rpi-2-b.dtb bcm2836-rpi-2-b.dtb + '' + + lib.optionalString (lib.elem stdenv.hostPlatform.system ["armv7l-linux" "aarch64-linux"]) '' + copyDTB bcm2710-rpi-zero-2.dtb bcm2837-rpi-zero-2.dtb + copyDTB bcm2710-rpi-3-b.dtb bcm2837-rpi-3-b.dtb + copyDTB bcm2710-rpi-3-b-plus.dtb bcm2837-rpi-3-a-plus.dtb + copyDTB bcm2710-rpi-3-b-plus.dtb bcm2837-rpi-3-b-plus.dtb + copyDTB bcm2710-rpi-cm3.dtb bcm2837-rpi-cm3.dtb + copyDTB bcm2711-rpi-4-b.dtb bcm2838-rpi-4-b.dtb + ''; + }) diff --git a/linux/rpi/source.json b/linux/rpi/source.json new file mode 100644 index 0000000..fe023bd --- /dev/null +++ b/linux/rpi/source.json @@ -0,0 +1,11 @@ +{ + "url": "https://github.com/raspberrypi/linux", + "rev": "1dc23c4753f0d9705f845cc64139b6aa3b476809", + "date": "2023-03-29T13:11:23+01:00", + "path": "/nix/store/k024zc1iwhl4bz6gw9d5rrcz5rwd47yc-linux", + "sha256": "15wq37y4rhz0qpbdvpsjvzmsd7cb63mh3p1f27n6j043p89zhbyg", + "fetchLFS": false, + "fetchSubmodules": false, + "deepClone": false, + "leaveDotGit": false +} From 3d7d42269906a6686dfc1c07cd330577efec1581 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charlotte=20=F0=9F=A6=9D=20Delenk?= Date: Thu, 30 Mar 2023 09:18:01 +0100 Subject: [PATCH 2/4] fix typo --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 4a8000c..4d84c32 100644 --- a/flake.nix +++ b/flake.nix @@ -107,7 +107,7 @@ // ( if system == "aarch64-linux" then rec { - rpiKernel = pkgs.CallPackage ./linux/rpi {kernelPatches = [];}; + rpiKernel = pkgs.callPackage ./linux/rpi {kernelPatches = [];}; } else {} ); From 4eedac4eee4c9d87aa2c85d370913b300a02c719 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charlotte=20=F0=9F=A6=9D=20Delenk?= Date: Thu, 30 Mar 2023 09:20:01 +0100 Subject: [PATCH 3/4] fix eval --- linux/rpi/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linux/rpi/default.nix b/linux/rpi/default.nix index 72f0d79..ab7302e 100644 --- a/linux/rpi/default.nix +++ b/linux/rpi/default.nix @@ -14,7 +14,7 @@ in lib.overrideDerivation (buildLinux (args // { - version = "${modDirVersion}-${tag}"; + version = "${modDirVersion}"; inherit modDirVersion; src = fetchFromGitHub { From 29f9d4a4b90e850db7e8edb23e937ac4a03149cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charlotte=20=F0=9F=A6=9D=20Delenk?= Date: Thu, 30 Mar 2023 09:22:44 +0100 Subject: [PATCH 4/4] specify rpi version --- flake.nix | 5 ++++- linux/rpi/default.nix | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/flake.nix b/flake.nix index 4d84c32..ec02379 100644 --- a/flake.nix +++ b/flake.nix @@ -107,7 +107,10 @@ // ( if system == "aarch64-linux" then rec { - rpiKernel = pkgs.callPackage ./linux/rpi {kernelPatches = [];}; + rpi4Kernel = pkgs.callPackage ./linux/rpi { + kernelPatches = []; + rpiVersion = 4; + }; } else {} ); diff --git a/linux/rpi/default.nix b/linux/rpi/default.nix index ab7302e..5a333fa 100644 --- a/linux/rpi/default.nix +++ b/linux/rpi/default.nix @@ -14,7 +14,7 @@ in lib.overrideDerivation (buildLinux (args // { - version = "${modDirVersion}"; + version = "${modDirVersion}-rp${toString rpiVersion}"; inherit modDirVersion; src = fetchFromGitHub {