52 lines
1.2 KiB
Nix
52 lines
1.2 KiB
Nix
# Under maintanence
|
|
{
|
|
pkgs,
|
|
...
|
|
}:
|
|
let
|
|
# Optional helper for manual (re)binding at runtime
|
|
vfioBindScript = pkgs.writeShellScriptBin "vfio-bind" ''
|
|
#!${pkgs.runtimeShell}
|
|
DEV="$1" # e.g. 0000:81:00.0
|
|
echo vfio-pci > /sys/bus/pci/devices/$DEV/driver_override
|
|
${pkgs.kmod}/bin/modprobe -i vfio-pci
|
|
echo "$DEV" > /sys/bus/pci/drivers/vfio-pci/bind
|
|
'';
|
|
in
|
|
{
|
|
nixpkgs.config.allowUnfree = true;
|
|
|
|
boot = {
|
|
# Load vfio early and bind the second GPU before NVIDIA can claim it
|
|
initrd = {
|
|
kernelModules = [ "vfio_pci" ];
|
|
preDeviceCommands = ''
|
|
DEVS="0000:81:00.0 0000:81:00.1"
|
|
for DEV in $DEVS; do
|
|
echo "vfio-pci" > /sys/bus/pci/devices/$DEV/driver_override
|
|
done
|
|
modprobe -i vfio-pci
|
|
for DEV in $DEVS; do
|
|
echo $DEV > /sys/bus/pci/drivers/vfio-pci/bind
|
|
done
|
|
'';
|
|
};
|
|
|
|
kernelParams = [
|
|
"intel_iommu=on"
|
|
"iommu=pt"
|
|
];
|
|
|
|
kernelModules = [
|
|
"vfio_pci"
|
|
"vfio"
|
|
"vfio_iommu_type1"
|
|
"vfio_virqfd"
|
|
];
|
|
blacklistedKernelModules = [ "nouveau" ];
|
|
};
|
|
|
|
environment.systemPackages = with pkgs; [
|
|
vfioBindScript # optional manual tool
|
|
];
|
|
}
|