Skip to content

Commit 2d25a65

Browse files
jmbaurdanielfullmer
authored andcommitted
Include wifi/bluetooth firmware wanted by orin-agx
Also don't use `linkFarm` to create the firmware derivations since that ends up requiring all of `linux-firmware` to exist in the nixos system's closure.
1 parent b936066 commit 2d25a65

File tree

1 file changed

+49
-31
lines changed

1 file changed

+49
-31
lines changed

modules/devices.nix

+49-31
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,19 @@ let
2828
xavier-nx = "${pkgs.nvidia-jetpack.l4t-nvfancontrol}/etc/nvpower/nvfancontrol/nvfancontrol_p3668.conf";
2929
xavier-nx-emmc = "${pkgs.nvidia-jetpack.l4t-nvfancontrol}/etc/nvpower/nvfancontrol/nvfancontrol_p3668.conf";
3030
};
31+
32+
# Extract from linux firmware so that the 1GiB+ size of linux-firmware
33+
# doesn't become a runtime dependency in a nixos system's closure.
34+
extractLinuxFirmware = name: paths: (pkgs.runCommand name { }
35+
(lib.concatLines (map
36+
# all files in linux-firmware are read-only
37+
(firmwarePath: ''
38+
install -Dm0444 \
39+
--target-directory=$(dirname $out/lib/firmware/${firmwarePath}) \
40+
$(realpath ${pkgs.linux-firmware}/lib/firmware/${firmwarePath})
41+
''
42+
)
43+
paths)));
3144
in
3245
lib.mkMerge [{
3346
# Turn on nvpmodel if we have a config for it.
@@ -150,36 +163,41 @@ lib.mkMerge [{
150163
})
151164
(lib.mkIf (lib.any (som: som == cfg.som) [ "orin-nx" "orin-nano" ]) {
152165
hardware.firmware = [
153-
(pkgs.linkFarm "r8169-firmware"
154-
(map
155-
(firmwarePath: {
156-
name = "lib/firmware/${firmwarePath}";
157-
path = "${pkgs.linux-firmware}/lib/firmware/${firmwarePath}";
158-
}) [
159-
# From https://github.com/OE4T/linux-tegra-5.10/blob/20443c6df8b9095e4676b4bf696987279fac30a9/drivers/net/ethernet/realtek/r8169_main.c#L38
160-
# We include all the firmware referenced by the r8168 module so that
161-
# `makeModulesClosure` doesn't spit out warnings.
162-
"rtl_nic/rtl8168d-1.fw"
163-
"rtl_nic/rtl8168d-2.fw"
164-
"rtl_nic/rtl8168e-1.fw"
165-
"rtl_nic/rtl8168e-2.fw"
166-
"rtl_nic/rtl8168e-3.fw"
167-
"rtl_nic/rtl8168f-1.fw"
168-
"rtl_nic/rtl8168f-2.fw"
169-
"rtl_nic/rtl8105e-1.fw"
170-
"rtl_nic/rtl8402-1.fw"
171-
"rtl_nic/rtl8411-1.fw"
172-
"rtl_nic/rtl8411-2.fw"
173-
"rtl_nic/rtl8106e-1.fw"
174-
"rtl_nic/rtl8106e-2.fw"
175-
"rtl_nic/rtl8168g-2.fw"
176-
"rtl_nic/rtl8168g-3.fw"
177-
"rtl_nic/rtl8168h-2.fw" # wanted by orin-nano and orin-nx
178-
"rtl_nic/rtl8168fp-3.fw"
179-
"rtl_nic/rtl8107e-2.fw"
180-
"rtl_nic/rtl8125a-3.fw"
181-
"rtl_nic/rtl8125b-2.fw"
182-
"rtl_nic/rtl8126a-2.fw"
183-
]))
166+
# From https://github.com/OE4T/linux-tegra-5.10/blob/20443c6df8b9095e4676b4bf696987279fac30a9/drivers/net/ethernet/realtek/r8169_main.c#L38
167+
(extractLinuxFirmware "r8168-firmware" [
168+
"rtl_nic/rtl8168d-1.fw"
169+
"rtl_nic/rtl8168d-2.fw"
170+
"rtl_nic/rtl8168e-1.fw"
171+
"rtl_nic/rtl8168e-2.fw"
172+
"rtl_nic/rtl8168e-3.fw"
173+
"rtl_nic/rtl8168f-1.fw"
174+
"rtl_nic/rtl8168f-2.fw"
175+
"rtl_nic/rtl8105e-1.fw"
176+
"rtl_nic/rtl8402-1.fw"
177+
"rtl_nic/rtl8411-1.fw"
178+
"rtl_nic/rtl8411-2.fw"
179+
"rtl_nic/rtl8106e-1.fw"
180+
"rtl_nic/rtl8106e-2.fw"
181+
"rtl_nic/rtl8168g-2.fw"
182+
"rtl_nic/rtl8168g-3.fw"
183+
"rtl_nic/rtl8168h-2.fw" # wanted by orin-nx and orin-nano
184+
"rtl_nic/rtl8168fp-3.fw"
185+
"rtl_nic/rtl8107e-2.fw"
186+
"rtl_nic/rtl8125a-3.fw"
187+
"rtl_nic/rtl8125b-2.fw"
188+
"rtl_nic/rtl8126a-2.fw"
189+
])
190+
];
191+
})
192+
(lib.mkIf (cfg.som == "orin-agx") {
193+
hardware.firmware = lib.optionals
194+
(config.hardware.bluetooth.enable
195+
|| config.networking.wireless.enable
196+
|| config.networking.wireless.iwd.enable) [
197+
# From https://github.com/OE4T/linux-tegra-5.10/blob/20443c6df8b9095e4676b4bf696987279fac30a9/drivers/net/wireless/realtek/rtw88/rtw8822c.c#L4398
198+
(extractLinuxFirmware "rtw88-firmware" [
199+
"rtw88/rtw8822c_fw.bin"
200+
"rtw88/rtw8822c_wow_fw.bin"
201+
])
184202
];
185203
})]

0 commit comments

Comments
 (0)