puppylinux-woof-CE / woof-CE

woof - the Puppy builder
GNU General Public License v2.0
399 stars 287 forks source link

kernel-kit - firmware #1838

Closed 01micko closed 4 years ago

01micko commented 4 years ago

There is an ancient script in kernel-kit called fw.sh which attempts to cherry pick firmware for the configured kernel. While this works it doesn't filter the firmware on kernel version resulting in a rather bloated fdrv or zdrv.

I trawled through various kernel sources and modules that require firmware (mainly wireless and gpu) to see if I could grok out the firmware versions for the kernel being built to no avail. Sources between modules differ too much to make an efficient script in a timely manner - in other words, I don't have a month to dedicate to this! So, as we do, I have come up with a work-around but it does have certain caveats.

What it does is queries modinfo for every module in /lib/modules/$(uname -r) tree looking for the firmware: line. The big disadvantage with that is that you can only build a kernel the same version as the kernel you are running. The big advantage is that the fdrv is reduced from around 100MB to 40MB so is feasible to include in an iso. Lets face a fact - if a user's hardware doesn't work - especially the main things such as GPU, input devices and network connectivity, then that user is more than likely to move on from Puppy :disappointed: .

I think (disclaimer* don't know) that this should work across kernel PATCHLEVELs; ie: you should be able to use this method from say a 4.19.54 kernel when building a 4.19.132 kernel (latest at time of writing) however YMMV and the kernel configuration would need to be near identical as firmware blobs could be missed. I would be more comfortable if the SUBLEVEL were within say 10 to 15 releases. It all depends if the developers decided that a driver for say a wifi device needed the upgraded corresponding firmware blob, for instance if the vendor of that blob issued a critical security patch.

This does become somewhat of a "chicken and egg" problem but there is another work-around that could be employed. Instead of doing a full kernel rebuild, perhaps, if this new method is employed, that either only the zdrv (kernel-modules*.sfs) or only the fdrv need to be rebuilt, but of course depending on the fact the the newly built kernel is running such that correct firmware is chosen. Of course all firmware is grabbed from the latest linux-firmware git repo.

gyrog commented 4 years ago

Your idea is a good place to start. The "linux_firmware...sfs" is now upto 186.2MiB, so we would like to avoid including that in each release. So, we need to use a subset, either a guessed manual process, (simple script), or try some logic.

So logical process becomes:

  1. Compile kernel without any firmware.
  2. Reboot using new kernel and complete firmware sfs in stack above "zdrv...sfs", e.g. as "fdrv...sfs"
  3. Run your process to produce new "kernel_fdrv...sfs"
  4. Make "kernel_fdrv...sfs" the release "fdrv...sfs".

Note: This produces an "fdrv...sfs" that is dependent on the kernel, not the current hardware.

Hmmm.. could be neater if we could get "modinfo" about the modules in a specified "zdrv...sfs" rather than the current modules.

A separate process could trim it for the current hardware, by doing it for only the loaded modules.

01micko commented 4 years ago

Hmmm.. could be neater if we could get "modinfo" about the modules in a specified "zdrv...sfs" rather than the current modules.

Bingo!

# modinfo --help
Usage:
    modinfo [options] filename [args]
Options:
    -a, --author                Print only 'author'
    -d, --description           Print only 'description'
    -l, --license               Print only 'license'
    -p, --parameters            Print only 'parm'
    -n, --filename              Print only 'filename'
    -0, --null                  Use \0 instead of \n
    -F, --field=FIELD           Print only provided FIELD
    -k, --set-version=VERSION   Use VERSION instead of `uname -r`
    -b, --basedir=DIR           Use DIR as filesystem root for /lib/modules
    -V, --version               Show version
    -h, --help                  Show this help
# 

This numb skull already wrote a script based on my original thoughts, works too, however with -k and -b options we can easily do it before any sfs is made.

Back to work..

Of course this development will also affect 3builddistro and change_kernels scripts because there is limited support for fdrv in the former and none in the latter. I'll have to revert f632263 also. The 'later date' is almost here.

01micko commented 4 years ago

Hmmm doesn't seem to work - however if I 'modinfo' the full path (can be relative it seems) I get the info I need from the target kernel. About to test a few full builds from 4.19.132 (3.16.85[EOL], 4.4.230, 4.9.230). I have only one machine that would be happy with the old one but the others should be ok on most of my hardware.

01micko commented 4 years ago

Ok, I've successfully compiled 4 kernels (3.19.85, 4.4.230, 4.9.230,4.19.132 - all latest and all with mmc builtin) with separate targeted fdrv files. They are much smaller than the rot that was produced by the old fw.sh script. Of course non-free blobs are not included but there is a script in woof that can take care of that - which I will delete because it violates the gpl. That script can be shipped as part of the build as a user is free to download these firmwares; they are not free to redistribute (looking at you Broadcom!). That script can be modified to be targeted as well.

A separate process could trim it for the current hardware, by doing it for only the loaded modules.

Interestingly, I did write a script for my own purposes that does just that. It is what gave me the idea.


The difference in firmware versions can be demonstrated by a diff between k3.16.85 and 4.19.132 using just the iwlwifi.ko module - this was produced by running modinfo /path/to/iwlwifi.ko -F firmware and redirecting to file for respective kernels - not while they were running. The diff follows -

--- iwlwifi-fw-3.16.85.txt  2020-07-12 08:52:04.408430012 +1000
+++ iwlwifi-fw-4.19.132.txt 2020-07-12 08:48:45.358441715 +1000
@@ -7,10 +7,27 @@ iwlwifi-2000-6.ucode
 iwlwifi-5150-2.ucode
 iwlwifi-5000-5.ucode
 iwlwifi-6000g2b-6.ucode
-iwlwifi-6000g2a-5.ucode
+iwlwifi-6000g2a-6.ucode
 iwlwifi-6050-5.ucode
-iwlwifi-6000-4.ucode
-iwlwifi-7265-9.ucode
-iwlwifi-3160-9.ucode
-iwlwifi-7260-9.ucode
-iwlwifi-8000-8.ucode
+iwlwifi-6000-6.ucode
+iwlwifi-7265D-29.ucode
+iwlwifi-7265-17.ucode
+iwlwifi-3168-29.ucode
+iwlwifi-3160-17.ucode
+iwlwifi-7260-17.ucode
+iwlwifi-8265-36.ucode
+iwlwifi-8000C-36.ucode
+iwlwifi-9260-th-b0-jf-b0-38.ucode
+iwlwifi-9260-th-a0-jf-a0-38.ucode
+iwlwifi-9000-pu-a0-jf-b0-38.ucode
+iwlwifi-9000-pu-b0-jf-b0-38.ucode
+iwlwifi-9000-pu-a0-jf-a0-38.ucode
+iwlwifi-Qu-b0-jf-b0-38.ucode
+iwlwifi-su-z0-38.ucode
+iwlwifi-QuQnj-a0-hr-a0-38.ucode
+iwlwifi-QuQnj-a0-jf-b0-38.ucode
+iwlwifi-QuQnj-b0-hr-b0-38.ucode
+iwlwifi-Qu-b0-hr-b0-38.ucode
+iwlwifi-QuQnj-f0-hr-a0-38.ucode
+iwlwifi-Qu-a0-jf-b0-38.ucode
+iwlwifi-Qu-a0-hr-a0-38.ucode

Certainly a lot of bloat is trimmed as the full set of iwlwifi firmwares totals ~130MB uncompressed! That's just 1 example.

The following was run in linux-firmware git local repo -

# x=0;y=0 ; for i in iwlwifi*;do x=$(stat -c %s $i);y=$(($y + $x));done;echo $y
134775401
gyrog commented 4 years ago

I see you've already discovered the "-b" and "-k" options for "modinfo". I mounted the zdrv...sfs of a different Puppy as "/mnt/data" and used the command: "modinfo -b /mnt/data -k 4.4.227-mmc hid-logitech-dj" This worked for me from a Puppy running a different kernel that had the "hid-logitech-dj" driver builtin.

Anyway, it looks like you are making good progress.

I know what firmware my desktop needs, so it will be interesting to see the results of this script.

01micko commented 4 years ago

I see you've already discovered the "-b" and "-k" options for "modinfo".

It actually turns out to be less code if I just 'modinfo' the module.ko file directly in the loop. Same result. Code soon, I just want to test building in the firmware to the zdrive as well. I just set up a loop and knock off the 4 kernels in a row and walk away.

gyrog commented 4 years ago

I just did a little script to generate a local "fdrv...sfs" using "modinfo" on the loaded modules. If the modules are in a sub-directory, it copies the whole of the sub-directory, but if the modules are directly in "/lib/firmware" then it copies the individual file. My idea is that the local "fdrv...sfs" might work for different kernels. On my desktop that results in just 2 sub-directories, just 2.8MiB.

gyrog commented 4 years ago

It's not the firmware blobs themselves that needs to be done by the kernel-kit, it's the list of supported firmware that's important. This could be stored in "zdrv...sfs" as "/lib/modules/$KERENELVER/firmware.list", beside "modules.order", or as "/etc/modules/firmware.list.$KERNELVER" Then the "fdrv...sfs" can be generated again and again with the latest firmware blobs from a local clone of "linux_firmware" git, (or even the latest downloadable "linux_firmware...sfs"), based on the list.

bigpup1 commented 4 years ago

If I understand correctly. You are talking about making a firmware sfs package, based on what hardware support, The kernel being used, is configured for. If correct.

The bigger problem is compiling a kernel, that has the needed hardware support, configured correctly, when it is compiled.

I am seeing, in the Puppy Forum, more and more posts, about people having to change kernel, to get their hardware supported. This does seem more about very new hardware than very old hardware. But not always that simple. In testing for bugs in Fossapup64 9.0. I had wired network etho hardware that was not recognized, along with WIFI adapter hardware. The thing that did not seem right, was this hardware worked in Bionicpup64 8.0. For the WIFI device, the firmware needed, seems to be in Fossapup64 9.0. So, I wonder if the kernel is configured to support this specific hardware device.

Also, I have a HP Chromebook that I converted to a Puppy laptop. Puppy Linux is the only OS on it. Bios has been replaced, for one that will work with and boot Linux OS's. Bionicpup64 8.0 runs great on it! But, had to replace the kernel, with one that was compiled more for the hardware, in a Chromebook. Support all the hardware, including the internal sound device.

Point is. Compiling the kernel, for correct hardware support, is just as important, as providing the needed firmware, for the hardware.

Also, seems if you are going to some location to get the firmware. The https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git would be a very good place to get it.

01micko commented 4 years ago

@bigpup1 this is OT. Configuring the kernel is a completely different subject - kernel-kit gets its firmware from your mentioned link.

01micko commented 4 years ago

@bigpup1 what is that wireless driver you needed - rtl something?

01micko commented 4 years ago

@gyrog here are a couple of kernels to try.. (64 bit - will run in 32)

huge-4.19.132-slacko64.tar.bz2 md5: 9aa32169c8815ef3e81cd4dd811f4dab huge-4.19.132-slacko64.tar.bz2 huge-5.4.51-slacko64.tar.bz2 md5: d75bedffe6f631a3ffbde8fc018ad013 huge-5.4.51-slacko64.tar.bz2

bigpup1 commented 4 years ago

This is info from the working Bionicpup64 8.0 It is still not found in Fossapup64 9.0.3

This is a USB WIFI adapter ID = 0846:9030 NetGear, Inc. WNA1100 Wireless-N 150 [Atheros AR9271] VendorID=0846 ProductID=9030 Rev=01.08 Manufacturer=NETGEAR WNA Product=WNA1100 SerialNumber=12345 Driver=ath9k_htc

The strange thing is the needed firmware and driver module seem to be in Fossapup64 9.0.3 If I go to Network Wizard and try to load the ath9k_htc driver module. It finds nothing for a device.

Another WIFI that also did not show in Fossapup64 9.0 needed the r8822be driver module and the rtl8822befw.bin firmware file.

Also had a problem with wired network etho until needed support files where added. Ethernet controller [0200]: Intel Corporation Ethernet Connection (7) I219-V [8086:15bc] (rev 10) • Kernel Driver: e1000e • Memory Used: 164.00 KB • Path: /lib/modules/4.19.23/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko • Driver Version: 3.2.6-k • Description: Intel(R) PRO/1000 Network Driver

Note: The hardware is on two different computers. So, the info is from the one I am on, right now. But, the same info applies to the hardware, we are talking about.

01micko commented 4 years ago

@bigpup1 try the 5.4.51 kernel in fossa - be aware if you use the latest change_kernels it doesn't handle fdrv.

Here's a script to run where the kernel lives You may have to shift the fdrv in the kernel package there manually

#!/bin/sh
. /etc/DISTRO_SPECS
F=`ls|grep grep -o '^fdrv.*slacko64$'`
mv -f $F $DISTRO_FDRVSFS
echo 'done'

get this pet if you want to try that problematic realtek wifi thing: rt88-wirless-5.4.51-x86_64.pet. Install it and reboot. See if wireless works.

Note: as mentioned above in a previous post change_kernels will be fixed if/when this new development is commited

mrfricks commented 4 years ago

Hi @bigpup1 & @01micko , i used bionicpups dotconfig as a base and believe that there's been a few changes in the driver for some realtek devices. Some now use the rtw driver and i missed that when configuring the kernel.

for the ath9k_htc the kernel module & firmware are there as far as i can tell. I've had a look in debians firmware package and it has this extra file /etc/modprobe.d/ath9k_htc.conf

options ath9k_htc use_dev_fw=1

so maybe try creating that. Also try dmesg in a terminal & have a look at /var/log/messages when you plug it in.

@01micko looking forward to your new firmware script, it will save a lot problems when deciding what firmware to include.

bigpup1 commented 4 years ago

@01micko & @mrfricks, Thanks for all of this! With Fossapup64 9.0.3 the realtek wifi is working OK. 666philb added what was needed that was missing in the earlier versions of Fossapup64.

The netgear WiFi USB adapter is the problem. UPDATE: Forget about this device. I think it is going bad!!!

I really was not expecting you to try and fix my problems. I figure that is up to 66philb who is developing Fossapup64 9.0.X But I am sure any help by you, he would be grateful for!

I was asked for info, so I figured any problems, would be useful info to you, in trying to get this firmware issue worked out.

PS: 01micko, thanks for the updating to change_kernels, you have done so far. Much more user friendly!

gyrog commented 4 years ago

@01micko I'll try your kernels.

The bit I'm concentrating on is a userland script to create an updated the fdrv...sfs for a particular kernel, using the latest firmware.

I've also played around with the concept, and I've been surprised about the number of firmware blobs that are supported by the kernels I have tried, that do not exist in "linux-firmware.git". And some modules that occur in "/lib/modules/$KERNELVER/modules.order", don't actually exist.

gyrog commented 4 years ago

@01micko Just looking at your kernel packages there are just 2 things:

1) I could not find a text file containing the list of firmware blobs supported by the kernel, in the zdrv. This means that any userland regeneration of the fdrv...sfs will have to trawl the modules again.

