wip
This commit is contained in:
		
							parent
							
								
									f5a9f04cf2
								
							
						
					
					
						commit
						c66f8ef8d4
					
				@ -80,7 +80,6 @@ in {
 | 
				
			|||||||
    nixpkgs.config.packageOverrides = pkgs: {
 | 
					    nixpkgs.config.packageOverrides = pkgs: {
 | 
				
			||||||
      vaapiIntel = pkgs.vaapiIntel.override { enableHybridCodec = true; };
 | 
					      vaapiIntel = pkgs.vaapiIntel.override { enableHybridCodec = true; };
 | 
				
			||||||
      chromium = pkgs.chromium.override {
 | 
					      chromium = pkgs.chromium.override {
 | 
				
			||||||
        enableWideVine = true;
 | 
					 | 
				
			||||||
        # ungoogled = true;
 | 
					        # ungoogled = true;
 | 
				
			||||||
        # --enable-native-gpu-memory-buffers # fails on AMD APU
 | 
					        # --enable-native-gpu-memory-buffers # fails on AMD APU
 | 
				
			||||||
        # --enable-webrtc-vp9-support
 | 
					        # --enable-webrtc-vp9-support
 | 
				
			||||||
@ -90,7 +89,7 @@ in {
 | 
				
			|||||||
    # todo vulkan in chrome
 | 
					    # todo vulkan in chrome
 | 
				
			||||||
    # todo video encoding in chrome
 | 
					    # todo video encoding in chrome
 | 
				
			||||||
    hardware.opengl = {
 | 
					    hardware.opengl = {
 | 
				
			||||||
      enable = true;
 | 
					      enable = de.enableAcceleration;
 | 
				
			||||||
      extraPackages = with pkgs; [
 | 
					      extraPackages = with pkgs; [
 | 
				
			||||||
        intel-media-driver # LIBVA_DRIVER_NAME=iHD
 | 
					        intel-media-driver # LIBVA_DRIVER_NAME=iHD
 | 
				
			||||||
        vaapiIntel         # LIBVA_DRIVER_NAME=i965 (older but works better for Firefox/Chromium)
 | 
					        vaapiIntel         # LIBVA_DRIVER_NAME=i965 (older but works better for Firefox/Chromium)
 | 
				
			||||||
 | 
				
			|||||||
@ -14,20 +14,25 @@ in {
 | 
				
			|||||||
    ./pithos.nix
 | 
					    ./pithos.nix
 | 
				
			||||||
    ./spotify.nix
 | 
					    ./spotify.nix
 | 
				
			||||||
    ./vscodium.nix
 | 
					    ./vscodium.nix
 | 
				
			||||||
    ./discord.nix
 | 
					    # FIXME make optional
 | 
				
			||||||
    ./steam.nix
 | 
					#    ./discord.nix
 | 
				
			||||||
 | 
					#    ./steam.nix
 | 
				
			||||||
    ./touchpad.nix
 | 
					    ./touchpad.nix
 | 
				
			||||||
    ./mount-samba.nix
 | 
					    ./mount-samba.nix
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  options.de = {
 | 
					  options.de = {
 | 
				
			||||||
    enable = lib.mkEnableOption "enable desktop environment";
 | 
					    enable = lib.mkEnableOption "enable desktop environment";
 | 
				
			||||||
 | 
					    enableAcceleration = lib.mkOption {
 | 
				
			||||||
 | 
					      type = lib.types.bool;
 | 
				
			||||||
 | 
					      default = true;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  config = lib.mkIf cfg.enable {
 | 
					  config = lib.mkIf cfg.enable {
 | 
				
			||||||
    # vulkan
 | 
					    # vulkan
 | 
				
			||||||
    hardware.opengl.driSupport = true;
 | 
					   hardware.opengl.driSupport = de.enableAcceleration;
 | 
				
			||||||
    hardware.opengl.driSupport32Bit = true;
 | 
					   hardware.opengl.driSupport32Bit = de.enableAcceleration;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Applications
 | 
					    # Applications
 | 
				
			||||||
    users.users.googlebot.packages = with pkgs; [
 | 
					    users.users.googlebot.packages = with pkgs; [
 | 
				
			||||||
@ -40,8 +45,7 @@ in {
 | 
				
			|||||||
      element-desktop
 | 
					      element-desktop
 | 
				
			||||||
      mpv
 | 
					      mpv
 | 
				
			||||||
      nextcloud-client
 | 
					      nextcloud-client
 | 
				
			||||||
      signal-desktop
 | 
					#      signal-desktop # FIXME
 | 
				
			||||||
      minecraft
 | 
					 | 
				
			||||||
      gparted
 | 
					      gparted
 | 
				
			||||||
      libreoffice-fresh
 | 
					      libreoffice-fresh
 | 
				
			||||||
      thunderbird
 | 
					      thunderbird
 | 
				
			||||||
 | 
				
			|||||||
@ -5,6 +5,7 @@ rec {
 | 
				
			|||||||
    "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO0VFnn3+Mh0nWeN92jov81qNE9fpzTAHYBphNoY7HUx" # reg
 | 
					    "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO0VFnn3+Mh0nWeN92jov81qNE9fpzTAHYBphNoY7HUx" # reg
 | 
				
			||||||
    "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHSkKiRUUmnErOKGx81nyge/9KqjkPh8BfDk0D3oP586" # nat
 | 
					    "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHSkKiRUUmnErOKGx81nyge/9KqjkPh8BfDk0D3oP586" # nat
 | 
				
			||||||
    "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFeTK1iARlNIKP/DS8/ObBm9yUM/3L1Ub4XI5A2r9OzP" # ray
 | 
					    "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFeTK1iARlNIKP/DS8/ObBm9yUM/3L1Ub4XI5A2r9OzP" # ray
 | 
				
			||||||
 | 
					    "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKXc9PX3uTYVrgvKdztk+LBh5WMNBUzbXlAo50SCAeNw" # nat 2
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
  system = {
 | 
					  system = {
 | 
				
			||||||
    liza = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDY/pNyWedEfU7Tq9ikGbriRuF1ZWkHhegGS17L0Vcdl";
 | 
					    liza = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDY/pNyWedEfU7Tq9ikGbriRuF1ZWkHhegGS17L0Vcdl";
 | 
				
			||||||
@ -12,6 +13,7 @@ rec {
 | 
				
			|||||||
    ponyo-unlock = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC9LQuuImgWlkjDhEEIbM1wOd+HqRv1RxvYZuLXPSdRi";
 | 
					    ponyo-unlock = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC9LQuuImgWlkjDhEEIbM1wOd+HqRv1RxvYZuLXPSdRi";
 | 
				
			||||||
    ray = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDQM8hwKRgl8cZj7UVYATSLYu4LhG7I0WFJ9m2iWowiB";
 | 
					    ray = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDQM8hwKRgl8cZj7UVYATSLYu4LhG7I0WFJ9m2iWowiB";
 | 
				
			||||||
    s0 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAwiXcUFtAvZCayhu4+AIcF+Ktrdgv9ee/mXSIhJbp4q";
 | 
					    s0 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAwiXcUFtAvZCayhu4+AIcF+Ktrdgv9ee/mXSIhJbp4q";
 | 
				
			||||||
 | 
					    nat = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGVgZc5Z2Oh426z7lEftcFUwCFcrZy8bvqS09Tj49GWE";
 | 
				
			||||||
    n1 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPWlhd1Oid5Xf2zdcBrcdrR0TlhObutwcJ8piobRTpRt";
 | 
					    n1 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPWlhd1Oid5Xf2zdcBrcdrR0TlhObutwcJ8piobRTpRt";
 | 
				
			||||||
    n2 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ7bRiRutnI7Bmyt/I238E3Fp5DqiClIXiVibsccipOr";
 | 
					    n2 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ7bRiRutnI7Bmyt/I238E3Fp5DqiClIXiVibsccipOr";
 | 
				
			||||||
    n3 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB+rJEaRrFDGirQC2UoWQkmpzLg4qgTjGJgVqiipWiU5";
 | 
					    n3 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB+rJEaRrFDGirQC2UoWQkmpzLg4qgTjGJgVqiipWiU5";
 | 
				
			||||||
@ -26,6 +28,7 @@ rec {
 | 
				
			|||||||
    liza
 | 
					    liza
 | 
				
			||||||
    ponyo
 | 
					    ponyo
 | 
				
			||||||
    ray
 | 
					    ray
 | 
				
			||||||
 | 
					    nat
 | 
				
			||||||
    s0
 | 
					    s0
 | 
				
			||||||
    n1
 | 
					    n1
 | 
				
			||||||
    n2
 | 
					    n2
 | 
				
			||||||
@ -37,6 +40,7 @@ rec {
 | 
				
			|||||||
  ];
 | 
					  ];
 | 
				
			||||||
  personal = with system; [
 | 
					  personal = with system; [
 | 
				
			||||||
    ray
 | 
					    ray
 | 
				
			||||||
 | 
					    nat
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
  servers = with system; [
 | 
					  servers = with system; [
 | 
				
			||||||
    liza
 | 
					    liza
 | 
				
			||||||
 | 
				
			|||||||
@ -1,17 +1,51 @@
 | 
				
			|||||||
{ config, pkgs, fetchurl, lib, ... }:
 | 
					{ config, lib, pkgs, ... }:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  imports = [
 | 
					  imports = [
 | 
				
			||||||
    ./hardware-configuration.nix
 | 
					    ./hardware-configuration.nix
 | 
				
			||||||
 | 
					    ./m1-support
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  efi.enable = true;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  networking.hostName = "nat";
 | 
					  networking.hostName = "nat";
 | 
				
			||||||
  networking.interfaces.ens160.useDHCP = true;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  services.zerotierone.enable = true;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  de.enable = true;
 | 
					  de.enable = true;
 | 
				
			||||||
  de.touchpad.enable = true;
 | 
					  de.touchpad.enable = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # nixpkgs.overlays = [
 | 
				
			||||||
 | 
					  #   (final: prev: {
 | 
				
			||||||
 | 
					  #     signal-desktop = prev.signal-desktop.overrideAttrs (old: {
 | 
				
			||||||
 | 
					  #       version = "5.50.1";
 | 
				
			||||||
 | 
					  #       src = final.fetchurl {
 | 
				
			||||||
 | 
					  #         url = "https://github.com/0mniteck/Signal-Desktop-Builder/raw/2610eaded94b3c717a63fdff3cb872dbbaf16383/builds/release/signal-desktop_5.50.1_arm64.deb";
 | 
				
			||||||
 | 
					  #         sha256 = "sha256-++xG3fCMvU+nwlkBwjZ0d0wfWiNDSUhyCfzTirsY2xs=";
 | 
				
			||||||
 | 
					  #       };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  #       #buildInputs = old.buildInputs ++ [ final.openssl_3_0 ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  #       preFixup = ''
 | 
				
			||||||
 | 
					  #         gappsWrapperArgs+=(
 | 
				
			||||||
 | 
					  #           --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ final.stdenv.cc.cc ] }"
 | 
				
			||||||
 | 
					  #           --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--enable-features=UseOzonePlatform --ozone-platform=wayland}}"
 | 
				
			||||||
 | 
					  #           --suffix PATH : ${lib.makeBinPath [ final.xdg-utils ]}
 | 
				
			||||||
 | 
					  #         )
 | 
				
			||||||
 | 
					  #         # Fix the desktop link
 | 
				
			||||||
 | 
					  #         substituteInPlace $out/share/applications/signal-desktop.desktop \
 | 
				
			||||||
 | 
					  #           --replace /opt/Signal/signal-desktop $out/bin/signal-desktop
 | 
				
			||||||
 | 
					  #         autoPatchelf --no-recurse -- $out/lib/Signal/
 | 
				
			||||||
 | 
					  #         patchelf --add-needed ${final.libpulseaudio}/lib/libpulse.so $out/lib/Signal/resources/app.asar.unpacked/node_modules/ringrtc/build/linux/libringrtc-arm64.node
 | 
				
			||||||
 | 
					  #         patchelf --add-needed ${final.openssl_3_0}/lib/libcrypto.so.3 $out/lib/Signal/resources/app.asar.unpacked/node_modules/ringrtc/build/linux/libringrtc-arm64.node
 | 
				
			||||||
 | 
					  #       '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  #       meta.platforms = [ "aarch64-linux" ];
 | 
				
			||||||
 | 
					  #     });
 | 
				
			||||||
 | 
					  #   })
 | 
				
			||||||
 | 
					  # ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  nixpkgs.overlays = [
 | 
				
			||||||
 | 
					    (final: prev: {
 | 
				
			||||||
 | 
					      jellyfin-media-player = prev.jellyfin-media-player.overrideAttrs (old: {
 | 
				
			||||||
 | 
					        meta.platforms = [ "aarch64-linux" ];
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -4,22 +4,61 @@
 | 
				
			|||||||
{ config, lib, pkgs, modulesPath, ... }:
 | 
					{ config, lib, pkgs, modulesPath, ... }:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  imports = [ ];
 | 
					  imports =
 | 
				
			||||||
 | 
					    [ (modulesPath + "/installer/scan/not-detected.nix")
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  boot.initrd.availableKernelModules = [ "uhci_hcd" "ahci" "nvme" "usbhid" ];
 | 
					  efi.enable = true;
 | 
				
			||||||
  boot.initrd.kernelModules = [ ];
 | 
					
 | 
				
			||||||
 | 
					  # 4k kernel for m1
 | 
				
			||||||
 | 
					  boot.kernelBuildIs16K = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  boot.initrd.availableKernelModules = [ "usb_storage" ];
 | 
				
			||||||
 | 
					  boot.initrd.kernelModules = [ "dm-snapshot" ];
 | 
				
			||||||
  boot.kernelModules = [ ];
 | 
					  boot.kernelModules = [ ];
 | 
				
			||||||
  boot.extraModulePackages = [ ];
 | 
					  boot.extraModulePackages = [ ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  boot.initrd.luks.devices."enc-pv" = {
 | 
				
			||||||
 | 
					    device = "/dev/nvme0n1p5";
 | 
				
			||||||
 | 
					    allowDiscards = true;
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  fileSystems."/" =
 | 
					  fileSystems."/" =
 | 
				
			||||||
    { device = "/dev/disk/by-uuid/02a8c0c7-fd4e-4443-a83c-2d0b63848779";
 | 
					    { device = "/dev/disk/by-uuid/f3021c34-2034-4bf0-bf3f-64d6d02c0eff";
 | 
				
			||||||
      fsType = "btrfs";
 | 
					      fsType = "btrfs";
 | 
				
			||||||
 | 
					      options = [ "subvol=root" ];
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  fileSystems."/home" =
 | 
				
			||||||
 | 
					    { device = "/dev/disk/by-uuid/f3021c34-2034-4bf0-bf3f-64d6d02c0eff";
 | 
				
			||||||
 | 
					      fsType = "btrfs";
 | 
				
			||||||
 | 
					      options = [ "subvol=home" ];
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  fileSystems."/nix" =
 | 
				
			||||||
 | 
					    { device = "/dev/disk/by-uuid/f3021c34-2034-4bf0-bf3f-64d6d02c0eff";
 | 
				
			||||||
 | 
					      fsType = "btrfs";
 | 
				
			||||||
 | 
					      options = [ "subvol=nix" ];
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  fileSystems."/boot" =
 | 
					  fileSystems."/boot" =
 | 
				
			||||||
    { device = "/dev/disk/by-uuid/0C95-1290";
 | 
					    { device = "/dev/disk/by-uuid/D33C-18EE";
 | 
				
			||||||
      fsType = "vfat";
 | 
					      fsType = "vfat";
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  swapDevices = [ ];
 | 
					  swapDevices =
 | 
				
			||||||
}
 | 
					    [ { device = "/dev/disk/by-uuid/98e875e4-4c34-42e9-8c71-404dfe137ba7"; }
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
 | 
				
			||||||
 | 
					  # (the default) this is the recommended approach. When using systemd-networkd it's
 | 
				
			||||||
 | 
					  # still possible to use this option, but it's recommended to use it in conjunction
 | 
				
			||||||
 | 
					  # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
 | 
				
			||||||
 | 
					  networking.useDHCP = lib.mkDefault true;
 | 
				
			||||||
 | 
					  # networking.interfaces.wlp1s0f0.useDHCP = lib.mkDefault true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  #nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux";
 | 
				
			||||||
 | 
					  powerManagement.cpuFreqGovernor = lib.mkDefault "ondemand";
 | 
				
			||||||
 | 
					  # high-resolution display
 | 
				
			||||||
 | 
					  hardware.video.hidpi.enable = lib.mkDefault true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					diff --git a/asahi_firmware/update.py b/asahi_firmware/update.py
 | 
				
			||||||
 | 
					index 8d4c480..7d89353 100644
 | 
				
			||||||
 | 
					--- a/asahi_firmware/update.py
 | 
				
			||||||
 | 
					+++ b/asahi_firmware/update.py
 | 
				
			||||||
 | 
					@@ -30,7 +30,7 @@ def update_firmware(source, dest, manifest):
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					     pkg.save_manifest(manifest)
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-if __name__ == "__main__":
 | 
				
			||||||
 | 
					+def main():
 | 
				
			||||||
 | 
					     import argparse
 | 
				
			||||||
 | 
					     import logging
 | 
				
			||||||
 | 
					     logging.basicConfig()
 | 
				
			||||||
 | 
					@@ -46,3 +46,7 @@ if __name__ == "__main__":
 | 
				
			||||||
 | 
					     args = parser.parse_args()
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					     update_firmware(args.source, args.dest, args.manifest)
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+if __name__ == "__main__":
 | 
				
			||||||
 | 
					+   main()
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					diff --git a/setup.py b/setup.py
 | 
				
			||||||
 | 
					index 45ada19..1b371ba 100644
 | 
				
			||||||
 | 
					--- a/setup.py
 | 
				
			||||||
 | 
					+++ b/setup.py
 | 
				
			||||||
 | 
					@@ -9,4 +9,5 @@ setup(name='asahi_firmware',
 | 
				
			||||||
 | 
					       author_email='marcan@marcan.st',
 | 
				
			||||||
 | 
					       url='https://github.com/AsahiLinux/asahi-installer/',
 | 
				
			||||||
 | 
					       packages=['asahi_firmware'],
 | 
				
			||||||
 | 
					+      entry_points={"console_scripts": ["asahi-fwextract = asahi_firmware.update:main"]}
 | 
				
			||||||
 | 
					      )
 | 
				
			||||||
							
								
								
									
										24
									
								
								machines/nat/m1-support/asahi-fwextract/default.nix
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										24
									
								
								machines/nat/m1-support/asahi-fwextract/default.nix
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					{ lib
 | 
				
			||||||
 | 
					, python3
 | 
				
			||||||
 | 
					, fetchFromGitHub
 | 
				
			||||||
 | 
					, makeBinaryWrapper
 | 
				
			||||||
 | 
					}:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					python3.pkgs.buildPythonApplication rec {
 | 
				
			||||||
 | 
					  pname = "asahi-fwextract";
 | 
				
			||||||
 | 
					  version = "0.4pre2";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # tracking version: https://github.com/AsahiLinux/PKGBUILDs/blob/main/asahi-fwextract/PKGBUILD
 | 
				
			||||||
 | 
					  src = fetchFromGitHub {
 | 
				
			||||||
 | 
					    owner = "AsahiLinux";
 | 
				
			||||||
 | 
					    repo = "asahi-installer";
 | 
				
			||||||
 | 
					    rev = "v${version}";
 | 
				
			||||||
 | 
					    hash = "sha256-RqvD2hNjKMlUg+oY1woUN5zpN+1Y/TrBQbokNgdeCW4=";
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  patches = [
 | 
				
			||||||
 | 
					    ./add_entry_point.patch
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  nativeBuildInputs = [ python3.pkgs.setuptools makeBinaryWrapper ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										56
									
								
								machines/nat/m1-support/boot-m1n1/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								machines/nat/m1-support/boot-m1n1/default.nix
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,56 @@
 | 
				
			|||||||
 | 
					{ config, pkgs, lib, ... }:
 | 
				
			||||||
 | 
					let
 | 
				
			||||||
 | 
					  buildPkgs = if config.boot.kernelBuildIsCross then
 | 
				
			||||||
 | 
					    import (pkgs.path) {
 | 
				
			||||||
 | 
					      system = "x86_64-linux";
 | 
				
			||||||
 | 
					      crossSystem.system = "aarch64-linux";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  else pkgs;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  bootM1n1 = buildPkgs.callPackage ../m1n1 {
 | 
				
			||||||
 | 
					    isRelease = true;
 | 
				
			||||||
 | 
					    withTools = false;
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  bootUBoot = buildPkgs.callPackage ../u-boot {
 | 
				
			||||||
 | 
					    m1n1 = bootM1n1;
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  bootFiles = {
 | 
				
			||||||
 | 
					    "m1n1/boot.bin" = pkgs.runCommand "boot.bin" {} ''
 | 
				
			||||||
 | 
					      cat ${bootM1n1}/build/m1n1.bin > $out
 | 
				
			||||||
 | 
					      cat ${config.boot.kernelPackages.kernel}/dtbs/apple/*.dtb >> $out
 | 
				
			||||||
 | 
					      cat ${bootUBoot}/u-boot-nodtb.bin.gz >> $out
 | 
				
			||||||
 | 
					      if [ -n "${config.boot.m1n1ExtraOptions}" ]; then
 | 
				
			||||||
 | 
					        echo '${config.boot.m1n1ExtraOptions}' >> $out
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					    '';
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					in {
 | 
				
			||||||
 | 
					  config = {
 | 
				
			||||||
 | 
					    # install m1n1 with the boot loader
 | 
				
			||||||
 | 
					    boot.loader.grub.extraFiles = bootFiles;
 | 
				
			||||||
 | 
					    boot.loader.systemd-boot.extraFiles = bootFiles;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # ensure the installer has m1n1 in the image
 | 
				
			||||||
 | 
					    system.extraDependencies = lib.mkForce [ bootM1n1 bootUBoot ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # give the user the utilities to re-extract the firmware if necessary
 | 
				
			||||||
 | 
					    environment.systemPackages = [
 | 
				
			||||||
 | 
					      (buildPkgs.callPackage ../asahi-fwextract {})
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # system.extraDependencies = [ boot ];
 | 
				
			||||||
 | 
					    # system.extraDependencies = lib.mkForce [ boot ];
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  options.boot.m1n1ExtraOptions = lib.mkOption {
 | 
				
			||||||
 | 
					    type = lib.types.str;
 | 
				
			||||||
 | 
					    default = "";
 | 
				
			||||||
 | 
					    description = ''
 | 
				
			||||||
 | 
					      Append extra options to the m1n1 boot binary. Might be useful for fixing
 | 
				
			||||||
 | 
					      display problems on Mac minis.
 | 
				
			||||||
 | 
					      https://github.com/AsahiLinux/m1n1/issues/159
 | 
				
			||||||
 | 
					    '';
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										8
									
								
								machines/nat/m1-support/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								machines/nat/m1-support/default.nix
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					{ config, pkgs, lib, ... }:
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  imports = [
 | 
				
			||||||
 | 
					    ./kernel
 | 
				
			||||||
 | 
					    ./firmware
 | 
				
			||||||
 | 
					    ./boot-m1n1
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										18
									
								
								machines/nat/m1-support/firmware/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								machines/nat/m1-support/firmware/default.nix
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					{ config, pkgs, lib, ... }:
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  hardware.firmware = [
 | 
				
			||||||
 | 
					    (pkgs.stdenvNoCC.mkDerivation {
 | 
				
			||||||
 | 
					      name = "firmware";
 | 
				
			||||||
 | 
					      buildCommand = ''
 | 
				
			||||||
 | 
					        mkdir -p $out/lib/firmware
 | 
				
			||||||
 | 
					        FIRMWARE=`echo ${./.}/*firmware*.tar`
 | 
				
			||||||
 | 
					        if [ -e "$FIRMWARE" ]; then
 | 
				
			||||||
 | 
					          tar xf "$FIRMWARE" -C $out/lib/firmware
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					          # stop nixos infra from breaking when it doesn't have any firmware
 | 
				
			||||||
 | 
					          touch $out/lib/firmware/.dummy
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					      '';
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								machines/nat/m1-support/firmware/firmware.tar
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								machines/nat/m1-support/firmware/firmware.tar
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										691
									
								
								machines/nat/m1-support/kernel/config
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										691
									
								
								machines/nat/m1-support/kernel/config
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,691 @@
 | 
				
			|||||||
 | 
					# from https://github.com/jannau/AsahiLinux-PKGBUILD/blob/main/linux-apple/config
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CONFIG_SWAP=y
 | 
				
			||||||
 | 
					CONFIG_DM_SNAPSHOT=m
 | 
				
			||||||
 | 
					CONFIG_WERROR=y
 | 
				
			||||||
 | 
					CONFIG_DEFAULT_HOSTNAME="m1"
 | 
				
			||||||
 | 
					CONFIG_SYSVIPC=y
 | 
				
			||||||
 | 
					CONFIG_POSIX_MQUEUE=y
 | 
				
			||||||
 | 
					CONFIG_AUDIT=y
 | 
				
			||||||
 | 
					CONFIG_NO_HZ_IDLE=y
 | 
				
			||||||
 | 
					CONFIG_HIGH_RES_TIMERS=y
 | 
				
			||||||
 | 
					CONFIG_BPF_JIT=y
 | 
				
			||||||
 | 
					CONFIG_PREEMPT=y
 | 
				
			||||||
 | 
					CONFIG_IRQ_TIME_ACCOUNTING=y
 | 
				
			||||||
 | 
					CONFIG_BSD_PROCESS_ACCT=y
 | 
				
			||||||
 | 
					CONFIG_BSD_PROCESS_ACCT_V3=y
 | 
				
			||||||
 | 
					CONFIG_TASKSTATS=y
 | 
				
			||||||
 | 
					CONFIG_TASK_DELAY_ACCT=y
 | 
				
			||||||
 | 
					CONFIG_TASK_XACCT=y
 | 
				
			||||||
 | 
					CONFIG_TASK_IO_ACCOUNTING=y
 | 
				
			||||||
 | 
					CONFIG_IKCONFIG=y
 | 
				
			||||||
 | 
					CONFIG_IKCONFIG_PROC=y
 | 
				
			||||||
 | 
					CONFIG_NUMA_BALANCING=y
 | 
				
			||||||
 | 
					CONFIG_MEMCG=y
 | 
				
			||||||
 | 
					CONFIG_BLK_CGROUP=y
 | 
				
			||||||
 | 
					CONFIG_CGROUP_PIDS=y
 | 
				
			||||||
 | 
					CONFIG_CGROUP_HUGETLB=y
 | 
				
			||||||
 | 
					CONFIG_CPUSETS=y
 | 
				
			||||||
 | 
					CONFIG_CGROUP_DEVICE=y
 | 
				
			||||||
 | 
					CONFIG_CGROUP_CPUACCT=y
 | 
				
			||||||
 | 
					CONFIG_CGROUP_PERF=y
 | 
				
			||||||
 | 
					CONFIG_USER_NS=y
 | 
				
			||||||
 | 
					CONFIG_SCHED_AUTOGROUP=y
 | 
				
			||||||
 | 
					CONFIG_BLK_DEV_INITRD=y
 | 
				
			||||||
 | 
					CONFIG_KALLSYMS_ALL=y
 | 
				
			||||||
 | 
					# CONFIG_COMPAT_BRK is not set
 | 
				
			||||||
 | 
					CONFIG_PROFILING=y
 | 
				
			||||||
 | 
					CONFIG_ARCH_APPLE=y
 | 
				
			||||||
 | 
					# CONFIG_ARM64_ERRATUM_2054223 is not set
 | 
				
			||||||
 | 
					# CONFIG_ARM64_ERRATUM_2067961 is not set
 | 
				
			||||||
 | 
					# CONFIG_NVIDIA_CARMEL_CNP_ERRATUM is not set
 | 
				
			||||||
 | 
					CONFIG_ARM64_VA_BITS_48=y
 | 
				
			||||||
 | 
					CONFIG_SCHED_MC=y
 | 
				
			||||||
 | 
					CONFIG_SCHED_CLUSTER=y
 | 
				
			||||||
 | 
					CONFIG_NR_CPUS=64
 | 
				
			||||||
 | 
					CONFIG_NUMA=y
 | 
				
			||||||
 | 
					CONFIG_KEXEC=y
 | 
				
			||||||
 | 
					CONFIG_KEXEC_FILE=y
 | 
				
			||||||
 | 
					CONFIG_CRASH_DUMP=y
 | 
				
			||||||
 | 
					CONFIG_XEN=y
 | 
				
			||||||
 | 
					# CONFIG_ARM64_PTR_AUTH_KERNEL is not set
 | 
				
			||||||
 | 
					CONFIG_RANDOMIZE_BASE=y
 | 
				
			||||||
 | 
					CONFIG_HIBERNATION=y
 | 
				
			||||||
 | 
					CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y
 | 
				
			||||||
 | 
					CONFIG_ENERGY_MODEL=y
 | 
				
			||||||
 | 
					CONFIG_ARM_CPUIDLE=y
 | 
				
			||||||
 | 
					CONFIG_ARM_PSCI_CPUIDLE=y
 | 
				
			||||||
 | 
					CONFIG_CPU_FREQ=y
 | 
				
			||||||
 | 
					CONFIG_CPU_FREQ_STAT=y
 | 
				
			||||||
 | 
					CONFIG_CPU_FREQ_GOV_POWERSAVE=m
 | 
				
			||||||
 | 
					CONFIG_CPU_FREQ_GOV_USERSPACE=y
 | 
				
			||||||
 | 
					CONFIG_CPU_FREQ_GOV_ONDEMAND=y
 | 
				
			||||||
 | 
					CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
 | 
				
			||||||
 | 
					CONFIG_CPUFREQ_DT=y
 | 
				
			||||||
 | 
					CONFIG_ACPI=y
 | 
				
			||||||
 | 
					CONFIG_ACPI_APEI=y
 | 
				
			||||||
 | 
					CONFIG_ACPI_APEI_GHES=y
 | 
				
			||||||
 | 
					CONFIG_ACPI_APEI_MEMORY_FAILURE=y
 | 
				
			||||||
 | 
					CONFIG_ACPI_APEI_EINJ=y
 | 
				
			||||||
 | 
					CONFIG_VIRTUALIZATION=y
 | 
				
			||||||
 | 
					CONFIG_KVM=y
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_SHA1_ARM64_CE=y
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_SHA2_ARM64_CE=y
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_SHA512_ARM64_CE=m
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_SHA3_ARM64=m
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_SM3_ARM64_CE=m
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_GHASH_ARM64_CE=y
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_AES_ARM64=y
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_AES_ARM64_CE_CCM=y
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_AES_ARM64_CE_BLK=y
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_AES_ARM64_BS=m
 | 
				
			||||||
 | 
					CONFIG_JUMP_LABEL=y
 | 
				
			||||||
 | 
					CONFIG_MODULES=y
 | 
				
			||||||
 | 
					CONFIG_MODULE_UNLOAD=y
 | 
				
			||||||
 | 
					# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
 | 
				
			||||||
 | 
					CONFIG_KSM=y
 | 
				
			||||||
 | 
					CONFIG_MEMORY_FAILURE=y
 | 
				
			||||||
 | 
					CONFIG_TRANSPARENT_HUGEPAGE=y
 | 
				
			||||||
 | 
					CONFIG_CMA=y
 | 
				
			||||||
 | 
					CONFIG_NET=y
 | 
				
			||||||
 | 
					CONFIG_PACKET=y
 | 
				
			||||||
 | 
					CONFIG_UNIX=y
 | 
				
			||||||
 | 
					CONFIG_INET=y
 | 
				
			||||||
 | 
					CONFIG_IP_MULTICAST=y
 | 
				
			||||||
 | 
					CONFIG_IP_PNP=y
 | 
				
			||||||
 | 
					CONFIG_IP_PNP_DHCP=y
 | 
				
			||||||
 | 
					CONFIG_IP_PNP_BOOTP=y
 | 
				
			||||||
 | 
					CONFIG_IPV6=m
 | 
				
			||||||
 | 
					CONFIG_IP_NF_IPTABLES=m
 | 
				
			||||||
 | 
					CONFIG_IP_NF_FILTER=m
 | 
				
			||||||
 | 
					CONFIG_IP_NF_TARGET_REJECT=m
 | 
				
			||||||
 | 
					CONFIG_IP_NF_NAT=m
 | 
				
			||||||
 | 
					CONFIG_IP_NF_TARGET_MASQUERADE=m
 | 
				
			||||||
 | 
					CONFIG_IP_NF_MANGLE=m
 | 
				
			||||||
 | 
					CONFIG_IP6_NF_IPTABLES=m
 | 
				
			||||||
 | 
					CONFIG_IP6_NF_FILTER=m
 | 
				
			||||||
 | 
					CONFIG_IP6_NF_TARGET_REJECT=m
 | 
				
			||||||
 | 
					CONFIG_IP6_NF_MANGLE=m
 | 
				
			||||||
 | 
					CONFIG_IP6_NF_NAT=m
 | 
				
			||||||
 | 
					CONFIG_IP6_NF_TARGET_MASQUERADE=m
 | 
				
			||||||
 | 
					CONFIG_BRIDGE=m
 | 
				
			||||||
 | 
					CONFIG_BRIDGE_VLAN_FILTERING=y
 | 
				
			||||||
 | 
					CONFIG_NET_DSA=m
 | 
				
			||||||
 | 
					CONFIG_VLAN_8021Q=m
 | 
				
			||||||
 | 
					CONFIG_VLAN_8021Q_GVRP=y
 | 
				
			||||||
 | 
					CONFIG_VLAN_8021Q_MVRP=y
 | 
				
			||||||
 | 
					CONFIG_NET_SCHED=y
 | 
				
			||||||
 | 
					CONFIG_NET_SCH_CBS=m
 | 
				
			||||||
 | 
					CONFIG_NET_SCH_ETF=m
 | 
				
			||||||
 | 
					CONFIG_NET_SCH_TAPRIO=m
 | 
				
			||||||
 | 
					CONFIG_NET_SCH_MQPRIO=m
 | 
				
			||||||
 | 
					CONFIG_NET_SCH_INGRESS=m
 | 
				
			||||||
 | 
					CONFIG_NET_CLS_BASIC=m
 | 
				
			||||||
 | 
					CONFIG_NET_CLS_FLOWER=m
 | 
				
			||||||
 | 
					CONFIG_NET_CLS_ACT=y
 | 
				
			||||||
 | 
					CONFIG_NET_ACT_GACT=m
 | 
				
			||||||
 | 
					CONFIG_NET_ACT_MIRRED=m
 | 
				
			||||||
 | 
					CONFIG_NET_ACT_GATE=m
 | 
				
			||||||
 | 
					CONFIG_QRTR=m
 | 
				
			||||||
 | 
					CONFIG_QRTR_TUN=m
 | 
				
			||||||
 | 
					CONFIG_CAN=m
 | 
				
			||||||
 | 
					CONFIG_CAN_FLEXCAN=m
 | 
				
			||||||
 | 
					CONFIG_BT=m
 | 
				
			||||||
 | 
					CONFIG_BT_HIDP=m
 | 
				
			||||||
 | 
					# CONFIG_BT_LE is not set
 | 
				
			||||||
 | 
					# CONFIG_BT_DEBUGFS is not set
 | 
				
			||||||
 | 
					CONFIG_BT_HCIBTUSB=m
 | 
				
			||||||
 | 
					CONFIG_BT_HCIUART=m
 | 
				
			||||||
 | 
					CONFIG_BT_HCIUART_LL=y
 | 
				
			||||||
 | 
					CONFIG_BT_HCIUART_BCM=y
 | 
				
			||||||
 | 
					CONFIG_BT_HCIUART_QCA=y
 | 
				
			||||||
 | 
					CONFIG_CFG80211=m
 | 
				
			||||||
 | 
					CONFIG_MAC80211=m
 | 
				
			||||||
 | 
					CONFIG_RFKILL=m
 | 
				
			||||||
 | 
					CONFIG_RFKILL_GPIO=m
 | 
				
			||||||
 | 
					# CONFIG_NET_9P=y
 | 
				
			||||||
 | 
					# CONFIG_NET_9P_VIRTIO=y
 | 
				
			||||||
 | 
					CONFIG_NFC=m
 | 
				
			||||||
 | 
					CONFIG_NFC_NCI=m
 | 
				
			||||||
 | 
					CONFIG_NFC_S3FWRN5_I2C=m
 | 
				
			||||||
 | 
					CONFIG_PCI=y
 | 
				
			||||||
 | 
					CONFIG_PCIEPORTBUS=y
 | 
				
			||||||
 | 
					CONFIG_PCI_IOV=y
 | 
				
			||||||
 | 
					CONFIG_PCI_PASID=y
 | 
				
			||||||
 | 
					CONFIG_HOTPLUG_PCI=y
 | 
				
			||||||
 | 
					CONFIG_HOTPLUG_PCI_ACPI=y
 | 
				
			||||||
 | 
					CONFIG_PCI_HOST_GENERIC=y
 | 
				
			||||||
 | 
					CONFIG_PCIE_APPLE=y
 | 
				
			||||||
 | 
					CONFIG_PCIE_DW_PLAT_HOST=y
 | 
				
			||||||
 | 
					CONFIG_PCI_ENDPOINT=y
 | 
				
			||||||
 | 
					CONFIG_PCI_ENDPOINT_CONFIGFS=y
 | 
				
			||||||
 | 
					CONFIG_PCI_EPF_TEST=m
 | 
				
			||||||
 | 
					CONFIG_UEVENT_HELPER=y
 | 
				
			||||||
 | 
					CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 | 
				
			||||||
 | 
					CONFIG_DEVTMPFS=y
 | 
				
			||||||
 | 
					CONFIG_DEVTMPFS_MOUNT=y
 | 
				
			||||||
 | 
					CONFIG_EFI_BOOTLOADER_CONTROL=y
 | 
				
			||||||
 | 
					CONFIG_EFI_CAPSULE_LOADER=y
 | 
				
			||||||
 | 
					CONFIG_BLK_DEV_LOOP=y
 | 
				
			||||||
 | 
					CONFIG_BLK_DEV_NBD=m
 | 
				
			||||||
 | 
					CONFIG_VIRTIO_BLK=y
 | 
				
			||||||
 | 
					CONFIG_BLK_DEV_NVME=m
 | 
				
			||||||
 | 
					CONFIG_SRAM=y
 | 
				
			||||||
 | 
					CONFIG_DW_XDATA_PCIE=y
 | 
				
			||||||
 | 
					CONFIG_PCI_ENDPOINT_TEST=m
 | 
				
			||||||
 | 
					CONFIG_EEPROM_AT24=m
 | 
				
			||||||
 | 
					CONFIG_SCSI=y
 | 
				
			||||||
 | 
					# CONFIG_SCSI_PROC_FS is not set
 | 
				
			||||||
 | 
					CONFIG_BLK_DEV_SD=y
 | 
				
			||||||
 | 
					CONFIG_MD=y
 | 
				
			||||||
 | 
					CONFIG_BLK_DEV_MD=m
 | 
				
			||||||
 | 
					CONFIG_BLK_DEV_DM=m
 | 
				
			||||||
 | 
					CONFIG_DM_MIRROR=m
 | 
				
			||||||
 | 
					CONFIG_DM_ZERO=m
 | 
				
			||||||
 | 
					CONFIG_DM_CRYPT=m
 | 
				
			||||||
 | 
					CONFIG_NETDEVICES=y
 | 
				
			||||||
 | 
					CONFIG_WIREGUARD=m
 | 
				
			||||||
 | 
					CONFIG_MACVLAN=m
 | 
				
			||||||
 | 
					CONFIG_MACVTAP=m
 | 
				
			||||||
 | 
					CONFIG_IPVLAN=m
 | 
				
			||||||
 | 
					CONFIG_IPVTAP=m
 | 
				
			||||||
 | 
					CONFIG_TUN=y
 | 
				
			||||||
 | 
					CONFIG_VETH=m
 | 
				
			||||||
 | 
					CONFIG_VIRTIO_NET=y
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_3COM is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_ADAPTEC is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_AGERE is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_ALACRITECH is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_ALTEON is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_AMAZON is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_AMD is not set
 | 
				
			||||||
 | 
					CONFIG_AQTION=y
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_ARC is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_ATHEROS is not set
 | 
				
			||||||
 | 
					CONFIG_TIGON3=y
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_BROCADE is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_CADENCE is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_CAVIUM is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_CHELSIO is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_CISCO is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_CORTINA is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_DEC is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_DLINK is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_EMULEX is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_EZCHIP is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_GOOGLE is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_HISILICON is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_HUAWEI is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_INTEL is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_MICROSOFT is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_LITEX is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_MARVELL is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_MELLANOX is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_MICREL is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_MICROCHIP is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_MICROSEMI is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_MYRI is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_NATSEMI is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_NETERION is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_NETRONOME is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_NI is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_NVIDIA is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_OKI is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_PACKET_ENGINES is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_PENSANDO is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_QLOGIC is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_QUALCOMM is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_RDC is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_REALTEK is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_RENESAS is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_ROCKER is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_SAMSUNG is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_SEEQ is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_SOLARFLARE is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_SILAN is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_SIS is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_SMSC is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_SOCIONEXT is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_STMICRO is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_SUN is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_SYNOPSYS is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_TEHUTI is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_TI is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_VIA is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_WIZNET is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_XILINX is not set
 | 
				
			||||||
 | 
					CONFIG_USB_RTL8150=y
 | 
				
			||||||
 | 
					CONFIG_USB_RTL8152=y
 | 
				
			||||||
 | 
					CONFIG_USB_LAN78XX=y
 | 
				
			||||||
 | 
					CONFIG_USB_USBNET=y
 | 
				
			||||||
 | 
					CONFIG_USB_NET_SMSC75XX=y
 | 
				
			||||||
 | 
					CONFIG_USB_NET_SMSC95XX=y
 | 
				
			||||||
 | 
					# CONFIG_USB_NET_NET1080 is not set
 | 
				
			||||||
 | 
					# CONFIG_USB_NET_ZAURUS is not set
 | 
				
			||||||
 | 
					CONFIG_USB_IPHETH=y
 | 
				
			||||||
 | 
					# CONFIG_WLAN_VENDOR_ADMTEK is not set
 | 
				
			||||||
 | 
					# CONFIG_WLAN_VENDOR_ATH is not set
 | 
				
			||||||
 | 
					# CONFIG_WLAN_VENDOR_ATMEL is not set
 | 
				
			||||||
 | 
					# CONFIG_WLAN_VENDOR_CISCO is not set
 | 
				
			||||||
 | 
					# CONFIG_WLAN_VENDOR_INTEL is not set
 | 
				
			||||||
 | 
					# CONFIG_WLAN_VENDOR_INTERSIL is not set
 | 
				
			||||||
 | 
					# CONFIG_WLAN_VENDOR_MARVELL is not set
 | 
				
			||||||
 | 
					# CONFIG_WLAN_VENDOR_MEDIATEK is not set
 | 
				
			||||||
 | 
					# CONFIG_WLAN_VENDOR_MICROCHIP is not set
 | 
				
			||||||
 | 
					# CONFIG_WLAN_VENDOR_RALINK is not set
 | 
				
			||||||
 | 
					# CONFIG_WLAN_VENDOR_REALTEK is not set
 | 
				
			||||||
 | 
					# CONFIG_WLAN_VENDOR_RSI is not set
 | 
				
			||||||
 | 
					# CONFIG_WLAN_VENDOR_ST is not set
 | 
				
			||||||
 | 
					# CONFIG_WLAN_VENDOR_TI is not set
 | 
				
			||||||
 | 
					# CONFIG_WLAN_VENDOR_ZYDAS is not set
 | 
				
			||||||
 | 
					# CONFIG_WLAN_VENDOR_QUANTENNA is not set
 | 
				
			||||||
 | 
					# CONFIG_XEN_NETDEV_FRONTEND is not set
 | 
				
			||||||
 | 
					CONFIG_INPUT_EVDEV=y
 | 
				
			||||||
 | 
					CONFIG_KEYBOARD_APPLESPI=y
 | 
				
			||||||
 | 
					CONFIG_INPUT_TOUCHSCREEN=y
 | 
				
			||||||
 | 
					CONFIG_TOUCHSCREEN_ATMEL_MXT=m
 | 
				
			||||||
 | 
					CONFIG_TOUCHSCREEN_EDT_FT5X06=m
 | 
				
			||||||
 | 
					CONFIG_INPUT_MISC=y
 | 
				
			||||||
 | 
					# CONFIG_SERIO_SERPORT is not set
 | 
				
			||||||
 | 
					CONFIG_SERIO_AMBAKMI=y
 | 
				
			||||||
 | 
					CONFIG_LEGACY_PTY_COUNT=16
 | 
				
			||||||
 | 
					CONFIG_SERIAL_8250=y
 | 
				
			||||||
 | 
					CONFIG_SERIAL_8250_CONSOLE=y
 | 
				
			||||||
 | 
					CONFIG_SERIAL_8250_EXTENDED=y
 | 
				
			||||||
 | 
					CONFIG_SERIAL_8250_SHARE_IRQ=y
 | 
				
			||||||
 | 
					CONFIG_SERIAL_8250_DW=y
 | 
				
			||||||
 | 
					CONFIG_SERIAL_OF_PLATFORM=y
 | 
				
			||||||
 | 
					CONFIG_SERIAL_AMBA_PL011=y
 | 
				
			||||||
 | 
					CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
 | 
				
			||||||
 | 
					CONFIG_SERIAL_SAMSUNG=y
 | 
				
			||||||
 | 
					CONFIG_SERIAL_SAMSUNG_CONSOLE=y
 | 
				
			||||||
 | 
					CONFIG_SERIAL_DEV_BUS=y
 | 
				
			||||||
 | 
					CONFIG_VIRTIO_CONSOLE=y
 | 
				
			||||||
 | 
					CONFIG_I2C_CHARDEV=y
 | 
				
			||||||
 | 
					CONFIG_I2C_MUX=y
 | 
				
			||||||
 | 
					# CONFIG_I2C_HELPER_AUTO is not set
 | 
				
			||||||
 | 
					CONFIG_I2C_SMBUS=y
 | 
				
			||||||
 | 
					CONFIG_SPI=y
 | 
				
			||||||
 | 
					CONFIG_SPI_DEBUG=y
 | 
				
			||||||
 | 
					CONFIG_SPI_APPLE=y
 | 
				
			||||||
 | 
					# CONFIG_PTP_1588_CLOCK is not set
 | 
				
			||||||
 | 
					CONFIG_PINCTRL=y
 | 
				
			||||||
 | 
					CONFIG_PINCTRL_APPLE_GPIO=y
 | 
				
			||||||
 | 
					# CONFIG_HWMON is not set
 | 
				
			||||||
 | 
					CONFIG_THERMAL_WRITABLE_TRIPS=y
 | 
				
			||||||
 | 
					CONFIG_THERMAL_GOV_USER_SPACE=y
 | 
				
			||||||
 | 
					CONFIG_WATCHDOG=y
 | 
				
			||||||
 | 
					CONFIG_APPLE_WATCHDOG=y
 | 
				
			||||||
 | 
					CONFIG_MFD_SYSCON=y
 | 
				
			||||||
 | 
					CONFIG_MEDIA_SUPPORT=m
 | 
				
			||||||
 | 
					CONFIG_MEDIA_CAMERA_SUPPORT=y
 | 
				
			||||||
 | 
					CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
 | 
				
			||||||
 | 
					CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
 | 
				
			||||||
 | 
					CONFIG_MEDIA_SDR_SUPPORT=y
 | 
				
			||||||
 | 
					CONFIG_MEDIA_PLATFORM_SUPPORT=y
 | 
				
			||||||
 | 
					CONFIG_VIDEO_V4L2_SUBDEV_API=y
 | 
				
			||||||
 | 
					CONFIG_MEDIA_USB_SUPPORT=y
 | 
				
			||||||
 | 
					CONFIG_USB_VIDEO_CLASS=m
 | 
				
			||||||
 | 
					CONFIG_USB_GSPCA=m
 | 
				
			||||||
 | 
					CONFIG_V4L_PLATFORM_DRIVERS=y
 | 
				
			||||||
 | 
					CONFIG_V4L_MEM2MEM_DRIVERS=y
 | 
				
			||||||
 | 
					CONFIG_DRM=y
 | 
				
			||||||
 | 
					CONFIG_DRM_SIMPLEDRM=y
 | 
				
			||||||
 | 
					CONFIG_FB=y
 | 
				
			||||||
 | 
					CONFIG_FB_MODE_HELPERS=y
 | 
				
			||||||
 | 
					CONFIG_FB_TILEBLITTING=y
 | 
				
			||||||
 | 
					CONFIG_FB_EFI=y
 | 
				
			||||||
 | 
					# CONFIG_XEN_FBDEV_FRONTEND is not set
 | 
				
			||||||
 | 
					CONFIG_LOGO=y
 | 
				
			||||||
 | 
					# CONFIG_LOGO_LINUX_MONO is not set
 | 
				
			||||||
 | 
					# CONFIG_LOGO_LINUX_VGA16 is not set
 | 
				
			||||||
 | 
					CONFIG_SOUND=y
 | 
				
			||||||
 | 
					CONFIG_SND=y
 | 
				
			||||||
 | 
					CONFIG_USB_ULPI_BUS=y
 | 
				
			||||||
 | 
					CONFIG_USB_CONN_GPIO=y
 | 
				
			||||||
 | 
					CONFIG_USB=y
 | 
				
			||||||
 | 
					CONFIG_USB_OTG=y
 | 
				
			||||||
 | 
					CONFIG_USB_MON=m
 | 
				
			||||||
 | 
					CONFIG_USB_XHCI_HCD=y
 | 
				
			||||||
 | 
					CONFIG_USB_EHCI_HCD=y
 | 
				
			||||||
 | 
					CONFIG_USB_EHCI_HCD_PLATFORM=y
 | 
				
			||||||
 | 
					CONFIG_USB_ACM=m
 | 
				
			||||||
 | 
					CONFIG_USB_STORAGE=y
 | 
				
			||||||
 | 
					CONFIG_USB_UAS=y
 | 
				
			||||||
 | 
					CONFIG_USB_DWC3=y
 | 
				
			||||||
 | 
					CONFIG_USB_DWC3_ULPI=y
 | 
				
			||||||
 | 
					CONFIG_USB_DWC2=y
 | 
				
			||||||
 | 
					CONFIG_USB_DWC2_HOST=y
 | 
				
			||||||
 | 
					CONFIG_USB_DWC2_PCI=y
 | 
				
			||||||
 | 
					CONFIG_USB_SERIAL=m
 | 
				
			||||||
 | 
					CONFIG_USB_SERIAL_CP210X=m
 | 
				
			||||||
 | 
					CONFIG_USB_SERIAL_FTDI_SIO=m
 | 
				
			||||||
 | 
					CONFIG_USB_SERIAL_OPTION=m
 | 
				
			||||||
 | 
					CONFIG_USB_GPIO_VBUS=y
 | 
				
			||||||
 | 
					CONFIG_USB_ULPI=y
 | 
				
			||||||
 | 
					CONFIG_USB_GADGET=y
 | 
				
			||||||
 | 
					CONFIG_U_SERIAL_CONSOLE=y
 | 
				
			||||||
 | 
					CONFIG_USB_SNP_UDC_PLAT=y
 | 
				
			||||||
 | 
					CONFIG_USB_CONFIGFS=m
 | 
				
			||||||
 | 
					CONFIG_USB_CONFIGFS_SERIAL=y
 | 
				
			||||||
 | 
					CONFIG_USB_CONFIGFS_ACM=y
 | 
				
			||||||
 | 
					CONFIG_USB_CONFIGFS_OBEX=y
 | 
				
			||||||
 | 
					CONFIG_USB_CONFIGFS_NCM=y
 | 
				
			||||||
 | 
					CONFIG_USB_CONFIGFS_ECM=y
 | 
				
			||||||
 | 
					CONFIG_USB_CONFIGFS_ECM_SUBSET=y
 | 
				
			||||||
 | 
					CONFIG_USB_CONFIGFS_RNDIS=y
 | 
				
			||||||
 | 
					CONFIG_USB_CONFIGFS_EEM=y
 | 
				
			||||||
 | 
					CONFIG_USB_CONFIGFS_MASS_STORAGE=y
 | 
				
			||||||
 | 
					CONFIG_USB_CONFIGFS_F_FS=y
 | 
				
			||||||
 | 
					CONFIG_USB_G_SERIAL=y
 | 
				
			||||||
 | 
					CONFIG_USB_CDC_COMPOSITE=y
 | 
				
			||||||
 | 
					CONFIG_TYPEC=y
 | 
				
			||||||
 | 
					CONFIG_TYPEC_TCPM=y
 | 
				
			||||||
 | 
					CONFIG_TYPEC_TPS6598X=y
 | 
				
			||||||
 | 
					CONFIG_TYPEC_DP_ALTMODE=m
 | 
				
			||||||
 | 
					CONFIG_NEW_LEDS=y
 | 
				
			||||||
 | 
					CONFIG_LEDS_CLASS=y
 | 
				
			||||||
 | 
					CONFIG_LEDS_CLASS_FLASH=y
 | 
				
			||||||
 | 
					CONFIG_LEDS_CLASS_MULTICOLOR=y
 | 
				
			||||||
 | 
					CONFIG_LEDS_BRIGHTNESS_HW_CHANGED=y
 | 
				
			||||||
 | 
					CONFIG_UDMABUF=y
 | 
				
			||||||
 | 
					CONFIG_DMABUF_HEAPS=y
 | 
				
			||||||
 | 
					CONFIG_DMABUF_SYSFS_STATS=y
 | 
				
			||||||
 | 
					CONFIG_DMABUF_HEAPS_SYSTEM=y
 | 
				
			||||||
 | 
					CONFIG_DMABUF_HEAPS_CMA=y
 | 
				
			||||||
 | 
					# CONFIG_VIRTIO_MENU is not set
 | 
				
			||||||
 | 
					# CONFIG_VHOST_MENU is not set
 | 
				
			||||||
 | 
					# CONFIG_XEN_PCIDEV_STUB is not set
 | 
				
			||||||
 | 
					CONFIG_MAILBOX=y
 | 
				
			||||||
 | 
					CONFIG_GENERIC_PHY=y
 | 
				
			||||||
 | 
					CONFIG_VALIDATE_FS_PARSER=y
 | 
				
			||||||
 | 
					CONFIG_EXT3_FS=y
 | 
				
			||||||
 | 
					CONFIG_EXT4_FS_POSIX_ACL=y
 | 
				
			||||||
 | 
					CONFIG_BTRFS_FS=m
 | 
				
			||||||
 | 
					CONFIG_BTRFS_FS_POSIX_ACL=y
 | 
				
			||||||
 | 
					CONFIG_FANOTIFY=y
 | 
				
			||||||
 | 
					CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
 | 
				
			||||||
 | 
					CONFIG_QUOTA=y
 | 
				
			||||||
 | 
					CONFIG_AUTOFS4_FS=y
 | 
				
			||||||
 | 
					CONFIG_FUSE_FS=m
 | 
				
			||||||
 | 
					CONFIG_CUSE=m
 | 
				
			||||||
 | 
					CONFIG_OVERLAY_FS=m
 | 
				
			||||||
 | 
					CONFIG_VFAT_FS=y
 | 
				
			||||||
 | 
					CONFIG_EXFAT_FS=y
 | 
				
			||||||
 | 
					CONFIG_TMPFS=y
 | 
				
			||||||
 | 
					CONFIG_TMPFS_POSIX_ACL=y
 | 
				
			||||||
 | 
					CONFIG_HUGETLBFS=y
 | 
				
			||||||
 | 
					CONFIG_EFIVAR_FS=y
 | 
				
			||||||
 | 
					CONFIG_SQUASHFS=y
 | 
				
			||||||
 | 
					CONFIG_NFS_FS=y
 | 
				
			||||||
 | 
					CONFIG_NFS_V4=y
 | 
				
			||||||
 | 
					CONFIG_NFS_V4_1=y
 | 
				
			||||||
 | 
					CONFIG_NFS_V4_2=y
 | 
				
			||||||
 | 
					CONFIG_ROOT_NFS=y
 | 
				
			||||||
 | 
					CONFIG_9P_FS=y
 | 
				
			||||||
 | 
					CONFIG_NLS_CODEPAGE_437=y
 | 
				
			||||||
 | 
					CONFIG_NLS_ISO8859_1=y
 | 
				
			||||||
 | 
					CONFIG_SECURITY=y
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_CRYPTD=y
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_ECHAINIV=y
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_ANSI_CPRNG=y
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_USER_API_RNG=m
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_DEV_CCREE=m
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_DEV_HISI_SEC2=m
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_DEV_HISI_ZIP=m
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_DEV_HISI_HPRE=m
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_DEV_HISI_TRNG=m
 | 
				
			||||||
 | 
					CONFIG_DMA_CMA=y
 | 
				
			||||||
 | 
					CONFIG_CMA_SIZE_MBYTES=128
 | 
				
			||||||
 | 
					CONFIG_PRINTK_TIME=y
 | 
				
			||||||
 | 
					CONFIG_DEBUG_INFO=y
 | 
				
			||||||
 | 
					CONFIG_DEBUG_INFO_REDUCED=y
 | 
				
			||||||
 | 
					CONFIG_MAGIC_SYSRQ=y
 | 
				
			||||||
 | 
					CONFIG_DEBUG_FS=y
 | 
				
			||||||
 | 
					CONFIG_DEBUG_KERNEL=y
 | 
				
			||||||
 | 
					# CONFIG_SCHED_DEBUG is not set
 | 
				
			||||||
 | 
					CONFIG_FUNCTION_TRACER=y
 | 
				
			||||||
 | 
					CONFIG_MEMTEST=y
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# additional nixos mandatory kernel configs
 | 
				
			||||||
 | 
					CONFIG_CGROUPS=y
 | 
				
			||||||
 | 
					CONFIG_INOTIFY_USER=y
 | 
				
			||||||
 | 
					CONFIG_SIGNALFD=y
 | 
				
			||||||
 | 
					CONFIG_TIMERFD=y
 | 
				
			||||||
 | 
					CONFIG_EPOLL=y
 | 
				
			||||||
 | 
					CONFIG_SYSFS=y
 | 
				
			||||||
 | 
					CONFIG_PROC_FS=y
 | 
				
			||||||
 | 
					CONFIG_FHANDLE=y
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_USER_API_HASH=y
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_HMAC=y
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_SHA256=y
 | 
				
			||||||
 | 
					CONFIG_ISO9660_FS=y
 | 
				
			||||||
 | 
					CONFIG_ZISOFS=n
 | 
				
			||||||
 | 
					CONFIG_JOLIET=y
 | 
				
			||||||
 | 
					CONFIG_SQUASHFS_XZ=y
 | 
				
			||||||
 | 
					CONFIG_SQUASHFS_ZSTD=y
 | 
				
			||||||
 | 
					CONFIG_DMIID=y
 | 
				
			||||||
 | 
					CONFIG_TMPFS_XATTR=y
 | 
				
			||||||
 | 
					CONFIG_SECCOMP=y
 | 
				
			||||||
 | 
					CONFIG_BINFMT_ELF=y
 | 
				
			||||||
 | 
					CONFIG_BINFMT_MISC=y
 | 
				
			||||||
 | 
					CONFIG_EFI_STUB=y
 | 
				
			||||||
 | 
					CONFIG_EFI_GENERIC_STUB_INITRD_CMDLINE_LOADER=y
 | 
				
			||||||
 | 
					CONFIG_FW_LOADER_COMPRESS=y
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# stuff for the keyboard?
 | 
				
			||||||
 | 
					CONFIG_SPI_HID_APPLE=y
 | 
				
			||||||
 | 
					CONFIG_HID_APPLE=y
 | 
				
			||||||
 | 
					CONFIG_HID_MAGICMOUSE=y
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CONFIG_APPLE_SART=y
 | 
				
			||||||
 | 
					CONFIG_APPLE_RTKIT=y
 | 
				
			||||||
 | 
					CONFIG_NVME_APPLE=y
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# stuff for sound?
 | 
				
			||||||
 | 
					CONFIG_SND_SOC=y
 | 
				
			||||||
 | 
					CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y
 | 
				
			||||||
 | 
					CONFIG_SND_SIMPLE_CARD=y
 | 
				
			||||||
 | 
					CONFIG_SND_SIMPLE_CARD_UTILS=y
 | 
				
			||||||
 | 
					CONFIG_SND_SOC_CS42L42=y
 | 
				
			||||||
 | 
					CONFIG_SND_SOC_TAS2770=y
 | 
				
			||||||
 | 
					CONFIG_DMADEVICES=y
 | 
				
			||||||
 | 
					CONFIG_APPLE_ADMAC=y
 | 
				
			||||||
 | 
					CONFIG_SND_SOC_APPLE_MCA=y
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# stuff for wifi
 | 
				
			||||||
 | 
					CONFIG_WLAN=y
 | 
				
			||||||
 | 
					CONFIG_WLAN_VENDOR_BROADCOM=y
 | 
				
			||||||
 | 
					CONFIG_BRCMUTIL=m
 | 
				
			||||||
 | 
					CONFIG_BRCMFMAC=m
 | 
				
			||||||
 | 
					CONFIG_BRCMFMAC_PROTO_MSGBUF=y
 | 
				
			||||||
 | 
					CONFIG_BRCMFMAC_PCIE=y
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# new stuff for 5.17
 | 
				
			||||||
 | 
					CONFIG_SPMI=y
 | 
				
			||||||
 | 
					CONFIG_SPMI_APPLE=y
 | 
				
			||||||
 | 
					CONFIG_CHARGER_MACSMC=y
 | 
				
			||||||
 | 
					CONFIG_GPIOLIB=y
 | 
				
			||||||
 | 
					CONFIG_GPIOLIB_IRQCHIP=y
 | 
				
			||||||
 | 
					CONFIG_GPIO_MACSMC=y
 | 
				
			||||||
 | 
					CONFIG_BACKLIGHT_GPIO=y
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# nftables related config
 | 
				
			||||||
 | 
					CONFIG_NETFILTER=y
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_ADVANCED=y
 | 
				
			||||||
 | 
					CONFIG_BRIDGE_NETFILTER=m
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Core Netfilter Configuration
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_INGRESS=y
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_EGRESS=y
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_SKIP_EGRESS=y
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_NETLINK=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_FAMILY_BRIDGE=y
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_FAMILY_ARP=y
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_NETLINK_HOOK=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_NETLINK_ACCT=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_NETLINK_QUEUE=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_NETLINK_LOG=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_NETLINK_OSF=m
 | 
				
			||||||
 | 
					CONFIG_NF_CONNTRACK=m
 | 
				
			||||||
 | 
					CONFIG_NF_LOG_SYSLOG=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_CONNCOUNT=m
 | 
				
			||||||
 | 
					CONFIG_NF_CONNTRACK_MARK=y
 | 
				
			||||||
 | 
					CONFIG_NF_CONNTRACK_ZONES=y
 | 
				
			||||||
 | 
					CONFIG_NF_CONNTRACK_PROCFS=y
 | 
				
			||||||
 | 
					CONFIG_NF_CONNTRACK_EVENTS=y
 | 
				
			||||||
 | 
					CONFIG_NF_CONNTRACK_TIMEOUT=y
 | 
				
			||||||
 | 
					CONFIG_NF_CONNTRACK_TIMESTAMP=y
 | 
				
			||||||
 | 
					CONFIG_NF_CONNTRACK_LABELS=y
 | 
				
			||||||
 | 
					CONFIG_NF_CT_PROTO_DCCP=y
 | 
				
			||||||
 | 
					CONFIG_NF_CT_PROTO_GRE=y
 | 
				
			||||||
 | 
					CONFIG_NF_CT_PROTO_SCTP=y
 | 
				
			||||||
 | 
					CONFIG_NF_CT_PROTO_UDPLITE=y
 | 
				
			||||||
 | 
					CONFIG_NF_CONNTRACK_AMANDA=m
 | 
				
			||||||
 | 
					CONFIG_NF_CONNTRACK_FTP=m
 | 
				
			||||||
 | 
					CONFIG_NF_CONNTRACK_H323=m
 | 
				
			||||||
 | 
					CONFIG_NF_CONNTRACK_IRC=m
 | 
				
			||||||
 | 
					CONFIG_NF_CONNTRACK_BROADCAST=m
 | 
				
			||||||
 | 
					CONFIG_NF_CONNTRACK_NETBIOS_NS=m
 | 
				
			||||||
 | 
					CONFIG_NF_CONNTRACK_SNMP=m
 | 
				
			||||||
 | 
					CONFIG_NF_CONNTRACK_PPTP=m
 | 
				
			||||||
 | 
					CONFIG_NF_CONNTRACK_SANE=m
 | 
				
			||||||
 | 
					CONFIG_NF_CONNTRACK_SIP=m
 | 
				
			||||||
 | 
					CONFIG_NF_CONNTRACK_TFTP=m
 | 
				
			||||||
 | 
					CONFIG_NF_CT_NETLINK=m
 | 
				
			||||||
 | 
					CONFIG_NF_CT_NETLINK_TIMEOUT=m
 | 
				
			||||||
 | 
					CONFIG_NF_CT_NETLINK_HELPER=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_NETLINK_GLUE_CT=y
 | 
				
			||||||
 | 
					CONFIG_NF_NAT=m
 | 
				
			||||||
 | 
					CONFIG_NF_NAT_AMANDA=m
 | 
				
			||||||
 | 
					CONFIG_NF_NAT_FTP=m
 | 
				
			||||||
 | 
					CONFIG_NF_NAT_IRC=m
 | 
				
			||||||
 | 
					CONFIG_NF_NAT_SIP=m
 | 
				
			||||||
 | 
					CONFIG_NF_NAT_TFTP=m
 | 
				
			||||||
 | 
					CONFIG_NF_NAT_REDIRECT=y
 | 
				
			||||||
 | 
					CONFIG_NF_NAT_MASQUERADE=y
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_SYNPROXY=m
 | 
				
			||||||
 | 
					CONFIG_NF_TABLES=m
 | 
				
			||||||
 | 
					CONFIG_NF_TABLES_INET=y
 | 
				
			||||||
 | 
					CONFIG_NF_TABLES_NETDEV=y
 | 
				
			||||||
 | 
					CONFIG_NFT_NUMGEN=m
 | 
				
			||||||
 | 
					CONFIG_NFT_CT=m
 | 
				
			||||||
 | 
					CONFIG_NFT_FLOW_OFFLOAD=m
 | 
				
			||||||
 | 
					CONFIG_NFT_CONNLIMIT=m
 | 
				
			||||||
 | 
					CONFIG_NFT_LOG=m
 | 
				
			||||||
 | 
					CONFIG_NFT_LIMIT=m
 | 
				
			||||||
 | 
					CONFIG_NFT_MASQ=m
 | 
				
			||||||
 | 
					CONFIG_NFT_REDIR=m
 | 
				
			||||||
 | 
					CONFIG_NFT_NAT=m
 | 
				
			||||||
 | 
					CONFIG_NFT_TUNNEL=m
 | 
				
			||||||
 | 
					CONFIG_NFT_OBJREF=m
 | 
				
			||||||
 | 
					CONFIG_NFT_QUEUE=m
 | 
				
			||||||
 | 
					CONFIG_NFT_QUOTA=m
 | 
				
			||||||
 | 
					CONFIG_NFT_REJECT=m
 | 
				
			||||||
 | 
					CONFIG_NFT_REJECT_INET=m
 | 
				
			||||||
 | 
					CONFIG_NFT_COMPAT=m
 | 
				
			||||||
 | 
					CONFIG_NFT_HASH=m
 | 
				
			||||||
 | 
					CONFIG_NFT_FIB=m
 | 
				
			||||||
 | 
					CONFIG_NFT_FIB_INET=m
 | 
				
			||||||
 | 
					CONFIG_NFT_XFRM=m
 | 
				
			||||||
 | 
					CONFIG_NFT_SOCKET=m
 | 
				
			||||||
 | 
					CONFIG_NFT_OSF=m
 | 
				
			||||||
 | 
					CONFIG_NFT_TPROXY=m
 | 
				
			||||||
 | 
					CONFIG_NFT_SYNPROXY=m
 | 
				
			||||||
 | 
					CONFIG_NF_DUP_NETDEV=m
 | 
				
			||||||
 | 
					CONFIG_NFT_DUP_NETDEV=m
 | 
				
			||||||
 | 
					CONFIG_NFT_FWD_NETDEV=m
 | 
				
			||||||
 | 
					CONFIG_NFT_FIB_NETDEV=m
 | 
				
			||||||
 | 
					CONFIG_NFT_REJECT_NETDEV=m
 | 
				
			||||||
 | 
					CONFIG_NF_FLOW_TABLE_INET=m
 | 
				
			||||||
 | 
					CONFIG_NF_FLOW_TABLE=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XTABLES=y
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Xtables combined modules
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MARK=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_CONNMARK=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_SET=m
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Xtables targets
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_TARGET_AUDIT=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_TARGET_CT=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_TARGET_DSCP=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_TARGET_HL=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_TARGET_HMARK=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_TARGET_LED=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_TARGET_LOG=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_TARGET_MARK=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_NAT=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_TARGET_NETMAP=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_TARGET_NFLOG=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
 | 
				
			||||||
 | 
					# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_TARGET_RATEEST=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_TARGET_REDIRECT=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_TARGET_MASQUERADE=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_TARGET_TEE=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_TARGET_TPROXY=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_TARGET_TRACE=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Xtables matches
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_BPF=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_CGROUP=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_COMMENT=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_CPU=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_DCCP=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_DSCP=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_ECN=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_ESP=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_HELPER=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_HL=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_IPCOMP=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_IPVS=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_L2TP=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_LENGTH=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_LIMIT=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_MAC=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_MARK=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_NFACCT=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_OSF=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_OWNER=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_POLICY=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_QUOTA=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_RATEEST=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_REALM=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_RECENT=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_SCTP=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_SOCKET=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_STATE=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_STRING=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_TIME=m
 | 
				
			||||||
 | 
					CONFIG_NETFILTER_XT_MATCH_U32=m
 | 
				
			||||||
 | 
					# end of Core Netfilter Configuration
 | 
				
			||||||
							
								
								
									
										13
									
								
								machines/nat/m1-support/kernel/default-pagesize-16k.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								machines/nat/m1-support/kernel/default-pagesize-16k.patch
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
 | 
				
			||||||
 | 
					index a1eb6572ecd2..b94fbd9b3d70 100644
 | 
				
			||||||
 | 
					--- a/arch/arm64/Kconfig
 | 
				
			||||||
 | 
					+++ b/arch/arm64/Kconfig
 | 
				
			||||||
 | 
					@@ -1036,7 +1036,7 @@ endmenu
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 choice
 | 
				
			||||||
 | 
					 	prompt "Page size"
 | 
				
			||||||
 | 
					-	default ARM64_4K_PAGES
 | 
				
			||||||
 | 
					+	default ARM64_16K_PAGES
 | 
				
			||||||
 | 
					 	help
 | 
				
			||||||
 | 
					 	  Page size (translation granule) configuration.
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
							
								
								
									
										62
									
								
								machines/nat/m1-support/kernel/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								machines/nat/m1-support/kernel/default.nix
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,62 @@
 | 
				
			|||||||
 | 
					# the Asahi Linux kernel and options that must go along with it
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{ config, pkgs, lib, ... }:
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  config = {
 | 
				
			||||||
 | 
					    boot.kernelPackages = pkgs.callPackage ./package.nix {
 | 
				
			||||||
 | 
					      crossBuild = config.boot.kernelBuildIsCross;
 | 
				
			||||||
 | 
					      _16KBuild = config.boot.kernelBuildIs16K;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # we definitely want to use CONFIG_ENERGY_MODEL, and
 | 
				
			||||||
 | 
					    # schedutil is a prerequisite for using it
 | 
				
			||||||
 | 
					    # source: https://www.kernel.org/doc/html/latest/scheduler/sched-energy.html
 | 
				
			||||||
 | 
					    powerManagement.cpuFreqGovernor = lib.mkOverride 800 "schedutil";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # our kernel config is weird and doesn't really have any modules
 | 
				
			||||||
 | 
					    # remove?
 | 
				
			||||||
 | 
					    # boot.initrd.availableKernelModules = lib.mkForce [];
 | 
				
			||||||
 | 
					    boot.initrd.availableKernelModules = lib.mkForce [ "dm_crypt" ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    boot.kernelParams = [
 | 
				
			||||||
 | 
					      "earlycon"
 | 
				
			||||||
 | 
					      "console=ttySAC0,1500000"
 | 
				
			||||||
 | 
					      "console=tty0"
 | 
				
			||||||
 | 
					      "boot.shell_on_fail"
 | 
				
			||||||
 | 
					      # Apple's SSDs are slow (~dozens of ms) at processing flush requests which
 | 
				
			||||||
 | 
					      # slows down programs that make a lot of fsync calls. This parameter sets
 | 
				
			||||||
 | 
					      # a delay in ms before actually flushing so that such requests can be
 | 
				
			||||||
 | 
					      # coalesced. Be warned that increasing this parameter above zero (default
 | 
				
			||||||
 | 
					      # is 1000) has the potential, though admittedly unlikely, risk of
 | 
				
			||||||
 | 
					      # UNBOUNDED data corruption in case of power loss!!!! Don't even think
 | 
				
			||||||
 | 
					      # about it on desktops!!
 | 
				
			||||||
 | 
					      "nvme_apple.flush_interval=1000"
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # U-Boot does not support EFI variables
 | 
				
			||||||
 | 
					    boot.loader.efi.canTouchEfiVariables = lib.mkForce false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # GRUB has to be installed as removable if the user chooses to use it
 | 
				
			||||||
 | 
					    boot.loader.grub = lib.mkDefault {
 | 
				
			||||||
 | 
					      version = 2;
 | 
				
			||||||
 | 
					      efiSupport = true;
 | 
				
			||||||
 | 
					      efiInstallAsRemovable = true;
 | 
				
			||||||
 | 
					      device = "nodev";
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  options.boot.kernelBuildIsCross = lib.mkOption {
 | 
				
			||||||
 | 
					    type = lib.types.bool;
 | 
				
			||||||
 | 
					    default = false;
 | 
				
			||||||
 | 
					    description = "Set that the Asahi Linux kernel should be cross-compiled.";
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  options.boot.kernelBuildIs16K = lib.mkOption {
 | 
				
			||||||
 | 
					    type = lib.types.bool;
 | 
				
			||||||
 | 
					    default = true;
 | 
				
			||||||
 | 
					    description = ''
 | 
				
			||||||
 | 
					      Set that the Asahi Linux kernel should be built with 16K pages and various
 | 
				
			||||||
 | 
					      software patched to be compatible. Some software may still be broken.
 | 
				
			||||||
 | 
					    '';
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										67
									
								
								machines/nat/m1-support/kernel/package.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								machines/nat/m1-support/kernel/package.nix
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,67 @@
 | 
				
			|||||||
 | 
					{ pkgs, crossBuild ? false, _16KBuild ? false }: let
 | 
				
			||||||
 | 
					  buildPkgs = if crossBuild then
 | 
				
			||||||
 | 
					    import (pkgs.path) {
 | 
				
			||||||
 | 
					      system = "x86_64-linux";
 | 
				
			||||||
 | 
					      crossSystem.system = "aarch64-linux";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  else pkgs;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # we do this so the config can be read on any system and not affect
 | 
				
			||||||
 | 
					  # the output hash
 | 
				
			||||||
 | 
					  localPkgs = import (pkgs.path) { system = "aarch64-linux"; };
 | 
				
			||||||
 | 
					  readConfig = configfile: import (localPkgs.runCommand "config.nix" {} ''
 | 
				
			||||||
 | 
					    echo "{" > "$out"
 | 
				
			||||||
 | 
					    while IFS='=' read key val; do
 | 
				
			||||||
 | 
					      [ "x''${key#CONFIG_}" != "x$key" ] || continue
 | 
				
			||||||
 | 
					      no_firstquote="''${val#\"}";
 | 
				
			||||||
 | 
					      echo '  "'"$key"'" = "'"''${no_firstquote%\"}"'";' >> "$out"
 | 
				
			||||||
 | 
					    done < "${configfile}"
 | 
				
			||||||
 | 
					    echo "}" >> $out
 | 
				
			||||||
 | 
					  '').outPath;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  linux_asahi_pkg = { stdenv, lib, fetchFromGitHub, fetchpatch, linuxKernel, ... } @ args:
 | 
				
			||||||
 | 
					    linuxKernel.manualConfig rec {
 | 
				
			||||||
 | 
					      inherit stdenv lib;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      version = "5.19.0-rc7-asahi";
 | 
				
			||||||
 | 
					      modDirVersion = version;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      src = fetchFromGitHub {
 | 
				
			||||||
 | 
					        # tracking branch: https://github.com/AsahiLinux/linux/tree/asahi
 | 
				
			||||||
 | 
					        owner = "AsahiLinux";
 | 
				
			||||||
 | 
					        repo = "linux";
 | 
				
			||||||
 | 
					        rev = "c7d02d6615a5fb4afefd3084fce93d86e5fb184d";
 | 
				
			||||||
 | 
					        hash = "sha256-sed405+6L5U7S+Na2DNLGPNTNf3tv96LjK3CimeRjNU=";
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      kernelPatches = [
 | 
				
			||||||
 | 
					      ] ++ lib.optionals (!_16KBuild) [
 | 
				
			||||||
 | 
					        # thanks to Sven Peter
 | 
				
			||||||
 | 
					        # https://lore.kernel.org/linux-iommu/20211019163737.46269-1-sven@svenpeter.dev/
 | 
				
			||||||
 | 
					        { name = "sven-iommu-4k";
 | 
				
			||||||
 | 
					          patch = ./sven-iommu-4k.patch;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      ] ++ lib.optionals _16KBuild [
 | 
				
			||||||
 | 
					        # patch the kernel to set the default size to 16k so we don't need to
 | 
				
			||||||
 | 
					        # convert our config to the nixos infrastructure or patch it and thus
 | 
				
			||||||
 | 
					        # introduce a dependency on the host system architecture
 | 
				
			||||||
 | 
					        { name = "default-pagesize-16k";
 | 
				
			||||||
 | 
					          patch = ./default-pagesize-16k.patch;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      configfile = ./config;
 | 
				
			||||||
 | 
					      config = readConfig configfile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      extraMeta.branch = "5.19";
 | 
				
			||||||
 | 
					    } // (args.argsOverride or {});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  linux_asahi = (buildPkgs.callPackage linux_asahi_pkg { }).overrideAttrs (o: {
 | 
				
			||||||
 | 
					    # use 5.19 suitable randstruct seed patch
 | 
				
			||||||
 | 
					    # to be removed when https://github.com/NixOS/nixpkgs/pull/180750 is
 | 
				
			||||||
 | 
					    # accepted and percolates through
 | 
				
			||||||
 | 
					    patches = (builtins.filter
 | 
				
			||||||
 | 
					      (v: (pkgs.lib.hasInfix "randstruct" (builtins.path { path = v; })) != true)
 | 
				
			||||||
 | 
					      o.patches) ++ [ ./randstruct-provide-seed-5.19.patch ];
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					in buildPkgs.recurseIntoAttrs (buildPkgs.linuxPackagesFor linux_asahi)
 | 
				
			||||||
@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					diff --git a/scripts/gen-randstruct-seed.sh b/scripts/gen-randstruct-seed.sh
 | 
				
			||||||
 | 
					index 61017b36c464..7bb494dd2e18 100755
 | 
				
			||||||
 | 
					--- a/scripts/gen-randstruct-seed.sh
 | 
				
			||||||
 | 
					+++ b/scripts/gen-randstruct-seed.sh
 | 
				
			||||||
 | 
					@@ -1,7 +1,7 @@
 | 
				
			||||||
 | 
					 #!/bin/sh
 | 
				
			||||||
 | 
					 # SPDX-License-Identifier: GPL-2.0
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-SEED=$(od -A n -t x8 -N 32 /dev/urandom | tr -d ' \n')
 | 
				
			||||||
 | 
					+SEED="NIXOS_RANDSTRUCT_SEED"
 | 
				
			||||||
 | 
					 echo "$SEED" > "$1"
 | 
				
			||||||
 | 
					 HASH=$(echo -n "$SEED" | sha256sum | cut -d" " -f1)
 | 
				
			||||||
 | 
					 echo "#define RANDSTRUCT_HASHED_SEED \"$HASH\"" > "$2"
 | 
				
			||||||
							
								
								
									
										449
									
								
								machines/nat/m1-support/kernel/sven-iommu-4k.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										449
									
								
								machines/nat/m1-support/kernel/sven-iommu-4k.patch
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,449 @@
 | 
				
			|||||||
 | 
					diff --git a/drivers/iommu/apple-dart.c b/drivers/iommu/apple-dart.c
 | 
				
			||||||
 | 
					index 4f1a37bdd42d..c8c3ea81d818 100644
 | 
				
			||||||
 | 
					--- a/drivers/iommu/apple-dart.c
 | 
				
			||||||
 | 
					+++ b/drivers/iommu/apple-dart.c
 | 
				
			||||||
 | 
					@@ -97,7 +97,6 @@ struct apple_dart_hw {
 | 
				
			||||||
 | 
					  * @lock: lock for hardware operations involving this dart
 | 
				
			||||||
 | 
					  * @pgsize: pagesize supported by this DART
 | 
				
			||||||
 | 
					  * @supports_bypass: indicates if this DART supports bypass mode
 | 
				
			||||||
 | 
					- * @force_bypass: force bypass mode due to pagesize mismatch?
 | 
				
			||||||
 | 
					  * @sid2group: maps stream ids to iommu_groups
 | 
				
			||||||
 | 
					  * @iommu: iommu core device
 | 
				
			||||||
 | 
					  */
 | 
				
			||||||
 | 
					@@ -115,7 +114,6 @@ struct apple_dart {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 	u32 pgsize;
 | 
				
			||||||
 | 
					 	u32 supports_bypass : 1;
 | 
				
			||||||
 | 
					-	u32 force_bypass : 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 	struct iommu_group *sid2group[DART_MAX_STREAMS];
 | 
				
			||||||
 | 
					 	struct iommu_device iommu;
 | 
				
			||||||
 | 
					@@ -499,9 +497,6 @@ static int apple_dart_attach_dev(struct iommu_domain *domain,
 | 
				
			||||||
 | 
					 	struct apple_dart_master_cfg *cfg = dev_iommu_priv_get(dev);
 | 
				
			||||||
 | 
					 	struct apple_dart_domain *dart_domain = to_dart_domain(domain);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-	if (cfg->stream_maps[0].dart->force_bypass &&
 | 
				
			||||||
 | 
					-	    domain->type != IOMMU_DOMAIN_IDENTITY)
 | 
				
			||||||
 | 
					-		return -EINVAL;
 | 
				
			||||||
 | 
					 	if (!cfg->stream_maps[0].dart->supports_bypass &&
 | 
				
			||||||
 | 
					 	    domain->type == IOMMU_DOMAIN_IDENTITY)
 | 
				
			||||||
 | 
					 		return -EINVAL;
 | 
				
			||||||
 | 
					@@ -630,8 +625,6 @@ static int apple_dart_of_xlate(struct device *dev, struct of_phandle_args *args)
 | 
				
			||||||
 | 
					 	if (cfg_dart) {
 | 
				
			||||||
 | 
					 		if (cfg_dart->supports_bypass != dart->supports_bypass)
 | 
				
			||||||
 | 
					 			return -EINVAL;
 | 
				
			||||||
 | 
					-		if (cfg_dart->force_bypass != dart->force_bypass)
 | 
				
			||||||
 | 
					-			return -EINVAL;
 | 
				
			||||||
 | 
					 		if (cfg_dart->pgsize != dart->pgsize)
 | 
				
			||||||
 | 
					 			return -EINVAL;
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					@@ -736,8 +729,6 @@ static int apple_dart_def_domain_type(struct device *dev)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	struct apple_dart_master_cfg *cfg = dev_iommu_priv_get(dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-	if (cfg->stream_maps[0].dart->force_bypass)
 | 
				
			||||||
 | 
					-		return IOMMU_DOMAIN_IDENTITY;
 | 
				
			||||||
 | 
					 	if (!cfg->stream_maps[0].dart->supports_bypass)
 | 
				
			||||||
 | 
					 		return IOMMU_DOMAIN_DMA;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@@ -1121,8 +1121,6 @@ static int apple_dart_probe(struct platform_device *pdev)
 | 
				
			||||||
 | 
					 		goto err_clk_disable;
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-	dart->force_bypass = dart->pgsize > PAGE_SIZE;
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
 | 
					 	ret = apple_dart_hw_reset(dart);
 | 
				
			||||||
 | 
					 	if (ret)
 | 
				
			||||||
 | 
					 		goto err_clk_disable;
 | 
				
			||||||
 | 
					@@ -1149,8 +1147,8 @@ static int apple_dart_probe(struct platform_device *pdev)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 	dev_info(
 | 
				
			||||||
 | 
					 		&pdev->dev,
 | 
				
			||||||
 | 
					-		"DART [pagesize %x, %d streams, bypass support: %d, bypass forced: %d] initialized\n",
 | 
				
			||||||
 | 
					-		dart->pgsize, dart->num_streams, dart->supports_bypass, dart->force_bypass);
 | 
				
			||||||
 | 
					+		"DART [pagesize %x, %d streams, bypass support: %d] initialized\n",
 | 
				
			||||||
 | 
					+		dart->pgsize, dart->num_streams, dart->supports_bypass);
 | 
				
			||||||
 | 
					 	return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 err_sysfs_remove:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c
 | 
				
			||||||
 | 
					index 09f6e1c0f9c0..094592751cfa 100644
 | 
				
			||||||
 | 
					--- a/drivers/iommu/dma-iommu.c
 | 
				
			||||||
 | 
					+++ b/drivers/iommu/dma-iommu.c
 | 
				
			||||||
 | 
					@@ -20,9 +20,11 @@
 | 
				
			||||||
 | 
					 #include <linux/iommu.h>
 | 
				
			||||||
 | 
					 #include <linux/iova.h>
 | 
				
			||||||
 | 
					 #include <linux/irq.h>
 | 
				
			||||||
 | 
					+#include <linux/kernel.h>
 | 
				
			||||||
 | 
					 #include <linux/list_sort.h>
 | 
				
			||||||
 | 
					 #include <linux/mm.h>
 | 
				
			||||||
 | 
					 #include <linux/mutex.h>
 | 
				
			||||||
 | 
					+#include <linux/pfn.h>
 | 
				
			||||||
 | 
					 #include <linux/pci.h>
 | 
				
			||||||
 | 
					 #include <linux/scatterlist.h>
 | 
				
			||||||
 | 
					 #include <linux/spinlock.h>
 | 
				
			||||||
 | 
					@@ -710,6 +712,9 @@ static struct page **__iommu_dma_alloc_pages(struct device *dev,
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	struct page **pages;
 | 
				
			||||||
 | 
					 	unsigned int i = 0, nid = dev_to_node(dev);
 | 
				
			||||||
 | 
					+	unsigned int j;
 | 
				
			||||||
 | 
					+	unsigned long min_order = __fls(order_mask);
 | 
				
			||||||
 | 
					+	unsigned int min_order_size = 1U << min_order;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 	order_mask &= (2U << MAX_ORDER) - 1;
 | 
				
			||||||
 | 
					 	if (!order_mask)
 | 
				
			||||||
 | 
					@@ -749,15 +754,37 @@ static struct page **__iommu_dma_alloc_pages(struct device *dev,
 | 
				
			||||||
 | 
					 				split_page(page, order);
 | 
				
			||||||
 | 
					 			break;
 | 
				
			||||||
 | 
					 		}
 | 
				
			||||||
 | 
					-		if (!page) {
 | 
				
			||||||
 | 
					-			__iommu_dma_free_pages(pages, i);
 | 
				
			||||||
 | 
					-			return NULL;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		/*
 | 
				
			||||||
 | 
					+		 * If we have no valid page here we might be trying to allocate
 | 
				
			||||||
 | 
					+		 * the last block consisting of 1<<order pages (to guarantee
 | 
				
			||||||
 | 
					+		 * alignment) but actually need less pages than that.
 | 
				
			||||||
 | 
					+		 * In that case we just try to allocate the entire block and
 | 
				
			||||||
 | 
					+		 * directly free the spillover pages again.
 | 
				
			||||||
 | 
					+		 */
 | 
				
			||||||
 | 
					+		if (!page && !order_mask && count < min_order_size) {
 | 
				
			||||||
 | 
					+			page = alloc_pages_node(nid, gfp, min_order);
 | 
				
			||||||
 | 
					+			if (!page)
 | 
				
			||||||
 | 
					+				goto free_pages;
 | 
				
			||||||
 | 
					+			split_page(page, min_order);
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+			for (j = count; j < min_order_size; ++j)
 | 
				
			||||||
 | 
					+				__free_page(page + j);
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+			order_size = count;
 | 
				
			||||||
 | 
					 		}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		if (!page)
 | 
				
			||||||
 | 
					+			goto free_pages;
 | 
				
			||||||
 | 
					 		count -= order_size;
 | 
				
			||||||
 | 
					 		while (order_size--)
 | 
				
			||||||
 | 
					 			pages[i++] = page++;
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					 	return pages;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+free_pages:
 | 
				
			||||||
 | 
					+	__iommu_dma_free_pages(pages, i);
 | 
				
			||||||
 | 
					+	return NULL;
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /*
 | 
				
			||||||
 | 
					@@ -785,16 +787,28 @@ static struct page **__iommu_dma_alloc_noncontiguous(struct device *dev,
 | 
				
			||||||
 | 
					 	bool coherent = dev_is_dma_coherent(dev);
 | 
				
			||||||
 | 
					 	int ioprot = dma_info_to_prot(DMA_BIDIRECTIONAL, coherent, attrs);
 | 
				
			||||||
 | 
					 	unsigned int count, min_size, alloc_sizes = domain->pgsize_bitmap;
 | 
				
			||||||
 | 
					+	struct sg_append_table sgt_append = {};
 | 
				
			||||||
 | 
					+	struct scatterlist *last_sg;
 | 
				
			||||||
 | 
					 	struct page **pages;
 | 
				
			||||||
 | 
					 	dma_addr_t iova;
 | 
				
			||||||
 | 
					 	ssize_t ret;
 | 
				
			||||||
 | 
					+	phys_addr_t orig_s_phys;
 | 
				
			||||||
 | 
					+	size_t orig_s_len, orig_s_off, s_iova_off, iova_size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 	if (static_branch_unlikely(&iommu_deferred_attach_enabled) &&
 | 
				
			||||||
 | 
					 	    iommu_deferred_attach(dev, domain))
 | 
				
			||||||
 | 
					 		return NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 	min_size = alloc_sizes & -alloc_sizes;
 | 
				
			||||||
 | 
					-	if (min_size < PAGE_SIZE) {
 | 
				
			||||||
 | 
					+	if (iovad->granule > PAGE_SIZE) {
 | 
				
			||||||
 | 
					+		if (size < iovad->granule) {
 | 
				
			||||||
 | 
					+			/* ensure a single contiguous allocation */
 | 
				
			||||||
 | 
					+			min_size = ALIGN(size, PAGE_SIZE*(1U<<get_order(size)));
 | 
				
			||||||
 | 
					+			alloc_sizes = min_size;
 | 
				
			||||||
 | 
					+		}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+		size = PAGE_ALIGN(size);
 | 
				
			||||||
 | 
					+	} else if (min_size < PAGE_SIZE) {
 | 
				
			||||||
 | 
					 		min_size = PAGE_SIZE;
 | 
				
			||||||
 | 
					 		alloc_sizes |= PAGE_SIZE;
 | 
				
			||||||
 | 
					 	} else {
 | 
				
			||||||
 | 
					@@ -797,13 +836,17 @@ static struct page **__iommu_dma_alloc_noncontiguous(struct device *dev,
 | 
				
			||||||
 | 
					 	if (!pages)
 | 
				
			||||||
 | 
					 		return NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-	size = iova_align(iovad, size);
 | 
				
			||||||
 | 
					-	iova = iommu_dma_alloc_iova(domain, size, dev->coherent_dma_mask, dev);
 | 
				
			||||||
 | 
					+	iova_size = iova_align(iovad, size);
 | 
				
			||||||
 | 
					+	iova = iommu_dma_alloc_iova(domain, iova_size, dev->coherent_dma_mask, dev);
 | 
				
			||||||
 | 
					 	if (!iova)
 | 
				
			||||||
 | 
					 		goto out_free_pages;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-	if (sg_alloc_table_from_pages(sgt, pages, count, 0, size, GFP_KERNEL))
 | 
				
			||||||
 | 
					+	/* append_table is only used to get a pointer to the last entry */
 | 
				
			||||||
 | 
					+	if (sg_alloc_append_table_from_pages(&sgt_append, pages, count, 0,
 | 
				
			||||||
 | 
					+					iova_size, UINT_MAX, 0, GFP_KERNEL))
 | 
				
			||||||
 | 
					 		goto out_free_iova;
 | 
				
			||||||
 | 
					+	memcpy(sgt, &sgt_append.sgt, sizeof(*sgt));
 | 
				
			||||||
 | 
					+	last_sg = sgt_append.prv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 	if (!(ioprot & IOMMU_CACHE)) {
 | 
				
			||||||
 | 
					 		struct scatterlist *sg;
 | 
				
			||||||
 | 
					@@ -825,18 +839,59 @@ static struct page **__iommu_dma_alloc_noncontiguous(struct device *dev,
 | 
				
			||||||
 | 
					 			arch_dma_prep_coherent(sg_page(sg), sg->length);
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					+	if (iovad->granule > PAGE_SIZE) {
 | 
				
			||||||
 | 
					+		if (size < iovad->granule) {
 | 
				
			||||||
 | 
					+			/*
 | 
				
			||||||
 | 
					+			 * we only have a single sg list entry here that is
 | 
				
			||||||
 | 
					+			 * likely not aligned to iovad->granule. adjust the
 | 
				
			||||||
 | 
					+			 * entry to represent the encapsulating IOMMU page
 | 
				
			||||||
 | 
					+			 * and then later restore everything to its original
 | 
				
			||||||
 | 
					+			 * values, similar to the impedance matching done in
 | 
				
			||||||
 | 
					+			 * iommu_dma_map_sg.
 | 
				
			||||||
 | 
					+			 */
 | 
				
			||||||
 | 
					+			orig_s_phys = sg_phys(sgt->sgl);
 | 
				
			||||||
 | 
					+			orig_s_len = sgt->sgl->length;
 | 
				
			||||||
 | 
					+			orig_s_off = sgt->sgl->offset;
 | 
				
			||||||
 | 
					+			s_iova_off = iova_offset(iovad, orig_s_phys);
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+			sg_set_page(sgt->sgl,
 | 
				
			||||||
 | 
					+				pfn_to_page(PHYS_PFN(orig_s_phys - s_iova_off)),
 | 
				
			||||||
 | 
					+				iova_align(iovad, orig_s_len + s_iova_off),
 | 
				
			||||||
 | 
					+				sgt->sgl->offset & ~s_iova_off);
 | 
				
			||||||
 | 
					+		} else {
 | 
				
			||||||
 | 
					+			/*
 | 
				
			||||||
 | 
					+			 * convince iommu_map_sg_atomic to map the last block
 | 
				
			||||||
 | 
					+			 * even though it may be too small.
 | 
				
			||||||
 | 
					+			 */
 | 
				
			||||||
 | 
					+			orig_s_len = last_sg->length;
 | 
				
			||||||
 | 
					+			last_sg->length = iova_align(iovad, last_sg->length);
 | 
				
			||||||
 | 
					+		}
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 	ret = iommu_map_sg_atomic(domain, iova, sgt->sgl, sgt->orig_nents, ioprot);
 | 
				
			||||||
 | 
					-	if (ret < 0 || ret < size)
 | 
				
			||||||
 | 
					+	if (ret < 0 || ret < iova_size)
 | 
				
			||||||
 | 
					 		goto out_free_sg;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					+	if (iovad->granule > PAGE_SIZE) {
 | 
				
			||||||
 | 
					+		if (size < iovad->granule) {
 | 
				
			||||||
 | 
					+			sg_set_page(sgt->sgl,
 | 
				
			||||||
 | 
					+				pfn_to_page(PHYS_PFN(orig_s_phys)),
 | 
				
			||||||
 | 
					+				orig_s_len, orig_s_off);
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+			iova += s_iova_off;
 | 
				
			||||||
 | 
					+		} else {
 | 
				
			||||||
 | 
					+			last_sg->length = orig_s_len;
 | 
				
			||||||
 | 
					+		}
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 	sgt->sgl->dma_address = iova;
 | 
				
			||||||
 | 
					-	sgt->sgl->dma_length = size;
 | 
				
			||||||
 | 
					+	sgt->sgl->dma_length = iova_size;
 | 
				
			||||||
 | 
					 	return pages;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 out_free_sg:
 | 
				
			||||||
 | 
					 	sg_free_table(sgt);
 | 
				
			||||||
 | 
					 out_free_iova:
 | 
				
			||||||
 | 
					-	iommu_dma_free_iova(cookie, iova, size, NULL);
 | 
				
			||||||
 | 
					+	iommu_dma_free_iova(cookie, iova, iova_size, NULL);
 | 
				
			||||||
 | 
					 out_free_pages:
 | 
				
			||||||
 | 
					 	__iommu_dma_free_pages(pages, count);
 | 
				
			||||||
 | 
					 	return NULL;
 | 
				
			||||||
 | 
					@@ -1040,8 +1124,9 @@ static int __finalise_sg(struct device *dev, struct scatterlist *sg, int nents,
 | 
				
			||||||
 | 
					 		unsigned int s_length = sg_dma_len(s);
 | 
				
			||||||
 | 
					 		unsigned int s_iova_len = s->length;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-		s->offset += s_iova_off;
 | 
				
			||||||
 | 
					-		s->length = s_length;
 | 
				
			||||||
 | 
					+		sg_set_page(s,
 | 
				
			||||||
 | 
					+			    pfn_to_page(PHYS_PFN(sg_phys(s) + s_iova_off)),
 | 
				
			||||||
 | 
					+			    s_length, s_iova_off & ~PAGE_MASK);
 | 
				
			||||||
 | 
					 		sg_dma_address(s) = DMA_MAPPING_ERROR;
 | 
				
			||||||
 | 
					 		sg_dma_len(s) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@@ -1082,13 +1167,17 @@ static int __finalise_sg(struct device *dev, struct scatterlist *sg, int nents,
 | 
				
			||||||
 | 
					 static void __invalidate_sg(struct scatterlist *sg, int nents)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	struct scatterlist *s;
 | 
				
			||||||
 | 
					+	phys_addr_t orig_paddr;
 | 
				
			||||||
 | 
					 	int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 	for_each_sg(sg, s, nents, i) {
 | 
				
			||||||
 | 
					-		if (sg_dma_address(s) != DMA_MAPPING_ERROR)
 | 
				
			||||||
 | 
					-			s->offset += sg_dma_address(s);
 | 
				
			||||||
 | 
					-		if (sg_dma_len(s))
 | 
				
			||||||
 | 
					-			s->length = sg_dma_len(s);
 | 
				
			||||||
 | 
					+		if (sg_dma_len(s)) {
 | 
				
			||||||
 | 
					+			orig_paddr = sg_phys(s) + sg_dma_address(s);
 | 
				
			||||||
 | 
					+			sg_set_page(s,
 | 
				
			||||||
 | 
					+				    pfn_to_page(PHYS_PFN(orig_paddr)),
 | 
				
			||||||
 | 
					+				    sg_dma_len(s),
 | 
				
			||||||
 | 
					+				    sg_dma_address(s) & ~PAGE_MASK);
 | 
				
			||||||
 | 
					+		}
 | 
				
			||||||
 | 
					 		sg_dma_address(s) = DMA_MAPPING_ERROR;
 | 
				
			||||||
 | 
					 		sg_dma_len(s) = 0;
 | 
				
			||||||
 | 
					 	}
 | 
				
			||||||
 | 
					@@ -1166,15 +1255,16 @@ static int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg,
 | 
				
			||||||
 | 
					 	 * stashing the unaligned parts in the as-yet-unused DMA fields.
 | 
				
			||||||
 | 
					 	 */
 | 
				
			||||||
 | 
					 	for_each_sg(sg, s, nents, i) {
 | 
				
			||||||
 | 
					-		size_t s_iova_off = iova_offset(iovad, s->offset);
 | 
				
			||||||
 | 
					+		phys_addr_t s_phys = sg_phys(s);
 | 
				
			||||||
 | 
					+		size_t s_iova_off = iova_offset(iovad, s_phys);
 | 
				
			||||||
 | 
					 		size_t s_length = s->length;
 | 
				
			||||||
 | 
					 		size_t pad_len = (mask - iova_len + 1) & mask;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 		sg_dma_address(s) = s_iova_off;
 | 
				
			||||||
 | 
					 		sg_dma_len(s) = s_length;
 | 
				
			||||||
 | 
					-		s->offset -= s_iova_off;
 | 
				
			||||||
 | 
					 		s_length = iova_align(iovad, s_length + s_iova_off);
 | 
				
			||||||
 | 
					-		s->length = s_length;
 | 
				
			||||||
 | 
					+		sg_set_page(s, pfn_to_page(PHYS_PFN(s_phys - s_iova_off)),
 | 
				
			||||||
 | 
					+			    s_length, s->offset & ~s_iova_off);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 		/*
 | 
				
			||||||
 | 
					 		 * Due to the alignment of our single IOVA allocation, we can
 | 
				
			||||||
 | 
					@@ -1412,9 +1502,15 @@ static int iommu_dma_get_sgtable(struct device *dev, struct sg_table *sgt,
 | 
				
			||||||
 | 
					 		void *cpu_addr, dma_addr_t dma_addr, size_t size,
 | 
				
			||||||
 | 
					 		unsigned long attrs)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					+	struct iommu_domain *domain = iommu_get_dma_domain(dev);
 | 
				
			||||||
 | 
					+	struct iommu_dma_cookie *cookie = domain->iova_cookie;
 | 
				
			||||||
 | 
					+	struct iova_domain *iovad = &cookie->iovad;
 | 
				
			||||||
 | 
					 	struct page *page;
 | 
				
			||||||
 | 
					 	int ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					+	if (iovad->granule > PAGE_SIZE)
 | 
				
			||||||
 | 
					+		return -ENXIO;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 	if (is_vmalloc_addr(cpu_addr)) {
 | 
				
			||||||
 | 
					 		struct page **pages = dma_common_find_pages(cpu_addr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
 | 
				
			||||||
 | 
					index f2c45b85b9fc..0c370e486d6e 100644
 | 
				
			||||||
 | 
					--- a/drivers/iommu/iommu.c
 | 
				
			||||||
 | 
					+++ b/drivers/iommu/iommu.c
 | 
				
			||||||
 | 
					@@ -80,6 +80,8 @@ static struct iommu_domain *__iommu_domain_alloc(struct bus_type *bus,
 | 
				
			||||||
 | 
					 						 unsigned type);
 | 
				
			||||||
 | 
					 static int __iommu_attach_device(struct iommu_domain *domain,
 | 
				
			||||||
 | 
					 				 struct device *dev);
 | 
				
			||||||
 | 
					+static void __iommu_detach_device(struct iommu_domain *domain,
 | 
				
			||||||
 | 
					+				  struct device *dev);
 | 
				
			||||||
 | 
					 static int __iommu_attach_group(struct iommu_domain *domain,
 | 
				
			||||||
 | 
					 				struct iommu_group *group);
 | 
				
			||||||
 | 
					 static void __iommu_detach_group(struct iommu_domain *domain,
 | 
				
			||||||
 | 
					@@ -1976,6 +1978,24 @@ void iommu_domain_free(struct iommu_domain *domain)
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 EXPORT_SYMBOL_GPL(iommu_domain_free);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					+static int iommu_check_page_size(struct iommu_domain *domain,
 | 
				
			||||||
 | 
					+				struct device *dev)
 | 
				
			||||||
 | 
					+{
 | 
				
			||||||
 | 
					+	bool trusted = !(dev_is_pci(dev) && to_pci_dev(dev)->untrusted);
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	if (!iommu_is_paging_domain(domain))
 | 
				
			||||||
 | 
					+		return 0;
 | 
				
			||||||
 | 
					+	if (iommu_is_large_pages_domain(domain) && trusted)
 | 
				
			||||||
 | 
					+		return 0;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	if (!(domain->pgsize_bitmap & (PAGE_SIZE | (PAGE_SIZE - 1)))) {
 | 
				
			||||||
 | 
					+		pr_warn("IOMMU pages cannot exactly represent CPU pages.\n");
 | 
				
			||||||
 | 
					+		return -EFAULT;
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	return 0;
 | 
				
			||||||
 | 
					+}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 static int __iommu_attach_device(struct iommu_domain *domain,
 | 
				
			||||||
 | 
					 				 struct device *dev)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					@@ -1985,9 +2005,23 @@ static int __iommu_attach_device(struct iommu_domain *domain,
 | 
				
			||||||
 | 
					 		return -ENODEV;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 	ret = domain->ops->attach_dev(domain, dev);
 | 
				
			||||||
 | 
					-	if (!ret)
 | 
				
			||||||
 | 
					-		trace_attach_device_to_domain(dev);
 | 
				
			||||||
 | 
					-	return ret;
 | 
				
			||||||
 | 
					+	if (ret)
 | 
				
			||||||
 | 
					+		return ret;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	/*
 | 
				
			||||||
 | 
					+	 * Check that CPU pages can be represented by the IOVA granularity.
 | 
				
			||||||
 | 
					+	 * This has to be done after ops->attach_dev since many IOMMU drivers
 | 
				
			||||||
 | 
					+	 * only limit domain->pgsize_bitmap after having attached the first
 | 
				
			||||||
 | 
					+	 * device.
 | 
				
			||||||
 | 
					+	 */
 | 
				
			||||||
 | 
					+	ret = iommu_check_page_size(domain, dev);
 | 
				
			||||||
 | 
					+	if (ret) {
 | 
				
			||||||
 | 
					+		__iommu_detach_device(domain, dev);
 | 
				
			||||||
 | 
					+		return ret;
 | 
				
			||||||
 | 
					+	}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+	trace_attach_device_to_domain(dev);
 | 
				
			||||||
 | 
					+	return 0;
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 int iommu_attach_device(struct iommu_domain *domain, struct device *dev)
 | 
				
			||||||
 | 
					diff --git a/drivers/iommu/iova.c b/drivers/iommu/iova.c
 | 
				
			||||||
 | 
					index db77aa675145..180ce65a6789 100644
 | 
				
			||||||
 | 
					--- a/drivers/iommu/iova.c
 | 
				
			||||||
 | 
					+++ b/drivers/iommu/iova.c
 | 
				
			||||||
 | 
					@@ -49,10 +49,11 @@ init_iova_domain(struct iova_domain *iovad, unsigned long granule,
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					 	/*
 | 
				
			||||||
 | 
					 	 * IOVA granularity will normally be equal to the smallest
 | 
				
			||||||
 | 
					-	 * supported IOMMU page size; both *must* be capable of
 | 
				
			||||||
 | 
					-	 * representing individual CPU pages exactly.
 | 
				
			||||||
 | 
					+	 * supported IOMMU page size; while both usually are capable of
 | 
				
			||||||
 | 
					+	 * representing individual CPU pages exactly the IOVA allocator
 | 
				
			||||||
 | 
					+	 * supports any granularities that are an exact power of two.
 | 
				
			||||||
 | 
					 	 */
 | 
				
			||||||
 | 
					-	BUG_ON((granule > PAGE_SIZE) || !is_power_of_2(granule));
 | 
				
			||||||
 | 
					+	BUG_ON(!is_power_of_2(granule));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 	spin_lock_init(&iovad->iova_rbtree_lock);
 | 
				
			||||||
 | 
					 	iovad->rbroot = RB_ROOT;
 | 
				
			||||||
 | 
					diff --git a/include/linux/iommu.h b/include/linux/iommu.h
 | 
				
			||||||
 | 
					index 9208eca4b0d1..dec2dd70a876 100644
 | 
				
			||||||
 | 
					--- a/include/linux/iommu.h
 | 
				
			||||||
 | 
					+++ b/include/linux/iommu.h
 | 
				
			||||||
 | 
					@@ -63,6 +63,8 @@ struct iommu_domain_geometry {
 | 
				
			||||||
 | 
					 					      implementation              */
 | 
				
			||||||
 | 
					 #define __IOMMU_DOMAIN_PT	(1U << 2)  /* Domain is identity mapped   */
 | 
				
			||||||
 | 
					 #define __IOMMU_DOMAIN_DMA_FQ	(1U << 3)  /* DMA-API uses flush queue    */
 | 
				
			||||||
 | 
					+#define __IOMMU_DOMAIN_LP	(1U << 4)  /* Support for PAGE_SIZE smaller
 | 
				
			||||||
 | 
					+					      than IOMMU page size        */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /*
 | 
				
			||||||
 | 
					  * This are the possible domain-types
 | 
				
			||||||
 | 
					@@ -82,10 +84,12 @@ struct iommu_domain_geometry {
 | 
				
			||||||
 | 
					 #define IOMMU_DOMAIN_IDENTITY	(__IOMMU_DOMAIN_PT)
 | 
				
			||||||
 | 
					 #define IOMMU_DOMAIN_UNMANAGED	(__IOMMU_DOMAIN_PAGING)
 | 
				
			||||||
 | 
					 #define IOMMU_DOMAIN_DMA	(__IOMMU_DOMAIN_PAGING |	\
 | 
				
			||||||
 | 
					-				 __IOMMU_DOMAIN_DMA_API)
 | 
				
			||||||
 | 
					+				 __IOMMU_DOMAIN_DMA_API |       \
 | 
				
			||||||
 | 
					+				 __IOMMU_DOMAIN_LP)
 | 
				
			||||||
 | 
					 #define IOMMU_DOMAIN_DMA_FQ	(__IOMMU_DOMAIN_PAGING |	\
 | 
				
			||||||
 | 
					 				 __IOMMU_DOMAIN_DMA_API |	\
 | 
				
			||||||
 | 
					-				 __IOMMU_DOMAIN_DMA_FQ)
 | 
				
			||||||
 | 
					+				 __IOMMU_DOMAIN_DMA_FQ |        \
 | 
				
			||||||
 | 
					+				 __IOMMU_DOMAIN_LP)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 struct iommu_domain {
 | 
				
			||||||
 | 
					 	unsigned type;
 | 
				
			||||||
 | 
					@@ -102,6 +106,16 @@ static inline bool iommu_is_dma_domain(struct iommu_domain *domain)
 | 
				
			||||||
 | 
					 	return domain->type & __IOMMU_DOMAIN_DMA_API;
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					+static inline bool iommu_is_paging_domain(struct iommu_domain *domain)
 | 
				
			||||||
 | 
					+{
 | 
				
			||||||
 | 
					+	return domain->type & __IOMMU_DOMAIN_PAGING;
 | 
				
			||||||
 | 
					+}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+static inline bool iommu_is_large_pages_domain(struct iommu_domain *domain)
 | 
				
			||||||
 | 
					+{
 | 
				
			||||||
 | 
					+	return domain->type & __IOMMU_DOMAIN_LP;
 | 
				
			||||||
 | 
					+}
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					 enum iommu_cap {
 | 
				
			||||||
 | 
					 	IOMMU_CAP_CACHE_COHERENCY,	/* IOMMU can enforce cache coherent DMA
 | 
				
			||||||
 | 
					 					   transactions */
 | 
				
			||||||
							
								
								
									
										85
									
								
								machines/nat/m1-support/m1n1/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								machines/nat/m1-support/m1n1/default.nix
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,85 @@
 | 
				
			|||||||
 | 
					{ stdenv
 | 
				
			||||||
 | 
					, lib
 | 
				
			||||||
 | 
					, fetchFromGitHub
 | 
				
			||||||
 | 
					, pkgsCross
 | 
				
			||||||
 | 
					, python3
 | 
				
			||||||
 | 
					, dtc
 | 
				
			||||||
 | 
					, isRelease ? false
 | 
				
			||||||
 | 
					, withTools ? true
 | 
				
			||||||
 | 
					, withChainloading ? false
 | 
				
			||||||
 | 
					, rust-bin ? null
 | 
				
			||||||
 | 
					}:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					assert withChainloading -> rust-bin != null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let
 | 
				
			||||||
 | 
					  pyenv = python3.withPackages (p: with p; [
 | 
				
			||||||
 | 
					    construct
 | 
				
			||||||
 | 
					    pyserial
 | 
				
			||||||
 | 
					  ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  rustenv = rust-bin.selectLatestNightlyWith (toolchain: toolchain.minimal.override {
 | 
				
			||||||
 | 
					    targets = [ "aarch64-unknown-none-softfloat" ];
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					in stdenv.mkDerivation rec {
 | 
				
			||||||
 | 
					  pname = "m1n1";
 | 
				
			||||||
 | 
					  version = "1.1.3";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  src = fetchFromGitHub {
 | 
				
			||||||
 | 
					    # tracking branch: https://github.com/AsahiLinux/m1n1/tree/main
 | 
				
			||||||
 | 
					    owner = "AsahiLinux";
 | 
				
			||||||
 | 
					    repo = "m1n1";
 | 
				
			||||||
 | 
					    rev = "v${version}";
 | 
				
			||||||
 | 
					    hash = "sha256-S2HLBLmgER0ZZJ5Q4EX2f1KDxnol0yCDrloDMJaLwBE=";
 | 
				
			||||||
 | 
					    fetchSubmodules = true;
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  makeFlags = [ "ARCH=aarch64-unknown-linux-gnu-" ]
 | 
				
			||||||
 | 
					    ++ lib.optional isRelease "RELEASE=1"
 | 
				
			||||||
 | 
					    ++ lib.optional withChainloading "CHAINLOADING=1";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  nativeBuildInputs = [
 | 
				
			||||||
 | 
					    dtc
 | 
				
			||||||
 | 
					    pkgsCross.aarch64-multiplatform.buildPackages.gcc
 | 
				
			||||||
 | 
					  ] ++ lib.optional withChainloading rustenv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  postPatch = ''
 | 
				
			||||||
 | 
					    substituteInPlace proxyclient/m1n1/asm.py \
 | 
				
			||||||
 | 
					      --replace 'aarch64-linux-gnu-' 'aarch64-unknown-linux-gnu-' \
 | 
				
			||||||
 | 
					      --replace 'TOOLCHAIN = ""' 'TOOLCHAIN = "'$out'/toolchain-bin/"'
 | 
				
			||||||
 | 
					  '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  installPhase = ''
 | 
				
			||||||
 | 
					    runHook preInstall
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    mkdir -p $out/build
 | 
				
			||||||
 | 
					    cp build/m1n1.macho $out/build
 | 
				
			||||||
 | 
					    cp build/m1n1.bin $out/build
 | 
				
			||||||
 | 
					  '' + (lib.optionalString withTools ''
 | 
				
			||||||
 | 
					    mkdir -p $out/{bin,script,toolchain-bin}
 | 
				
			||||||
 | 
					    cp -r proxyclient $out/script
 | 
				
			||||||
 | 
					    cp -r tools $out/script
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for toolpath in $out/script/proxyclient/tools/*.py; do
 | 
				
			||||||
 | 
					      tool=$(basename $toolpath .py)
 | 
				
			||||||
 | 
					      script=$out/bin/m1n1-$tool
 | 
				
			||||||
 | 
					      cat > $script <<EOF
 | 
				
			||||||
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					${pyenv}/bin/python $toolpath "\$@"
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					      chmod +x $script
 | 
				
			||||||
 | 
					    done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    GCC=${pkgsCross.aarch64-multiplatform.buildPackages.gcc}
 | 
				
			||||||
 | 
					    BINUTILS=${pkgsCross.aarch64-multiplatform.buildPackages.binutils}
 | 
				
			||||||
 | 
					    REAL_BINUTILS=$(grep -o '/nix/store/[^ ]*binutils[^ ]*' $BINUTILS/nix-support/propagated-user-env-packages)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ln -s $GCC/bin/*-gcc $out/toolchain-bin/
 | 
				
			||||||
 | 
					    ln -s $GCC/bin/*-ld $out/toolchain-bin/
 | 
				
			||||||
 | 
					    ln -s $REAL_BINUTILS/bin/*-objcopy $out/toolchain-bin/
 | 
				
			||||||
 | 
					    ln -s $REAL_BINUTILS/bin/*-objdump $out/toolchain-bin/
 | 
				
			||||||
 | 
					    ln -s $REAL_BINUTILS/bin/*-nm $out/toolchain-bin/
 | 
				
			||||||
 | 
					  '') + ''
 | 
				
			||||||
 | 
					    runHook postInstall
 | 
				
			||||||
 | 
					  '';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										35
									
								
								machines/nat/m1-support/u-boot/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								machines/nat/m1-support/u-boot/default.nix
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,35 @@
 | 
				
			|||||||
 | 
					{ lib
 | 
				
			||||||
 | 
					, fetchFromGitHub
 | 
				
			||||||
 | 
					, pkgsCross
 | 
				
			||||||
 | 
					, m1n1
 | 
				
			||||||
 | 
					}: (pkgsCross.aarch64-multiplatform.buildUBoot rec {
 | 
				
			||||||
 | 
					  src = fetchFromGitHub {
 | 
				
			||||||
 | 
					    # tracking branch: https://github.com/AsahiLinux/u-boot/tree/releng/installer-release
 | 
				
			||||||
 | 
					    owner = "AsahiLinux";
 | 
				
			||||||
 | 
					    repo = "u-boot";
 | 
				
			||||||
 | 
					    rev = "300817d324f73c30c998a10435d5d830b58df894";
 | 
				
			||||||
 | 
					    hash = "sha256-6q4l1gHAlaGM7ktlCBmehb/ZNvmpt1eah6tTdsQJfxM=";
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					  version = "unstable-2022-07-11";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  defconfig = "apple_m1_defconfig";
 | 
				
			||||||
 | 
					  extraMeta.platforms = [ "aarch64-linux" ];
 | 
				
			||||||
 | 
					  filesToInstall = [
 | 
				
			||||||
 | 
					    "u-boot-nodtb.bin.gz"
 | 
				
			||||||
 | 
					    "m1n1-u-boot.macho"
 | 
				
			||||||
 | 
					    "m1n1-u-boot.bin"
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
 | 
					  extraConfig = ''
 | 
				
			||||||
 | 
					    CONFIG_IDENT_STRING=" ${version}"
 | 
				
			||||||
 | 
					  '';
 | 
				
			||||||
 | 
					}).overrideAttrs (o: {
 | 
				
			||||||
 | 
					  # nixos's downstream patches are not applicable
 | 
				
			||||||
 | 
					  patches = [ ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  preInstall = ''
 | 
				
			||||||
 | 
					    # compress so that m1n1 knows U-Boot's size and can find things after it
 | 
				
			||||||
 | 
					    gzip -n u-boot-nodtb.bin
 | 
				
			||||||
 | 
					    cat ${m1n1}/build/m1n1.macho arch/arm/dts/t[68]*.dtb u-boot-nodtb.bin.gz > m1n1-u-boot.macho
 | 
				
			||||||
 | 
					    cat ${m1n1}/build/m1n1.bin arch/arm/dts/t[68]*.dtb u-boot-nodtb.bin.gz > m1n1-u-boot.bin
 | 
				
			||||||
 | 
					  '';
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user