|
28 | 28 | xavier-nx = "${pkgs.nvidia-jetpack.l4t-nvfancontrol}/etc/nvpower/nvfancontrol/nvfancontrol_p3668.conf";
|
29 | 29 | xavier-nx-emmc = "${pkgs.nvidia-jetpack.l4t-nvfancontrol}/etc/nvpower/nvfancontrol/nvfancontrol_p3668.conf";
|
30 | 30 | };
|
| 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))); |
31 | 44 | in
|
32 | 45 | lib.mkMerge [{
|
33 | 46 | # Turn on nvpmodel if we have a config for it.
|
@@ -150,36 +163,41 @@ lib.mkMerge [{
|
150 | 163 | })
|
151 | 164 | (lib.mkIf (lib.any (som: som == cfg.som) [ "orin-nx" "orin-nano" ]) {
|
152 | 165 | 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 | + ]) |
184 | 202 | ];
|
185 | 203 | })]
|
0 commit comments