How to use latest iwlwifi firmware from linux-firmware?

I’m trying to use the latest firmware for iwlwifi, and in linux-firmware it’s, I believe, iwlwifi-ty-a0-gf-a0-66.ucode. However at boot I see instead that it’s loading an older version.

I’ve set hardware.enableRedistributableFirmware = true; and I can see that the -66 firmware exists in the store:

/nix/store/360yy6cslh0gzk6jlgi9w4hdwmfg3sj3-firmware/lib/firmware/iwlwifi-ty-a0-gf-a0-59.ucode
/nix/store/360yy6cslh0gzk6jlgi9w4hdwmfg3sj3-firmware/lib/firmware/iwlwifi-ty-a0-gf-a0-62.ucode
/nix/store/360yy6cslh0gzk6jlgi9w4hdwmfg3sj3-firmware/lib/firmware/iwlwifi-ty-a0-gf-a0-63.ucode
/nix/store/360yy6cslh0gzk6jlgi9w4hdwmfg3sj3-firmware/lib/firmware/iwlwifi-ty-a0-gf-a0.pnvm
/nix/store/afiir4cny17x6vqhvc53nn3gdyxg0wq0-firmware-linux-nonfree-2021-09-19/lib/firmware/iwlwifi-ty-a0-gf-a0-59.ucode
/nix/store/afiir4cny17x6vqhvc53nn3gdyxg0wq0-firmware-linux-nonfree-2021-09-19/lib/firmware/iwlwifi-ty-a0-gf-a0-62.ucode
/nix/store/afiir4cny17x6vqhvc53nn3gdyxg0wq0-firmware-linux-nonfree-2021-09-19/lib/firmware/iwlwifi-ty-a0-gf-a0-63.ucode
/nix/store/afiir4cny17x6vqhvc53nn3gdyxg0wq0-firmware-linux-nonfree-2021-09-19/lib/firmware/iwlwifi-ty-a0-gf-a0-66.ucode
/nix/store/afiir4cny17x6vqhvc53nn3gdyxg0wq0-firmware-linux-nonfree-2021-09-19/lib/firmware/iwlwifi-ty-a0-gf-a0.pnvm
/nix/store/hcrzrn5lb8ml55kjaiqrjz7i3554bbmw-firmware/lib/firmware/iwlwifi-ty-a0-gf-a0-59.ucode
/nix/store/hcrzrn5lb8ml55kjaiqrjz7i3554bbmw-firmware/lib/firmware/iwlwifi-ty-a0-gf-a0-62.ucode
/nix/store/hcrzrn5lb8ml55kjaiqrjz7i3554bbmw-firmware/lib/firmware/iwlwifi-ty-a0-gf-a0-63.ucode
/nix/store/hcrzrn5lb8ml55kjaiqrjz7i3554bbmw-firmware/lib/firmware/iwlwifi-ty-a0-gf-a0.pnvm
/nix/store/k44wr6xgz2gng6vrvlyzk2hqf159gq3a-firmware/lib/firmware/iwlwifi-ty-a0-gf-a0-59.ucode
/nix/store/k44wr6xgz2gng6vrvlyzk2hqf159gq3a-firmware/lib/firmware/iwlwifi-ty-a0-gf-a0-62.ucode
/nix/store/k44wr6xgz2gng6vrvlyzk2hqf159gq3a-firmware/lib/firmware/iwlwifi-ty-a0-gf-a0-63.ucode
/nix/store/k44wr6xgz2gng6vrvlyzk2hqf159gq3a-firmware/lib/firmware/iwlwifi-ty-a0-gf-a0-66.ucode
/nix/store/k44wr6xgz2gng6vrvlyzk2hqf159gq3a-firmware/lib/firmware/iwlwifi-ty-a0-gf-a0.pnvm
/nix/store/kw62ks6618jbaabfv8g0a8205crj1056-firmware/lib/firmware/iwlwifi-ty-a0-gf-a0-59.ucode
/nix/store/kw62ks6618jbaabfv8g0a8205crj1056-firmware/lib/firmware/iwlwifi-ty-a0-gf-a0-62.ucode
/nix/store/kw62ks6618jbaabfv8g0a8205crj1056-firmware/lib/firmware/iwlwifi-ty-a0-gf-a0-63.ucode
/nix/store/kw62ks6618jbaabfv8g0a8205crj1056-firmware/lib/firmware/iwlwifi-ty-a0-gf-a0.pnvm
/nix/store/lazajfbnrvbbmy8wpxj2n8m0p0xs8y6m-firmware/lib/firmware/iwlwifi-ty-a0-gf-a0-59.ucode
/nix/store/lazajfbnrvbbmy8wpxj2n8m0p0xs8y6m-firmware/lib/firmware/iwlwifi-ty-a0-gf-a0-62.ucode
/nix/store/lazajfbnrvbbmy8wpxj2n8m0p0xs8y6m-firmware/lib/firmware/iwlwifi-ty-a0-gf-a0-63.ucode
/nix/store/lazajfbnrvbbmy8wpxj2n8m0p0xs8y6m-firmware/lib/firmware/iwlwifi-ty-a0-gf-a0.pnvm
/nix/store/wmj5qqvvzcb80gakfsk85ggd56vs32zz-firmware-linux-nonfree-2021-07-16/lib/firmware/iwlwifi-ty-a0-gf-a0-59.ucode
/nix/store/wmj5qqvvzcb80gakfsk85ggd56vs32zz-firmware-linux-nonfree-2021-07-16/lib/firmware/iwlwifi-ty-a0-gf-a0-62.ucode
/nix/store/wmj5qqvvzcb80gakfsk85ggd56vs32zz-firmware-linux-nonfree-2021-07-16/lib/firmware/iwlwifi-ty-a0-gf-a0-63.ucode
/nix/store/wmj5qqvvzcb80gakfsk85ggd56vs32zz-firmware-linux-nonfree-2021-07-16/lib/firmware/iwlwifi-ty-a0-gf-a0.pnvm

However boot logs show:

kernel: iwlwifi 0000:aa:00.0: Direct firmware load for iwlwifi-ty-a0-gf-a0-64.ucode failed with error -2
kernel: iwlwifi 0000:aa:00.0: api flags index 2 larger than supported by driver
kernel: iwlwifi 0000:aa:00.0: TLV_FW_FSEQ_VERSION: FSEQ Version: 0.0.2.25
kernel: iwlwifi 0000:aa:00.0: loaded firmware version 63.c04f3485.0 ty-a0-gf-a0-63.ucode op_mode iwlmvm
kernel: iwlwifi 0000:aa:00.0: Detected Intel(R) Wi-Fi 6 AX210 160MHz, REV=0x420
kernel: iwlwifi 0000:aa:00.0: loaded PNVM version 0xd35929d8

I thought at first that maybe I needed to adjust hardware.firmware, but looking at the source for all-firmware.nix it seems to do that.

Why isn’t the newer firmware being loaded at boot?

Additional findings:

The firmware desired is not in the list from modinfo iwlwifi.

Following the nixos-option hardware.firmware output, the appropriate derivations including the desired firmware do appear to be included.

ls $(cat /sys/module/firmware_class/parameters/path) shows the desired firmware in that directory.

So why isn’t it getting loaded?

After more digging, I believe this is due to the iwlwifi driver having a max version specified, and the newer firmware is not supported on 5.14, but will be in 5.15. See commit. Will see what happens when 5.15 is out and built.

1 Like