2) Handling of symbolic links could cause a problem. e.g. in /lib/firmaware/i915, "bxt_dmc_ver1.bin" is a symbolic link to "bxt_dmc_ver1_07.bin", now we can either, copy the symbolic link and the real blob into the fdrv, or use "cp -L" to copy the real blob into the fdrv with the name of the symbolioc link, or copy the real blob into the fdrv as itself, and omit the symbolic link. Since we cannot be sure how the driver actually accesses the firmware, the first option is the safest, and it's my guess that the second option might be preferred to the third.

Note: My desktop computer uses "i915"

gyrog commented 4 years ago

Sorry, you can probably forget my issue with symbolic links. I just generated a firmware list for 4.4.227 and 4.19.128, and in the 4.4.227 list the symbolic link is referenced, but in the 4.19.128 list the real blob is referenced. So whereas my 4.4.227 fdrv contains the symbolic link and the real blob, my 4.19.128 fdrv contains only the real blob, just like your 4.19.132 fdrv.

gyrog commented 4 years ago

@01micko I tested your 4.9.132 kernel in bionicpup64, and your 5.4.51 kernel in ScPup32. They both worked fine.

Would it be possible for both the "fdrv" and the "kernel-modules" sfs files generated by kernel-kit to have the ".sfs" at the end of the filename, instead of in the middle? Then a single click gives an opportunity to "View contents".

FYI I've been woking on a script to do a similar process, but trawling the currently loaded modules instead of "modules.order", to produce a minimal fdrv for the current machine using the latest firmware. It downloads each individual firmware blob. I ran it in ScPup32 with your 5.4.51 kernel and it produce a 796KiB fdrv that worked fine.

01micko commented 4 years ago

Would it be possible for both the "fdrv" and the "kernel-modules" sfs files generated by kernel-kit to have the ".sfs" at the end of the filename, instead of in the middle?

Actually I am intending to do that. Again, some mods to 3builddistro and change_kernels scripts will be needed but only minor.

I've been woking on a script to do a similar process, but trawling the currently loaded modules instead of "modules.order", to produce a minimal fdrv for the current machine using the latest firmware. It downloads each individual firmware blob.

Sounds good.

Regarding the firmware list, I think I'll add the firmware-$KERNELVER.lst file to /etc/modules/ or even /etc/firmware/ in the fdrvxxx.sfs. Any preference? Mine is the latter.

With recent developments I have received tons of emails over the last day or so, so development will be slowish until the weekend.

Thanks for testing and your ideas.

gyrog commented 4 years ago

@01micko "/etc/firmware/" is fine, but I would prefer that "firmware-$KERNELVER.lst" be stored in the generated "zdrv...sfs", so there is no danger of it being lost if the "fdrv...sfs" is regenerated. It's a little less complicated to create a replacement "fdrv...sfs" if it contains only firmware blobs.

Yes, John de Murga's contribution to Puppy will be greatly missed.

01micko commented 4 years ago

The location I have settled on is output/linux_kernel-5.4.52-slacko64/etc/modules/firmware.lst.$KVER that is, the list goes to the zdrv .

I have added more info to the list. If a firmware isn't found then we can safely assume it is 'non-free' as in the licence doesn't permit redistribution. Mostly b43, b43legacy and dvb firmwares. Some others too. So I have appended no free firmware found delimeted by 2 tab characters for readability. That is probably the last part open for discussion. The delim can be any char or chars and the message need not be a phrase but a single descriptive word like 'non-free'. Here is a snippet of what I have :

mt7601u.bin
mediatek/mt7615_rom_patch.bin
mediatek/mt7615_n9.bin
mediatek/mt7615_cr4.bin
mt7662_rom_patch.bin
mt7662.bin
mt7662_rom_patch.bin
mt7662.bin
mt7603_e2.bin       no free firmware found
mt7603_e1.bin       no free firmware found
mt7628_e2.bin       no free firmware found
mt7628_e1.bin       no free firmware found
mediatek/mt7650e.bin
mediatek/mt7610e.bin
mediatek/mt7610u.bin
mediatek/mt7610e.bin
iwlwifi-4965-2.ucode
iwlwifi-3945-2.ucode
iwlwifi-100-5.ucode
iwlwifi-1000-5.ucode
iwlwifi-135-6.ucode
iwlwifi-105-6.ucode
iwlwifi-2030-6.ucode
iwlwifi-2000-6.ucode
iwlwifi-5150-2.ucode
iwlwifi-5000-5.ucode
iwlwifi-6000g2b-6.ucode
iwlwifi-6000g2a-6.ucode
iwlwifi-6050-5.ucode
iwlwifi-6000-6.ucode        no free firmware found
iwlwifi-7265D-29.ucode
iwlwifi-7265-17.ucode
iwlwifi-3168-29.ucode
iwlwifi-3160-17.ucode
iwlwifi-7260-17.ucode
iwlwifi-8265-36.ucode
iwlwifi-8000C-36.ucode
iwlwifi-9260-th-b0-jf-b0-46.ucode
iwlwifi-9000-pu-b0-jf-b0-46.ucode
iwlwifi-ty-a0-gf-a0-50.ucode        no free firmware found
iwlwifi-so-a0-gf-a0-50.ucode        no free firmware found
iwlwifi-so-a0-hr-b0-50.ucode        no free firmware found
iwlwifi-so-a0-jf-b0-50.ucode        no free firmware found
iwlwifi-cc-a0-50.ucode
iwlwifi-QuQnj-b0-jf-b0-50.ucode     no free firmware found
iwlwifi-QuZ-a0-jf-b0-50.ucode
iwlwifi-QuZ-a0-hr-b0-50.ucode
iwlwifi-Qu-b0-jf-b0-50.ucode
iwlwifi-Qu-c0-hr-b0-50.ucode
iwlwifi-QuQnj-a0-hr-a0-50.ucode     no free firmware found
iwlwifi-QuQnj-b0-hr-b0-50.ucode     no free firmware found
iwlwifi-QuQnj-f0-hr-a0-50.ucode     no free firmware found
iwlwifi-Qu-a0-jf-b0-50.ucode        no free firmware found
iwlwifi-Qu-a0-hr-a0-50.ucode        no free firmware found
ipw2100-1.3.fw      no free firmware found
ipw2100-1.3-p.fw        no free firmware found
ipw2100-1.3-i.fw        no free firmware found
ipw2200-bss.fw      no free firmware found
ipw2200-sniffer.fw      no free firmware found
ipw2200-ibss.fw     no free firmware found

And the count of non free:

# grep 'no free' firmware.lst.* | wc -l
363

out of a total of :

# wc -l firmware.lst.*
1544 firmware.lst.5.4.52

On my ryzen box the list is generated in 3 seconds. On my 4th gen i5 about 15 seconds; negligible in terms of total kernel build time.

gyrog commented 4 years ago

@01micko, Looking good.

My only concern for the delimiter, is that a script can easily extract the firmware blob name from each line using the standard $IFS. This is for a possible script that generates a new fdrv for the currrent kernel, but using the latest firmware. Hmm.. being able to easly extract the "non-free" indicator might be of some benefit, but then again all it would do is save the script from looking in the firmware blob repository and not finding it. Still, perhaps using "non-free", rather than "no free firmware found", might be a slight preference.

gyrog commented 4 years ago

@01micko I not sure what your improved "kernel-kit" is using as a "free firmware blob" repository, but I think that kernel compilers should be encouraged to use a local clone of https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git. Then a simple "git pull" before doing the kernel compile will ensure that the generated fdrv contains the latest firmware blobs, with a minimum of net traffic.

01micko commented 4 years ago

Ok, thanks.

I'll settle on 1 tab char and 'non-free'

I not sure what your improved "kernel-kit" is using as a "free firmware blob" repository, but I think that kernel compilers should be encouraged to use a local clone of https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git.

That is what we have in 'kernel-kit'

gyrog commented 4 years ago

@01micko I look forward to recompiling my kernels when the updated "kernel-kit" is available.

gyrog commented 4 years ago

@01micko Sorry, I had another thought aboout the format of the list file, "/etc/modules/firmware.lst.$KVER". I've just been looking at "/lib/modules/$KVER/modules.dep", it uses the format "module-name: module-name module-name module-name". It's easy to extract the primary module-name by just dropping the ":" and everything after it. Simply dropping the ":" and everyting before it produces the second parameter (the list). Always placing a ":" delimeter after the firmware blob filename, means the format of the second parameter wouldn't matter. If there is no second parameter then there should be a firmware blob in the repositioy, if there is a second parameter, then there'e not point in looking, it's not there.

gyrog commented 4 years ago

@01micko Sorry again. Actually you original 2 tab file could be fairly easily parsed with something like "read BLOB REST". So it doesn't really matter much what format you use.

01micko commented 4 years ago

2 tabs was only for human readability.

A better way, since read can do what you want is to format the output with printf. That way I should be able to get all the non-free entries in 1 column, just for aesthetics.

gyrog commented 4 years ago

Sounds good to me. So, as I said above, I look forward to using the updated "kernel-kit".

01micko commented 4 years ago

Here's what the new /etc/modules/firmware.lst.5.4.53 looks like - typing on an on-screen keyboard on a touchscreen tablet running that kernel:

