Pre-compiled updated mwlwifi drivers for stable releases

@eduperez have you seen my tests on ebin-ultra board ?
my apologize in advance if useless...

The "mwifiex" drivers only drive the third radio on the WRT3200ACM, and it is usually disabled because it has a very small antenna, and causes conflicts with the drivers for the other two radios.

The Linksys WRT1200AC is sadly (I mean, I bought one of my two units only 3 years ago) end of life/abandoned and explained why in this post, and if you go to the official website and see that the latest firmware is at least 33 months old. Since arguably your router/firewall is your first and best line of defense against hackers/malware, this is, understating it: a non-ideal place to be at. A great thing about the open source community is having the possibility to keep older devices going.

However I think even using OpenWRT on these devices is essentially over…. Back in the v18 days, and LEDEv17 before that, everything worked great. On v19, with each consecutive release I’m having more and more WiFi problems. Version 19.07.8 is essentially unusable as my 5GHz radio won’t stay connected to any of my devices, heck even the 2GHz radio is flaky (and I don’t have an exotic configuration). On a whim, I tried v21.02.0 (which I see as of very recently is now the official release!) and it was worse, simply unusable.

/rant

Having said all that, I rolled back a release and am glad to report that your compiled files for 19.07.7 work very well (been using for 2 days)!! I seem to be not having 5GHz disconnects/drops and my Sonos (on 2GHz band) is much more responsive. So if you @eduperez can’t keep up with the official releases (I really like keeping my firmware up to date for security fixes), or can’t compile, or the aging driver is just not able to work with the newer OpenWRT code, I’ll have to sell off my units and look elsewhere (hint: it will NOT be another Linksys). Thank you @eduperez for all your work! But for me, the clock is ticking on getting rid of these units as I’m now relying on you to keep them going (no pressure :-).

1 Like

In what way, maybe some specifics in the 21.x release thread may serve some useful purpose; I certainly find master to be very usable on a mamba and rango, but admittedly, I turned off the radios on the rango long time passing.

In short, my devices on v21 (running on a WRT1200AC v1) would disconnect from the 5GHz radio after only minutes. Also the radio would get so unhappy, the only way to see it as a hotspot again was to reboot the unit. (v19.07.8 does the same thing but seems to last for up to a couple hours before dropping and needing a reboot).

I would spend the time to troubleshoot and upload sys logs and whatnot to help get v21 working, but since both WiFi driver and kernel firmware development is long done with these units, it doesn't seem worth everyone's time as this would probably be unsolvable.

If eduperez keeps compiling, and those files keep working, that's probably the best I can hope for.

If you have dealt with the AMSDU issue, the only other things I am aware of is some iot devices causing grief (on 88W8864) as outlined in the mwlwifi issue tracked.

Certainly mwlwifi development has ceased, but kernel, I am running 5.10 and testing 5.14?

1 Like

Sorry I meant firmware (not kernel) development is done.

Yeah, now that 21.02.0 final is out, hopefully someone can figure out the cause of the issues. Some people have reported better luck with the master, while others still have problems with that on WRT3200ACM & WRT32X, too: Users needed to test Wi-Fi stability on Linksys WRT3200ACM & WRT32X on OpenWrt 21.02.0-rc4

Master most definitely fixed the wireless issues I had. I’m checking wireless commits on master which were not backported to 21.02. If I find the commit that fixes this, this will all end.

2 Likes

Does not appear to be a consistent result regarding master having resolved issue on 88W8964 device.

This post was sent on July 24th, there’s been changes on the master branch since this date. I’ve tested master recently. There could be newer commits on the branch which might change the behavior this user is experiencing on their device.

P.S. Please tag me if you don’t send your response as a reply to me.

Yes, I know the timelines, but you were also reporting master as working at the time that moniker tested and reported it to be broken; as per the PR you had open to revert BLOB. I am simply stating that different results are being indicated by different people testing.

But I keep coming back to the result from when we first pulled the BLOB from the OEM FW, it is probably AP related as indicated by post client.

No, I did not know about this AMSDU workaround.

