Files
nix-config/packages/raspberrypi/uefi-rpi5/default.nix
mjallen18 70002a19e2 hmm
2026-04-07 18:39:42 -05:00

98 lines
2.0 KiB
Nix
Executable File

{
lib,
stdenvNoCC,
namespace,
pkgs,
}:
let
inherit (lib.trivial) importJSON;
inherit (lib.${namespace}) selectVariant mkAllSources;
versionSpec = importJSON ./version.json;
selected = selectVariant versionSpec null null;
vars = selected.variables or { };
sources = mkAllSources pkgs selected;
defaultConfig = ''
EOF
armstub=RPI_EFI.fd
# device_tree_address=0x3e0000
# device_tree_end=0x400000
device_tree_address=0x1f0000
device_tree_end=0x210000
# Force 32 bpp framebuffer allocation.
framebuffer_depth=32
# Disable compensation for displays with overscan.
disable_overscan=1
# Force maximum USB power regardless of the power supply.
usb_max_current_enable=1
# Force maximum CPU speed.
force_turbo=1
dtoverlay=vc4-kms-v3d-pi5.dtbo
dtoverlay=i2c0-pi5.dtbo
dtoverlay=i2c1-pi5.dtbo
dtoverlay=i2c2-pi5.dtbo
dtoverlay=i2c3-pi5.dtbo
dtoverlay=pisound-pi5.dtbo
dtoverlay=sdio-pi5.dtbo
dtoverlay=disable-wifi-pi5.dtbo
EOF
'';
nvram = ./nvram-block.bin;
in
stdenvNoCC.mkDerivation rec {
pname = "uefi-rpi5";
inherit (vars) version;
src = sources.firmware;
sourceRoot = ".";
dontUnpack = true;
dontBuild = true;
# Firmware blobs do not need fixing and should not be modified
dontFixup = true;
# fixupPhase = ''
# runHook preFixup
# dd if=${nvram} of="$src/RPI_EFI.fd" \
# bs=1 seek=$((0x1d0060)) count=$((0x11c0)) conv=notrunc
# runHook postFixup
# '';
installPhase = ''
runHook preInstall
mkdir -p "$out"
cp ${src} .
dd if=${nvram} of=./RPI_EFI.fd \
bs=1 seek=$((0x1d0060)) count=$((0x11c0)) conv=notrunc
cp -v ./RPI_EFI.fd "$out/RPI_EFI.fd"
# cp ${src} "$out/RPI_EFI.fd"
cat > "$out/config.txt" << ${defaultConfig}
runHook postInstall
'';
meta = with lib; {
description = "RPI5 UEFI firmware";
homepage = "https://github.com/NumberOneGit/rpi5-uefi";
platforms = platforms.linux;
maintainers = [ ];
};
}