Support for the Linksys MR9000

Thanks. That gets the eth ports working in master!
But I get no wifi now. I think the build is missing linksys-mr9000-fcc. Can you please tell me how to include it in a build?

That refers to the board calibration files. Those can be extracted from OEM firmware or, since our device has a backup partition, simply copied over from there (/lib/firmware/). Then with the help of the qca-swiss-army-knife they have to be converted to generate the board-2.bin files for the radios. The big question is which of the considerable number of files to use.

If you just remove the calibration-variant statement from the .dts file, it should work with the standard board-2.bin supplied by the ath10k-firmware packages. This may or may not impair wireless performance.

After removing the calibration-variant statement from the .dts file, I still get no wireless. In dmesg is the error "can not find board-2.bin or board.bin for"... (sic).

I thought it would work at least for the first 2 radios. Try replacing the board-2.bin files with those which contain the right calibration variant files. You have to rename the files to board-2.bin and place them in the folders /lib/firmware/ath10k/QCA4019/hw1.0/ and /QCA9984/hw1.0/.

Oh, and of course you have to put the calibration-variant statement back in.

Seems there is room for some refinement. I just tested the firmware on a second unit. It bootet as well, but the boot log shows a few retries when accessing the PHY. This gets better with the reset-post-delay prolonged to 2ms, will try 5ms next.

I also replaced a Linksys EA8300 in my wifi setup with the MR9000. Wifi performance of the MR9000 is OK, but not as good as the EA8300's so maybe I did use the wrong boarddata_x.bin file from the OEM firmware. If only I knew which one the OEM wifi driver loads ...

There's a folder for each reg domain which contains 4 different files for the QCA9988.


I've started with boarddata_0.bin, but this doesn't seem to be the right one.

I got it to work, using your board files, but had to use the -ct drivers. I was using non-ct before.

I also use -ct drivers, but don't see a reason for it not to work with non-ct.

Suggestion: you could copy all the board files over to the device, and then copy them in/out of lib/firmware/ath10k/ one by one, and reload the ath10k_pci via
rmmod ath10k_pci
modprobe ath10k_pci
and test each board-2.bin file that way rather quickly (better than building a whole new firmware).

Don't know if that will work. board-2.bin is a kind of container file, usually with several different calibration files in it. Your suggestion would depend on the driver to also accept raw calibration files.

But of course I could build several containers and then try your approach. Still faster than building new firmware each time.

Update: Not much difference when using the boardData_QCA... files. For the QCA4019 radios there are only 2 files to choose from so let's try something else. The files from the MR8300 should also work for those, shouldn't they? The design is more or less identical apart from the 3rd radio.

Oh, the choice is easier than expected: A simple cmp showed all the files for one reg domain to be bit-perfect copies of each other. No wonder there wasn't much difference to be seen.

@drandyhaas How does wifi perform with your unit?

I get about 320 Mbps when 50 feet away or so. Can get up to 480 when closer. This is about the same as with the ea8300. It's like this on both the 5 GHz radios. Both are set to 80 MHz bandwidth. The 2 GHz radio gives about 50 Mbps on 40 MHz bandwidth.

Just in case anybody wants to try it out , I have uploaded a 20.02.0-rc3 firmware with support for the MR9000.

I have found nothing which could explain the slightly inferior wifi performance compared to my EA8300 in an otherwise identical setup. Maybe it's down to the slightly different antenna design.

1 Like

I will give this a shot later on today. Hey thanks for looking further into the code, you did the part that I just haven't had time to sit down and look at.

Alright, time to get involved. The efforts made here are based on my custom build, something that I appreciate a lot. I will finish adding the missing parts to fully support all my changes on this device and publish it to my download website, making this build a usable one (with the ability to download and install packages).

After testing this further enough, I will make the efforts to port it back to the vanilla OpenWrt codebase, so the device can run an official OpenWrt build as well. However, since the OpenWrt reviewers are a little bit picky, I would like to hold back the "backporting" for a while.

Let me know your thoughts.

P.D.: I sent a request to Linksys to get the source code of the OEM firmware. Hopefully they'll release it soon. Do anybody have the full OEM bootlog? That will be useful for checking in the mean time.

P.P.D.: This custom build supports ramoops, which is marvelous to debug kernel panics and crashes. Just need to polish the code that handles that and enable it for this device.

1 Like

By all means I say go for it. I am on an off with looking at things given my crazy schedule. As for the build recently posted here I am 13+ days up with no issues. If you could get this into mainstream though that would be awesome. I have already bricked one of these two years ago (wiped it's eprom entirely) trying to figure out what's going on with these.

1 Like

Where is the repo for or files for this?

Here: download and install RC3. It is a fully usable (with installable software) build: Optimized build for IPQ40xx devices

Keep in touch with the thread as I will put the future released in there as well.

1 Like

Am I missing something but can’t find where in the web UI to upload the firmware

Am I looking it the wrong place?