wip
This commit is contained in:
parent
c66f8ef8d4
commit
a3f59d1e0e
@ -89,7 +89,7 @@ in {
|
||||
# todo vulkan in chrome
|
||||
# todo video encoding in chrome
|
||||
hardware.opengl = {
|
||||
enable = de.enableAcceleration;
|
||||
enable = cfg.enableAcceleration;
|
||||
extraPackages = with pkgs; [
|
||||
intel-media-driver # LIBVA_DRIVER_NAME=iHD
|
||||
vaapiIntel # LIBVA_DRIVER_NAME=i965 (older but works better for Firefox/Chromium)
|
||||
|
@ -31,8 +31,8 @@ in {
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
# vulkan
|
||||
hardware.opengl.driSupport = de.enableAcceleration;
|
||||
hardware.opengl.driSupport32Bit = de.enableAcceleration;
|
||||
hardware.opengl.driSupport = cfg.enableAcceleration;
|
||||
hardware.opengl.driSupport32Bit = cfg.enableAcceleration;
|
||||
|
||||
# Applications
|
||||
users.users.googlebot.packages = with pkgs; [
|
||||
|
32
flake.lock
generated
32
flake.lock
generated
@ -7,11 +7,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1652712410,
|
||||
"narHash": "sha256-hMJ2TqLt0DleEnQFGUHK9sV2aAzJPU8pZeiZoqRozbE=",
|
||||
"lastModified": 1665870395,
|
||||
"narHash": "sha256-Tsbqb27LDNxOoPLh0gw2hIb6L/6Ow/6lIBvqcHzEKBI=",
|
||||
"owner": "ryantm",
|
||||
"repo": "agenix",
|
||||
"rev": "7e5e58b98c3dcbf497543ff6f22591552ebfe65b",
|
||||
"rev": "a630400067c6d03c9b3e0455347dc8559db14288",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@ -100,11 +100,11 @@
|
||||
},
|
||||
"flake-utils": {
|
||||
"locked": {
|
||||
"lastModified": 1653893745,
|
||||
"narHash": "sha256-0jntwV3Z8//YwuOjzhV2sgJJPt+HY6KhU7VZUL0fKZQ=",
|
||||
"lastModified": 1667395993,
|
||||
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1",
|
||||
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@ -136,17 +136,17 @@
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1655456688,
|
||||
"narHash": "sha256-j2trI5gv2fnHdfUQFBy957avCPxxzCqE8R+TOYHPSRE=",
|
||||
"lastModified": 1668994630,
|
||||
"narHash": "sha256-1lqx6HLyw6fMNX/hXrrETG1vMvZRGm2XVC9O/Jt0T6c=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "d17a56d90ecbd1b8fc908d49598fb854ef188461",
|
||||
"rev": "af50806f7c6ab40df3e6b239099e8f8385f6c78b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-22.05",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "af50806f7c6ab40df3e6b239099e8f8385f6c78b",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
@ -167,11 +167,11 @@
|
||||
},
|
||||
"nixpkgs-unstable": {
|
||||
"locked": {
|
||||
"lastModified": 1649408932,
|
||||
"narHash": "sha256-JhTW1OtS5fACcRXLqcTTQyYO5vLkO+bceCqeRms13SY=",
|
||||
"lastModified": 1669411043,
|
||||
"narHash": "sha256-LfPd3+EY+jaIHTRIEOUtHXuanxm59YKgUacmSzaqMLc=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "42948b300670223ca8286aaf916bc381f66a5313",
|
||||
"rev": "5dc7114b7b256d217fe7752f1614be2514e61bb8",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@ -246,11 +246,11 @@
|
||||
"utils": "utils"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1655214255,
|
||||
"narHash": "sha256-hgFF2X9mxFieekDh2VoVAtgwuM6XeAwzvb53yakmjTg=",
|
||||
"lastModified": 1655930346,
|
||||
"narHash": "sha256-ht56HHOzEhjeIgAv5ZNFjSVX/in1YlUs0HG9c1EUXTM=",
|
||||
"owner": "simple-nixos-mailserver",
|
||||
"repo": "nixos-mailserver",
|
||||
"rev": "a48082c79cff8f3b314ba4f95f4ae87ca7d4d068",
|
||||
"rev": "f535d8123c4761b2ed8138f3d202ea710a334a1d",
|
||||
"type": "gitlab"
|
||||
},
|
||||
"original": {
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-22.05";
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/af50806f7c6ab40df3e6b239099e8f8385f6c78b";
|
||||
nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
|
@ -9,6 +9,7 @@
|
||||
networking.hostName = "nat";
|
||||
|
||||
de.enable = true;
|
||||
de.enableAcceleration = false;
|
||||
de.touchpad.enable = true;
|
||||
|
||||
# nixpkgs.overlays = [
|
||||
|
@ -11,13 +11,18 @@
|
||||
efi.enable = true;
|
||||
|
||||
# 4k kernel for m1
|
||||
boot.kernelBuildIs16K = false;
|
||||
hardware.asahi.use4KPages = false;
|
||||
|
||||
boot.initrd.availableKernelModules = [ "usb_storage" ];
|
||||
boot.initrd.kernelModules = [ "dm-snapshot" ];
|
||||
boot.kernelModules = [ ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
# fix keys
|
||||
boot.extraModprobeConfig = ''
|
||||
options hid-apple swap_fn_leftctrl=1 swap_opt_cmd=1
|
||||
'';
|
||||
|
||||
boot.initrd.luks.devices."enc-pv" = {
|
||||
device = "/dev/nvme0n1p5";
|
||||
allowDiscards = true;
|
||||
|
@ -1,31 +0,0 @@
|
||||
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"]}
|
||||
)
|
@ -1,24 +1,29 @@
|
||||
{ lib
|
||||
, python3
|
||||
, python3Packages
|
||||
, fetchFromGitHub
|
||||
, makeBinaryWrapper
|
||||
, gzip
|
||||
, gnutar
|
||||
, lzfse
|
||||
}:
|
||||
|
||||
python3.pkgs.buildPythonApplication rec {
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "asahi-fwextract";
|
||||
version = "0.4pre2";
|
||||
version = "0.5pre10";
|
||||
|
||||
# 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=";
|
||||
hash = "sha256-93dTRrNNo7yilSGpSNjXir+DhQe29DeoZHXusrk9PN8=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
./add_entry_point.patch
|
||||
];
|
||||
|
||||
nativeBuildInputs = [ python3.pkgs.setuptools makeBinaryWrapper ];
|
||||
}
|
||||
postPatch = ''
|
||||
substituteInPlace asahi_firmware/img4.py \
|
||||
--replace 'liblzfse.so' '${lzfse}/lib/liblzfse.so'
|
||||
substituteInPlace asahi_firmware/update.py \
|
||||
--replace '"tar"' '"${gnutar}/bin/tar"' \
|
||||
--replace '"xf"' '"-x", "-I", "${gzip}/bin/gzip", "-f"'
|
||||
'';
|
||||
}
|
@ -1,18 +1,12 @@
|
||||
{ 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 {
|
||||
bootM1n1 = config.hardware.asahi.pkgs.callPackage ../m1n1 {
|
||||
isRelease = true;
|
||||
withTools = false;
|
||||
customLogo = config.boot.m1n1CustomLogo;
|
||||
};
|
||||
|
||||
bootUBoot = buildPkgs.callPackage ../u-boot {
|
||||
bootUBoot = config.hardware.asahi.pkgs.callPackage ../u-boot {
|
||||
m1n1 = bootM1n1;
|
||||
};
|
||||
|
||||
@ -34,23 +28,26 @@ in {
|
||||
|
||||
# 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 ];
|
||||
system.build.m1n1 = bootFiles."m1n1/boot.bin";
|
||||
};
|
||||
|
||||
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
|
||||
'';
|
||||
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
|
||||
'';
|
||||
};
|
||||
|
||||
m1n1CustomLogo = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.path;
|
||||
default = null;
|
||||
description = ''
|
||||
Custom logo to build into m1n1. The path must point to a 256x256 PNG.
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
}
|
@ -1,8 +1,40 @@
|
||||
|
||||
|
||||
{ config, pkgs, lib, ... }:
|
||||
{
|
||||
imports = [
|
||||
./kernel
|
||||
./firmware
|
||||
./peripheral-firmware
|
||||
./boot-m1n1
|
||||
];
|
||||
}
|
||||
|
||||
config = {
|
||||
hardware.asahi.pkgs = if config.hardware.asahi.pkgsSystem != "aarch64-linux"
|
||||
then import (pkgs.path) {
|
||||
system = config.hardware.asahi.pkgsSystem;
|
||||
crossSystem.system = "aarch64-linux";
|
||||
}
|
||||
else pkgs;
|
||||
};
|
||||
|
||||
options.hardware.asahi = {
|
||||
pkgsSystem = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "aarch64-linux";
|
||||
description = ''
|
||||
System architecture that should be used to build the major Asahi
|
||||
packages, if not the default aarch64-linux. This allows installing from
|
||||
a cross-built ISO without rebuilding them during installation.
|
||||
'';
|
||||
};
|
||||
|
||||
pkgs = lib.mkOption {
|
||||
type = lib.types.raw;
|
||||
description = ''
|
||||
Package set used to build the major Asahi packages. Defaults to the
|
||||
ambient set if not cross-built, otherwise re-imports the ambient set
|
||||
with the system defined by `hardware.asahi.pkgsSystem`.
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
{ 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
|
||||
'';
|
||||
})
|
||||
];
|
||||
}
|
Binary file not shown.
@ -0,0 +1,28 @@
|
||||
From 1c60b7662b82d7d5d54aca1cd24f9517a8c4595f Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Watson <twatson52@icloud.com>
|
||||
Date: Thu, 24 Nov 2022 11:00:43 -0600
|
||||
Subject: [PATCH] drivers/usb/dwc3: remove apple dr_mode check
|
||||
|
||||
This check prevents the driver from probing with old device trees.
|
||||
Allegedly this check is incorrect anyway as the dr_mode should default
|
||||
to OTG but this is not true at the time of the check.
|
||||
---
|
||||
drivers/usb/dwc3/core.c | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
|
||||
index 1d88119cdbb8..b92401c1ee0c 100644
|
||||
--- a/drivers/usb/dwc3/core.c
|
||||
+++ b/drivers/usb/dwc3/core.c
|
||||
@@ -1882,8 +1882,7 @@ static int dwc3_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
if (of_device_is_compatible(dev->of_node, "apple,dwc3")) {
|
||||
- if (!IS_ENABLED(CONFIG_USB_ROLE_SWITCH) ||
|
||||
- dwc->dr_mode != USB_DR_MODE_OTG) {
|
||||
+ if (!IS_ENABLED(CONFIG_USB_ROLE_SWITCH)) {
|
||||
dev_err(dev,
|
||||
"Apple DWC3 requires role switch support.\n"
|
||||
);
|
||||
--
|
||||
2.17.1
|
File diff suppressed because it is too large
Load Diff
@ -10,4 +10,4 @@ index a1eb6572ecd2..b94fbd9b3d70 100644
|
||||
+ default ARM64_16K_PAGES
|
||||
help
|
||||
Page size (translation granule) configuration.
|
||||
|
||||
|
@ -3,9 +3,8 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
{
|
||||
config = {
|
||||
boot.kernelPackages = pkgs.callPackage ./package.nix {
|
||||
crossBuild = config.boot.kernelBuildIsCross;
|
||||
_16KBuild = config.boot.kernelBuildIs16K;
|
||||
boot.kernelPackages = config.hardware.asahi.pkgs.callPackage ./package.nix {
|
||||
_4KBuild = config.hardware.asahi.use4KPages;
|
||||
};
|
||||
|
||||
# we definitely want to use CONFIG_ENERGY_MODEL, and
|
||||
@ -13,10 +12,42 @@
|
||||
# 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.initrd.includeDefaultModules = false;
|
||||
boot.initrd.availableKernelModules = [
|
||||
# list of initrd modules stolen from
|
||||
# https://github.com/AsahiLinux/asahi-scripts/blob/e4d6151a7dcb63ae5e3779c3cf57362eb37d908a/initcpio/install/asahi
|
||||
"apple-mailbox"
|
||||
"nvme_apple"
|
||||
"pinctrl-apple-gpio"
|
||||
"macsmc"
|
||||
"macsmc-rtkit"
|
||||
"i2c-apple"
|
||||
"tps6598x"
|
||||
"apple-dart"
|
||||
"dwc3"
|
||||
"dwc3-of-simple"
|
||||
"xhci-pci"
|
||||
"pcie-apple"
|
||||
"gpio_macsmc"
|
||||
"spi-apple"
|
||||
"spi-hid-apple"
|
||||
"spi-hid-apple-of"
|
||||
"rtc-macsmc"
|
||||
"simple-mfd-spmi"
|
||||
"spmi-apple-controller"
|
||||
"nvmem_spmi_mfd"
|
||||
"apple-dockchannel"
|
||||
"dockchannel-hid"
|
||||
"apple-rtkit-helper"
|
||||
"dm_crypt"
|
||||
|
||||
# additional stuff necessary to boot off USB for the installer
|
||||
# and if the initrd (i.e. stage 1) goes wrong
|
||||
"usb-storage"
|
||||
"xhci-plat-hcd"
|
||||
"usbhid"
|
||||
"hid_generic"
|
||||
];
|
||||
|
||||
boot.kernelParams = [
|
||||
"earlycon"
|
||||
@ -45,18 +76,23 @@
|
||||
};
|
||||
};
|
||||
|
||||
options.boot.kernelBuildIsCross = lib.mkOption {
|
||||
imports = [
|
||||
(lib.mkRemovedOptionModule [ "boot" "kernelBuildIsCross" ] ''
|
||||
If it should still be true (which is unlikely), replace it
|
||||
with 'hardware.asahi.pkgsSystem = "x86_64-linux"'. Otherwise, delete it.
|
||||
'')
|
||||
|
||||
(lib.mkRemovedOptionModule [ "boot" "kernelBuildIs16K" ] ''
|
||||
Replaced with 'hardware.asahi.use4KPages' which defaults to false.
|
||||
'')
|
||||
];
|
||||
|
||||
options.hardware.asahi.use4KPages = 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.
|
||||
Build the Asahi Linux kernel with 4K pages to improve compatibility in
|
||||
some cases at the cost of performance in others.
|
||||
'';
|
||||
};
|
||||
}
|
||||
}
|
@ -1,14 +1,10 @@
|
||||
{ pkgs, crossBuild ? false, _16KBuild ? false }: let
|
||||
buildPkgs = if crossBuild then
|
||||
import (pkgs.path) {
|
||||
system = "x86_64-linux";
|
||||
crossSystem.system = "aarch64-linux";
|
||||
}
|
||||
else pkgs;
|
||||
{ pkgs, _4KBuild ? false }: let
|
||||
localPkgs =
|
||||
# we do this so the config can be read on any system and not affect
|
||||
# the output hash
|
||||
if builtins ? currentSystem then import (pkgs.path) { system = builtins.currentSystem; }
|
||||
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
|
||||
@ -23,28 +19,35 @@
|
||||
linuxKernel.manualConfig rec {
|
||||
inherit stdenv lib;
|
||||
|
||||
version = "5.19.0-rc7-asahi";
|
||||
version = "6.1.0-rc6-asahi";
|
||||
modDirVersion = version;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
# tracking branch: https://github.com/AsahiLinux/linux/tree/asahi
|
||||
# tracking: https://github.com/AsahiLinux/PKGBUILDs/blob/stable/linux-asahi/PKGBUILD
|
||||
owner = "AsahiLinux";
|
||||
repo = "linux";
|
||||
rev = "c7d02d6615a5fb4afefd3084fce93d86e5fb184d";
|
||||
hash = "sha256-sed405+6L5U7S+Na2DNLGPNTNf3tv96LjK3CimeRjNU=";
|
||||
rev = "asahi-6.1-rc6-5";
|
||||
hash = "sha256-HHPfAtNh5wR0TCsEYuMdSbp55p1IVhF07tg4dlfgXk0=";
|
||||
};
|
||||
|
||||
kernelPatches = [
|
||||
] ++ lib.optionals (!_16KBuild) [
|
||||
# sven says this is okay since our kernel config supports it, and that
|
||||
# it will be fixed at some point to not be necessary. but this allows
|
||||
# new kernels to get USB up with old device trees
|
||||
{ name = "0001-drivers-usb-dwc3-remove-apple-dr_mode-check";
|
||||
patch = ./0001-drivers-usb-dwc3-remove-apple-dr_mode-check.patch;
|
||||
}
|
||||
] ++ lib.optionals _4KBuild [
|
||||
# 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
|
||||
] ++ lib.optionals (!_4KBuild) [
|
||||
# patch the kernel to set the default size to 16k instead of modifying
|
||||
# the config 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;
|
||||
}
|
||||
@ -53,15 +56,8 @@
|
||||
configfile = ./config;
|
||||
config = readConfig configfile;
|
||||
|
||||
extraMeta.branch = "5.19";
|
||||
extraMeta.branch = "6.1";
|
||||
} // (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)
|
||||
linux_asahi = (pkgs.callPackage linux_asahi_pkg { });
|
||||
in pkgs.recurseIntoAttrs (pkgs.linuxPackagesFor linux_asahi)
|
@ -1,13 +0,0 @@
|
||||
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"
|
@ -446,4 +446,4 @@ index 9208eca4b0d1..dec2dd70a876 100644
|
||||
+
|
||||
enum iommu_cap {
|
||||
IOMMU_CAP_CACHE_COHERENCY, /* IOMMU can enforce cache coherent DMA
|
||||
transactions */
|
||||
transactions */
|
@ -4,10 +4,12 @@
|
||||
, pkgsCross
|
||||
, python3
|
||||
, dtc
|
||||
, imagemagick
|
||||
, isRelease ? false
|
||||
, withTools ? true
|
||||
, withChainloading ? false
|
||||
, rust-bin ? null
|
||||
, customLogo ? null
|
||||
}:
|
||||
|
||||
assert withChainloading -> rust-bin != null;
|
||||
@ -23,14 +25,14 @@ let
|
||||
});
|
||||
in stdenv.mkDerivation rec {
|
||||
pname = "m1n1";
|
||||
version = "1.1.3";
|
||||
version = "1.1.8";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
# tracking branch: https://github.com/AsahiLinux/m1n1/tree/main
|
||||
# tracking: https://github.com/AsahiLinux/PKGBUILDs/blob/stable/m1n1/PKGBUILD
|
||||
owner = "AsahiLinux";
|
||||
repo = "m1n1";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-S2HLBLmgER0ZZJ5Q4EX2f1KDxnol0yCDrloDMJaLwBE=";
|
||||
hash = "sha256-4Ykh+EzOCRtZQD1upUDJpi5ikMOCnxLwvLWajtMo7LU=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
@ -41,7 +43,8 @@ in stdenv.mkDerivation rec {
|
||||
nativeBuildInputs = [
|
||||
dtc
|
||||
pkgsCross.aarch64-multiplatform.buildPackages.gcc
|
||||
] ++ lib.optional withChainloading rustenv;
|
||||
] ++ lib.optional withChainloading rustenv
|
||||
++ lib.optional (customLogo != null) imagemagick;
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace proxyclient/m1n1/asm.py \
|
||||
@ -49,9 +52,21 @@ in stdenv.mkDerivation rec {
|
||||
--replace 'TOOLCHAIN = ""' 'TOOLCHAIN = "'$out'/toolchain-bin/"'
|
||||
'';
|
||||
|
||||
preConfigure = lib.optionalString (customLogo != null) ''
|
||||
pushd data &>/dev/null
|
||||
ln -fs ${customLogo} bootlogo_256.png
|
||||
if [[ "$(magick identify bootlogo_256.png)" != 'bootlogo_256.png PNG 256x256'* ]]; then
|
||||
echo "Custom logo is not a 256x256 PNG"
|
||||
exit 1
|
||||
fi
|
||||
rm bootlogo_128.png
|
||||
convert bootlogo_256.png -resize 128x128 bootlogo_128.png
|
||||
./makelogo.sh
|
||||
popd &>/dev/null
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/build
|
||||
cp build/m1n1.macho $out/build
|
||||
cp build/m1n1.bin $out/build
|
||||
@ -59,7 +74,6 @@ in stdenv.mkDerivation rec {
|
||||
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
|
||||
@ -69,17 +83,14 @@ ${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)
|
||||
|
||||
BINUTILS=${pkgsCross.aarch64-multiplatform.buildPackages.binutils-unwrapped}
|
||||
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/
|
||||
ln -s $BINUTILS/bin/*-objcopy $out/toolchain-bin/
|
||||
ln -s $BINUTILS/bin/*-objdump $out/toolchain-bin/
|
||||
ln -s $GCC/bin/*-nm $out/toolchain-bin/
|
||||
'') + ''
|
||||
runHook postInstall
|
||||
'';
|
||||
}
|
||||
}
|
BIN
machines/nat/m1-support/peripheral-firmware/all_firmware.tar.gz
Executable file
BIN
machines/nat/m1-support/peripheral-firmware/all_firmware.tar.gz
Executable file
Binary file not shown.
70
machines/nat/m1-support/peripheral-firmware/default.nix
Normal file
70
machines/nat/m1-support/peripheral-firmware/default.nix
Normal file
@ -0,0 +1,70 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
{
|
||||
config = {
|
||||
assertions = lib.mkIf config.hardware.asahi.extractPeripheralFirmware [
|
||||
{ assertion = config.hardware.asahi.peripheralFirmwareDirectory != null;
|
||||
message = ''
|
||||
Asahi peripheral firmware extraction is enabled but the firmware
|
||||
location appears incorrect.
|
||||
'';
|
||||
}
|
||||
];
|
||||
|
||||
hardware.firmware = let
|
||||
asahi-fwextract = pkgs.callPackage ../asahi-fwextract {};
|
||||
in lib.mkIf ((config.hardware.asahi.peripheralFirmwareDirectory != null)
|
||||
&& config.hardware.asahi.extractPeripheralFirmware) [
|
||||
(pkgs.stdenv.mkDerivation {
|
||||
name = "asahi-peripheral-firmware";
|
||||
|
||||
nativeBuildInputs = [ asahi-fwextract pkgs.cpio ];
|
||||
|
||||
buildCommand = ''
|
||||
mkdir extracted
|
||||
asahi-fwextract ${/. + config.hardware.asahi.peripheralFirmwareDirectory} extracted
|
||||
mkdir -p $out/lib/firmware
|
||||
cat extracted/firmware.cpio | cpio -id --quiet --no-absolute-filenames
|
||||
mv vendorfw/* $out/lib/firmware
|
||||
'';
|
||||
})
|
||||
];
|
||||
};
|
||||
|
||||
options.hardware.asahi = {
|
||||
extractPeripheralFirmware = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = ''
|
||||
Automatically extract the non-free non-redistributable peripheral
|
||||
firmware necessary for features like Wi-Fi.
|
||||
'';
|
||||
};
|
||||
|
||||
peripheralFirmwareDirectory = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.path;
|
||||
default = let
|
||||
paths = [
|
||||
# path when the system is operating normally
|
||||
"/boot/asahi"
|
||||
# path when the system is mounted in the installer
|
||||
"/mnt/boot/asahi"
|
||||
./.
|
||||
];
|
||||
|
||||
validPaths = (builtins.filter
|
||||
(p: builtins.pathExists (p + "/all_firmware.tar.gz"))
|
||||
paths) ++ [ null ];
|
||||
in builtins.elemAt validPaths 0;
|
||||
description = ''
|
||||
Path to the directory containing the non-free non-redistributable
|
||||
peripheral firmware necessary for features like Wi-Fi. Ordinarily, this
|
||||
will automatically point to the appropriate location on the ESP. Flake
|
||||
users and those interested in maximum purity will want to copy those
|
||||
files elsewhere and specify this manually.
|
||||
Currently, this consists of the files `all-firmware.tar.gz` and
|
||||
`kernelcache*`. The official Asahi Linux installer places these files
|
||||
in the `asahi` directory of the EFI system partition when creating it.
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
BIN
machines/nat/m1-support/peripheral-firmware/kernelcache.release.mac13g
Executable file
BIN
machines/nat/m1-support/peripheral-firmware/kernelcache.release.mac13g
Executable file
Binary file not shown.
@ -1,16 +1,21 @@
|
||||
{ lib
|
||||
, fetchFromGitHub
|
||||
, pkgs
|
||||
, pkgsCross
|
||||
, m1n1
|
||||
}: (pkgsCross.aarch64-multiplatform.buildUBoot rec {
|
||||
}: let
|
||||
# u-boot's buildInputs get a different hash and don't build right if we try to
|
||||
# cross-build for aarch64 on itself for whatever reason
|
||||
buildPkgs = if pkgs.stdenv.system == "aarch64-linux" then pkgs else pkgsCross.aarch64-multiplatform;
|
||||
in (buildPkgs.buildUBoot rec {
|
||||
src = fetchFromGitHub {
|
||||
# tracking branch: https://github.com/AsahiLinux/u-boot/tree/releng/installer-release
|
||||
# tracking: https://github.com/AsahiLinux/PKGBUILDs/blob/stable/uboot-asahi/PKGBUILD
|
||||
owner = "AsahiLinux";
|
||||
repo = "u-boot";
|
||||
rev = "300817d324f73c30c998a10435d5d830b58df894";
|
||||
hash = "sha256-6q4l1gHAlaGM7ktlCBmehb/ZNvmpt1eah6tTdsQJfxM=";
|
||||
rev = "asahi-v2022.10-1";
|
||||
hash = "sha256-/dtTJ+GxC2GFlqduAa2WWPGwktLjM7tUKus6/aUyPNQ=";
|
||||
};
|
||||
version = "unstable-2022-07-11";
|
||||
version = "2022.10.asahi1-1";
|
||||
|
||||
defconfig = "apple_m1_defconfig";
|
||||
extraMeta.platforms = [ "aarch64-linux" ];
|
||||
@ -32,4 +37,4 @@
|
||||
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