### If 'non-free' is after a firmware entry it is non-free and will need to be found elsewhere
cavium/cnn55xx_se.fw
qat_895xcc_mmp.bin
qat_895xcc.bin
qat_c62x_mmp.bin
qat_c62x.bin
qat_c3xxx_mmp.bin
qat_c3xxx.bin
rtl_bt/rtl8822b_config.bin
rtl_bt/rtl8822b_fw.bin
rtl_bt/rtl8821a_config.bin                          non-free
rtl_bt/rtl8821a_fw.bin
rtl_bt/rtl8761a_config.bin                          non-free
rtl_bt/rtl8761a_fw.bin
rtl_bt/rtl8723ds_config.bin                         non-free
rtl_bt/rtl8723ds_fw.bin                             non-free
rtl_bt/rtl8723bs_config.bin                         non-free
rtl_bt/rtl8723bs_fw.bin
rtl_bt/rtl8723b_config.bin                          non-free
rtl_bt/rtl8723b_fw.bin
rtl_bt/rtl8723a_fw.bin
mediatek/mt7668pr2h.bin
mediatek/mt7663pr2h.bin
mediatek/mt7622pr2h.bin
ath3k-1.fw
mrvl/sd8997_uapsta.bin                              non-free
mrvl/sd8987_uapsta.bin                              non-free
mrvl/sd8977_uapsta.bin                              non-free
mrvl/sd8897_uapsta.bin
mrvl/sd8887_uapsta.bin
mrvl/sd8797_uapsta.bin
mrvl/sd8787_uapsta.bin
mrvl/sd8688.bin
mrvl/sd8688_helper.bin
bfubase.frm                                         non-free
BCM2033-FW.bin                                      non-free
BCM2033-MD.hex                                      non-free
intel/ibt-12-16.ddc
intel/ibt-12-16.sfi
intel/ibt-11-5.ddc
intel/ibt-11-5.sfi
BT3CPCC.bin                                         non-free
RTL8192E/data.img
RTL8192E/main.img
RTL8192E/boot.img
prism2_ru.fw                                        non-free
rtlwifi/rtl8712u.bin
vntwusb.fw
rtlwifi/rtl8188eufw.bin
RTL8192U/data.img                                   non-free
RTL8192U/main.img                                   non-free
RTL8192U/boot.img                                   non-free
me4000_firmware.bin                                 non-free
daqboard2000_firmware.bin                           non-free
usbduxfast_firmware.bin
me2600_firmware.bin                                 non-free
usbdux_firmware.bin
comedi/jr3pci.idm                                   non-free
usbduxsigma_firmware.bin
niscrb02.bin                                        non-free
niscrb01.bin                                        non-free
ni6534a.bin                                         non-free
rp2.fw
cis/RS-COM-2P.cis
cis/COMpad4.cis
cis/COMpad2.cis
cis/MT5634ZLX.cis
cis/SW_555_SER.cis
cis/SW_7xx_SER.cis
cis/SW_8xx_SER.cis
cis/3CXEM556.cis
cis/3CCFEM556.cis
cis/DP83903.cis
cis/PCMLM28.cis
dvb-fe-xc5000c-4.1.30.7.fw
dvb-fe-xc5000-1.6.114.fw
xc3028L-v36.fw                                      non-free
xc3028-v27.fw                                       non-free
dvb-tuner-si2157-a30-01.fw                          non-free
dvb-tuner-si2141-a10-01.fw                          non-free
dvb-tuner-si2158-a20-01.fw                          non-free
dvb-fe-xc4000-1.4.fw                                non-free
dvb-fe-xc4000-1.4.1.fw
v4l-cx25840.fw
v4l-cx231xx-avcore-01.fw
v4l-cx23885-avcore-01.fw
tdmb_nova_12mhz.inp
tdmb_nova_12mhz_b0.inp                              non-free
tdmb_denver.inp                                     non-free
sms1xxx-stellar-dvbt-01.fw
sms1xxx-nova-b-dvbt-01.fw
sms1xxx-nova-a-dvbt-01.fw
isdbt_rio.inp
isdbt_pele.inp                                      non-free
isdbt_nova_12mhz.inp
isdbt_nova_12mhz_b0.inp
sms1xxx-hcw-55xxx-isdbt-02.fw
sms1xxx-hcw-55xxx-dvbt-02.fw
fm_radio_rio.inp                                    non-free
fm_radio.inp                                        non-free
dvb_rio.inp                                         non-free
dvb_nova_12mhz.inp
dvb_nova_12mhz_b0.inp
dvbh_rio.inp                                        non-free
cmmb_venice_12mhz.inp
cmmb_vega_12mhz.inp
cmmb_ming_app.inp                                   non-free
atsc_denver.inp                                     non-free
dvb-fe-drxj-mc-1.0.8.fw                             non-free
dvb-fe-ds3000.fw                                    non-free
dvb-fe-cx24117.fw                                   non-free
dvb-fe-af9013.fw                                    non-free
dvb-demod-si2168-d60-01.fw                          non-free
dvb-demod-si2168-b40-01.fw                          non-free
dvb-demod-si2168-a30-01.fw                          non-free
dvb-demod-si2168-a20-01.fw                          non-free
dvb-demod-mn88472-02.fw                             non-free
dvb-fe-tda10071.fw                                  non-free
dvb-demod-si2165.fw                                 non-free
dvb-demod-m88rs6000.fw                              non-free
dvb-demod-m88ds3103.fw                              non-free
dvb-demod-mn88473-01.fw                             non-free
lgs8g75.fw
go7007/go7007fw.bin
go7007/go7007tv.bin
go7007/wis-startrek.fw
go7007/lr192.fw
go7007/px-tv402u.fw
go7007/px-m402u.fw
go7007/s2250-2.fw
go7007/s2250-1.fw
cpia2/stv0672_vp4.bin
dvb-usb-p7500.fw                                    non-free
dvb-usb-p1100.fw                                    non-free
dvb-usb-s660.fw                                     non-free
dvb-usb-s630.fw                                     non-free
dvb-usb-dw3101.fw                                   non-free
dvb-usb-dw2104.fw                                   non-free
dvb-usb-dw2102.fw                                   non-free
dvb-usb-dw2101.fw                                   non-free
dvb-usb-dib0700-1.20.fw
v4l-pvrusb2-73xxx-01.fw                             non-free
v4l-pvrusb2-73xxx-01.fw                             non-free
v4l-pvrusb2-24xxx-01.fw                             non-free
v4l-pvrusb2-29xxx-01.fw                             non-free
v4l-cx23885-enc.fw                                  non-free
f2255usb.bin
vicam/firmware.fw
ttusb-budget/dspbootcode.bin
dvb-usb-it9303-01.fw                                non-free
dvb-usb-it9135-02.fw
dvb-usb-it9135-01.fw
dvb-usb-af9035-02.fw                                non-free
dvb-usb-ec168.fw                                    non-free
dvb-usb-terratec-h7-az6007.fw                       non-free
dvb-usb-lme2510-s0194.fw                            non-free
dvb-usb-lme2510-lg.fw                               non-free
dvb-usb-lme2510c-rs2000.fw                          non-free
dvb-usb-lme2510c-s0194.fw                           non-free
dvb-usb-lme2510c-lg.fw                              non-free
dvb-usb-lme2510c-s7395.fw                           non-free
dvb-usb-af9015.fw                                   non-free
xc3028-v27.fw                                       non-free
v4l-cx23418-apu.fw
v4l-cx23418-cpu.fw
v4l-cx23418-dig.fw
dvb-cx18-mpc718-mt352.fw                            non-free
v4l-cx2341x-init.mpg                                non-free
v4l-cx2341x-dec.fw                                  non-free
v4l-cx2341x-enc.fw                                  non-free
go7007/go7007tv.bin
av7110/bootcode.bin
v4l-cx23885-enc.fw                                  non-free
cxgb4/t6fw.bin                                      non-free
cxgb4/t5fw.bin                                      non-free
aic94xx-seq.fw                                      non-free
ql2500_fw.bin
ql2400_fw.bin
ql2322_fw.bin
ql2300_fw.bin
ql2200_fw.bin
ql2100_fw.bin
ct2fw-3.2.5.1.bin
ctfw-3.2.5.1.bin
cbfw-3.2.5.1.bin
isci/isci_firmware.bin
advansys/38C1600.bin
advansys/38C0800.bin
advansys/3550.bin
advansys/mcode.bin
wd719x-risc.bin                                     non-free
wd719x-wcs.bin                                      non-free
qlogic/12160.bin
qlogic/1280.bin
qlogic/1040.bin
isight.fw                                           non-free
emi26/firmware.fw
emi26/bitstream.fw
emi26/loader.fw
emi62/spdif.fw
emi62/bitstream.fw
emi62/loader.fw
moxa/moxa-1151.fw
moxa/moxa-1150.fw
moxa/moxa-1131.fw
moxa/moxa-1130.fw
moxa/moxa-1110.fw
mts_mt9234zba.fw
mts_mt9234mu.fw
mts_edge.fw
mts_gsm.fw
mts_cdma.fw
ti_5052.fw
ti_3410.fw
keyspan_pda/xircom_pgs.fw
keyspan_pda/keyspan_pda.fw
whiteheat_loader.fw
whiteheat.fw
edgeport/down2.fw
edgeport/down.fw
edgeport/boot2.fw
edgeport/boot.fw
edgeport/down3.bin
keyspan/usa49wlc.fw
keyspan/usa49w.fw
keyspan/usa19w.fw
keyspan/usa18x.fw
keyspan/usa19qw.fw
keyspan/mpr.fw
keyspan/usa19qi.fw
keyspan/usa19.fw
keyspan/usa28xb.fw
keyspan/usa28xa.fw
keyspan/usa28x.fw
keyspan/usa28.fw
mt7601u.bin
mediatek/mt7615_rom_patch.bin
mediatek/mt7615_n9.bin
mediatek/mt7615_cr4.bin
mt7662_rom_patch.bin
mt7662.bin
mt7662_rom_patch.bin
mt7662.bin
mt7603_e2.bin                                       non-free
mt7603_e1.bin                                       non-free
mt7628_e2.bin                                       non-free
mt7628_e1.bin                                       non-free
mediatek/mt7650e.bin
mediatek/mt7610e.bin
mediatek/mt7610u.bin
mediatek/mt7610e.bin
iwlwifi-4965-2.ucode
iwlwifi-3945-2.ucode
iwlwifi-100-5.ucode
iwlwifi-1000-5.ucode
iwlwifi-135-6.ucode
iwlwifi-105-6.ucode
iwlwifi-2030-6.ucode
iwlwifi-2000-6.ucode
iwlwifi-5150-2.ucode
iwlwifi-5000-5.ucode
iwlwifi-6000g2b-6.ucode
iwlwifi-6000g2a-6.ucode
iwlwifi-6050-5.ucode
iwlwifi-6000-6.ucode                                non-free
iwlwifi-7265D-29.ucode
iwlwifi-7265-17.ucode
iwlwifi-3168-29.ucode
iwlwifi-3160-17.ucode
iwlwifi-7260-17.ucode
iwlwifi-8265-36.ucode
iwlwifi-8000C-36.ucode
iwlwifi-9260-th-b0-jf-b0-46.ucode
iwlwifi-9000-pu-b0-jf-b0-46.ucode
iwlwifi-ty-a0-gf-a0-50.ucode                        non-free
iwlwifi-so-a0-gf-a0-50.ucode                        non-free
iwlwifi-so-a0-hr-b0-50.ucode                        non-free
iwlwifi-so-a0-jf-b0-50.ucode                        non-free
iwlwifi-cc-a0-50.ucode
iwlwifi-QuQnj-b0-jf-b0-50.ucode                     non-free
iwlwifi-QuZ-a0-jf-b0-50.ucode
iwlwifi-QuZ-a0-hr-b0-50.ucode
iwlwifi-Qu-b0-jf-b0-50.ucode
iwlwifi-Qu-c0-hr-b0-50.ucode
iwlwifi-QuQnj-a0-hr-a0-50.ucode                     non-free
iwlwifi-QuQnj-b0-hr-b0-50.ucode                     non-free
iwlwifi-QuQnj-f0-hr-a0-50.ucode                     non-free
iwlwifi-Qu-a0-jf-b0-50.ucode                        non-free
iwlwifi-Qu-a0-hr-a0-50.ucode                        non-free
ipw2100-1.3.fw                                      non-free
ipw2100-1.3-p.fw                                    non-free
ipw2100-1.3-i.fw                                    non-free
ipw2200-bss.fw                                      non-free
ipw2200-sniffer.fw                                  non-free
ipw2200-ibss.fw                                     non-free
lbtf_usb.bin
libertas_cs.fw                                      non-free
libertas_cs_helper.fw                               non-free
libertas/cf8385.bin
libertas/cf8385_helper.bin
libertas/cf8381.bin
libertas/cf8381_helper.bin
libertas/cf8305.bin                                 non-free
libertas/gspi8688.bin
libertas/gspi8688_helper.bin
libertas/gspi8686.bin                               non-free
libertas/gspi8686_hlp.bin                           non-free
libertas/gspi8686_v9.bin
libertas/gspi8686_v9_helper.bin
libertas/gspi8385.bin                               non-free
libertas/gspi8385_hlp.bin                           non-free
libertas/gspi8385_helper.bin                        non-free
usb8388.bin                                         non-free
libertas/usb8682.bin
libertas/usb8388.bin                                non-free
libertas/usb8388_v5.bin
libertas/usb8388_v9.bin
sd8688.bin                                          non-free
sd8688_helper.bin                                   non-free
libertas/sd8688.bin                                 non-free
libertas/sd8688_helper.bin                          non-free
sd8686.bin                                          non-free
sd8686_helper.bin                                   non-free
libertas/sd8686_v8.bin
libertas/sd8686_v8_helper.bin
libertas/sd8686_v9.bin
libertas/sd8686_v9_helper.bin
sd8385.bin                                          non-free
sd8385_helper.bin                                   non-free
libertas/sd8385.bin
libertas/sd8385_helper.bin
mrvl/usbusb8997_combo_v4.bin
mrvl/usb8801_uapsta.bin
mrvl/usb8797_uapsta.bin
mrvl/usb8766_uapsta.bin
mrvl/sd8997_uapsta.bin                              non-free
mrvl/sd8987_uapsta.bin                              non-free
mrvl/sd8977_uapsta.bin                              non-free
mrvl/sd8887_uapsta.bin
mrvl/sd8897_uapsta.bin
mrvl/sd8797_uapsta.bin
mrvl/sd8787_uapsta.bin
mrvl/sd8786_uapsta.bin                              non-free
mwl8k/fmimage_8366_ap-3.fw
mwl8k/fmimage_8366.fw
mwl8k/helper_8366.fw
mwl8k/fmimage_8687.fw
mwl8k/helper_8687.fw
mwl8k/fmimage_8363.fw                               non-free
mwl8k/helper_8363.fw                                non-free
brcm/bcm43xx_hdr-0.fw
brcm/bcm43xx-0.fw
brcm/brcmfmac43012-sdio.bin                         non-free
brcm/brcmfmac4373-sdio.bin
brcm/brcmfmac4356-sdio.bin
brcm/brcmfmac4354-sdio.bin
brcm/brcmfmac43456-sdio.bin                         non-free
brcm/brcmfmac43455-sdio.bin
brcm/brcmfmac43430-sdio.bin
brcm/brcmfmac43430a0-sdio.bin
brcm/brcmfmac4339-sdio.bin
brcm/brcmfmac43362-sdio.bin
brcm/brcmfmac4335-sdio.bin
brcm/brcmfmac43340-sdio.bin
brcm/brcmfmac4334-sdio.bin
brcm/brcmfmac4330-sdio.bin
brcm/brcmfmac4329-sdio.bin
brcm/brcmfmac43241b5-sdio.bin
brcm/brcmfmac43241b4-sdio.bin
brcm/brcmfmac43241b0-sdio.bin
brcm/brcmfmac43143-sdio.bin
brcm/brcmfmac4373.bin
brcm/brcmfmac43569.bin
brcm/brcmfmac43242a.bin
brcm/brcmfmac43236b.bin
brcm/brcmfmac43143.bin
brcm/brcmfmac4371-pcie.bin
brcm/brcmfmac4366c-pcie.bin
brcm/brcmfmac4366b-pcie.bin
brcm/brcmfmac4365c-pcie.bin                         non-free
brcm/brcmfmac4365b-pcie.bin                         non-free
brcm/brcmfmac4359-pcie.bin                          non-free
brcm/brcmfmac4358-pcie.bin
brcm/brcmfmac43570-pcie.bin
brcm/brcmfmac4356-pcie.bin
brcm/brcmfmac4350c2-pcie.bin
brcm/brcmfmac4350-pcie.bin
brcm/brcmfmac43602-pcie.bin
b43legacy/ucode4.fw                                 non-free
b43legacy/ucode2.fw                                 non-free
b43/ucode9.fw                                       non-free
b43/ucode42.fw                                      non-free
b43/ucode40.fw                                      non-free
b43/ucode5.fw                                       non-free
b43/ucode30_mimo.fw                                 non-free
b43/ucode33_lcn40.fw                                non-free
b43/ucode29_mimo.fw                                 non-free
b43/ucode26_mimo.fw                                 non-free
b43/ucode25_mimo.fw                                 non-free
b43/ucode25_lcn.fw                                  non-free
b43/ucode24_lcn.fw                                  non-free
b43/ucode16_mimo.fw                                 non-free
b43/ucode16_lp.fw                                   non-free
b43/ucode15.fw                                      non-free
b43/ucode14.fw                                      non-free
b43/ucode13.fw                                      non-free
b43/ucode11.fw                                      non-free
rtlwifi/rtl8192eefw.bin
rtlwifi/rtl8723efw.bin                              non-free
rtlwifi/rtl8188efw.bin
rtlwifi/rtl8192cufw_TMSC.bin
rtlwifi/rtl8192cufw_B.bin
rtlwifi/rtl8192cufw_A.bin
rtlwifi/rtl8192cufw.bin
rtlwifi/rtl8723befw_36.bin
rtlwifi/rtl8723befw.bin
rtlwifi/rtl8192defw.bin
rtlwifi/rtl8821aefw_29.bin
rtlwifi/rtl8821aefw.bin
rtlwifi/rtl8192cfwU_B.bin
rtlwifi/rtl8192cfwU.bin
rtlwifi/rtl8192cfw.bin
rtlwifi/rtl8192sefw.bin
rtlwifi/rtl8723bu_bt.bin                            non-free
rtlwifi/rtl8723bu_nic.bin
rtlwifi/rtl8192eu_nic.bin
rtlwifi/rtl8192cufw_TMSC.bin
rtlwifi/rtl8192cufw_B.bin
rtlwifi/rtl8192cufw_A.bin
rtlwifi/rtl8723aufw_B_NoBT.bin
rtlwifi/rtl8723aufw_B.bin
rtlwifi/rtl8723aufw_A.bin
rtw88/rtw8822b_fw.bin
rtw88/rtw8822c_fw.bin
atmel_at76c505amx-rfmd.bin                          non-free
atmel_at76c505a-rfmd2958.bin                        non-free
atmel_at76c505-rfmd2958.bin                         non-free
atmel_at76c505-rfmd.bin                             non-free
atmel_at76c503-rfmd-acc.bin                         non-free
atmel_at76c503-rfmd.bin                             non-free
atmel_at76c503-i3863.bin                            non-free
atmel_at76c503-i3861.bin                            non-free
atmel_at76c506.bin                                  non-free
atmel_at76c506-wpa.bin                              non-free
atmel_at76c504a_2958.bin                            non-free
atmel_at76c504a_2958-wpa.bin                        non-free
atmel_at76c504_2958.bin                             non-free
atmel_at76c504_2958-wpa.bin                         non-free
atmel_at76c504.bin                                  non-free
atmel_at76c504-wpa.bin                              non-free
atmel_at76c502_3com.bin                             non-free
atmel_at76c502_3com-wpa.bin                         non-free
atmel_at76c502e.bin                                 non-free
atmel_at76c502e-wpa.bin                             non-free
atmel_at76c502d.bin                                 non-free
atmel_at76c502d-wpa.bin                             non-free
atmel_at76c502.bin                                  non-free
atmel_at76c502-wpa.bin                              non-free
ti-connectivity/wl128x-fw-5-plt.bin
ti-connectivity/wl128x-fw-5-mr.bin
ti-connectivity/wl128x-fw-5-sr.bin
ti-connectivity/wl127x-fw-5-plt.bin
ti-connectivity/wl127x-fw-5-mr.bin
ti-connectivity/wl127x-fw-5-sr.bin
ti-connectivity/wl18xx-fw-4.bin
ti-connectivity/wl1251-nvs.bin
ti-connectivity/wl1251-fw.bin
rt73.bin
rt2860.bin
rt2870.bin
rt2661.bin
rt2561s.bin
rt2561.bin
rs9113_wlan_qspi.rps                                non-free
rs9113_wlan_qspi.rps                                non-free
isl3890                                             non-free
isl3886                                             non-free
isl3877                                             non-free
symbol_sp24t_sec_fw                                 non-free
symbol_sp24t_prim_fw                                non-free
prism_ap_fw.bin                                     non-free
prism_sta_fw.bin                                    non-free
agere_ap_fw.bin
agere_sta_fw.bin
orinoco_ezusb_fw                                    non-free
isl3886pci                                          non-free
3826.arm                                            non-free
isl3887usb                                          non-free
isl3886usb                                          non-free
zd1211/zd1211_uphr                                  non-free
zd1211/zd1211b_uphr                                 non-free
zd1211/zd1211_ub                                    non-free
zd1211/zd1211b_ub                                   non-free
zd1211/zd1211_ur                                    non-free
zd1211/zd1211b_ur                                   non-free
zd1201.fw                                           non-free
zd1201-ap.fw                                        non-free
carl9170-1.fw
ath9k_htc/htc_9271-1.4.0.fw
ath9k_htc/htc_7010-1.4.0.fw
ath6k/AR6004/hw1.3/bdata.bin
ath6k/AR6004/hw1.3/bdata.bin
ath6k/AR6004/hw1.3/fw.ram.bin                       non-free
ath6k/AR6004/hw1.2/bdata.bin
ath6k/AR6004/hw1.2/bdata.bin
ath6k/AR6004/hw1.2/fw.ram.bin                       non-free
ath6k/AR6004/hw1.1/bdata.DB132.bin                  non-free
ath6k/AR6004/hw1.1/bdata.bin                        non-free
ath6k/AR6004/hw1.1/fw.ram.bin                       non-free
ath6k/AR6004/hw1.0/bdata.DB132.bin                  non-free
ath6k/AR6004/hw1.0/bdata.bin                        non-free
ath6k/AR6004/hw1.0/fw.ram.bin                       non-free
ath6k/AR6003/hw2.1.1/bdata.SD31.bin
ath6k/AR6003/hw2.1.1/bdata.bin                      non-free
ath6k/AR6003/hw2.1.1/data.patch.bin
ath6k/AR6003/hw2.1.1/athwlan.bin
ath6k/AR6003/hw2.1.1/otp.bin
ath6k/AR6003/hw2.0/bdata.SD31.bin
ath6k/AR6003/hw2.0/bdata.bin                        non-free
ath6k/AR6003/hw2.0/data.patch.bin
ath6k/AR6003/hw2.0/athwlan.bin.z77
ath6k/AR6003/hw2.0/otp.bin.z77
ath6k/AR6004/hw1.3/bdata.bin
ath6k/AR6004/hw1.3/bdata.bin
ath6k/AR6004/hw1.3/fw.ram.bin                       non-free
ath6k/AR6004/hw1.2/bdata.bin
ath6k/AR6004/hw1.2/bdata.bin
fw.ram.bin                                          non-free
ath6k/AR6004/hw1.1/bdata.DB132.bin                  non-free
ath6k/AR6004/hw1.1/bdata.bin                        non-free
fw.ram.bin                                          non-free
ath6k/AR6004/hw1.0/bdata.DB132.bin                  non-free
ath6k/AR6004/hw1.0/bdata.bin                        non-free
fw.ram.bin                                          non-free
wil6436.brd                                         non-free
wil6436.fw                                          non-free
wil6210.brd
wil6210_sparrow_plus.fw                             non-free
wil6210.fw
ar5523.bin
wlan/prima/WCNSS_qcom_wlan_nv.bin                   non-free
ath10k/QCA9377/hw1.0/board.bin
ath10k/QCA9377/hw1.0/firmware-5.bin
ath10k/QCA9377/hw1.0/firmware-6.bin
ath10k/QCA6174/hw3.0/board-2.bin
ath10k/QCA6174/hw3.0/board.bin
ath10k/QCA6174/hw3.0/firmware-6.bin
ath10k/QCA6174/hw3.0/firmware-5.bin                 non-free
ath10k/QCA6174/hw3.0/firmware-4.bin
ath10k/QCA6174/hw2.1/board-2.bin
ath10k/QCA6174/hw2.1/board.bin
ath10k/QCA6174/hw2.1/firmware-5.bin
ath10k/QCA6174/hw2.1/firmware-4.bin                 non-free
ath10k/QCA9887/hw1.0/board-2.bin                    non-free
ath10k/QCA9887/hw1.0/board.bin
ath10k/QCA9887/hw1.0/firmware-5.bin
ath10k/QCA988X/hw2.0/board-2.bin                    non-free
ath10k/QCA988X/hw2.0/board.bin
ath10k/QCA988X/hw2.0/firmware-5.bin
ath10k/QCA988X/hw2.0/firmware-4.bin
ath10k/QCA988X/hw2.0/firmware-3.bin                 non-free
ath10k/QCA988X/hw2.0/firmware-2.bin                 non-free
cxgb3/ael2020_twx_edc.bin
cxgb3/ael2005_twx_edc.bin
cxgb3/ael2005_opt_edc.bin
cxgb3/t3c_psram-1.1.0.bin
cxgb3/t3b_psram-1.1.0.bin
cxgb3/t3fw-7.12.0.bin
cxgb4/t6fw.bin                                      non-free
cxgb4/t5fw.bin                                      non-free
cxgb4/t4fw.bin                                      non-free
cis/tamarack.cis
cis/PE-200.cis
cis/NE2K.cis
cis/PE520.cis
cis/LA-PCM.cis
cis/DP83903.cis
cis/PCMLM28.cis
intel/ice/ddp/ice.pkg                               non-free
e100/d102e_ucode.bin
e100/d101s_ucode.bin
e100/d101m_ucode.bin
adaptec/starfire_tx.bin
adaptec/starfire_rx.bin
liquidio/lio_23xx_nic.bin
liquidio/lio_410nv_nic.bin
liquidio/lio_210nv_nic.bin
liquidio/lio_210sv_nic.bin
acenic/tg2.bin
acenic/tg1.bin
sun/cassini.bin
myri10ge_rss_eth_z8e.dat
myri10ge_rss_ethp_z8e.dat
myri10ge_eth_z8e.dat
myri10ge_ethp_z8e.dat
bnx2/bnx2-rv2p-09ax-6.0.17.fw
bnx2/bnx2-rv2p-09-6.0.17.fw
bnx2/bnx2-mips-09-6.2.1b.fw
bnx2/bnx2-rv2p-06-6.0.15.fw
bnx2/bnx2-mips-06-6.2.3.fw
tigon/tg3_tso5.bin
tigon/tg3_tso.bin
tigon/tg3.bin
bnx2x/bnx2x-e2-7.13.11.0.fw
bnx2x/bnx2x-e1h-7.13.11.0.fw
bnx2x/bnx2x-e1-7.13.11.0.fw
rtl_nic/rtl8125a-3.fw
rtl_nic/rtl8107e-2.fw
rtl_nic/rtl8107e-1.fw
rtl_nic/rtl8168h-2.fw
rtl_nic/rtl8168h-1.fw
rtl_nic/rtl8168g-3.fw
rtl_nic/rtl8168g-2.fw
rtl_nic/rtl8106e-2.fw
rtl_nic/rtl8106e-1.fw
rtl_nic/rtl8411-2.fw
rtl_nic/rtl8411-1.fw
rtl_nic/rtl8402-1.fw
rtl_nic/rtl8168f-2.fw
rtl_nic/rtl8168f-1.fw
rtl_nic/rtl8105e-1.fw
rtl_nic/rtl8168e-3.fw
rtl_nic/rtl8168e-2.fw
rtl_nic/rtl8168e-1.fw
rtl_nic/rtl8168d-2.fw
rtl_nic/rtl8168d-1.fw
slicoss/oasisdownload.sys
slicoss/gbdownload.sys
slicoss/oasisrcvucode.sys
slicoss/gbrcvucode.sys
qed/qed_init_values_zipped-8.37.7.0.bin
phanfw.bin
phanfw.bin
ositech/Xilinx7OD.bin
3com/typhoon.bin
tehuti/bdx.bin
kaweth/trigger_code_fix.bin
kaweth/trigger_code.bin
kaweth/new_code_fix.bin
kaweth/new_code.bin
ast_dp501_fw.bin                                    non-free
i915/bxt_dmc_ver1_07.bin
i915/skl_dmc_ver1_27.bin
i915/kbl_dmc_ver1_04.bin
i915/glk_dmc_ver1_04.bin
i915/cnl_dmc_ver1_07.bin
i915/icl_dmc_ver1_07.bin
i915/tgl_dmc_ver2_04.bin
i915/skl_huc_ver01_07_1398.bin
i915/skl_guc_33.0.0.bin
i915/bxt_huc_ver01_8_2893.bin
i915/bxt_guc_33.0.0.bin
i915/kbl_huc_ver02_00_1810.bin
i915/kbl_guc_33.0.0.bin
i915/glk_huc_ver03_01_2893.bin
i915/glk_guc_33.0.0.bin
i915/kbl_huc_ver02_00_1810.bin
i915/kbl_guc_33.0.0.bin
i915/icl_huc_ver8_4_3238.bin
i915/icl_guc_33.0.0.bin
radeon/R520_cp.bin
radeon/RS600_cp.bin
radeon/RS690_cp.bin
radeon/R420_cp.bin
radeon/R300_cp.bin
radeon/R200_cp.bin
radeon/R100_cp.bin
radeon/SUMO2_me.bin
radeon/SUMO2_pfp.bin
radeon/SUMO_me.bin
radeon/SUMO_pfp.bin
radeon/SUMO_rlc.bin
radeon/PALM_me.bin
radeon/PALM_pfp.bin
radeon/CYPRESS_smc.bin
radeon/CYPRESS_rlc.bin
radeon/CYPRESS_me.bin
radeon/CYPRESS_pfp.bin
radeon/JUNIPER_smc.bin
radeon/JUNIPER_rlc.bin
radeon/JUNIPER_me.bin
radeon/JUNIPER_pfp.bin
radeon/REDWOOD_smc.bin
radeon/REDWOOD_rlc.bin
radeon/REDWOOD_me.bin
radeon/REDWOOD_pfp.bin
radeon/CEDAR_smc.bin
radeon/CEDAR_rlc.bin
radeon/CEDAR_me.bin
radeon/CEDAR_pfp.bin
radeon/R700_rlc.bin
radeon/R600_rlc.bin
radeon/RV710_smc.bin
radeon/RV710_me.bin
radeon/RV710_pfp.bin
radeon/RV740_smc.bin
radeon/RV730_smc.bin
radeon/RV730_me.bin
radeon/RV730_pfp.bin
radeon/RV770_smc.bin
radeon/RV770_me.bin
radeon/RV770_pfp.bin
radeon/RS780_me.bin
radeon/RS780_pfp.bin
radeon/RV670_me.bin
radeon/RV670_pfp.bin
radeon/RV635_me.bin
radeon/RV635_pfp.bin
radeon/RV620_me.bin
radeon/RV620_pfp.bin
radeon/RV630_me.bin
radeon/RV630_pfp.bin
radeon/RV610_me.bin
radeon/RV610_pfp.bin
radeon/R600_me.bin
radeon/R600_pfp.bin
radeon/ARUBA_rlc.bin
radeon/ARUBA_me.bin
radeon/ARUBA_pfp.bin
radeon/CAYMAN_smc.bin
radeon/CAYMAN_rlc.bin
radeon/CAYMAN_mc.bin
radeon/CAYMAN_me.bin
radeon/CAYMAN_pfp.bin
radeon/CAICOS_smc.bin
radeon/CAICOS_mc.bin
radeon/CAICOS_me.bin
radeon/CAICOS_pfp.bin
radeon/TURKS_smc.bin
radeon/TURKS_mc.bin
radeon/TURKS_me.bin
radeon/TURKS_pfp.bin
radeon/BTC_rlc.bin
radeon/BARTS_smc.bin
radeon/BARTS_mc.bin
radeon/BARTS_me.bin
radeon/BARTS_pfp.bin
radeon/si58_mc.bin
radeon/banks_k_2_smc.bin
radeon/hainan_k_smc.bin
radeon/hainan_smc.bin
radeon/hainan_rlc.bin
radeon/hainan_mc.bin
radeon/hainan_ce.bin
radeon/hainan_me.bin
radeon/hainan_pfp.bin
radeon/HAINAN_smc.bin
radeon/HAINAN_rlc.bin
radeon/HAINAN_mc2.bin
radeon/HAINAN_mc.bin
radeon/HAINAN_ce.bin
radeon/HAINAN_me.bin
radeon/HAINAN_pfp.bin
radeon/oland_k_smc.bin
radeon/oland_smc.bin
radeon/oland_rlc.bin
radeon/oland_mc.bin
radeon/oland_ce.bin
radeon/oland_me.bin
radeon/oland_pfp.bin
radeon/OLAND_smc.bin
radeon/OLAND_rlc.bin
radeon/OLAND_mc2.bin
radeon/OLAND_mc.bin
radeon/OLAND_ce.bin
radeon/OLAND_me.bin
radeon/OLAND_pfp.bin
radeon/verde_k_smc.bin
radeon/verde_smc.bin
radeon/verde_rlc.bin
radeon/verde_mc.bin
radeon/verde_ce.bin
radeon/verde_me.bin
radeon/verde_pfp.bin
radeon/VERDE_smc.bin
radeon/VERDE_rlc.bin
radeon/VERDE_mc2.bin
radeon/VERDE_mc.bin
radeon/VERDE_ce.bin
radeon/VERDE_me.bin
radeon/VERDE_pfp.bin
radeon/pitcairn_k_smc.bin
radeon/pitcairn_smc.bin
radeon/pitcairn_rlc.bin
radeon/pitcairn_mc.bin
radeon/pitcairn_ce.bin
radeon/pitcairn_me.bin
radeon/pitcairn_pfp.bin
radeon/PITCAIRN_smc.bin
radeon/PITCAIRN_rlc.bin
radeon/PITCAIRN_mc2.bin
radeon/PITCAIRN_mc.bin
radeon/PITCAIRN_ce.bin
radeon/PITCAIRN_me.bin
radeon/PITCAIRN_pfp.bin
radeon/tahiti_smc.bin
radeon/tahiti_rlc.bin
radeon/tahiti_mc.bin
radeon/tahiti_ce.bin
radeon/tahiti_me.bin
radeon/tahiti_pfp.bin
radeon/TAHITI_smc.bin
radeon/TAHITI_rlc.bin
radeon/TAHITI_mc2.bin
radeon/TAHITI_mc.bin
radeon/TAHITI_ce.bin
radeon/TAHITI_me.bin
radeon/TAHITI_pfp.bin
radeon/mullins_sdma.bin
radeon/mullins_rlc.bin
radeon/mullins_mec.bin
radeon/mullins_ce.bin
radeon/mullins_me.bin
radeon/mullins_pfp.bin
radeon/MULLINS_sdma.bin
radeon/MULLINS_rlc.bin
radeon/MULLINS_mec.bin
radeon/MULLINS_ce.bin
radeon/MULLINS_me.bin
radeon/MULLINS_pfp.bin
radeon/kabini_sdma.bin
radeon/kabini_rlc.bin
radeon/kabini_mec.bin
radeon/kabini_ce.bin
radeon/kabini_me.bin
radeon/kabini_pfp.bin
radeon/KABINI_sdma.bin
radeon/KABINI_rlc.bin
radeon/KABINI_mec.bin
radeon/KABINI_ce.bin
radeon/KABINI_me.bin
radeon/KABINI_pfp.bin
radeon/kaveri_sdma.bin
radeon/kaveri_rlc.bin
radeon/kaveri_mec2.bin
radeon/kaveri_mec.bin
radeon/kaveri_ce.bin
radeon/kaveri_me.bin
radeon/kaveri_pfp.bin
radeon/KAVERI_sdma.bin
radeon/KAVERI_rlc.bin
radeon/KAVERI_mec.bin
radeon/KAVERI_ce.bin
radeon/KAVERI_me.bin
radeon/KAVERI_pfp.bin
radeon/hawaii_k_smc.bin
radeon/hawaii_smc.bin
radeon/hawaii_sdma.bin
radeon/hawaii_rlc.bin
radeon/hawaii_mc.bin
radeon/hawaii_mec.bin
radeon/hawaii_ce.bin
radeon/hawaii_me.bin
radeon/hawaii_pfp.bin
radeon/HAWAII_smc.bin
radeon/HAWAII_sdma.bin
radeon/HAWAII_rlc.bin
radeon/HAWAII_mc2.bin
radeon/HAWAII_mc.bin
radeon/HAWAII_mec.bin
radeon/HAWAII_ce.bin
radeon/HAWAII_me.bin
radeon/HAWAII_pfp.bin
radeon/bonaire_k_smc.bin
radeon/bonaire_smc.bin
radeon/bonaire_sdma.bin
radeon/bonaire_rlc.bin
radeon/bonaire_mc.bin
radeon/bonaire_mec.bin
radeon/bonaire_ce.bin
radeon/bonaire_me.bin
radeon/bonaire_pfp.bin
radeon/BONAIRE_smc.bin
radeon/BONAIRE_sdma.bin
radeon/BONAIRE_rlc.bin
radeon/BONAIRE_mc2.bin
radeon/BONAIRE_mc.bin
radeon/BONAIRE_mec.bin
radeon/BONAIRE_ce.bin
radeon/BONAIRE_me.bin
radeon/BONAIRE_pfp.bin
radeon/bonaire_uvd.bin
radeon/BONAIRE_uvd.bin
radeon/TAHITI_uvd.bin
radeon/SUMO_uvd.bin
radeon/CYPRESS_uvd.bin
radeon/RV710_uvd.bin
radeon/RV770_uvd.bin
radeon/RS780_uvd.bin
radeon/R600_uvd.bin
radeon/BONAIRE_vce.bin
radeon/TAHITI_vce.bin
nvidia/gp100/gr/sw_method_init.bin
nvidia/gp100/gr/sw_bundle_init.bin
nvidia/gp100/gr/sw_nonctx.bin
nvidia/gp100/gr/sw_ctx.bin
nvidia/gp100/gr/gpccs_sig.bin
nvidia/gp100/gr/gpccs_data.bin
nvidia/gp100/gr/gpccs_inst.bin
nvidia/gp100/gr/gpccs_bl.bin
nvidia/gp100/gr/fecs_sig.bin
nvidia/gp100/gr/fecs_data.bin
nvidia/gp100/gr/fecs_inst.bin
nvidia/gp100/gr/fecs_bl.bin
nvidia/gp100/acr/ucode_unload.bin
nvidia/gp100/acr/ucode_load.bin
nvidia/gp100/acr/bl.bin
nvidia/gm206/gr/sw_method_init.bin
nvidia/gm206/gr/sw_bundle_init.bin
nvidia/gm206/gr/sw_nonctx.bin
nvidia/gm206/gr/sw_ctx.bin
nvidia/gm206/gr/gpccs_sig.bin
nvidia/gm206/gr/gpccs_data.bin
nvidia/gm206/gr/gpccs_inst.bin
nvidia/gm206/gr/gpccs_bl.bin
nvidia/gm206/gr/fecs_sig.bin
nvidia/gm206/gr/fecs_data.bin
nvidia/gm206/gr/fecs_inst.bin
nvidia/gm206/gr/fecs_bl.bin
nvidia/gm206/acr/ucode_unload.bin
nvidia/gm206/acr/ucode_load.bin
nvidia/gm206/acr/bl.bin
nvidia/gm204/gr/sw_method_init.bin
nvidia/gm204/gr/sw_bundle_init.bin
nvidia/gm204/gr/sw_nonctx.bin
nvidia/gm204/gr/sw_ctx.bin
nvidia/gm204/gr/gpccs_sig.bin
nvidia/gm204/gr/gpccs_data.bin
nvidia/gm204/gr/gpccs_inst.bin
nvidia/gm204/gr/gpccs_bl.bin
nvidia/gm204/gr/fecs_sig.bin
nvidia/gm204/gr/fecs_data.bin
nvidia/gm204/gr/fecs_inst.bin
nvidia/gm204/gr/fecs_bl.bin
nvidia/gm204/acr/ucode_unload.bin
nvidia/gm204/acr/ucode_load.bin
nvidia/gm204/acr/bl.bin
nvidia/gm200/gr/sw_method_init.bin
nvidia/gm200/gr/sw_bundle_init.bin
nvidia/gm200/gr/sw_nonctx.bin
nvidia/gm200/gr/sw_ctx.bin
nvidia/gm200/gr/gpccs_sig.bin
nvidia/gm200/gr/gpccs_data.bin
nvidia/gm200/gr/gpccs_inst.bin
nvidia/gm200/gr/gpccs_bl.bin
nvidia/gm200/gr/fecs_sig.bin
nvidia/gm200/gr/fecs_data.bin
nvidia/gm200/gr/fecs_inst.bin
nvidia/gm200/gr/fecs_bl.bin
nvidia/gm200/acr/ucode_unload.bin
nvidia/gm200/acr/ucode_load.bin
nvidia/gm200/acr/bl.bin
nvidia/gp107/sec2/sig-1.bin
nvidia/gp107/sec2/image-1.bin
nvidia/gp107/sec2/desc-1.bin
nvidia/gp107/sec2/sig.bin
nvidia/gp107/sec2/image.bin
nvidia/gp107/sec2/desc.bin
nvidia/gp107/nvdec/scrubber.bin
nvidia/gp107/gr/sw_method_init.bin
nvidia/gp107/gr/sw_bundle_init.bin
nvidia/gp107/gr/sw_nonctx.bin
nvidia/gp107/gr/sw_ctx.bin
nvidia/gp107/gr/gpccs_sig.bin
nvidia/gp107/gr/gpccs_data.bin
nvidia/gp107/gr/gpccs_inst.bin
nvidia/gp107/gr/gpccs_bl.bin
nvidia/gp107/gr/fecs_sig.bin
nvidia/gp107/gr/fecs_data.bin
nvidia/gp107/gr/fecs_inst.bin
nvidia/gp107/gr/fecs_bl.bin
nvidia/gp107/acr/ucode_unload.bin
nvidia/gp107/acr/ucode_load.bin
nvidia/gp107/acr/unload_bl.bin
nvidia/gp107/acr/bl.bin
nvidia/gp106/sec2/sig-1.bin
nvidia/gp106/sec2/image-1.bin
nvidia/gp106/sec2/desc-1.bin
nvidia/gp106/sec2/sig.bin
nvidia/gp106/sec2/image.bin
nvidia/gp106/sec2/desc.bin
nvidia/gp106/nvdec/scrubber.bin
nvidia/gp106/gr/sw_method_init.bin
nvidia/gp106/gr/sw_bundle_init.bin
nvidia/gp106/gr/sw_nonctx.bin
nvidia/gp106/gr/sw_ctx.bin
nvidia/gp106/gr/gpccs_sig.bin
nvidia/gp106/gr/gpccs_data.bin
nvidia/gp106/gr/gpccs_inst.bin
nvidia/gp106/gr/gpccs_bl.bin
nvidia/gp106/gr/fecs_sig.bin
nvidia/gp106/gr/fecs_data.bin
nvidia/gp106/gr/fecs_inst.bin
nvidia/gp106/gr/fecs_bl.bin
nvidia/gp106/acr/ucode_unload.bin
nvidia/gp106/acr/ucode_load.bin
nvidia/gp106/acr/unload_bl.bin
nvidia/gp106/acr/bl.bin
nvidia/gp104/sec2/sig-1.bin
nvidia/gp104/sec2/image-1.bin
nvidia/gp104/sec2/desc-1.bin
nvidia/gp104/sec2/sig.bin
nvidia/gp104/sec2/image.bin
nvidia/gp104/sec2/desc.bin
nvidia/gp104/nvdec/scrubber.bin
nvidia/gp104/gr/sw_method_init.bin
nvidia/gp104/gr/sw_bundle_init.bin
nvidia/gp104/gr/sw_nonctx.bin
nvidia/gp104/gr/sw_ctx.bin
nvidia/gp104/gr/gpccs_sig.bin
nvidia/gp104/gr/gpccs_data.bin
nvidia/gp104/gr/gpccs_inst.bin
nvidia/gp104/gr/gpccs_bl.bin
nvidia/gp104/gr/fecs_sig.bin
nvidia/gp104/gr/fecs_data.bin
nvidia/gp104/gr/fecs_inst.bin
nvidia/gp104/gr/fecs_bl.bin
nvidia/gp104/acr/ucode_unload.bin
nvidia/gp104/acr/ucode_load.bin
nvidia/gp104/acr/unload_bl.bin
nvidia/gp104/acr/bl.bin
nvidia/gp102/sec2/sig-1.bin
nvidia/gp102/sec2/image-1.bin
nvidia/gp102/sec2/desc-1.bin
nvidia/gp102/sec2/sig.bin
nvidia/gp102/sec2/image.bin
nvidia/gp102/sec2/desc.bin
nvidia/gp102/nvdec/scrubber.bin
nvidia/gp102/gr/sw_method_init.bin
nvidia/gp102/gr/sw_bundle_init.bin
nvidia/gp102/gr/sw_nonctx.bin
nvidia/gp102/gr/sw_ctx.bin
nvidia/gp102/gr/gpccs_sig.bin
nvidia/gp102/gr/gpccs_data.bin
nvidia/gp102/gr/gpccs_inst.bin
nvidia/gp102/gr/gpccs_bl.bin
nvidia/gp102/gr/fecs_sig.bin
nvidia/gp102/gr/fecs_data.bin
nvidia/gp102/gr/fecs_inst.bin
nvidia/gp102/gr/fecs_bl.bin
nvidia/gp102/acr/ucode_unload.bin
nvidia/gp102/acr/ucode_load.bin
nvidia/gp102/acr/unload_bl.bin
nvidia/gp102/acr/bl.bin
nvidia/gv100/sec2/sig.bin
nvidia/gv100/sec2/image.bin
nvidia/gv100/sec2/desc.bin
nvidia/gv100/nvdec/scrubber.bin
nvidia/gv100/gr/sw_method_init.bin
nvidia/gv100/gr/sw_bundle_init.bin
nvidia/gv100/gr/sw_nonctx.bin
nvidia/gv100/gr/sw_ctx.bin
nvidia/gv100/gr/gpccs_sig.bin
nvidia/gv100/gr/gpccs_data.bin
nvidia/gv100/gr/gpccs_inst.bin
nvidia/gv100/gr/gpccs_bl.bin
nvidia/gv100/gr/fecs_sig.bin
nvidia/gv100/gr/fecs_data.bin
nvidia/gv100/gr/fecs_inst.bin
nvidia/gv100/gr/fecs_bl.bin
nvidia/gv100/acr/ucode_unload.bin
nvidia/gv100/acr/ucode_load.bin
nvidia/gv100/acr/unload_bl.bin
nvidia/gv100/acr/bl.bin
nvidia/gp108/sec2/sig.bin
nvidia/gp108/sec2/image.bin
nvidia/gp108/sec2/desc.bin
nvidia/gp108/nvdec/scrubber.bin
nvidia/gp108/gr/sw_method_init.bin
nvidia/gp108/gr/sw_bundle_init.bin
nvidia/gp108/gr/sw_nonctx.bin
nvidia/gp108/gr/sw_ctx.bin
nvidia/gp108/gr/gpccs_sig.bin
nvidia/gp108/gr/gpccs_data.bin
nvidia/gp108/gr/gpccs_inst.bin
nvidia/gp108/gr/gpccs_bl.bin
nvidia/gp108/gr/fecs_sig.bin
nvidia/gp108/gr/fecs_data.bin
nvidia/gp108/gr/fecs_inst.bin
nvidia/gp108/gr/fecs_bl.bin
nvidia/gp108/acr/ucode_unload.bin
nvidia/gp108/acr/ucode_load.bin
nvidia/gp108/acr/unload_bl.bin
nvidia/gp108/acr/bl.bin
amdgpu/navi12_gpu_info.bin                          non-free
amdgpu/navi14_gpu_info.bin
amdgpu/navi10_gpu_info.bin
amdgpu/renoir_gpu_info.bin
amdgpu/arcturus_gpu_info.bin                        non-free
amdgpu/raven2_gpu_info.bin
amdgpu/picasso_gpu_info.bin
amdgpu/raven_gpu_info.bin
amdgpu/vega12_gpu_info.bin
amdgpu/vega10_gpu_info.bin
amdgpu/mullins_mec.bin
amdgpu/mullins_rlc.bin
amdgpu/mullins_ce.bin
amdgpu/mullins_me.bin
amdgpu/mullins_pfp.bin
amdgpu/kabini_mec.bin
amdgpu/kabini_rlc.bin
amdgpu/kabini_ce.bin
amdgpu/kabini_me.bin
amdgpu/kabini_pfp.bin
amdgpu/kaveri_mec2.bin
amdgpu/kaveri_mec.bin
amdgpu/kaveri_rlc.bin
amdgpu/kaveri_ce.bin
amdgpu/kaveri_me.bin
amdgpu/kaveri_pfp.bin
amdgpu/hawaii_mec.bin
amdgpu/hawaii_rlc.bin
amdgpu/hawaii_ce.bin
amdgpu/hawaii_me.bin
amdgpu/hawaii_pfp.bin
amdgpu/bonaire_mec.bin
amdgpu/bonaire_rlc.bin
amdgpu/bonaire_ce.bin
amdgpu/bonaire_me.bin
amdgpu/bonaire_pfp.bin
amdgpu/mullins_sdma1.bin
amdgpu/mullins_sdma.bin
amdgpu/kabini_sdma1.bin
amdgpu/kabini_sdma.bin
amdgpu/kaveri_sdma1.bin
amdgpu/kaveri_sdma.bin
amdgpu/hawaii_sdma1.bin
amdgpu/hawaii_sdma.bin
amdgpu/bonaire_sdma1.bin
amdgpu/bonaire_sdma.bin
amdgpu/si58_mc.bin
amdgpu/hainan_mc.bin
amdgpu/oland_mc.bin
amdgpu/verde_mc.bin
amdgpu/pitcairn_mc.bin
amdgpu/tahiti_mc.bin
amdgpu/hainan_rlc.bin
amdgpu/hainan_ce.bin
amdgpu/hainan_me.bin
amdgpu/hainan_pfp.bin
amdgpu/oland_rlc.bin
amdgpu/oland_ce.bin
amdgpu/oland_me.bin
amdgpu/oland_pfp.bin
amdgpu/verde_rlc.bin
amdgpu/verde_ce.bin
amdgpu/verde_me.bin
amdgpu/verde_pfp.bin
amdgpu/pitcairn_rlc.bin
amdgpu/pitcairn_ce.bin
amdgpu/pitcairn_me.bin
amdgpu/pitcairn_pfp.bin
amdgpu/tahiti_rlc.bin
amdgpu/tahiti_ce.bin
amdgpu/tahiti_me.bin
amdgpu/tahiti_pfp.bin
amdgpu/banks_k_2_smc.bin
amdgpu/hainan_k_smc.bin
amdgpu/hainan_smc.bin
amdgpu/oland_k_smc.bin
amdgpu/oland_smc.bin
amdgpu/verde_k_smc.bin
amdgpu/verde_smc.bin
amdgpu/pitcairn_k_smc.bin
amdgpu/pitcairn_smc.bin
amdgpu/tahiti_smc.bin
amdgpu/topaz_mc.bin
amdgpu/hawaii_mc.bin
amdgpu/bonaire_mc.bin
amdgpu/polaris12_k_mc.bin
amdgpu/polaris10_k_mc.bin
amdgpu/polaris11_k_mc.bin
amdgpu/polaris12_mc.bin
amdgpu/polaris10_mc.bin
amdgpu/polaris11_mc.bin
amdgpu/tonga_mc.bin
amdgpu/vega12_asd.bin
amdgpu/vega12_sos.bin
amdgpu/vega10_asd.bin
amdgpu/vega10_sos.bin
amdgpu/raven2_asd.bin
amdgpu/picasso_asd.bin
amdgpu/raven_asd.bin
amdgpu/arcturus_asd.bin                             non-free
amdgpu/arcturus_sos.bin                             non-free
amdgpu/navi12_asd.bin                               non-free
amdgpu/navi12_sos.bin                               non-free
amdgpu/navi14_asd.bin
amdgpu/navi14_sos.bin
amdgpu/navi10_asd.bin
amdgpu/navi10_sos.bin
amdgpu/vega20_ta.bin
amdgpu/vega20_asd.bin
amdgpu/vega20_sos.bin
amdgpu/renoir_asd.bin
amdgpu/vegam_rlc.bin
amdgpu/vegam_mec2.bin
amdgpu/vegam_mec.bin
amdgpu/vegam_me.bin
amdgpu/vegam_pfp.bin
amdgpu/vegam_ce.bin
amdgpu/polaris12_rlc.bin
amdgpu/polaris12_mec2_2.bin
amdgpu/polaris12_mec2.bin
amdgpu/polaris12_mec_2.bin
amdgpu/polaris12_mec.bin
amdgpu/polaris12_me_2.bin
amdgpu/polaris12_me.bin
amdgpu/polaris12_pfp_2.bin
amdgpu/polaris12_pfp.bin
amdgpu/polaris12_ce_2.bin
amdgpu/polaris12_ce.bin
amdgpu/polaris11_rlc.bin
amdgpu/polaris11_mec2_2.bin
amdgpu/polaris11_mec2.bin
amdgpu/polaris11_mec_2.bin
amdgpu/polaris11_mec.bin
amdgpu/polaris11_me_2.bin
amdgpu/polaris11_me.bin
amdgpu/polaris11_pfp_2.bin
amdgpu/polaris11_pfp.bin
amdgpu/polaris11_ce_2.bin
amdgpu/polaris11_ce.bin
amdgpu/polaris10_rlc.bin
amdgpu/polaris10_mec2_2.bin
amdgpu/polaris10_mec2.bin
amdgpu/polaris10_mec_2.bin
amdgpu/polaris10_mec.bin
amdgpu/polaris10_me_2.bin
amdgpu/polaris10_me.bin
amdgpu/polaris10_pfp_2.bin
amdgpu/polaris10_pfp.bin
amdgpu/polaris10_ce_2.bin
amdgpu/polaris10_ce.bin
amdgpu/fiji_rlc.bin
amdgpu/fiji_mec2.bin
amdgpu/fiji_mec.bin
amdgpu/fiji_me.bin
amdgpu/fiji_pfp.bin
amdgpu/fiji_ce.bin
amdgpu/topaz_rlc.bin
amdgpu/topaz_mec.bin
amdgpu/topaz_me.bin
amdgpu/topaz_pfp.bin
amdgpu/topaz_ce.bin
amdgpu/tonga_rlc.bin
amdgpu/tonga_mec2.bin
amdgpu/tonga_mec.bin
amdgpu/tonga_me.bin
amdgpu/tonga_pfp.bin
amdgpu/tonga_ce.bin
amdgpu/stoney_rlc.bin
amdgpu/stoney_mec.bin
amdgpu/stoney_me.bin
amdgpu/stoney_pfp.bin
amdgpu/stoney_ce.bin
amdgpu/carrizo_rlc.bin
amdgpu/carrizo_mec2.bin
amdgpu/carrizo_mec.bin
amdgpu/carrizo_me.bin
amdgpu/carrizo_pfp.bin
amdgpu/carrizo_ce.bin
amdgpu/renoir_rlc.bin
amdgpu/renoir_mec2.bin
amdgpu/renoir_mec.bin
amdgpu/renoir_me.bin
amdgpu/renoir_pfp.bin
amdgpu/renoir_ce.bin
amdgpu/arcturus_rlc.bin                             non-free
amdgpu/arcturus_mec2.bin                            non-free
amdgpu/arcturus_mec.bin                             non-free
amdgpu/raven_kicker_rlc.bin
amdgpu/raven2_rlc.bin
amdgpu/raven2_mec2.bin
amdgpu/raven2_mec.bin
amdgpu/raven2_me.bin
amdgpu/raven2_pfp.bin
amdgpu/raven2_ce.bin
amdgpu/picasso_rlc_am4.bin
amdgpu/picasso_rlc.bin
amdgpu/picasso_mec2.bin
amdgpu/picasso_mec.bin
amdgpu/picasso_me.bin
amdgpu/picasso_pfp.bin
amdgpu/picasso_ce.bin
amdgpu/raven_rlc.bin
amdgpu/raven_mec2.bin
amdgpu/raven_mec.bin
amdgpu/raven_me.bin
amdgpu/raven_pfp.bin
amdgpu/raven_ce.bin
amdgpu/vega20_rlc.bin
amdgpu/vega20_mec2.bin
amdgpu/vega20_mec.bin
amdgpu/vega20_me.bin
amdgpu/vega20_pfp.bin
amdgpu/vega20_ce.bin
amdgpu/vega12_rlc.bin
amdgpu/vega12_mec2.bin
amdgpu/vega12_mec.bin
amdgpu/vega12_me.bin
amdgpu/vega12_pfp.bin
amdgpu/vega12_ce.bin
amdgpu/vega10_rlc.bin
amdgpu/vega10_mec2.bin
amdgpu/vega10_mec.bin
amdgpu/vega10_me.bin
amdgpu/vega10_pfp.bin
amdgpu/vega10_ce.bin
amdgpu/navi12_rlc.bin                               non-free
amdgpu/navi12_mec2.bin                              non-free
amdgpu/navi12_mec.bin                               non-free
amdgpu/navi12_me.bin                                non-free
amdgpu/navi12_pfp.bin                               non-free
amdgpu/navi12_ce.bin                                non-free
amdgpu/navi14_rlc.bin
amdgpu/navi14_mec2.bin
amdgpu/navi14_mec.bin
amdgpu/navi14_me.bin
amdgpu/navi14_pfp.bin
amdgpu/navi14_ce.bin
amdgpu/navi14_mec2_wks.bin
amdgpu/navi14_mec_wks.bin
amdgpu/navi14_me_wks.bin
amdgpu/navi14_pfp_wks.bin
amdgpu/navi14_ce_wks.bin
amdgpu/navi10_rlc.bin
amdgpu/navi10_mec2.bin
amdgpu/navi10_mec.bin
amdgpu/navi10_me.bin
amdgpu/navi10_pfp.bin
amdgpu/navi10_ce.bin
amdgpu/topaz_sdma1.bin
amdgpu/topaz_sdma.bin
amdgpu/vegam_sdma1.bin
amdgpu/vegam_sdma.bin
amdgpu/polaris12_sdma1.bin
amdgpu/polaris12_sdma.bin
amdgpu/polaris11_sdma1.bin
amdgpu/polaris11_sdma.bin
amdgpu/polaris10_sdma1.bin
amdgpu/polaris10_sdma.bin
amdgpu/stoney_sdma.bin
amdgpu/fiji_sdma1.bin
amdgpu/fiji_sdma.bin
amdgpu/carrizo_sdma1.bin
amdgpu/carrizo_sdma.bin
amdgpu/tonga_sdma1.bin
amdgpu/tonga_sdma.bin
amdgpu/renoir_sdma.bin
amdgpu/arcturus_sdma.bin                            non-free
amdgpu/raven2_sdma.bin
amdgpu/picasso_sdma.bin
amdgpu/raven_sdma.bin
amdgpu/vega20_sdma1.bin
amdgpu/vega20_sdma.bin
amdgpu/vega12_sdma1.bin
amdgpu/vega12_sdma.bin
amdgpu/vega10_sdma1.bin
amdgpu/vega10_sdma.bin
amdgpu/navi12_sdma1.bin                             non-free
amdgpu/navi12_sdma.bin                              non-free
amdgpu/navi14_sdma1.bin
amdgpu/navi14_sdma.bin
amdgpu/navi10_sdma1.bin
amdgpu/navi10_sdma.bin
amdgpu/navi10_mes.bin                               non-free
amdgpu/vega20_uvd.bin
amdgpu/vega12_uvd.bin
amdgpu/vega10_uvd.bin
amdgpu/vegam_uvd.bin
amdgpu/polaris12_uvd.bin
amdgpu/polaris11_uvd.bin
amdgpu/polaris10_uvd.bin
amdgpu/stoney_uvd.bin
amdgpu/fiji_uvd.bin
amdgpu/carrizo_uvd.bin
amdgpu/tonga_uvd.bin
amdgpu/mullins_uvd.bin
amdgpu/hawaii_uvd.bin
amdgpu/kaveri_uvd.bin
amdgpu/kabini_uvd.bin
amdgpu/bonaire_uvd.bin
amdgpu/vega20_vce.bin
amdgpu/vega12_vce.bin
amdgpu/vega10_vce.bin
amdgpu/vegam_vce.bin
amdgpu/polaris12_vce.bin
amdgpu/polaris11_vce.bin
amdgpu/polaris10_vce.bin
amdgpu/stoney_vce.bin
amdgpu/fiji_vce.bin
amdgpu/carrizo_vce.bin
amdgpu/tonga_vce.bin
amdgpu/mullins_vce.bin
amdgpu/hawaii_vce.bin
amdgpu/kaveri_vce.bin
amdgpu/kabini_vce.bin
amdgpu/bonaire_vce.bin
amdgpu/navi12_vcn.bin                               non-free
amdgpu/navi14_vcn.bin
amdgpu/navi10_vcn.bin
amdgpu/renoir_vcn.bin
amdgpu/arcturus_vcn.bin                             non-free
amdgpu/raven2_vcn.bin
amdgpu/picasso_vcn.bin
amdgpu/raven_vcn.bin
amdgpu/vega20_smc.bin
amdgpu/vega12_smc.bin
amdgpu/vega10_acg_smc.bin
amdgpu/vega10_smc.bin
amdgpu/vegam_smc.bin
amdgpu/polaris12_k_smc.bin
amdgpu/polaris12_smc.bin
amdgpu/polaris11_k2_smc.bin
amdgpu/polaris11_k_smc.bin
amdgpu/polaris11_smc_sk.bin
amdgpu/polaris11_smc.bin
amdgpu/polaris10_k2_smc.bin
amdgpu/polaris10_k_smc.bin
amdgpu/polaris10_smc_sk.bin
amdgpu/polaris10_smc.bin
amdgpu/fiji_smc.bin
amdgpu/tonga_k_smc.bin
amdgpu/tonga_smc.bin
amdgpu/topaz_k_smc.bin
amdgpu/topaz_smc.bin
amdgpu/hawaii_k_smc.bin
amdgpu/hawaii_smc.bin
amdgpu/bonaire_k_smc.bin
amdgpu/bonaire_smc.bin
amdgpu/navi12_smc.bin                               non-free
amdgpu/navi14_smc.bin
amdgpu/navi10_smc.bin
amdgpu/arcturus_smc.bin                             non-free
amdgpu/vega20_smc.bin
amdgpu/raven_dmcu.bin
vx/l_1_vp4.d56                                      non-free
vx/l_1_vxp.d56                                      non-free
vx/l_1_v22.d56                                      non-free
vx/l_1_vx2.d56                                      non-free
vx/bd563s3.boot                                     non-free
vx/bd563v2.boot                                     non-free
vx/bd56002.boot                                     non-free
vx/x1_1_vp4.xlx                                     non-free
vx/x1_1_vxp.xlx                                     non-free
vx/x1_2_v22.xlx                                     non-free
vx/x1_1_vx2.xlx                                     non-free
vx/bx_1_vp4.b56                                     non-free
vx/bx_1_vxp.b56                                     non-free
6fire/dmx6firecf.bin                                non-free
6fire/dmx6fireap.ihx                                non-free
6fire/dmx6firel2.ihx                                non-free
yamaha/ds1e_ctrl.fw
yamaha/ds1_ctrl.fw
yamaha/ds1_dsp.fw
cs46xx/cwcdma                                       non-free
cs46xx/cwcbinhack                                   non-free
cs46xx/cwcsnoop                                     non-free
cs46xx/cwcasync                                     non-free
cs46xx/cwc4630                                      non-free
asihpi/dsp8900.bin                                  non-free
asihpi/dsp8700.bin                                  non-free
asihpi/dsp6600.bin                                  non-free
asihpi/dsp6400.bin                                  non-free
asihpi/dsp6205.bin                                  non-free
asihpi/dsp6200.bin                                  non-free
asihpi/dsp5000.bin                                  non-free
riptide.hex                                         non-free
ctefx-r3di.bin                                      non-free
ctefx-desktop.bin                                   non-free
ctefx.bin
mixart/miXart8AES.xlx                               non-free
mixart/miXart8.elf                                  non-free
mixart/miXart8.xlx                                  non-free
korg/k1212.dsp
pcxhr/dspd222.d56                                   non-free
pcxhr/dspb924.b56                                   non-free
pcxhr/dspe924.e56                                   non-free
pcxhr/xlxc924.dat                                   non-free
pcxhr/xlxc222.dat                                   non-free
pcxhr/dspd1222.d56                                  non-free
pcxhr/dspb1222e.b56                                 non-free
pcxhr/dspb1222hr.b56                                non-free
pcxhr/xlxc1222e.dat                                 non-free
pcxhr/xlxc1222hr.dat                                non-free
pcxhr/dspd882.d56                                   non-free
pcxhr/dspb882e.b56                                  non-free
pcxhr/dspb882hr.b56                                 non-free
pcxhr/dspe882.e56                                   non-free
pcxhr/xlxc882e.dat                                  non-free
pcxhr/xlxc882hr.dat                                 non-free
pcxhr/xlxint.dat                                    non-free
ess/maestro3_assp_minisrc.fw
ess/maestro3_assp_kernel.fw
ea/darla24_dsp.fw                                   non-free
ea/indigo_dsp.fw                                    non-free
ea/loader_dsp.fw                                    non-free
ea/indigo_djx_dsp.fw                                non-free
ea/loader_dsp.fw                                    non-free
ea/indigo_io_dsp.fw                                 non-free
ea/loader_dsp.fw                                    non-free
ea/gina24_361_asic.fw                               non-free
ea/gina24_301_asic.fw                               non-free
ea/gina24_361_dsp.fw                                non-free
ea/gina24_301_dsp.fw                                non-free
ea/loader_dsp.fw                                    non-free
ea/mona_2_asic.fw                                   non-free
ea/mona_361_1_asic_96.fw                            non-free
ea/mona_361_1_asic_48.fw                            non-free
ea/mona_301_1_asic_96.fw                            non-free
ea/mona_301_1_asic_48.fw                            non-free
ea/mona_361_dsp.fw                                  non-free
ea/mona_301_dsp.fw                                  non-free
ea/loader_dsp.fw                                    non-free
ea/3g_asic.fw                                       non-free
ea/echo3g_dsp.fw                                    non-free
ea/loader_dsp.fw                                    non-free
ea/indigo_iox_dsp.fw                                non-free
ea/loader_dsp.fw                                    non-free
ea/gina20_dsp.fw                                    non-free
ea/darla20_dsp.fw                                   non-free
ea/mia_dsp.fw                                       non-free
ea/loader_dsp.fw                                    non-free
ea/layla20_asic.fw                                  non-free
ea/layla20_dsp.fw                                   non-free
ea/layla24_2S_asic.fw                               non-free
ea/layla24_2A_asic.fw                               non-free
ea/layla24_1_asic.fw                                non-free
ea/layla24_dsp.fw                                   non-free
ea/loader_dsp.fw                                    non-free
ea/indigo_dj_dsp.fw                                 non-free
ea/loader_dsp.fw                                    non-free
emu/emu1010_notebook.fw                             non-free
emu/emu0404.fw                                      non-free
emu/micro_dock.fw                                   non-free
emu/emu1010b.fw                                     non-free
emu/audio_dock.fw                                   non-free
emu/hana.fw                                         non-free
digiface_firmware_rev11.bin                         non-free
digiface_firmware.bin                               non-free
multiface_firmware_rev11.bin                        non-free
multiface_firmware.bin                              non-free
rpm_firmware.bin                                    non-free
gyrog commented 4 years ago

