Adding OpenWrt support for Meraki MR53

I merged openwrt:master into openwrt mr53 branch the other day but I think the histories are a bit diverged. I'll clean it all up at some point.

I've installed one of them in my house after making a bracket (its a simple clip that is secured with the side M2.5 screw, and 2 plaster screws into the ceiling. printed in petg and hasn't fallen off yet). I'll put the .stl file in the repo when I get a chance.

Some observations

I'm struggling to get good wifi speed from this thing. Compared to a tp-link deco m5 running the same code base (there are patches in my repo for this)-

  • deco is a IPQ4019 2x2 with basic internal antennas
  • deco: I get consistent ~500Mbits/sec on my phone with 2x2 at 80MHz channel
  • MR53: struggles to get to 250 in the same environment... :confounded_face:
  • both have essentially the same config- 5 SSIDs on both bands (10 total).
  • looks like the MR53 rebooted/crashed last night- uptime only 19 hours and I definitely didn't reboot it.

so clearly not done just yet. Will have to make sure its not the ethernet- havent had a chance yet. Or it could be the wifi- looks like its falling back to generic board2.bin which doesn't seem right. Pretty sure the ART calibration is being pulled in correctly though.

EDIT: I'd added tftp put to the uboot, and before I blew everything away I grabbed the original ubi partition. From that I found the ath10K bin files for the mr53, and I made a matching board2.bin from these. This worked and I got a bit more excited seeing close to 400Mbps. I tried again this morning and the mr53 crashed/rebooted during the test... :sob: Next I'll use the ath10k firmware blob instead of the ct one in openwrt and see if that makes a difference. For the system crash it might be power related but I've got it running about 20m from a PoE+ aruba switch so should be fine. I'll spin another one up on my bench and leave that running for a bit, with console attached in case the kernel spews something out before it dies.

EDIT2: Throughput limit is probably CPU hitting the ceiling- I will check that next time I can throw a client at it. Theres no NSS enabled on this build its all going through CPU. Iperf client on ethernet hits ~250Mbps max (single thread). With two threads (2xCPUs) we max both out and get up to ~500... The wifi<->ethernet path is probably similar overhead or worse, which aligns with the ordinary performance. So its OK but not as performant as my old tp-link setup, aside from better RF coverage.

1 Like

So I did a quick ethernet-to-ethernet test of the MR53 vs. MR52, both connected to the same MS220-8P switch, and both connected via the PoE port. I ran the iperf3 server on the Meraki devices and the client on my Macbook (I did say ā€œquickā€ :grin: ).

Here’s what I get:

MR52 (OpenWrt 25.12-SNAPSHOT, r32680-17d625c858 ):

