Adding OpenWrt support for Extreme Network AP3935i

Just got 3935i-ROW device and installed Snapshot on it. Has anyone tried to setup 160 Mhz channel bandwidth? On this device it is not available. Also, it seems to not accepting country code in kernel log:

[ 9893.066382] ath: EEPROM regdomain: 0x80f6
[ 9893.066420] ath: EEPROM indicates we should expect a country code
[ 9893.069382] ath: doing EEPROM country->regdmn map search
[ 9893.075566] ath: country maps to regdmn code: 0x37
[ 9893.080901] ath: Country alpha2 being used: FI
[ 9893.085435] ath: Regpair used: 0x37
[ 9893.089861] ath: regdomain 0x80f6 dynamically updated by user
[ 9893.093352] ath: EEPROM regdomain: 0x80f6
[ 9893.099149] ath: EEPROM indicates we should expect a country code
[ 9893.103227] ath: doing EEPROM country->regdmn map search
[ 9893.109220] ath: country maps to regdmn code: 0x37
[ 9893.114660] ath: Country alpha2 being used: FI
[ 9893.119201] ath: Regpair used: 0x37
[ 9893.123688] ath: regdomain 0x80f6 dynamically updated by user
root@OpenWrt:~# iw reg get
global
country FI: DFS-ETSI
(2400 - 2483 @ 40), (N/A, 20), (N/A)
(5150 - 5250 @ 80), (N/A, 23), (N/A), NO-OUTDOOR, AUTO-BW
(5250 - 5350 @ 80), (N/A, 20), (0 ms), NO-OUTDOOR, DFS, AUTO-BW
(5470 - 5725 @ 160), (N/A, 26), (0 ms), DFS
(5725 - 5875 @ 80), (N/A, 13), (N/A)
(5945 - 6425 @ 160), (N/A, 23), (N/A), NO-OUTDOOR
(57000 - 66000 @ 2160), (N/A, 40), (N/A)

phy#1
country US: DFS-FCC
(902 - 904 @ 2), (N/A, 30), (N/A)
(904 - 920 @ 16), (N/A, 30), (N/A)
(920 - 928 @ 8), (N/A, 30), (N/A)
(2400 - 2472 @ 40), (N/A, 30), (N/A)
(5150 - 5250 @ 80), (N/A, 23), (N/A), AUTO-BW
(5250 - 5350 @ 80), (N/A, 24), (0 ms), DFS, AUTO-BW
(5470 - 5730 @ 160), (N/A, 24), (0 ms), DFS
(5730 - 5850 @ 80), (N/A, 30), (N/A), AUTO-BW
(5850 - 5895 @ 40), (N/A, 27), (N/A), NO-OUTDOOR, AUTO-BW, PASSIVE-SCAN
(5925 - 7125 @ 320), (N/A, 12), (N/A), NO-OUTDOOR, PASSIVE-SCAN
(57240 - 71000 @ 2160), (N/A, 40), (N/A)

phy#0
country US: DFS-FCC
(902 - 904 @ 2), (N/A, 30), (N/A)
(904 - 920 @ 16), (N/A, 30), (N/A)
(920 - 928 @ 8), (N/A, 30), (N/A)
(2400 - 2472 @ 40), (N/A, 30), (N/A)
(5150 - 5250 @ 80), (N/A, 23), (N/A), AUTO-BW
(5250 - 5350 @ 80), (N/A, 24), (0 ms), DFS, AUTO-BW
(5470 - 5730 @ 160), (N/A, 24), (0 ms), DFS
(5730 - 5850 @ 80), (N/A, 30), (N/A), AUTO-BW
(5850 - 5895 @ 40), (N/A, 27), (N/A), NO-OUTDOOR, AUTO-BW, PASSIVE-SCAN
(5925 - 7125 @ 320), (N/A, 12), (N/A), NO-OUTDOOR, PASSIVE-SCAN
(57240 - 71000 @ 2160), (N/A, 40), (N/A)

Using default ath10k-firmware-qca99x0-ct firmware

Oh well, qca9990 doesn't support 160 nor 80+80 MHz channel bandwidths.

With non-ct firmware wifi performance was bad. Installed ath10k-firmware-qca99x0-ct-full-htt and seems to work fine. Though, still having region issue.

The majority of the issues above are related to the two Ethernet ports and a very minor issue in the definition files.

First, the LAN/WAN designation is switched between two of the files (correct assignment: LAN = eth0, WAN = eth1) and another issue arises where the interfaces are listed as eth0 and eth2 (rather than eth0 and eth1).