I compiled kernel 4.9.231 in bionicpup32 using current kernel-kit. All looks good, the kernel fdrv and zdrv all worked fine.

Noticed an issue with 'firmware_picker.sh', it doesn't honour $COMP from 'build.conf' when making the fdrv sfs.

I had to repeat the compile, a "build.sh clean" command seems a lot more aggressive than before.

I did appreceiate the support for "../linux-firmware" as a symbolioc link. I already have a local clone of "linux-firmware" git.

01micko commented 4 years ago

Ok, I'll fix $COMP and then that will pretty much wind up this issue.

gyrog commented 4 years ago

Sorry, there is still an issue. I compiled kernel 4.4.232 in xenialpup and ended up with 2 dead symbolic links in "/lib/firmware/i915" in the generated "fdrv-4.4.232-gyro-pae.sfs". Maybe you should consider changing the "cp -d" commands in "firmware_picker.sh" to "cp -L" or even "cp -aLf". Then at least we get a real firmware blob in the "fdrv", not just a symbolic link.

01micko commented 4 years ago

So did you change to 'cp -L' or 'cp -aLf' (latter should be overkill) and test?

Anyway, doing a similar build right now with '-L'

01micko commented 4 years ago

Yep, '-L' works fine, in /lib/firmware/i915 all looks good.

