Pre-compiled updated mwlwifi drivers for stable releases

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...).

2 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

@eduperez would you be able to compile the older driver version for 21.02.0 release?

Similar to how you did with 21.02.0 -RC4. I feel like not enough testing or feedback came back from that. I feel like most users tried downgrading the firmware blog but I did not see any feedback on the older driver plus older firmware blog. I am willing to test if you are able to compile it.

Thank you for your time.

1 Like

I am having a bit of flaky response time on 2ghz/5ghz wifi.
Also looks like 5ghz periodically drops clients.
Is anyone of you have a stable one? If yes could you please share the setup?

//WRT1900AC v1 OpenWrt 21.02.0 r16279-5cc0535800
//AMSDU Disabled

After many testing, the router sooner or later ends with the same wifi problems...
May be you could try this, but you will get no more updates.

Now I´m using wrt1900acs-v2 with wifi OFF and a second router as wifi AP.

I have 1900ACS v1 and haven't noticed any problems running 19.07.7 (running for months with the drivers from eduperez) or 21.02.0 (running for a few weeks with stock drivers and the AMSDU fix).
Random note: I use the 5ghz radio only and the 2.4ghz one I turn off.

1 Like

I just uploaded the packages for the final release of 21.02.0, but using the older 31d93860 drivers, at:

After upgrading my machine, I cannot build packages for 19.07 any longer; I have to prepare a virtual machine, with an older version of the operating system, and this will take some time.

3 Likes

Thank you, sir.

@eduperez I just went to download the drivers for 21.02.0 and they don't seem to be there right now. I'm not sure if there was an issue and you had to take them down or not. But I figured I would let you know just in case. I would like to test them whenever they are ready. Thanks.

1 Like