Also, I've had to add the "watchdog" settings into the boot script. Without this extra step, the box will overwrite occasionally (if you reboot a half dozen times and it should overwrite at least once).

Updated Install Notes: Extreme Networks WS-AP3935i
Much of this is similar to the original instructions albeit more detailed; however, there are a few minor fixes:

  1. Download OpenWRT "Install" and "Upgrade" firmware images. Renaming to a consistent/simple name is best, eg- "wrt-initramfs.bin" and "wrt-sysupgrade.bin"

  2. Run (a) your TFTP server, (b) Terminal w/Serial connection (Putty, Kitty, etc) and (c) SCP client (WinSCP, Filezilla, etc)

  3. Copy the Install (not Upgrade) OpenWRT firmware to your TFTP Server.

  4. Use a RJ45 (Cisco style) serial cable to the Console port
    Connect Ethernet to the LAN1 port
    Connect at 115,200 ,8,1,None,None

  5. First time you boot, hold the reset button in for 6 seconds and let it cycle, to be sure the default credentials are restored.

  6. Watch as the device resets. Press the space button frequently, you'll miss the prompt that offers a break to U-Boot so the easiest option is pressing ahead of the break.

  7. If you miss the prompt to get into U-Boot, just login (user: admin, pass: new2date) and "reset" to reboot. This is much easier than cycling power because the U-Boot break opportunity is within seconds of powering-up.

  8. Set serverip to TFTP IP:
    set serverip 10.1.1.11

  9. Set ipaddr of the WiFi Box:
    set ipaddr 10.1.1.20

  10. Configure U-Boot & load OpenWRT over TFTP

    setenv MOSTRECENTKERNEL 0
    setenv WATCHDOG_COUNT 0
    setenv WATCHDOG_LIMIT 0
    setenv boot_flash "bootm 0x42000000;"
    set bootcmd 'setenv MOSTRECENTKERNEL 0; setenv WATCHDOG_COUNT 0; setenv WATCHDOG_LIMIT 0; ping 10.1.1.11; run boot_flash'
    saveenv
    
    
  11. Copy the "Install" firmware from your TFTP server, to WiFi Box:
    tftpboot 0x42000000 initramfs.bin

  12. Once it's complete, boot to that new firmware:
    bootm 0x42000000

  13. After the reboot process you should see the OpenWRT ASCII art banner page. You will now login with "root" and there will be no password until you set it with passwd.

  14. Run an "ifconfig" to see the status of your network adapters. Because you're connected to LAN1, you should see "br-lan" (bridged LAN), "eth0" (LAN), "eth1" (WAN), and "lo" (the loopback adapter).

  15. Assign a dynamic IP address with DHCP:
    udhcpc -i br-lan
    ...or setup a static IP...
    ifconfig eth0 10.1.1.20 255.255.255.0

  16. In you SCP client, create a new session and double-check that it's an "SCP" session (not SFTP, which is often the default). Using the SCP client, copy the firmware Upgrade file to the /tmp directory of the WiFi Box.

  17. Reset the watchdog commands again

	fw_setenv MOSTRECENTKERNEL 0
	fw_setenv WATCHDOG_COUNT 0
	fw_setenv WATCHDOG_LIMIT 0
	
	echo "nameserver 8.8.8.8" > /etc/resolv.conf         # Temp DNS for pkg update
	sed -i 's/https/http/g' /etc/opkg/distfeeds.conf		# Use HTTP not HTTPS
	opkg update      # If you'd like to install the Web UI (easier to upgrade)
	opkg install luci  # Same
  1. Confirm the Upgrade firmware is in the temp directory on the WiFi box
    li /tmp/sysupgrade.bin
    ...If everything looks good, upgrade to permanently install OpenWRT...
    sysupgrade -n -F /tmp/sysupgrade.bin

You're finished (once the minor bugs are fixed)

However, if the minor bugs remain in the definitions file, you'll run into some problems with the LAN1/LAN2.

I'll try to submit the changes to the definition file in hopes it will address this issue.

1 Like

@DevGirl

Can you please post your fixed dts file. Thanks!

1 Like

Hi @DevGirl, Can you elaborate on which file need to be changed in order to have the two Ethernet ports fonctional ?