gyrog commented 4 years ago

Yes, I test by doing a compile with a modified 'firmware_picker.sh' I just tested 'cp -Ln' and that also works fine. I added the 'n' because I worked out that my '/etc/modules/firmware.lst.$KVER' contains a small number of duplicates, and the 'n' avoids copying twice. But not a biggie, using '-L' instead of '-d' is the important thing.

Thinking of looking at running '/etc/modules/firmware.lst.$KVER' through a "sort -u" before it gets stored in the 'zdrv...sfs'. But that could easily be patched in later.

gyrog commented 4 years ago

I finally worked out why we get duplicate entries in the list; the same firmware blob is referenced by more than 1 module.

I have some code to do "sort -u" on the list, that works in a test stub, but I haven't done a test kernel compile yet. If it works in kernel compile, I can commit the patch to 'firmware_picker.sh' later.

01micko commented 4 years ago

what about something like [ -f "dest/file" ] || { cp -Ln "source/file"; log source/file } ?

gyrog commented 4 years ago

Tried that approach, only works for the firmware that we have blobs for, not the "non-free" ones.

I've just done a test compile of 5.4.55 in bionicpup64, and it works fine Uses: "fw_tmp_list=/tmp/firmware.lst.${kernel_version}" and "fw_msg $fw $fw_tmp_list # log to zdrv" and "sort -u < $fw_tmp_list >> $fw_list" and "cp -L -n $SRC_FW_DIR/$fw $FIRMWARE_RESULT_DIR"