Before I try this, I have 4 questions:

  1. This may work for 3200 models, but I have a WRT1200AC v1, which does have the 88W8864 radio chip type, so I assume this will work for these units also?

  2. Does this have the possibility of bricking my router? (It's my primary unit, I don't want it not working! :slight_smile: )

The commands you provide append a "0" to those 2 files.

  1. Shouldn't it be a single ">" to instead overwrite the contents??

  2. The current contents (on v19.07.7) of those files is "tx amsdu: enable". If we are turning it off, shouldn't it be changed to "disable" rather than just a zero in that file?
    (i.e. echo "tx amsdu: disable" > /sys/kernel/debug/ieee80211/phy0/mwlwifi/tx_amsdu .... )
    (note the single ">")

Thanks for your help @anomeome !

  • this is applicable only to the 88W8864 devices, not the venom or rango
  • zero, (ha, famous last words, but about as close to 0 as one can get)
  • I think you be correct (hmm, been running it with that since time immemorial, did not spot my typo, appending apparently works
  • will turn it off (0 indicates disable), a bug in the 88W8864 FW (BLOB)
1 Like

Hi,

Sorry this is probably a dumb question, but I have a WRT3200ACM and in the /lib/firmware/mwlwifi directory I have both the 88W8864.bin and the 88W8964.bin files present. I am assuming 88W8964.bin is actually in use, though I could you explain how to figure out what is actually in use :-/

Thanks

cat /sys/kernel/debug/ieee80211/phy0/mwlwifi/info

Will give you relevant information regarding what is in play, including the version of the BLOB. You will see those two BLOBs on a default type build, if you build your own image you can utilise the per device rootfs to include / exclude things as desired (BT, FW...).

3 Likes

Thank you! Using 88W8964. Hardware version 7, which actually makes me wonder if we should report that sort of info when reporting our success/or not in using different versions of the driver.

I grabbed 21.02.0 yesterday and had issues with the 5ghz wireless (1900acs v1). What's the latest version that works well with the 1900acs radios?

I have been running 19.07.7 with eduperez's drivers for a while now with great performance.

My goal was to get the correct result code from the firmware commands, so I added a check in hif/pcie/pcie.c:

static int pcie_wait_complete(struct mwl_priv *priv, unsigned short cmd)
{
	unsigned int curr_iteration = MAX_WAIT_FW_COMPLETE_ITERATIONS;
	unsigned short int_code = 0;
	unsigned short int_result = 0;
	struct hostcmd_header *cmd_hdr = NULL;

	do {
		int_code = le16_to_cpu(*((__le16 *)&priv->pcmd_buf[0]));
		usleep_range(1000, 2000);
	} while ((int_code != cmd) && (--curr_iteration) && !priv->rmmod);

	if (curr_iteration == 0) {
		cmd_hdr = (struct hostcmd_header *)&priv->pcmd_buf[0];
		int_result = le16_to_cpu(cmd_hdr->result);
		wiphy_err(priv->hw->wiphy, "cmd 0x%04x=%s timed out\n",
			  cmd, mwl_fwcmd_get_cmd_string(cmd));
		wiphy_err(priv->hw->wiphy, "return code: 0x%04x\n", int_result);
		return -EIO;
	}

	if (priv->chip_type != MWL8997)
		usleep_range(3000, 5000);

	return 0;
}

My intention was to get a result code from the firmware, when the timeout is elapsed. But unfortunately the result code is always HOSTCMD_RESULT_OK, also when the timeout is elapsed. I have also tried to set an invalid result code (0xFFFF) for each command, before the command was send via PCIE. But the firmware from the device didn't react as desired. The result was always HOSTCMD_RESULT_NOT_SUPPORT. So all commands failed.

Without my knowledge from the usage of the firmware it's hard for me to solve these issues.

But it was worth for trying it. :slight_smile:

WiFi works for me currently, but only WPA2 and 802.11w Management Frame Protection disabled.

For the OpenWrt developers:
I think it's IMHO better to disable 802.11w in the current stable images for WRT32X by default for the first time, if it's easy to solve. Better for other users. On the current images it's optional in the default configuration, but breaks WiFi completely on this router.

2 Likes

Just a note: I needed to add this fix to resolve the issues I was seeing.

2 Likes