Files
x1e-nixos/kernel-modules.nix
2026-04-10 15:45:53 +04:00

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";
};
}