i.e. write entries to a temp file and then appends this to the real file via "sort -u". This also gives us a sorted "/etc/modules/firmware.lst.$KVER" file, better for browsing.

My plan is to commit a patched 'firmware_picker.sh' after a few more kernel compiles. firmware_picker.sh.gz

gyrog commented 4 years ago

Unfortunately, I have another bright idea.

Since kernel-kit produces "vmlinuz-${kernel_ver}-${package_name_suffix}", should it produce fdrv as "firmware-${kernel_ver}-${package_name_suffix}.sfs". and zdrv as "modules-${kernel_ver}-${package_name_suffix}.sfs".

gyrog commented 4 years ago

I have attached a copy of the patched 'firmware_picker.sh' to post above. Here is the patch file: duplicates.diff.gz

01micko commented 4 years ago

Since kernel-kit produces "vmlinuz-${kernel_ver}-${package_name_suffix}", should it produce fdrv as "firmware-${kernel_ver}-${package_name_suffix}.sfs". and zdrv as "modules-${kernel_ver}-${package_name_suffix}.sfs".

Doesn't matter about the name. I don't feel like patching change_kernels and support/huge_kernels.sh because backward compatibility will then become an issue.


i.e. write entries to a temp file and then appends this to the real file via "sort -u". This also gives us a sorted "/etc/modules/firmware.lst.$KVER" file, better for browsing.