@berg had his commit merged a few days ago (https://github.com/openwrt/openwrt/pull/13629)
Newest snapshot solved the ethernet issues for me on 3 aps so far. Havent tried additional ones yet.

Updated to latest snapshot today, and found issues in the boot:

[   39.214595] ipq806x-gmac-dwmac 37000000.ethernet eth0: Register MEM_TYPE_PAGE_POOL RxQ-0
[   39.297682] ipq806x-gmac-dwmac 37000000.ethernet eth0: PHY [37000000.mdio-mii:01] driver [Qualcomm Atheros AR8035] (irq=POLL)
[   39.501930] ipq806x-gmac-dwmac 37000000.ethernet: Failed to reset the dma
[   39.501972] ipq806x-gmac-dwmac 37000000.ethernet eth0: stmmac_hw_setup: DMA engine initialization failed
[   39.507715] ipq806x-gmac-dwmac 37000000.ethernet eth0: __stmmac_open: Hw setup failed
[   39.520747] br-lan: port 1(eth0) entered blocking state
[   39.525100] br-lan: port 1(eth0) entered disabled state
[   39.530050] ipq806x-gmac-dwmac 37000000.ethernet eth0: entered allmulticast mode
[   39.535656] ipq806x-gmac-dwmac 37000000.ethernet eth0: entered promiscuous mode
[   45.202114] WARNING: CPU: 0 PID: 858 at backports-6.9.9/net/mac80211/main.c:270 ieee80211_do_open+0x4e8/0x5e0 [mac80211]
[   45.206783] Modules linked in: pppoe ppp_async nft_fib_inet nf_flow_table_inet ath10k_pci(O) ath10k_core(O) ath(O) pppox ppp_generic nft_reject_ipv6 nft_reject_ipv4 nft_reject_inet nft_reject nft_redir nft_quota nft_numgen nft_nat nft_masq nft_log nft_limit nft_hash nft_flow_offload nft_fib_ipv6 nft_fib_ipv4 nft_fib nft_ct nft_chain_nat nf_tables nf_nat nf_flow_table nf_conntrack mac80211(O) cfg80211(O) slhc nfnetlink nf_reject_ipv6 nf_reject_ipv4 nf_log_syslog nf_defrag_ipv6 nf_defrag_ipv4 libcrc32c crc_ccitt compat(O) ledtrig_usbport sha512_arm seqiv geniv cmac leds_gpio xhci_plat_hcd xhci_pci xhci_hcd dwc3 dwc3_qcom ohci_platform ohci_hcd phy_qcom_ipq806x_usb ahci fsl_mph_dr_of ehci_platform ehci_fsl sd_mod ahci_platform libahci_platform libahci libata scsi_mod scsi_common ehci_hcd gpio_button_hotplug(O) crc32c_generic
[   45.268191] CPU: 0 PID: 858 Comm: hostapd Tainted: G           O       6.6.41 #0
[   45.290281] Hardware name: Generic DT based system
[   45.297752]  unwind_backtrace from show_stack+0x10/0x14
[   45.302347]  show_stack from dump_stack_lvl+0x40/0x4c
[   45.307470]  dump_stack_lvl from __warn+0x94/0xbc
[   45.312676]  __warn from warn_slowpath_fmt+0x158/0x15c
[   45.317362]  warn_slowpath_fmt from ieee80211_do_open+0x4e8/0x5e0 [mac80211]
[   45.322416]  ieee80211_do_open [mac80211] from ieee80211_open+0x58/0x7c [mac80211]
[   45.329608]  ieee80211_open [mac80211] from __dev_open+0xd4/0x194
[   45.336984]  __dev_open from __dev_change_flags+0x168/0x1dc
[   45.343143]  __dev_change_flags from dev_change_flags+0x18/0x54
[   45.348526]  dev_change_flags from devinet_ioctl+0x5b4/0x7ec
[   45.354430]  devinet_ioctl from inet_ioctl+0x16c/0x26c
[   45.360332]  inet_ioctl from sock_ioctl+0x240/0x60c
[   45.365281]  sock_ioctl from sys_ioctl+0x25c/0xc0c
[   45.370054]  sys_ioctl from ret_fast_syscall+0x0/0x54
[   45.374913] Exception stack(0xc2603fa8 to 0xc2603ff0)
[   45.380038] 3fa0:                   00000010 be97b730 00000010 00008914 be97b730 be97b720
[   45.385077] 3fc0: 00000010 be97b730 00000010 00000036 00000001 00000001 00000000 00000020
[   45.393236] 3fe0: b6f35f74 be97b5f0 004e09f0 b6eee704
[   45.401485] ---[ end trace 0000000000000000 ]---

Didn't experience this with earlier versions. Any idea what's wrong?

@berg

Any suggestion for the above crash? Thanks.

Looking at open issues on git, i guess it's ath10k-ct related due to one of the new commits
As pointed out here: https://github.com/openwrt/openwrt/issues/15959

If you follow the traces, there's more than just the jack that's missing.

I do not have it on hands. Make a photo. USB is not that complicated. There is only 4 wires. Ground, +5 Volt power and two data lines.
If it is missing something it's probably just some resistors on data lines and dc-dc to supply 5 volt.

@DevGirl

What's this line about?

setenv boot_flash "bootm 0x42000000;"

It was originally:

setenv boot_flash source boot_kernel

Pretty sure that's not going to work?

Also, what does it mean to overwrite?


I guess I type too much. You can only reply 3 times without someone else chiming in.

I just got a bunch of WS-AP3935i units. There are pads for a USB jack. The 5V USB supply is also missing. For what I'm trying to accomplish, neither is an issue. I'd like to connect the newly released Mixtile Z-Wave/Zigbee module. All it needs is 3.3V and USB data. I'm just going to solder 4 wires to the USB controller on the module. It's probably going to have to live outside the AP in its own little enclosure. This is due to space and potential interference. I can poke the USB cable into the ceiling and come back out maybe 12~24" away. I currently use a WS-AP3825i with an Atrim Z-Wave USB dongle. Z-Wave JS can access over IP. The Mixtile module has an external antenna and hopefully better firmware support. This sounds like a plan, but...

USB support libraries are included in the build, but lsusb produces unable to initialize libusb: -99

The only device-specific file is kmod-phy-qcom-ipq806x-usb.

When I look at other qcom-ipq8068- devices, the following entries are curiously missing from the WS-AP3935x dts file:

&usb3_0 {
	status = "okay";
};

&usb3_1 {
	status = "okay";
};

&hs_phy_0 {
	status = "okay";
};

&ss_phy_0 {
	status = "okay";
};

&hs_phy_1 {
	status = "okay";
};

&ss_phy_1 {
	status = "okay";
};

I wonder if that's all I need to get things working? Maybe someone who's already set up the build environment could do a test? :wink: I just want to know if lsusb will actually recognize a controller. If not, I'm going to remove all the USB libraries and stick with the WS-AP3825i which has a real working USB port, but only MIMO 3x3.

There's also a second serial port. I can output to ttyMSM1 without error. Maybe there's more good stuff under the CPU shield? I can see thermal pads through the vent holes. The CPU might overheat without the shield in place.

For anyone trying to get inside, it's just the 4 visible T10 screws on the bottom. There's nothing hidden behind any labels/stickers. There are lots of thermal pads inside. You need to pull pretty hard to break free. Once you get the back off, there are 4 visible Philips screws. Again, you need to pull hard to break the PCB free. There are no other attachments. There's nothing exciting between the black plastic plate and the front shell. Just 8 tiny antennas mounted at various angles.

Console port:
1 > RTS
3 > TXD
4 GND
5 GND
6 < RXD
8 < CTS

This matches a 'Cisco' console cable except that
2 > DTR
7 < DSR
are not used.

Note that many of the cheap USB console cables found online won't work with Windows 11. Microsoft and FTDI teamed up to declare older chips obsolete. To be fair, most of these chips probably are counterfeit.

With the above changes to the .dts file, I now get the following output:

root@OpenWrt:/dev# lsusb -t -v
/:  Bus 001.Port 001: Dev 001, Class=root_hub, Driver=xhci-hcd/1p, 480M
    ID 1d6b:0002
/:  Bus 002.Port 001: Dev 001, Class=root_hub, Driver=xhci-hcd/1p, 5000M
    ID 1d6b:0003
/:  Bus 003.Port 001: Dev 001, Class=root_hub, Driver=xhci-hcd/1p, 480M
    ID 1d6b:0002
/:  Bus 004.Port 001: Dev 001, Class=root_hub, Driver=xhci-hcd/1p, 5000M
    ID 1d6b:0003

This is encouraging. However, I'm also getting a continuous stream of the following:

usb usb2-port1: Cannot enable. Maybe the USB cable is bad?

Maybe I can glean something from the source code. I'm guessing that some of the pins/signals used by USB are in an unexpected state. If not used, they might be pulled up or down. This check might be limited to USB 3, so I'll see if I can shrink back the config. I doubt USB 2 would complain if the data pins are just floating. I haven't decided how I want to tap into the USB data signals on the AP3935. In order to use the existing PCB jack pads, I'd need to file through some thick metal and I'd still be lacking the 5V supply. I'm thinking about routing 3.3V, GND, D+, and D- through a 4-pole audio jack. USB itself only requires 3.3V. The 5V is for the benefit of the client device. That normally gets dropped to 3.3V anyway.

Update 1: I removed the _0 entries and kept the _1 versions. Sometimes devices don't enumerate in the order you'd expect.

&usb3_1 {
	status = "okay";
};

&hs_phy_1 {
	status = "okay";
};

&ss_phy_1 {
	status = "okay";
};

No more error messages. Hopefully one of the remaining ports corresponds to the jack pads.

/:  Bus 001.Port 001: Dev 001, Class=root_hub, Driver=xhci-hcd/1p, 480M
    ID 1d6b:0002
/:  Bus 002.Port 001: Dev 001, Class=root_hub, Driver=xhci-hcd/1p, 5000M
    ID 1d6b:0003

Update 2: USB is working. I've successfully interfaced a 3.3V USB device that doesn't require 5V VBUS. I connected wires to the 2 USB traces leading to the jack pads. Those are D+ and D-. I took 3.3V and GND from the 4-pin serial header.

[   22.289001] usb 1-1: new full-speed USB device number 2 using xhci-hcd
[   33.953227] cdc_acm 1-1:1.0: ttyACM0: USB ACM device
[   33.956185] cdc_acm 1-1:1.2: ttyACM1: USB ACM device

root@WSAP3935i-AP1:/# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux 6.6.45 xhci-hcd xHCI Host Controller
Bus 001 Device 002: ID 1a86:55d2  USB Dual_Serial
Bus 002 Device 001: ID 1d6b:0003 Linux 6.6.45 xhci-hcd xHCI Host Controller

root@WSAP3935i-AP1:/dev# [  132.516025] usb 1-1: USB disconnect, device number 2
1 Like

I have the latest Oct 18th Snapshot and I used the latest detailed install instructions, I get to the ifconfig (step 14) but eth0 does not show up. I have two units and the result is the same on both units. I can change the IP address on eth1, but when I try to ssh or scp into the ap it's refused.

I have notice on network device eth1 occasional link flapping (eth0 has the issues on boot):

 daemon.notice netifd: Network device 'eth1' link is down
 daemon.notice netifd: Interface 'wan' has link connectivity loss
 daemon.notice netifd: Interface 'wan' is now down
 kern.info kernel: [16080.923650] ipq806x-gmac-dwmac 37400000.ethernet eth1: Link is Down
4 kern.info kernel: [16080.923904] br-wan: port 1(eth1) entered disabled state
 kern.info kernel: [16081.973722] ipq806x-gmac-dwmac 37400000.ethernet eth1: Link is Up - 1Gbps/Full - flow control off
 kern.info kernel: [16081.973843] br-wan: port 1(eth1) entered blocking state
 kern.info kernel: [16081.981604] br-wan: port 1(eth1) entered forwarding state
 daemon.notice netifd: Network device 'eth1' link is up
 daemon.notice netifd: Interface 'wan' has link connectivity
 daemon.notice netifd: Interface 'wan' is setting up now
 daemon.notice netifd: Interface 'wan' is now up

I wonder if my is device defective or could this be on a driver level? Running recent snapshot r28072-b902284290

hy,
anyone tried to change the wifi modules in ap3935i to something better?
I read about asiarf or compex.
is that a good idea or just much work?

@saxy

I'm sorry I missed your plea for help (via PM). :smiling_face_with_tear:

Here's where I tapped into the PCB.

I only needed USB 2, so those are the only traces I chased. I didn't want to mess with the metal shield. The SOC has pins for USB 3, but I doubt they're brought out on the PCB. The USB protocol is 3.3V. The 5V is only for the peripheral's benefit. I wanted to connect an mPCIe device, so 5V was not required.

I chose a round 4-pin 3.5mm jack. I cut a fine-pitch male-female cable in half. I used the male connector on the jack side so that it would fit through the hole.

I modified a USB to mPCIe adapter to route what would have been 5V directly to the 3.3V rail.

You can also find adapters which go the other direction and boost 3.3V to 5V with a standard USB 2 female jack.

I replaced the Qualcom 9990 5Ghz card with AW7915-NP1 and it's been working well. Quite easy job, just needed to cut the thermal pad under the card a bit thinner to fit there.

Hy, i really wan't to try it, but shipping to Austria/Germany is more expensive than the module itself. Do you have any idea for getting this Module cheap?