272 lines
8.9 KiB
Nix
272 lines
8.9 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
let
|
|
kernel = config.boot.kernelPackages.kernel;
|
|
|
|
spi-hid = pkgs.stdenv.mkDerivation {
|
|
pname = "spi-hid";
|
|
version = "0.3.1-${kernel.version}";
|
|
src = ./kernel/modules/spi-hid;
|
|
hardeningDisable = [
|
|
"pic"
|
|
"format"
|
|
];
|
|
nativeBuildInputs = kernel.moduleBuildDependencies ++ [ pkgs.kmod ];
|
|
makeFlags = [
|
|
"KERNELRELEASE=${kernel.modDirVersion}"
|
|
"KERNEL_DIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
|
|
"INSTALL_MOD_PATH=$(out)"
|
|
];
|
|
buildPhase = ''
|
|
runHook preBuild
|
|
make -C ${kernel.dev}/lib/modules/${kernel.modDirVersion}/build \
|
|
M=$(pwd) \
|
|
ARCH=${pkgs.stdenv.hostPlatform.linuxArch} \
|
|
modules
|
|
runHook postBuild
|
|
'';
|
|
installPhase = ''
|
|
runHook preInstall
|
|
install -D -m 644 spi-hid.ko $out/lib/modules/${kernel.modDirVersion}/extra/spi-hid.ko
|
|
runHook postInstall
|
|
'';
|
|
enableParallelBuilding = true;
|
|
meta = with lib; {
|
|
description = "HID over SPI (HIDSPI v3) QSPI transport driver";
|
|
license = licenses.gpl2Only;
|
|
platforms = platforms.linux;
|
|
};
|
|
};
|
|
|
|
|
|
ath12k-norfkill = pkgs.stdenv.mkDerivation {
|
|
pname = "ath12k-norfkill";
|
|
inherit (kernel)
|
|
src
|
|
version
|
|
postPatch
|
|
nativeBuildInputs
|
|
;
|
|
kernel_dev = kernel.dev;
|
|
kernelVersion = kernel.modDirVersion;
|
|
patches = [
|
|
./kernel/modules/ath12k/disable-rfkill.patch
|
|
];
|
|
buildPhase = ''
|
|
BUILT_KERNEL=$kernel_dev/lib/modules/$kernelVersion/build
|
|
cp $BUILT_KERNEL/Module.symvers .
|
|
cp $BUILT_KERNEL/.config .
|
|
cp $kernel_dev/vmlinux .
|
|
make "-j$NIX_BUILD_CORES" modules_prepare
|
|
make "-j$NIX_BUILD_CORES" M=drivers/net/wireless/ath/ath12k modules
|
|
'';
|
|
installPhase = ''
|
|
install -D -m 644 drivers/net/wireless/ath/ath12k/ath12k.ko \
|
|
$out/lib/modules/${kernel.modDirVersion}/extra/ath12k.ko
|
|
if [ -f drivers/net/wireless/ath/ath12k/wifi7/ath12k_wifi7.ko ]; then
|
|
install -D -m 644 drivers/net/wireless/ath/ath12k/wifi7/ath12k_wifi7.ko \
|
|
$out/lib/modules/${kernel.modDirVersion}/extra/ath12k_wifi7.ko
|
|
fi
|
|
'';
|
|
meta = with lib; {
|
|
description = "ath12k with rfkill config early-return workaround";
|
|
license = licenses.bsd3;
|
|
platforms = platforms.linux;
|
|
};
|
|
};
|
|
|
|
gpi-qspi = pkgs.stdenv.mkDerivation {
|
|
pname = "gpi-qspi";
|
|
inherit (kernel)
|
|
src
|
|
version
|
|
postPatch
|
|
nativeBuildInputs
|
|
;
|
|
kernel_dev = kernel.dev;
|
|
kernelVersion = kernel.modDirVersion;
|
|
patches = [
|
|
./kernel/modules/qcom-qspi/gpi.patch
|
|
];
|
|
buildPhase = ''
|
|
BUILT_KERNEL=$kernel_dev/lib/modules/$kernelVersion/build
|
|
cp $BUILT_KERNEL/Module.symvers .
|
|
cp $BUILT_KERNEL/.config .
|
|
cp $kernel_dev/vmlinux .
|
|
make "-j$NIX_BUILD_CORES" modules_prepare
|
|
make "-j$NIX_BUILD_CORES" M=drivers/dma/qcom modules
|
|
'';
|
|
installPhase = ''
|
|
make \
|
|
INSTALL_MOD_PATH="$out" \
|
|
XZ="xz -T$NIX_BUILD_CORES" \
|
|
M="drivers/dma/qcom" \
|
|
modules_install
|
|
'';
|
|
meta = with lib; {
|
|
description = "Qualcomm GPI DMA with QSPI protocol 9 support";
|
|
license = licenses.gpl2Only;
|
|
platforms = platforms.linux;
|
|
};
|
|
};
|
|
|
|
spi-geni-qcom-qspi = pkgs.stdenv.mkDerivation {
|
|
pname = "spi-geni-qcom-qspi";
|
|
inherit (kernel)
|
|
src
|
|
version
|
|
postPatch
|
|
nativeBuildInputs
|
|
;
|
|
kernel_dev = kernel.dev;
|
|
kernelVersion = kernel.modDirVersion;
|
|
patches = [
|
|
./kernel/modules/qcom-qspi/gpi.patch
|
|
./kernel/modules/qcom-qspi/spi-geni-qcom.patch
|
|
];
|
|
buildPhase = ''
|
|
BUILT_KERNEL=$kernel_dev/lib/modules/$kernelVersion/build
|
|
cp $BUILT_KERNEL/Module.symvers .
|
|
cp $BUILT_KERNEL/.config .
|
|
cp $kernel_dev/vmlinux .
|
|
make "-j$NIX_BUILD_CORES" modules_prepare
|
|
make "-j$NIX_BUILD_CORES" M=drivers/spi CONFIG_SPI_QCOM_GENI=m
|
|
'';
|
|
installPhase = ''
|
|
install -D -m 644 drivers/spi/spi-geni-qcom.ko \
|
|
$out/lib/modules/${kernel.modDirVersion}/extra/spi-geni-qcom.ko
|
|
'';
|
|
meta = with lib; {
|
|
description = "Qualcomm GENI SPI with QSPI 1-4-4 support";
|
|
license = licenses.gpl2Only;
|
|
platforms = platforms.linux;
|
|
};
|
|
};
|
|
|
|
cpu-parking = pkgs.stdenv.mkDerivation {
|
|
pname = "cpu-parking";
|
|
version = "0.1.0-${kernel.version}";
|
|
src = ./kernel/modules/cpu-parking;
|
|
hardeningDisable = [
|
|
"pic"
|
|
"format"
|
|
];
|
|
nativeBuildInputs = kernel.moduleBuildDependencies ++ [ pkgs.kmod ];
|
|
makeFlags = [
|
|
"KERNELRELEASE=${kernel.modDirVersion}"
|
|
"KERNEL_DIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
|
|
"INSTALL_MOD_PATH=$(out)"
|
|
];
|
|
buildPhase = ''
|
|
runHook preBuild
|
|
make -C ${kernel.dev}/lib/modules/${kernel.modDirVersion}/build \
|
|
M=$(pwd) \
|
|
ARCH=${pkgs.stdenv.hostPlatform.linuxArch} \
|
|
modules
|
|
runHook postBuild
|
|
'';
|
|
installPhase = ''
|
|
runHook preInstall
|
|
install -D -m 644 cpu_parking.ko $out/lib/modules/${kernel.modDirVersion}/extra/cpu_parking.ko
|
|
runHook postInstall
|
|
'';
|
|
enableParallelBuilding = true;
|
|
meta = with lib; {
|
|
description = "CPU core parking for Snapdragon X Elite (x1e80100)";
|
|
license = licenses.gpl2Only;
|
|
platforms = platforms.linux;
|
|
};
|
|
};
|
|
|
|
ec-reboot = pkgs.stdenv.mkDerivation {
|
|
pname = "ec-reboot";
|
|
version = "0.1.0-${kernel.version}";
|
|
src = ./kernel/modules/ec-reboot;
|
|
hardeningDisable = [
|
|
"pic"
|
|
"format"
|
|
];
|
|
nativeBuildInputs = kernel.moduleBuildDependencies ++ [ pkgs.kmod ];
|
|
makeFlags = [
|
|
"KERNELRELEASE=${kernel.modDirVersion}"
|
|
"KERNEL_DIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
|
|
"INSTALL_MOD_PATH=$(out)"
|
|
];
|
|
buildPhase = ''
|
|
runHook preBuild
|
|
make -C ${kernel.dev}/lib/modules/${kernel.modDirVersion}/build \
|
|
M=$(pwd) \
|
|
ARCH=${pkgs.stdenv.hostPlatform.linuxArch} \
|
|
modules
|
|
runHook postBuild
|
|
'';
|
|
installPhase = ''
|
|
runHook preInstall
|
|
install -D -m 644 ec-reboot.ko $out/lib/modules/${kernel.modDirVersion}/extra/ec-reboot.ko
|
|
runHook postInstall
|
|
'';
|
|
enableParallelBuilding = true;
|
|
meta = with lib; {
|
|
description = "Trigger EC hard reset via SSAM for Surface Laptop 7";
|
|
license = licenses.gpl2Only;
|
|
platforms = platforms.linux;
|
|
};
|
|
};
|
|
|
|
platform-profile = pkgs.stdenv.mkDerivation {
|
|
pname = "platform-profile-no-acpi";
|
|
inherit (kernel)
|
|
src
|
|
version
|
|
postPatch
|
|
nativeBuildInputs
|
|
;
|
|
kernel_dev = kernel.dev;
|
|
kernelVersion = kernel.modDirVersion;
|
|
patches = [
|
|
./kernel/modules/platform-profile/platform-profile-no-acpi.patch
|
|
];
|
|
buildPhase = ''
|
|
BUILT_KERNEL=$kernel_dev/lib/modules/$kernelVersion/build
|
|
cp $BUILT_KERNEL/Module.symvers .
|
|
cp $BUILT_KERNEL/.config .
|
|
cp $kernel_dev/vmlinux .
|
|
make "-j$NIX_BUILD_CORES" modules_prepare
|
|
make "-j$NIX_BUILD_CORES" M=drivers/acpi modules
|
|
'';
|
|
installPhase = ''
|
|
make \
|
|
INSTALL_MOD_PATH="$out" \
|
|
XZ="xz -T$NIX_BUILD_CORES" \
|
|
M="drivers/acpi" \
|
|
modules_install
|
|
'';
|
|
meta = with lib; {
|
|
description = "Platform profile module patched for DT-based systems";
|
|
license = licenses.gpl2Only;
|
|
platforms = platforms.linux;
|
|
};
|
|
};
|
|
in
|
|
{
|
|
options.x1e = {
|
|
cpuParking = lib.mkEnableOption "CPU core parking for Snapdragon X Elite";
|
|
ecReboot = lib.mkEnableOption "EC hard-reset sysfs trigger (/sys/kernel/ec_reboot/reboot)";
|
|
};
|
|
|
|
config = {
|
|
boot.extraModulePackages = [
|
|
spi-hid
|
|
gpi-qspi
|
|
spi-geni-qcom-qspi
|
|
ath12k-norfkill
|
|
platform-profile
|
|
]
|
|
++ lib.optional config.x1e.ecReboot ec-reboot
|
|
++ lib.optional config.x1e.cpuParking cpu-parking;
|
|
|
|
boot.kernelModules =
|
|
lib.optional config.x1e.ecReboot "ec_reboot"
|
|
++ lib.optional config.x1e.cpuParking "cpu_parking";
|
|
};
|
|
}
|