[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  1.10 GBytes   944 Mbits/sec    0             sender
[  5]   0.00-10.00  sec  1.10 GBytes   941 Mbits/sec                  receiver

MR53 (OpenWrt SNAPSHOT, r0-70eb312):

[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  1.03 GBytes   887 Mbits/sec  453             sender
[  5]   0.00-10.00  sec  1.03 GBytes   884 Mbits/sec                  receiver

So it’s a little bit slower, but not hopelessly so. I did note a reboot of the MR53 when I ran an apk update to install iperf3. Unfortunately, I disconnected the console port when I added the MR52 to the stack of devices, so I didn’t capture the cause :confused:

Doing a really quick test via wireless (caveat: both devices stacked one on top of the other, but only one having wireless enabled at a time, source about 1ft from routers):

MR52-as-router to MR53-as-iperf-server:

[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec   672 MBytes   564 Mbits/sec   73             sender
[  5]   0.00-10.01  sec   671 MBytes   562 Mbits/sec                  receiver

MR53-as-router to MR52-as-iperf-server:

[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec   776 MBytes   651 Mbits/sec    0             sender
[  5]   0.00-10.02  sec   774 MBytes   648 Mbits/sec                  receiver

So at least at this distance the MR53 performs quite well. Source is MBP M3 Pro, used the QCA 9984 (radio1, 5G, channel 36) and disabled wireless security (only because that was the default config of the radio on the 25.12-SNAPSHOT router).

Thanks Rafal,

I just did a test of ethernet to ethernet (through linux bridge) and it maxed out at 666Mbps. CPU was sitting around 50% on soft IRQs. Smelling an affinity issue I pinned the gmac irqs to two per CPU core and that got it up to 780. My shim driver is the next on the list since the softIRQs are hogging one CPU. This will also affect wifi.

A bit time poor atm but will try to improve things. Will get the proper board2.bin into the repo and rebase it on the openwrt/master. Will need to set up a console logger to check for crashes... seems to happen when the network gets loaded up. I've got one on the bench powered from a 12V socket so lets see if maybe its a PoE issue.

cheers

1 Like

I’m just happy someone got the work done to get things this far… I’m not in a rush to get this deployed since my MR52s do good enough, and I’m starting to replace the Maraki kit with ipq8074s with AX support. On the flip side, I’m excited there is more Meraki gear we can support, so I’m happy to help where I can.

As for time-poor, Hal had offered MR53 u-boot support in January of last year, and I only got around to installing anything on my spare MR53 when you added support for the 2.5G interface, so I don’t think you have to apologize for anything :grin:

Cheers!

PS: Interestingly, none of the iPerf runs caused reboots, the only time I’ve seen the device reboot was when I tried to run apk update… I’ll move things around in my lab device stack and reconnect the console in case the device has another oops. If I do see any more issues, I’ll also try to reproduce with external vs. PoE power.

PPS: I also picked up a USB 5Gbps Ethernet adapter recently, so I’ll try some iPerf ethernet tests with that once it arrives.

This was unexpected :laughing:

And:

root@OpenWrt:~# ethtool lan1
Settings for lan1:
	Supported ports: [  ]
	Supported link modes:   100baseT/Half 100baseT/Full
	                        1000baseT/Full
	                        2500baseT/Full
	                        5000baseT/Full
	Supported pause frame use: Symmetric Receive-only
	Supports auto-negotiation: No
	Supported FEC modes: Not reported
	Advertised link modes:  100baseT/Half 100baseT/Full
	                        1000baseT/Full
	                        2500baseT/Full
	                        5000baseT/Full
	Advertised pause frame use: Symmetric Receive-only
	Advertised auto-negotiation: No
	Advertised FEC modes: Not reported
	Link partner advertised link modes:  10baseT/Half 10baseT/Full
	                                     100baseT/Half 100baseT/Full
	                                     1000baseT/Full

But it looks like the link is up. I do need to re-arrange things to actually test anything serious however, since now the laptop is connected to both ethernet interfaces of the router with two ethernet interfaces itself.

Following up to the above, I tried connecting a different device via the the 5Gbps adapter (a Ubiquiti UACC-Adapter-RJ45-USBC-5GE), and the symptoms are the same:

  • Both devices show link is established and the negotiated speed is 5000BaseT/Full. LEDs on the router and the USB 5GE adapter light up.
  • The device attached successfully receives packets from the MR53 per tcpdump and packet counters.
  • The MR53 does not see any inbound traffic per tcpdump and packet counters.

I also tried to manually set the USB 5GE adapter to 2500BaseT, and nothing really changed on the MR53 (shows link at 5000BaseT and link partner only advertising 10-1000baseT). Swapping out the 5Gbps adapter for a 1Gbps adapter (an Anker USB-C to Ethernet adapter) gets traffic flowing both ways.

[EDIT: verified the Ubiquiti vs other devices] I did verify that the Ubiquiti adapter connects fine at 2.5Gbps to other 2.5GE devices, so my guess is this is some bug in how we set up the MR53’s 2.5Gbps port :sweat_smile:

Been too busy to invest much time into this, but I sat another one in my office with an external 12V supply.

It was looking good, staying up several days until it crashed.
The other unit is covering a larger area and often has more clients and heavier activity. Thats the one on PoE and its crashing several times a day.

So unless there is a power issue AND a crash issue (possible) I'm going to have to set up a console logger on a busy unit. Another job on the endless list :laughing:

There are some other efficiency improvements that can be made for throughput- around IRQ-CPU affinity. Thinking since this is an AP and the same traffic will be hitting the ethernet as the PCIe wifi, it makes sense just to tie all the ethernet IRQs to one CPU, and PCIe on the other. For ethernet-ethernet bridge speed, the .cpu1 should be on one, and the other macs on the other one...

I'll get to it one day...

@slow-boat @hmartin have either of you been able to use the 2.5GE port at that speed either in U-Boot or in the kernel? I was looking at another unrelated PR and happened to notice this change, and wonder if we need to do something similar:

OTOH, I can’t really tell where we would have set up that interface to allow 2.5Gbps speeds in the first place, so maybe we just have it configured to always run at 1Gbps? Sorry, this is a bit over my head but I figured I’d ask if we have known working examples before I try and wrap my head around it some more.

Cheers.

Yes with my patch it links 2.5G. Using sgmii+.

1 Like

Ps- not in uboot, just kernel via the configured external switch chip and 3x gmacs bonded in linux.

1 Like

OK, then I need to do a little more digging why it doesn’t work for me with the 5GE adapter… I see link, and traffic one way, but not the other. Thanks!

Hmm, I realized that your Release 1.00 build is still OpenWrt SNAPSHOT, r0-70eb312, which misses the GMAC QSGMII patches in https://github.com/slow-boat/openwrt/commit/8780aadc973420d1e61d1b3b6f11bea61ccc81ac

Maybe this is related to my failures to get the 2.5G interface going?