I took a slightly different approach, only because 'sort' may not be available or may differ. I recall BK had problems with 'sort' versions a while ago. However 'grep' is fairly consistent and the order is preserved in a while read line loop. Code shortly.

BTW, there were about 60 duplicates I found in k4.4.230, and a few of those were radeon/amd_gpu firmware blobs. Yes after I posted I realised that non-free (or 'not found') would be an issue.

01micko commented 4 years ago

Ok, here is my diff, the read loop only takes a second or two on my 4th gen i5 desktop.

--- ../woof-CE/kernel-kit/firmware_picker.sh    2020-08-03 21:44:22.072947050 +1000
+++ firmware_picker.sh  2020-08-03 21:41:07.658958480 +1000
@@ -78,7 +78,8 @@ mkdir -p $FIRMWARE_RESULT_DIR
 firmware_list_dir=output/${linux_kernel_dir}/etc/modules/
 mkdir -p $firmware_list_dir
 fw_list=${firmware_list_dir}/firmware.lst.${kernel_version}
-echo "### If 'non-free' is after a firmware entry it is non-free and will need to be found elsewhere" > $fw_list
+tmp_list=/tmp/firmware.lst
+echo "### If 'non-free' is after a firmware entry it may be non-free and will need to be found elsewhere" > $fw_list

 # find the modules and see what firmware they need
 # NOTE 0: modinfo to the actual full path to the .ko module file works
