1
0
mirror of https://github.com/NixOS/nixos-hardware synced 2024-06-28 15:38:32 +02:00
nixos-hardware/dell/xps/13-9310/default.nix
mitchmindtree 08d1c4dd2b Add wink patch for disabling MHI M2 state. Rename firmware.
Disabling the MHI M2 state appears to completely resolve issues where
enabling the wifi firmware would cause the the whole system to freeze
quite frequently. The reason for why this fix works so well is still
unknown and under investigation. See some discussion here:

http://lists.infradead.org/pipermail/ath11k/2020-December/000876.html

Also renames the firmware package to clarify that it is for the wifi
driver. This is to avoid confusion with the bluetooth firmware which
will be added in an upcoming patch.
2021-02-26 12:43:00 +01:00

249 lines
11 KiB
Nix

{ lib, pkgs, ... }:
{
imports = [
../../../common/cpu/intel
../../../common/pc/laptop
];
# TODO: upstream to NixOS/nixpkgs
nixpkgs.overlays = [(final: previous: {
qca6390-wifi-firmware = final.callPackage ./qca6390-wifi-firmware.nix {};
})];
hardware.firmware = lib.mkBefore [
# Firmware for the AX500 (wi-fi & bluetooth chip).
pkgs.qca6390-wifi-firmware
];
# The QCA6390 driver currently requires a specific version of the kernel
# along with a particular set of patches to build.
# Kvalo's ath11k-qca6390-bringup branch is currently based on `5.10-rc4`.
# TODO: Remove this once patches landed in kernel.
boot.kernelPackages = let
linux_patched_pkg = { buildLinux, fetchurl, modDirVersionArg ? null, ... }@args:
buildLinux (args // rec {
version = "5.10-rc4";
extraMeta.branch = "5.10";
modDirVersion = if (modDirVersionArg == null) then
builtins.replaceStrings [ "-" ] [ ".0-" ] version
else
modDirVersionArg;
src = fetchurl {
url = "https://git.kernel.org/torvalds/t/linux-${version}.tar.gz";
sha256 = "1fc68lka76n1dygyn914c4vhxqzwv951pp4kdkrr0jv5nvdnyplb";
};
kernelPatches = [
# kvalo qca6390 patches
# https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/log/?h=ath11k-qca6390-bringup
{
name = "add-64-bit-check-before-reading-msi-high-addr";
patch = pkgs.fetchpatch {
url = "https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/patch/?id=065c9528cc508cfbf6e3399582df29f76f56163c";
sha256 = "1mqhwags919vlxllzqh5kj4b2l869swvfwa89jk804a1l4l02fmv";
};
}
{
name = "pci-support-platforms-with-one-msi-vector";
patch = pkgs.fetchpatch {
url = "https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/patch/?id=59c6d022df8efb450f82d33dd6a6812935bd022f";
sha256 = "0sxbb58bnryb9hic1cyc8dzrzachhca7a6hywyzz1pksh9syhs5y";
};
}
{
name = "try-to-allocate-big-block-of-dma-memory-firstly";
patch = pkgs.fetchpatch {
url = "https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/patch/?id=0d8b0aff6b77ea5a8d715ba5d0089f9dffbabf21";
sha256 = "120zqivqhs5080b64h62x69svi6bq02scgnkswa0hbvdncsy63y8";
};
}
{
name = "fix-monitor-status-dma-unmap-direction";
patch = pkgs.fetchpatch {
url = "https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/patch/?id=fa4eea695afb286ae38beb30dabf251335cb4a62";
sha256 = "1sh3d8ck4nlg671j2y8f07394xrqlnbrvh9rmy4l1zfpz7wa7d10";
};
}
{
name = "hook-mhi-suspend-and-resume";
patch = pkgs.fetchpatch {
url = "https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/patch/?id=762fe5bc2dd1e43ef307a375861b1a8c414b14e3";
sha256 = "154p8gp4smmmkhyx127f6rib04xd5bn38a3n4893rbyyb5kckv40";
};
}
{
name = "implement-hif-suspend-and-resume-functions";
patch = pkgs.fetchpatch {
url = "https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/patch/?id=2f164833bcca14e8aec0b2566eae4b5a7d09ee6f";
sha256 = "1ic968y1ivlgfhbj67ds809zqas7n50kc6wb8jgksk227dvagnip";
};
}
{
name = "read-select_window-register-to-ensure-write-is-finished";
patch = pkgs.fetchpatch {
url = "https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/patch/?id=6afab932ece78fedc1538c20c2aefdd13aa6c9d0";
sha256 = "19jiz9mf868rj57ljjdb3n97sfi6x78ac9kgd7fhg1bh0zjjiskp";
};
}
{
name = "implement-htc-suspend-related-callbacks";
patch = pkgs.fetchpatch {
url = "https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/patch/?id=69ab2835b82c176e793195243e1400d4f8db3647";
sha256 = "1gba5h0s6c6zjplw8zyqc2qj21ly1m2xzbgznml159wzj2xvzb2m";
};
}
{
name = "put-target-to-suspend-when-system-enters-suspend-state";
patch = pkgs.fetchpatch {
url = "https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/patch/?id=68023bee4d61ea2b02af49bba00adabba51d8b6b";
sha256 = "05aqdjd5xps0wncrh41r805fn2rpnhw53pn02a374g81bbifwa5q";
};
}
{
name = "pci-print-a-warning-if-firmware-crashed";
patch = pkgs.fetchpatch {
url = "https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/patch/?id=23dcef9436560a033703164c4daff9e36e640969";
sha256 = "0m45wvilr2cgdkpdjzcz4hdzsfs596ibjsvd7sdksjbrp5wslla1";
};
}
{
name = "qmi-print-allocated-memory-segment-addresses-and-sizes";
patch = pkgs.fetchpatch {
url = "https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/patch/?id=a327caa4a5a677161a6f1d29514e8cb42236e956";
sha256 = "1id6xz7siw1x2xa00psqvr4h5zb0xd83apy0cyv4jqzkd5x1kwl0";
};
}
{
name = "hack-add-delays-to-suspend-and-resume-handlers";
patch = pkgs.fetchpatch {
url = "https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/patch/?id=a9ce8040a968bdbb5aad2d767298d390e2507b16";
sha256 = "02chzhmkkxl4rxkp5vmab9sm218jggns1yanhqkfkpvdpzlz2dlg";
};
}
{
name = "put-hw-to-dbs-using-mode";
patch = pkgs.fetchpatch {
url = "https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/patch/?id=ce8b5dfc16a0b84ac9ab2d508c2d5e66e8bf179a";
sha256 = "0gcnzn82mjdqy3ly494xfawqb9xvwd01dcdr43cw8ik92jggs4sf";
};
}
{
name = "fix-pcie-link-unstable-issue";
patch = pkgs.fetchpatch {
url = "https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/patch/?id=a82a3aee7cde95d533c28cad3749e3c354011896";
sha256 = "0r26g7j7kkm76bippp79vd462ykc8k8p0bxr7pshhkyazs6v1ij3";
};
}
{
name = "fix-pci-l1ss-clock-unstable-problem";
patch = pkgs.fetchpatch {
url = "https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/patch/?id=08816aab67540e6babc558dafa973fc905a9afa1";
sha256 = "180hp6iwgw7cqiiwhp9cnzwr5z9n26pphi2j693x751crzr0xkzw";
};
}
{
name = "disable-otp-write-privilege";
patch = pkgs.fetchpatch {
url = "https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/patch/?id=86c5a1d6983e647a55448c80f94eb8f0aa97dfad";
sha256 = "176g07kpsqnkc3vpfx2lhlrksmdg05m0zxn1i5yfvksczp2215iq";
};
}
{
name = "disable-aspm-l0sls-before-downloading-firmware";
patch = pkgs.fetchpatch {
url = "https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/patch/?id=8bd374e3305359ca0be9fe88e8a1edc1abd537eb";
sha256 = "1grjsf6jvn536cz6wil79l2lzc90ga1c7sisv9j0qac7jzr7x5rz";
};
}
{
name = "purge-rx-pktlog-when-entering-suspend";
patch = pkgs.fetchpatch {
url = "https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/patch/?id=6f481de563dd108bd3df616c80e60f308b7a48e3";
sha256 = "14qd1qv8v3mcslj7crzrw0ib1caa7vbnq7jkq163248658bbmk6p";
};
}
{
name = "set-credit_update-flag-for-flow-controlled-ep-only";
patch = pkgs.fetchpatch {
url = "https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/patch/?id=6e0fba395a054cd58d87b3749f1f4ff2f3fef92e";
sha256 = "0sgjxj6m3fdlgdfg7rv5fajfmbmrccy5asrammlgbc7gh5sn9ac4";
};
}
{
name = "implement-wow-enable-and-wow-wakeup-command";
patch = pkgs.fetchpatch {
url = "https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/patch/?id=cfca935c92d8f2b31c95e7fd074645245f54492a";
sha256 = "0dwbsqkw3f8v676s0x3jv04w0qk36ypvnwh02rx4qfdk38sh0j3j";
};
}
{
name = "add-ce-irq-enable-and-disable-hif-layer-functions";
patch = pkgs.fetchpatch {
url = "https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/patch/?id=9297794a5d5af5e82b9554677f959add281a5b76";
sha256 = "0hl93l8khh36drllxii969nvkb6p4hh28gnjyg0y10adm5q9b4ac";
};
}
{
name = "put-target-to-wow-state-when-suspend-happens";
patch = pkgs.fetchpatch {
url = "https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/patch/?id=0c214f7ebce5eadb589554611bb927517c7aa7ea";
sha256 = "0k4af5i12ghgviraig1zcm8b4fngws8wmhhn9w902nnn3miqy7sw";
};
}
{
name = "fix-incorrect-tlvs-in-scan-start-command";
patch = pkgs.fetchpatch {
url = "https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/patch/?id=bfa226b7e2e988609631e7f6cd0d4e9ede423f6b";
sha256 = "03qb5d0dm77l2ifmcy87p064qd55bg9kqx9nmxy6lrvz83crizpb";
};
}
{
name = "vdev-delete-sync-with-fw";
patch = pkgs.fetchpatch {
url = "https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/patch/?id=c1d3ee50859a2d2c132a8461fdabde568df5ee20";
sha256 = "1dscfdqv5x3h024gryh0464mky0j6z681rliiix17kdh172vxx52";
};
}
{
name = "peer-delete-sync-with-fw";
patch = pkgs.fetchpatch {
url = "https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/patch/?id=6244933ddba318b36bb00c48eeb8d63a24a901c2";
sha256 = "0p1663w0lik44gwyfzmxxiwnc3s9n3p46aappla8pbfk9wdgw86d";
};
}
# Extra patches by wink.
{
# Improves some cases in which races could occur.
name = "w1nk-irq-lock-patch";
patch = pkgs.fetchpatch {
url = "https://raw.githubusercontent.com/w1nk/ath11k-debug/master/one-irq-manage.patch";
sha256 = "011db3h10smqy0ni0qr9mkyhykf1f3yq6yym6ysbb7jr7l51q0n9";
};
}
{
# System crashes appear to have been caused by MHI state transitions to M2 state.
# Currently under investigation.
# http://lists.infradead.org/pipermail/ath11k/2020-December/000876.html
name = "w1nk-disable-mhi-m2-transition";
patch = ./disable-mhi-m2.patch;
}
];
} // (args.argsOverride or { }));
linux_patched = pkgs.callPackage linux_patched_pkg { };
in pkgs.recurseIntoAttrs (pkgs.linuxPackagesFor linux_patched);
# Confirmed necessary to get audio working as of 2020-11-13:
# https://bbs.archlinux.org/viewtopic.php?pid=1933643#p1933643
boot.extraModprobeConfig = ''
options snd-intel-dspcfg dsp_driver=1
'';
# Touchpad goes over i2c.
# Without this we get errors in dmesg on boot and hangs when shutting down.
boot.blacklistedKernelModules = [ "psmouse" ];
# Allows for updating firmware via `fwupdmgr`.
# services.fwupd.enable = true;
}