NXP pcie9098 driver for Mochabin

I've set up a driver for the Mochabin's NXP pcie9098:

There are some important quirks that I have outlined in the readme, but the wifi is now usable.

I'm only running the device as an AP at the moment, so let me know if there are issues with other configurations. You'll probably want to install hostapd and wpa_supplicant as well for a typical wifi setup.

Have they improved the cfg80211/nl80211 compatibility or is it still crap like for older cards?

You are just gonna be fighting with these drivers forever (Dont ask me how I know) due to NXP not wanting to ever upstream stuff, they dont want to make the FW updates public, let alone anything else.

1 Like

Yes.

Also yes.


I made the mistake of not researching the wifi card that comes with the Mochabin because I figured they would only include one that would work nicely with upstreamed drivers. Now that I have this thing I'm going to do what I can to make it work and I'll share my work for anyone else in the same situation.

Then all I can do is wish you luck in maintaining it, it's not gonna be easy.

2 Likes

I pushed a new release yesterday and all of the quirks that I'm aware of have now been resolved. The driver should work as well as the one included with the stock Ubuntu.

I've also changed the way I tag the releases to be more sane going forward.

1 Like

Ahrotahn and Robimarko, you both sound like the sort of genii that a noob like me can only aspire to. I contributed to Mochabin on the Indiegogo site thinking it sounded awesome, and went for the Openwrt build because I like some of the functionality behind it. This stuff I'm hearing about there being issues with the NXP card are deeply concerning me though because I'm really out of my depth in fairness. For someone like me who's fairly novice, would you suggest that I'd be better off using the fine work of Ahrotahn in getting the drivers working, or would I be as well to follow the suggestion linked here (Mochabin NXP 9089 - #4 by VA1DER) and just get a different wifi card that is better supported in Openwrt. In fairly novice language would you be able to explain the pros and cons of either option, and if you agree that a wifi card swap would be the better option, do you agree with Lord Vader in the link above, or would you suggest a different card?

Your time, patience, and guidance are all greatly appreciated. I've also seen on other forums how newbies often fall foul of general etiquette, so if I have done so please forgive me in advance. And if my general bowing and scraping is too obvious and not appreciated, let me know that as well and I'll cut that out in the future. Thanks very much

Getting a new card would make things easier to deal with in the long run. The downside is you would need to get one that has good drivers supported by openwrt, open the case, carefully separate the thermal compound, and install the card yourself. But you would then be able to update without worrying about the wifi.

Using the driver I built would get the card that comes with the device working, but you would have to install that manually after each update until/if that gets upstreamed. Since this is all new there is also the possibility that there are issues that I haven't run in to yet.

1 Like

For 802.11ax, both ath11k and mt76 are supported (and nothing else) - both will work, reliably, long term.

ath11k based cards tend to be more expensive (harder to get and more power hungry/ running hotter), the mt76 based mt7915 or mt7916 cards might be easier to get hold of (and run cooler); mt7921k is cheap and plenty, but more targeted at being a client card (which comes with restrictions in regards to to AP mode, like number of connected clients and similar ones).

Looking at recent history, Marvell/ NXP wireless has no future, nor a present.

Either way, you are taking a bit of a gamble and are on the forefront of development, expect experimenting and finding bugs (both software side and hardware side, as mentioned before, 802.11ax cards are power hungry and running hot, your SBC needs to be able to supply the former and get rid of the later), as well as potentially some light development.

A mt7915 based DBDC card is probably the cheapest way out.

1 Like

You can get QCA6390 cards quite cheap, despite being targeted at clients, they are fully fledged and I was quite surprised with the throughput in AP mode.

MT7915 is also quite good as you mentioned

3 Likes

Thanks for all your replies. I had a DM back from Globalscale telling me that my Openwrt version has shipped with a Qualcomm wifi 6 card, and having checked their Mochabin quick start guide, at the bottom of page 7 it shows a 8291M-PR wifi card as an optional accessory. Having Googled it, it looks like that might be the Qualcomm card, QCA6391, which I guess is a slightly newer version of the QCA6390 that robimarko mentions above?

There's some issue with the Fedex delivery (been in transit since end of November, and looks to be more an issue with Fedex), but once it arrives I'll happily let you guys know how that wifi module performs if you want to direct me to an easy guide on how to do some tests?

The only other question I have is whether adding external antennae is worth considering if it doesn't do so well with wifi range? I'm guessing that would be as simple as drilling a couple of holes and adding a couple of these WiFi Antenna Dipole dual bands 2.4, 5GHz 3dBi 108mm ANTSDUAL02F01000 - (asiarf.com) connected with these Coaxial Cable 1.13 diameter SMA RP IPEX Pigtail 1130150131X080R (CN132086R0815001) - (asiarf.com)?

QCA6391 is a variant of QCA6390, it should work out of the box.
Nice that they actually listened to me repeating that NXP cards are not suitable for OpenWrt

1 Like

I'd recommend this antenna over the one you posted. It's a little longer, but I've had good experience with it. Both from AsiaRF and vendors on Ali Express.

Hopefully your card works well for you. If not, I now have at least one of essentially all AsiaRF's offerings, and their 7915/7916 cards are all very well supported in OpenWrt. I can't speak highly enough of them.

1 Like

Would one of you with an ax card on v22.03.3+ mind posting their iw info output?

It turns out that I have some misinfo on my repo about the firmware not supporting ax. The second radio does not support it and helpfully throws an error about it when in ac mode and doesn't differentiate which radio the error is for. I wasn't able to get ax working in the stock Ubuntu so I took it at face-value and moved on to other problems.

After looking into the issue again yesterday I was able to get ax working by reverting this commit:

It seems like bad luck struck again due to the changes from this commit:
https://git.kernel.org/pub/scm/linux/kernel/git/jberg/iw.git/commit/util.c?id=a6cedc6d46dfcb55e9a3ed20a20d68cd515b9830

The HE Iftypes used to be listed on separate lines so the sed command was added to be sure the capabilities were being pulled from the correct section. Now they are listed on the same line. In my case: HE Iftypes: managed, AP, P2P-client, P2P-GO
So sed fails to match and returns nothing since, again, managed is listed before AP.

I don't have a basis for what the output looks like from other devices so I can't rule out that these drivers are the source of the problem.

After doing further research the only restriction seems to be that only one occurrence of each type is allowed across all instances, but having multiple per instance is valid. So that might be something I'll open an issue for once I can be sure I'm not missing anything.

With the latest release I've separated them into their own instances so that the output is what openwrt expects and this allows AX mode to work out of the box.

Ciao,

Looks like I have some issues switching to 'sta' mode both radios:

[  579.447850] CMD_RESP: cmd 0x20 error, result=0x1

[  579.452511] IOCTL failed: 0000000043f637f5 id=0x30000, sub_id=0x30003 action=1, status_code=0x3

[  586.742632] ERR: Role is AP

[  590.224135] ERR: Role is AP

Any tip?

Try powering off the mochabin if you haven't already done so. The version of uboot that comes with the device doesn't reset the wifi card on reboots.

If that doesn't change anything then post the contents of /etc/config/wireless so I can reproduce your setup. Be sure to remove/change any passwords or other sensitive data.

I already tried poweroff - no luck. Tried unplugging power cable too.

I tried your 'known working' /etc/config/wireless and a 'minimal' one too:

config wifi-device 'radio0'
        option type 'mac80211'
        option path 'cp0/f2640000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0'
        option band '5g'
        option country 'IT'

config wifi-device 'radio1'
        option type 'mac80211'
        option path 'cp0/f2640000.pcie/pci0000:00/0000:00:00.0/0000:01:00.1'
        option band '2g'
        option country 'IT'
        option legacy_rates '1'

config wifi-iface 'default_radio1'
        option device 'radio1'
        option network 'lan'
        option mode 'ap'
        option ssid 'yyy'
        option encryption 'psk2'
        option key 'yyy'

config wifi-iface 'default_radio0'
        option device 'radio0'
        option mode 'sta'
        option network 'wwan'
        option ssid 'xxx'
        option encryption 'sae'
        option key 'xxx'

Try this: Edit /lib/firmware/nxp/wifi_mod_para.conf and add drv_mode=1 to the section for the radio you plan to use in sta mode and reboot.

Example:

PCIE9098_0 = {
	drv_mode=1
	cfg80211_wext=0xf
	max_vir_bss=1
	cal_data_cfg=none
	ps_mode=2
	auto_ds=2
	host_mlme=1
	fw_name=nxp/pcieuart9098_combo_v1.bin
}

Hello Ahrotahn.
I'm trying to compile samedriver but for SD8997.
I've dowload and setup the openWRT SDK but i'm quite new with compiling out of tree sources and i'm strugling to do it.
Can you explain me how you compiled the nxp driver for openWRT.

Thank you in advance.

I've been meaning to write up some build documentation. Things are rather busy for me at the moment, but I'll hopefully have that documentation complete for this weekend. There's definitely some changes that would need to made for the SD8997 in order to use my setup, but it should work.