@@ -91,25 +92,30 @@ do
        fw_dir=${fw%\/*} # dirname
        if [ "$fw" = "$fw_dir" ];then # not in subdir
            if [ -e "$SRC_FW_DIR/$fw" ];then
-               cp -L $SRC_FW_DIR/$fw $FIRMWARE_RESULT_DIR
-               fw_msg $fw $fw_list # log to zdrv
+               cp -Ln $SRC_FW_DIR/$fw $FIRMWARE_RESULT_DIR
+               fw_msg $fw $tmp_list # log to zdrv
            else
-               fw_msg "${fw} non-free" $fw_list # log to zdrv
+               fw_msg "${fw} non-free" $tmp_list # log to zdrv
                continue
            fi
        else
            if [ -e "$SRC_FW_DIR/$fw" ];then
                mkdir -p $FIRMWARE_RESULT_DIR/$fw_dir
-               cp -L $SRC_FW_DIR/$fw $FIRMWARE_RESULT_DIR/$fw_dir
-               fw_msg $fw $fw_list # log to zdrv
+               cp -Ln $SRC_FW_DIR/$fw $FIRMWARE_RESULT_DIR/$fw_dir
+               fw_msg $fw $tmp_list # log to zdrv
            else
-               fw_msg "${fw} non-free" $fw_list # log to zdrv
+               fw_msg "${fw} non-free" $tmp_list # log to zdrv
                continue
            fi
        fi      
    done
 done

+cat $tmp_list | while read entry
+do
+   grep -q "$entry" $fw_list || echo "$entry" >> $fw_list
+done
+
 # extract licences
 licence_func
01micko commented 4 years ago

better for browsing.

Maybe sort is better for browsing. I'll think about it.

01micko commented 4 years ago

There is really no difference between yours and mine - same approach from slightly different angles. I think 'better for browsing' wins. (not keen on your other 'bright idea' though :stuck_out_tongue: - only the timing is unfortunate, couple of years ago would have been better )

Just commit and close this so we can move on. We've done a good job IMHO.

gyrog commented 4 years ago

Ok

gyrog commented 4 years ago

Done