Strange behaviour on 5G wifi with Netgear WAC124

Hi,
I've installed OpenWrt on a Netgear WAC124 without any issues.

https://openwrt.org/toh/hwdata/netgear/netgear_wac124
https://openwrt.org/toh/netgear/netgear_wac124
http://downloads.openwrt.org/snapshots/targets/ramips/mt7621/openwrt-ramips-mt7621-netgear_wac124-squashfs-factory.img

It's configured as a dumb access point with all 5 ports in a bridge, firewall is disabled, no dhcp server.
Two days ago I made some speed tests with my laptop and I was able to achieve 280 mbit download and > 200 mbit upload speeds (both against speedtest.net and local file copy laptop to wired pc).
Today I tested with 2 computers and also my phone and all of them were downloading at 9 mbps but uploading to 170, even with a local file copy.
In this exact moment, my phone is getting 120 mbps download (decent speed) but the laptop is stuck at 20.

I did notice an error in the dmesg output that makes the MACs randomize on each boot, I fixed it by setting a fixed macaddr in the wireless config file:

[ 2.484282] mtk_soc_eth 1e100000.ethernet: generated random MAC address b6:af:07:0c:47:70
[ 13.336241] mt7603e 0000:02:00.0: Invalid MAC address, using random address b2:0b:50:7f:f4:57
[ 14.254652] mt7615e 0000:01:00.0: Invalid MAC address, using random address ba:17:59:3b:ab:7c

My partition layout is the following:

[    0.918765] mt7621-nand 1e003000.nand: Using programmed access timing: 31c07388
[    0.933576] nand: device found, Manufacturer ID: 0xc2, Chip ID: 0xf1
[    0.946229] nand: Macronix MX30LF1G18AC
[    0.953861] nand: 128 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64
[    0.968953] mt7621-nand 1e003000.nand: ECC strength adjusted to 4 bits
[    0.981987] mt7621-nand 1e003000.nand: Using programmed access timing: 21005134
[    0.996544] mt7621-nand 1e003000.nand: Using programmed access timing: 21005134
[    1.011099] Scanning device for bad blocks
[    1.517170] Bad eraseblock 393 at 0x000003120000
[    2.323428] 7 fixed-partitions partitions found on MTD device mt7621-nand
[    2.336949] Creating 7 MTD partitions on "mt7621-nand":
[    2.347360] 0x000000000000-0x000000100000 : "u-boot"
[    2.358704] 0x000000100000-0x000000200000 : "SC PART_MAP"
[    2.370774] 0x000000200000-0x000000600000 : "kernel"
[    2.382122] 0x000000600000-0x000002e00000 : "ubi"
[    2.392997] 0x000002e00000-0x000004600000 : "reserved0"
[    2.404913] 0x000004600000-0x000004800000 : "factory"
[    2.416306] 0x000004800000-0x000008000000 : "reserved1"
[    2.429833] libphy: Fixed MDIO Bus: probed
[    2.464425] libphy: mdio: probed
[    2.471120] mt7530 mdio-bus:1f: MT7530 adapts as multi-chip module

There's one badblock but it's in the reserved0 area.
I also noticed that the capabilities of the physical device are quite strange, it does not seem to support VHT (which it should), and only 6dBm of txpower on 5Ghz?

root@ap:/etc/config# iw phy
Wiphy phy1
	wiphy index: 1
	max # scan SSIDs: 4
	max scan IEs length: 2304 bytes
	max # sched scan SSIDs: 0
	max # match sets: 0
	max # scan plans: 1
	max scan plan interval: 0
	max scan plan iterations: 0
	Retry short limit: 7
	Retry long limit: 4
	Coverage class: 0 (up to 0m)
	Device supports AP-side u-APSD.
	Device supports T-DLS.
	Available Antennas: TX 0xf RX 0xf
	Configured Antennas: TX 0xf RX 0xf
	Supported interface modes:
		 * IBSS
		 * managed
		 * AP
		 * AP/VLAN
		 * monitor
		 * mesh point
		 * P2P-client
		 * P2P-GO
	Band 2:
		Capabilities: 0x1ff
			RX LDPC
			HT20/HT40
			SM Power Save disabled
			RX Greenfield
			RX HT20 SGI
			RX HT40 SGI
			TX STBC
			RX STBC 1-stream
			Max AMSDU length: 3839 bytes
			No DSSS/CCK HT40
		Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
		Minimum RX AMPDU time spacing: No restriction (0x00)
		HT TX/RX MCS rate indexes supported: 0-31
		VHT Capabilities (0x338001fa):
			Max MPDU length: 11454
			Supported Channel Width: 160 MHz, 80+80 MHz
			RX LDPC
			short GI (80 MHz)
			short GI (160/80+80 MHz)
			TX STBC
			RX antenna pattern consistency
			TX antenna pattern consistency
		VHT RX MCS set:
			1 streams: MCS 0-9
			2 streams: MCS 0-9
			3 streams: MCS 0-9
			4 streams: MCS 0-9
			5 streams: not supported
			6 streams: not supported
			7 streams: not supported
			8 streams: not supported
		VHT RX highest supported: 0 Mbps
		VHT TX MCS set:
			1 streams: MCS 0-9
			2 streams: MCS 0-9
			3 streams: MCS 0-9
			4 streams: MCS 0-9
			5 streams: not supported
			6 streams: not supported
			7 streams: not supported
			8 streams: not supported
		VHT TX highest supported: 0 Mbps
		Frequencies:
			* 5180 MHz [36] (6.0 dBm)
			* 5200 MHz [40] (6.0 dBm)
			* 5220 MHz [44] (6.0 dBm)
			* 5240 MHz [48] (6.0 dBm)
			* 5260 MHz [52] (6.0 dBm) (radar detection)
			* 5280 MHz [56] (6.0 dBm) (radar detection)
			* 5300 MHz [60] (6.0 dBm) (radar detection)
			* 5320 MHz [64] (6.0 dBm) (radar detection)
			* 5500 MHz [100] (6.0 dBm) (radar detection)
			* 5520 MHz [104] (6.0 dBm) (radar detection)
			* 5540 MHz [108] (6.0 dBm) (radar detection)
			* 5560 MHz [112] (6.0 dBm) (radar detection)
			* 5580 MHz [116] (6.0 dBm) (radar detection)
			* 5600 MHz [120] (6.0 dBm) (radar detection)
			* 5620 MHz [124] (6.0 dBm) (radar detection)
			* 5640 MHz [128] (6.0 dBm) (radar detection)
			* 5660 MHz [132] (6.0 dBm) (radar detection)
			* 5680 MHz [136] (6.0 dBm) (radar detection)
			* 5700 MHz [140] (6.0 dBm) (radar detection)
			* 5720 MHz [144] (disabled)
			* 5745 MHz [149] (6.0 dBm)
			* 5765 MHz [153] (6.0 dBm)
			* 5785 MHz [157] (6.0 dBm)
			* 5805 MHz [161] (6.0 dBm)
			* 5825 MHz [165] (6.0 dBm)
			* 5845 MHz [169] (6.0 dBm)
			* 5865 MHz [173] (6.0 dBm)
	valid interface combinations:
		 * #{ IBSS } <= 1, #{ managed, AP, mesh point, P2P-client, P2P-GO } <= 4,
		   total <= 4, #channels <= 1, STA/AP BI must match, radar detect widths: { 20 MHz (no HT), 20 MHz, 40 MHz, 80 MHz, 80+80 MHz, 160 MHz }

	HT Capability overrides:
		 * MCS: ff ff ff ff ff ff ff ff ff ff
		 * maximum A-MSDU length
		 * supported channel width
		 * short GI for 40 MHz
		 * max A-MPDU length exponent
		 * min MPDU start spacing
	Supported extended features:
		* [ VHT_IBSS ]: VHT-IBSS
		* [ RRM ]: RRM
		* [ SET_SCAN_DWELL ]: scan dwell setting
		* [ CQM_RSSI_LIST ]: multiple CQM_RSSI_THOLD records
		* [ CONTROL_PORT_OVER_NL80211 ]: control port over nl80211
		* [ TXQS ]: FQ-CoDel-enabled intermediate TXQs
		* [ AIRTIME_FAIRNESS ]: airtime fairness scheduling
		* [ AQL ]: Airtime Queue Limits (AQL)
		* [ CONTROL_PORT_NO_PREAUTH ]: disable pre-auth over nl80211 control port support
		* [ DEL_IBSS_STA ]: deletion of IBSS station support
		* [ SCAN_FREQ_KHZ ]: scan on kHz frequency support
		* [ CONTROL_PORT_OVER_NL80211_TX_STATUS ]: tx status for nl80211 control port support
Wiphy phy0
	wiphy index: 0
	max # scan SSIDs: 4
	max scan IEs length: 2257 bytes
	max # sched scan SSIDs: 0
	max # match sets: 0
	max # scan plans: 1
	max scan plan interval: -1
	max scan plan iterations: 0
	Retry short limit: 7
	Retry long limit: 4
	Coverage class: 0 (up to 0m)
	Device supports AP-side u-APSD.
	Device supports T-DLS.
	Available Antennas: TX 0x3 RX 0x3
	Configured Antennas: TX 0x3 RX 0x3
	Supported interface modes:
		 * IBSS
		 * managed
		 * AP
		 * AP/VLAN
		 * monitor
		 * mesh point
		 * P2P-client
		 * P2P-GO
	Band 1:
		Capabilities: 0x1fe
			HT20/HT40
			SM Power Save disabled
			RX Greenfield
			RX HT20 SGI
			RX HT40 SGI
			TX STBC
			RX STBC 1-stream
			Max AMSDU length: 3839 bytes
			No DSSS/CCK HT40
		Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
		Minimum RX AMPDU time spacing: No restriction (0x00)
		HT TX/RX MCS rate indexes supported: 0-15
		Frequencies:
			* 2412 MHz [1] (20.0 dBm)
			* 2417 MHz [2] (20.0 dBm)
			* 2422 MHz [3] (20.0 dBm)
			* 2427 MHz [4] (20.0 dBm)
			* 2432 MHz [5] (20.0 dBm)
			* 2437 MHz [6] (20.0 dBm)
			* 2442 MHz [7] (20.0 dBm)
			* 2447 MHz [8] (20.0 dBm)
			* 2452 MHz [9] (20.0 dBm)
			* 2457 MHz [10] (20.0 dBm)
			* 2462 MHz [11] (20.0 dBm)
			* 2467 MHz [12] (20.0 dBm)
			* 2472 MHz [13] (20.0 dBm)
			* 2484 MHz [14] (disabled)
	valid interface combinations:
		 * #{ IBSS } <= 1, #{ managed, AP, mesh point, P2P-client, P2P-GO } <= 4,
		   total <= 4, #channels <= 1, STA/AP BI must match
	HT Capability overrides:
		 * MCS: ff ff ff ff ff ff ff ff ff ff
		 * maximum A-MSDU length
		 * supported channel width
		 * short GI for 40 MHz
		 * max A-MPDU length exponent
		 * min MPDU start spacing
	Supported extended features:
		* [ RRM ]: RRM
		* [ CQM_RSSI_LIST ]: multiple CQM_RSSI_THOLD records
		* [ CONTROL_PORT_OVER_NL80211 ]: control port over nl80211
		* [ TXQS ]: FQ-CoDel-enabled intermediate TXQs
		* [ AIRTIME_FAIRNESS ]: airtime fairness scheduling
		* [ AQL ]: Airtime Queue Limits (AQL)
		* [ SCAN_RANDOM_SN ]: use random sequence numbers in scans
		* [ SCAN_MIN_PREQ_CONTENT ]: use probe request with only rate IEs in scans
		* [ CONTROL_PORT_NO_PREAUTH ]: disable pre-auth over nl80211 control port support
		* [ DEL_IBSS_STA ]: deletion of IBSS station support
		* [ SCAN_FREQ_KHZ ]: scan on kHz frequency support
		* [ CONTROL_PORT_OVER_NL80211_TX_STATUS ]: tx status for nl80211 control port support
root@ap:/etc/config#

Do I have a problem with the hardware or the partition mappings?
I would appreciate if anyone with the same router could post the output of the command "iw phy" just to compare.

Thank you. :slight_smile:

I have more information, I have narrowed the problem to the width of the channel:

        option  htmode 'HT40'                   
#       option htmode 'VHT80'

If I use HT40, I manage to get 200mbps, VHT80 should be supported, but by some reason it is causing issues. My phone probably doesn't support MIMO, that was the difference in speed with my laptop.

Any idea on how to fix the incorrect phy info? This device supports MIMO 4x4...

I followed this discussion prior to installing OpenWrt:

https://forum.openwrt.org/t/netgear-wac124-mediatek-mt7621at-support/37959/19

Maybe @janh or @patricius could help me?

As the bad block is before the factory partition, the actual location of the factory partition is likely 0x4620000. As the MAC address and calibration data are stored there, this matches your issues. Can you try a build with the partition table patch? This should probably fix your missing MAC address and TX power.

I wouldn't expect the patch to entirely fix your performance issues, though. For example in an iPerf3 test, my laptop (T460) gets up to 350 Mbit/s RX and 440 Mbit/s TX, but with my phone (Pixel 3) it's only around 7 Mbit/s RX and 30 Mbit/s TX. And at least for receiving, the phone gets much faster results with a FRITZ!Box 4040 and a WNDR3700v5, so it looks like the driver for mt7615 is not yet fully mature.

Your iw phy output looks normal apart from the txpower. Here is the output from my WAC124:

Wiphy phy1
	wiphy index: 1
	max # scan SSIDs: 4
	max scan IEs length: 2304 bytes
	max # sched scan SSIDs: 0
	max # match sets: 0
	max # scan plans: 1
	max scan plan interval: 0
	max scan plan iterations: 0
	Retry short limit: 7
	Retry long limit: 4
	Coverage class: 0 (up to 0m)
	Device supports AP-side u-APSD.
	Device supports T-DLS.
	Available Antennas: TX 0xf RX 0xf
	Configured Antennas: TX 0xf RX 0xf
	Supported interface modes:
		 * IBSS
		 * managed
		 * AP
		 * AP/VLAN
		 * monitor
		 * mesh point
		 * P2P-client
		 * P2P-GO
	Band 2:
		Capabilities: 0x1ff
			RX LDPC
			HT20/HT40
			SM Power Save disabled
			RX Greenfield
			RX HT20 SGI
			RX HT40 SGI
			TX STBC
			RX STBC 1-stream
			Max AMSDU length: 3839 bytes
			No DSSS/CCK HT40
		Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
		Minimum RX AMPDU time spacing: No restriction (0x00)
		HT TX/RX MCS rate indexes supported: 0-31
		VHT Capabilities (0x338001fa):
			Max MPDU length: 11454
			Supported Channel Width: 160 MHz, 80+80 MHz
			RX LDPC
			short GI (80 MHz)
			short GI (160/80+80 MHz)
			TX STBC
			RX antenna pattern consistency
			TX antenna pattern consistency
		VHT RX MCS set:
			1 streams: MCS 0-9
			2 streams: MCS 0-9
			3 streams: MCS 0-9
			4 streams: MCS 0-9
			5 streams: not supported
			6 streams: not supported
			7 streams: not supported
			8 streams: not supported
		VHT RX highest supported: 0 Mbps
		VHT TX MCS set:
			1 streams: MCS 0-9
			2 streams: MCS 0-9
			3 streams: MCS 0-9
			4 streams: MCS 0-9
			5 streams: not supported
			6 streams: not supported
			7 streams: not supported
			8 streams: not supported
		VHT TX highest supported: 0 Mbps
		Frequencies:
			* 5180 MHz [36] (23.0 dBm)
			* 5200 MHz [40] (23.0 dBm)
			* 5220 MHz [44] (23.0 dBm)
			* 5240 MHz [48] (23.0 dBm)
			* 5260 MHz [52] (20.0 dBm) (radar detection)
			* 5280 MHz [56] (20.0 dBm) (radar detection)
			* 5300 MHz [60] (20.0 dBm) (radar detection)
			* 5320 MHz [64] (20.0 dBm) (radar detection)
			* 5500 MHz [100] (25.0 dBm) (radar detection)
			* 5520 MHz [104] (25.0 dBm) (radar detection)
			* 5540 MHz [108] (25.0 dBm) (radar detection)
			* 5560 MHz [112] (25.0 dBm) (radar detection)
			* 5580 MHz [116] (25.0 dBm) (radar detection)
			* 5600 MHz [120] (25.0 dBm) (radar detection)
			* 5620 MHz [124] (25.0 dBm) (radar detection)
			* 5640 MHz [128] (25.0 dBm) (radar detection)
			* 5660 MHz [132] (25.0 dBm) (radar detection)
			* 5680 MHz [136] (25.0 dBm) (radar detection)
			* 5700 MHz [140] (25.0 dBm) (radar detection)
			* 5720 MHz [144] (disabled)
			* 5745 MHz [149] (13.0 dBm)
			* 5765 MHz [153] (13.0 dBm)
			* 5785 MHz [157] (13.0 dBm)
			* 5805 MHz [161] (13.0 dBm)
			* 5825 MHz [165] (13.0 dBm)
			* 5845 MHz [169] (13.0 dBm)
			* 5865 MHz [173] (13.0 dBm)
	valid interface combinations:
		 * #{ IBSS } <= 1, #{ managed, AP, mesh point, P2P-client, P2P-GO } <= 4,
		   total <= 4, #channels <= 1, STA/AP BI must match, radar detect widths: { 20 MHz (no HT), 20 MHz, 40 MHz, 80 MHz, 80+80 MHz, 160 MHz }

	HT Capability overrides:
		 * MCS: ff ff ff ff ff ff ff ff ff ff
		 * maximum A-MSDU length
		 * supported channel width
		 * short GI for 40 MHz
		 * max A-MPDU length exponent
		 * min MPDU start spacing
	Supported extended features:
		* [ VHT_IBSS ]: VHT-IBSS
		* [ RRM ]: RRM
		* [ SET_SCAN_DWELL ]: scan dwell setting
		* [ CQM_RSSI_LIST ]: multiple CQM_RSSI_THOLD records
		* [ CONTROL_PORT_OVER_NL80211 ]: control port over nl80211
		* [ TXQS ]: FQ-CoDel-enabled intermediate TXQs
		* [ AIRTIME_FAIRNESS ]: airtime fairness scheduling
		* [ AQL ]: Airtime Queue Limits (AQL)
		* [ CONTROL_PORT_NO_PREAUTH ]: disable pre-auth over nl80211 control port support
		* [ DEL_IBSS_STA ]: deletion of IBSS station support
		* [ SCAN_FREQ_KHZ ]: scan on kHz frequency support
		* [ CONTROL_PORT_OVER_NL80211_TX_STATUS ]: tx status for nl80211 control port support
Wiphy phy0
	wiphy index: 0
	max # scan SSIDs: 4
	max scan IEs length: 2257 bytes
	max # sched scan SSIDs: 0
	max # match sets: 0
	max # scan plans: 1
	max scan plan interval: -1
	max scan plan iterations: 0
	Retry short limit: 7
	Retry long limit: 4
	Coverage class: 0 (up to 0m)
	Device supports AP-side u-APSD.
	Device supports T-DLS.
	Available Antennas: TX 0x3 RX 0x3
	Configured Antennas: TX 0x3 RX 0x3
	Supported interface modes:
		 * IBSS
		 * managed
		 * AP
		 * AP/VLAN
		 * monitor
		 * mesh point
		 * P2P-client
		 * P2P-GO
	Band 1:
		Capabilities: 0x1fe
			HT20/HT40
			SM Power Save disabled
			RX Greenfield
			RX HT20 SGI
			RX HT40 SGI
			TX STBC
			RX STBC 1-stream
			Max AMSDU length: 3839 bytes
			No DSSS/CCK HT40
		Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
		Minimum RX AMPDU time spacing: No restriction (0x00)
		HT TX/RX MCS rate indexes supported: 0-15
		Frequencies:
			* 2412 MHz [1] (20.0 dBm)
			* 2417 MHz [2] (20.0 dBm)
			* 2422 MHz [3] (20.0 dBm)
			* 2427 MHz [4] (20.0 dBm)
			* 2432 MHz [5] (20.0 dBm)
			* 2437 MHz [6] (20.0 dBm)
			* 2442 MHz [7] (20.0 dBm)
			* 2447 MHz [8] (20.0 dBm)
			* 2452 MHz [9] (20.0 dBm)
			* 2457 MHz [10] (20.0 dBm)
			* 2462 MHz [11] (20.0 dBm)
			* 2467 MHz [12] (20.0 dBm)
			* 2472 MHz [13] (20.0 dBm)
			* 2484 MHz [14] (disabled)
	valid interface combinations:
		 * #{ IBSS } <= 1, #{ managed, AP, mesh point, P2P-client, P2P-GO } <= 4,
		   total <= 4, #channels <= 1, STA/AP BI must match
	HT Capability overrides:
		 * MCS: ff ff ff ff ff ff ff ff ff ff
		 * maximum A-MSDU length
		 * supported channel width
		 * short GI for 40 MHz
		 * max A-MPDU length exponent
		 * min MPDU start spacing
	Supported extended features:
		* [ RRM ]: RRM
		* [ CQM_RSSI_LIST ]: multiple CQM_RSSI_THOLD records
		* [ CONTROL_PORT_OVER_NL80211 ]: control port over nl80211
		* [ TXQS ]: FQ-CoDel-enabled intermediate TXQs
		* [ AIRTIME_FAIRNESS ]: airtime fairness scheduling
		* [ AQL ]: Airtime Queue Limits (AQL)
		* [ SCAN_RANDOM_SN ]: use random sequence numbers in scans
		* [ SCAN_MIN_PREQ_CONTENT ]: use probe request with only rate IEs in scans
		* [ CONTROL_PORT_NO_PREAUTH ]: disable pre-auth over nl80211 control port support
		* [ DEL_IBSS_STA ]: deletion of IBSS station support
		* [ SCAN_FREQ_KHZ ]: scan on kHz frequency support
		* [ CONTROL_PORT_OVER_NL80211_TX_STATUS ]: tx status for nl80211 control port support

1 Like

Thank you, I will do some experiments these days and report back with whatever I end up with.

It worked! Now it's showing 20dBm on 5Ghz. Thank you very much.

I had to adapt it to make it work with the latest openwrt git (the dtsi files changed a bit, now they are "partition@" instead of "partition at "), I leave my patch here so anyone can use it if they want:

----------- target/linux/ramips/dts/mt7621_netgear_sercomm_bzv.dtsi -----------
index eee6c535e1..19372dd926 100644
@@ -109,48 +109,209 @@
 	status = "okay";
 
 	partitions {
-		compatible = "fixed-partitions";
+		compatible = "sercomm,sc-partitions", "fixed-partitions";
 		#address-cells = <1>;
 		#size-cells = <1>;
 
 		partition@0 {
 			label = "u-boot";
 			reg = <0x0 0x100000>;
+			scpart-id = <0>;
 			read-only;
 		};
 
 		partition@100000 {
 			label = "SC PART_MAP";
 			reg = <0x100000 0x100000>;
+			scpart-id = <1>;
 			read-only;
 		};
 
 		partition@200000 {
 			label = "kernel";
 			reg = <0x200000 0x400000>;
+			scpart-id = <2>;
 		};
 
 		partition@600000 {
 			label = "ubi";
 			reg = <0x600000 0x2800000>;
+			scpart-id = <3>;
 		};
 
 		partition@2e00000 {
-			label = "reserved0";
-			reg = <0x2e00000 0x1800000>;
+ 			label = "English UI";
+ 			reg = <0x2e00000 0x200000>;
+ 			scpart-id = <4>;
+ 			read-only;
+ 		};
+ 
+ 		partition@3000000 {
+ 			label = "ML1";
+ 			reg = <0x3000000 0x200000>;
+ 			scpart-id = <5>;
+ 			read-only;
+ 		};
+ 
+ 		partition@3200000 {
+ 			label = "ML2";
+ 			reg = <0x3200000 0x200000>;
+ 			scpart-id = <6>;
+ 			read-only;
+ 		};
+ 
+ 		partition@3400000 {
+ 			label = "ML3";
+ 			reg = <0x3400000 0x200000>;
+ 			scpart-id = <7>;
+ 			read-only;
+ 		};
+ 
+ 		partition@3600000 {
+ 			label = "ML4";
+ 			reg = <0x3600000 0x200000>;
+ 			scpart-id = <8>;
+ 			read-only;
+ 		};
+ 
+ 		partition@3800000 {
+ 			label = "ML5";
+ 			reg = <0x3800000 0x200000>;
+ 			scpart-id = <9>;
+ 			read-only;
+ 		};
+ 
+ 		partition@3a00000 {
+ 			label = "ML6";
+ 			reg = <0x3a00000 0x200000>;
+ 			scpart-id = <10>;
+ 			read-only;
+ 		};
+ 
+ 		partition@3c00000 {
+ 			label = "ML7";
+ 			reg = <0x3c00000 0x200000>;
+ 			scpart-id = <11>;
+ 			read-only;
+ 		};
+ 
+ 		partition@3e00000 {
+ 			label = "ML8";
+ 			reg = <0x3e00000 0x200000>;
+ 			scpart-id = <12>;
+ 			read-only;
+ 		};
+ 
+ 		partition@4000000 {
+ 			label = "ML9";
+ 			reg = <0x4000000 0x200000>;
+ 			scpart-id = <13>;
+ 			read-only;
+ 		};
+ 
+ 		partition@4200000 {
+ 			label = "ML10";
+ 			reg = <0x4200000 0x200000>;
+ 			scpart-id = <14>;
+ 			read-only;
+ 		};
+ 
+ 		partition@4400000 {
+ 			label = "ML11";
+ 			reg = <0x4400000 0x200000>;
+ 			scpart-id = <15>;
 			read-only;
-		};
+ 		};
 
 		factory: partition@4600000 {
 			label = "factory";
 			reg = <0x4600000 0x200000>;
+			scpart-id = <16>;
 			read-only;
 		};
 
-		partition@4800000 {
-			label = "reserved1";
-			reg = <0x4800000 0x3800000>;
-			read-only;
-		};
+ 		partition@4800000 {
+ 			label = "SC Private Data";
+ 			reg = <0x4800000 0x200000>;
+ 			scpart-id = <17>;
+ 			read-only;
+ 		};
+ 
+ 		partition@4a00000 {
+ 			label = "POT";
+ 			reg = <0x4a00000 0x200000>;
+ 			scpart-id = <18>;
+ 			read-only;
+ 		};
+ 
+ 		partition@4c00000 {
+ 			label = "Traffic Meter";
+ 			reg = <0x4c00000 0x200000>;
+ 			scpart-id = <19>;
+ 			read-only;
+ 		};
+ 
+ 		partition@4e00000 {
+ 			label = "SC PID";
+ 			reg = <0x4e00000 0x200000>;
+ 			scpart-id = <20>;
+ 			read-only;
+ 		};
+ 
+ 		partition@5000000 {
+ 			label = "SC Nvram";
+ 			reg = <0x5000000 0x200000>;
+ 			scpart-id = <21>;
+ 			read-only;
+ 		};
+ 
+ 		partition@5200000 {
+ 			label = "Ralink Nvram";
+ 			reg = <0x5200000 0x200000>;
+ 			scpart-id = <22>;
+ 			read-only;
+ 		};
+ 
+ 		partition@5400000 {
+ 			label = "reserved0";
+ 			reg = <0x5400000 0x200000>;
+ 			scpart-id = <23>;
+ 			read-only;
+ 		};
+ 
+ 		partition@5600000 {
+ 			label = "reserved1";
+ 			reg = <0x5600000 0x200000>;
+ 			scpart-id = <24>;
+ 			read-only;
+ 		};
+
+ 		partition@5800000 {
+ 			label = "reserved2";
+ 			reg = <0x5800000 0x200000>;
+ 			scpart-id = <25>;
+ 			read-only;
+ 		};
+
+ 		partition@5a00000 {
+ 			label = "reserved3";
+ 			reg = <0x5a00000 0x200000>;
+ 			scpart-id = <26>;
+ 			read-only;
+ 		};
+
+ 		partition@5c00000 {
+ 			label = "reserved4";
+ 			reg = <0x5c00000 0x200000>;
+ 			scpart-id = <27>;
+ 			read-only;
+ 		};
+
+ 		partition@5e00000 {
+ 			label = "reserved5";
+ 			reg = <0x5e00000 0x2180000>;
+ 			scpart-id = <28>;
+ 			read-only;
+ 		};
 	};
 };

----------- target/linux/ramips/dts/mt7621_netgear_sercomm_chj.dtsi -----------
index 0de2167e0a..eb9c5934e3 100644
@@ -137,48 +137,209 @@
 	status = "okay";
 
 	partitions {
-		compatible = "fixed-partitions";
+		compatible = "sercomm,sc-partitions", "fixed-partitions";
 		#address-cells = <1>;
 		#size-cells = <1>;
 
 		partition@0 {
 			label = "u-boot";
 			reg = <0x0 0x100000>;
+			scpart-id = <0>;
 			read-only;
 		};
 
 		partition@100000 {
 			label = "SC PART_MAP";
 			reg = <0x100000 0x100000>;
+			scpart-id = <1>;
 			read-only;
 		};
 
 		partition@200000 {
 			label = "kernel";
 			reg = <0x200000 0x400000>;
+			scpart-id = <2>;
 		};
 
 		partition@600000 {
 			label = "ubi";
 			reg = <0x600000 0x2800000>;
+			scpart-id = <3>;
 		};
 
 		partition@2e00000 {
-			label = "reserved0";
-			reg = <0x2e00000 0x1800000>;
-			read-only;
-		};
-
-		factory: partition@4600000 {
-			label = "factory";
-			reg = <0x4600000 0x200000>;
-			read-only;
-		};
-
-		partition@4800000 {
-			label = "reserved1";
-			reg = <0x4800000 0x3800000>;
-			read-only;
-		};
+ 			label = "English UI";
+ 			reg = <0x2e00000 0x200000>;
+ 			scpart-id = <4>;
+ 			read-only;
+ 		};
+ 
+ 		 partition@3000000 {
+ 			label = "ML1";
+ 			reg = <0x3000000 0x200000>;
+ 			scpart-id = <5>;
+ 			read-only;
+ 		};
+ 
+ 		 partition@3200000 {
+ 			label = "ML2";
+ 			reg = <0x3200000 0x200000>;
+ 			scpart-id = <6>;
+ 			read-only;
+ 		};
+ 
+ 		 partition@3400000 {
+ 			label = "ML3";
+ 			reg = <0x3400000 0x200000>;
+ 			scpart-id = <7>;
+ 			read-only;
+ 		};
+ 
+ 		 partition@3600000 {
+ 			label = "ML4";
+ 			reg = <0x3600000 0x200000>;
+ 			scpart-id = <8>;
+ 			read-only;
+ 		};
+ 
+ 		 partition@3800000 {
+ 			label = "ML5";
+ 			reg = <0x3800000 0x200000>;
+ 			scpart-id = <9>;
+ 			read-only;
+ 		};
+ 
+ 		 partition@3a00000 {
+ 			label = "ML6";
+ 			reg = <0x3a00000 0x200000>;
+ 			scpart-id = <10>;
+ 			read-only;
+ 		};
+ 
+ 		 partition@3c00000 {
+ 			label = "ML7";
+ 			reg = <0x3c00000 0x200000>;
+ 			scpart-id = <11>;
+ 			read-only;
+ 		};
+ 
+ 		 partition@3e00000 {
+ 			label = "ML8";
+ 			reg = <0x3e00000 0x200000>;
+ 			scpart-id = <12>;
+ 			read-only;
+ 		};
+ 
+ 		 partition@4000000 {
+ 			label = "ML9";
+ 			reg = <0x4000000 0x200000>;
+ 			scpart-id = <13>;
+ 			read-only;
+ 		};
+ 
+ 		 partition@4200000 {
+ 			label = "ML10";
+ 			reg = <0x4200000 0x200000>;
+ 			scpart-id = <14>;
+ 			read-only;
+ 		};
+ 
+ 		 partition@4400000 {
+ 			label = "ML11";
+ 			reg = <0x4400000 0x200000>;
+ 			scpart-id = <15>;
+ 			read-only;
+ 		};
+ 
+ 		factory:  partition@4600000 {
+ 			label = "factory";
+ 			reg = <0x4600000 0x200000>;
+ 			scpart-id = <16>;
+ 			read-only;
+ 		};
+ 
+ 		 partition@4800000 {
+ 			label = "SC Private Data";
+ 			reg = <0x4800000 0x200000>;
+ 			scpart-id = <17>;
+ 			read-only;
+ 		};
+ 
+ 		 partition@4a00000 {
+ 			label = "POT";
+ 			reg = <0x4a00000 0x200000>;
+ 			scpart-id = <18>;
+ 			read-only;
+ 		};
+ 
+ 		 partition@4c00000 {
+ 			label = "Traffic Meter";
+ 			reg = <0x4c00000 0x200000>;
+ 			scpart-id = <19>;
+ 			read-only;
+ 		};
+ 
+ 		 partition@4e00000 {
+ 			label = "SC PID";
+ 			reg = <0x4e00000 0x200000>;
+ 			scpart-id = <20>;
+ 			read-only;
+ 		};
+ 
+ 		 partition@5000000 {
+ 			label = "SC Nvram";
+ 			reg = <0x5000000 0x200000>;
+ 			scpart-id = <21>;
+ 			read-only;
+ 		};
+ 
+ 		 partition@5200000 {
+ 			label = "Ralink Nvram";
+ 			reg = <0x5200000 0x200000>;
+ 			scpart-id = <22>;
+ 			read-only;
+ 		};
+ 
+ 		 partition@5400000 {
+ 			label = "reserved0";
+ 			reg = <0x5400000 0x200000>;
+ 			scpart-id = <23>;
+ 			read-only;
+ 		};
+ 
+ 		 partition@5600000 {
+ 			label = "reserved1";
+ 			reg = <0x5600000 0x200000>;
+ 			scpart-id = <24>;
+ 			read-only;
+ 		};
+ 
+ 		 partition@5800000 {
+ 			label = "reserved2";
+ 			reg = <0x5800000 0x200000>;
+ 			scpart-id = <25>;
+ 			read-only;
+ 		};
+ 
+ 		 partition@5a00000 {
+ 			label = "reserved3";
+ 			reg = <0x5a00000 0x200000>;
+ 			scpart-id = <26>;
+ 			read-only;
+ 		};
+ 
+ 		 partition@5c00000 {
+ 			label = "reserved4";
+ 			reg = <0x5c00000 0x200000>;
+ 			scpart-id = <27>;
+ 			read-only;
+ 		};
+ 
+ 		 partition@5e00000 {
+ 			label = "reserved5";
+ 			reg = <0x5e00000 0x2180000>;
+ 			scpart-id = <28>;
+ 			read-only;
+ 		};
 	};
 };

------------ target/linux/ramips/files/drivers/mtd/parsers/scpart.c ------------
new file mode 100644
index 0000000000..72acc145be
@@ -0,0 +1,257 @@
+/*
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Sercomm/Netgear FLASH partition table.
+ */
+
+
+#include <linux/kernel.h>
+#include <linux/slab.h>
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/partitions.h>
+#include <linux/module.h>
+
+
+#define	MOD_NAME	"scpart"
+
+static const char sc_part_magic[] = {
+	'S', 'C', 'F', 'L', 'M', 'A', 'P', 'O', 'K', '\0',
+};
+#define	PART_MAGIC_LEN	sizeof(sc_part_magic)
+
+/* assumes that all fields are set by CPU native endian */
+struct sc_part_desc {
+	uint32_t	part_id;
+	uint32_t	part_offs;
+	uint32_t	part_bytes;
+};
+#define	ID_ALREADY_FOUND	(0xFFFFFFFFUL)
+
+#define	MAP_OFFS_IN_BLK	(0x800)
+
+#define	MAP_MIRROR_NUM	(2)
+
+static int scpart_desc_is_valid(struct sc_part_desc *pdesc)
+{
+	return !!((pdesc->part_id != 0xFFFFFFFFUL) &&
+			(pdesc->part_offs != 0xFFFFFFFFUL) &&
+			(pdesc->part_bytes != 0xFFFFFFFFUL));
+}
+
+static int scpart_scan_partmap(struct mtd_info *master, loff_t partmap_offs,
+				struct sc_part_desc **ppdesc)
+{
+	uint8_t *buf;
+	loff_t offs;
+	size_t retlen;
+	struct sc_part_desc *pdesc = NULL;
+	struct sc_part_desc *tmpdesc;
+	int cnt = 0;
+	int res2;
+	int res = 0;
+
+	buf = kzalloc(master->erasesize, GFP_KERNEL);
+	if (!buf) {
+		res = -ENOMEM;
+		goto out;
+	}
+
+	res2 = mtd_read(master, partmap_offs, master->erasesize, &retlen, buf);
+	if (res2 || (retlen != master->erasesize)) {
+		res = -EIO;
+		goto free;
+	}
+
+	offs = MAP_OFFS_IN_BLK;
+	while((offs + sizeof(*tmpdesc)) < master->erasesize) {
+		tmpdesc = (struct sc_part_desc*)&(buf[offs]);
+		if (!scpart_desc_is_valid(tmpdesc))
+			break;
+		cnt++;
+		offs += sizeof(*tmpdesc);
+	}
+
+	if (cnt > 0) {
+		int bytes = cnt * sizeof(*pdesc);
+
+		pdesc = kzalloc(bytes, GFP_KERNEL);
+		if (!pdesc) {
+			res = -ENOMEM;
+			goto free;
+		}
+		memcpy(pdesc, &(buf[MAP_OFFS_IN_BLK]), bytes);
+
+		*ppdesc = pdesc;
+		res = cnt;
+	}
+
+  free:
+	kfree(buf);
+
+  out:
+	return res;
+}
+
+static int scpart_find_partmap(struct mtd_info *master,
+				struct sc_part_desc **ppdesc)
+{
+	loff_t offs;
+	uint8_t rdbuf[PART_MAGIC_LEN];
+	size_t retlen;
+	int magic_found = 0;
+	int res2;
+	int res = 0;
+
+	offs = 0;
+	while((magic_found < MAP_MIRROR_NUM) &&
+			(offs < master->size) && !mtd_block_isbad(master, offs)) {
+		res2 = mtd_read(master, offs, PART_MAGIC_LEN, &retlen, rdbuf);
+		if (res2 || (retlen != PART_MAGIC_LEN)) {
+			res = -EIO;
+			goto out;
+		}
+		if (!memcmp(rdbuf, sc_part_magic, PART_MAGIC_LEN)) {
+			pr_debug("%s: signature found at 0x%llx\n", MOD_NAME, offs);
+			magic_found++;
+			res = scpart_scan_partmap(master, offs, ppdesc);
+			if (res > 0)
+				goto out;
+		}
+		offs += master->erasesize;
+	}
+
+  out:
+	if (res > 0)
+		pr_info("%s: valid 'SC PART MAP' found (%d partitions)\n", MOD_NAME, res);
+	else
+		pr_info("%s: no valid 'SC PART MAP'\n", MOD_NAME);
+
+	return res;
+}
+
+static int scpart_parse(struct mtd_info *master,
+			const struct mtd_partition **pparts,
+			struct mtd_part_parser_data *data)
+{
+	struct sc_part_desc *scpart_map = NULL;
+	struct mtd_partition *parts = NULL;
+	struct device_node *mtd_node;
+	struct device_node *ofpart_node;
+	struct device_node *pp;
+	const char *partname;
+	int nr_scparts;
+	int nr_parts = 0;
+	int n;
+	int res = 0;
+
+	mtd_node = mtd_get_of_node(master);
+	if (!mtd_node)
+		goto out;
+
+	ofpart_node = of_get_child_by_name(mtd_node, "partitions");
+	if (!ofpart_node)
+		goto out;
+
+	nr_scparts = scpart_find_partmap(master, &scpart_map);
+	if (nr_scparts <= 0) {
+		res = nr_scparts;
+		goto free;
+	}
+
+	for_each_child_of_node(ofpart_node, pp) {
+		u32 scpart_id;
+		struct mtd_partition *parts_tmp;
+
+		if(of_property_read_u32(pp, "scpart-id", &scpart_id))
+			continue;
+
+		for (n = 0 ; n < nr_scparts ; n++)
+			if ((scpart_map[n].part_id != ID_ALREADY_FOUND) &&
+					(scpart_id == scpart_map[n].part_id))
+				break;
+		if (n >= nr_scparts)
+			/* not match */
+			continue;
+
+		/* add the partition found in OF into MTD partition array */
+
+		/* reallocate partition array */
+		parts_tmp = parts;
+		parts = kzalloc((nr_parts + 1) * sizeof(*parts), GFP_KERNEL);
+		if (!parts) {
+			kfree(parts_tmp);
+			res = -ENOMEM;
+			goto free;
+		}
+		if (parts_tmp) {
+			memcpy(parts, parts_tmp, nr_parts * sizeof(*parts));
+			kfree(parts_tmp);
+		}
+
+		parts[nr_parts].offset = scpart_map[n].part_offs;
+		parts[nr_parts].size = scpart_map[n].part_bytes;
+		parts[nr_parts].of_node = pp;
+
+		if (!of_property_read_string(pp, "label", &partname) ||
+				!of_property_read_string(pp, "name", &partname))
+			parts[nr_parts].name = partname;
+
+		if (of_property_read_bool(pp, "read-only"))
+			parts[nr_parts].mask_flags |= MTD_WRITEABLE;
+		if (of_property_read_bool(pp, "lock"))
+			parts[nr_parts].mask_flags |= MTD_POWERUP_LOCK;
+
+		/* mark as 'done' */
+		scpart_map[n].part_id = ID_ALREADY_FOUND;
+
+		nr_parts++;
+	}
+	if (nr_parts > 0) {
+		*pparts = parts;
+		res = nr_parts;
+	} else
+		pr_info("%s: No partition in OF matches partition ID with 'SC PART MAP'.\n",
+				MOD_NAME);
+
+	of_node_put(pp);
+
+  free:
+	kfree(scpart_map);
+	if (res <= 0)
+		kfree(parts);
+
+  out:
+	return res;
+}
+
+static const struct of_device_id scpart_parser_of_match_table[] = {
+	{ .compatible = "sercomm,sc-partitions" },
+	{},
+};
+MODULE_DEVICE_TABLE(of, scpart_parser_of_match_table);
+
+static struct mtd_part_parser scpart_parser = {
+	.parse_fn = scpart_parse,
+	.name = "scpart",
+	.of_match_table = scpart_parser_of_match_table,
+};
+module_mtd_part_parser(scpart_parser);
+
+/* mtd parsers will request the module by parser name */
+MODULE_ALIAS("scpart");
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("NOGUCHI Hiroshi <drvlabo at gmail.com>");
+MODULE_DESCRIPTION("Parsing code for Sercomm/Netgear partition table");

-------------------- target/linux/ramips/mt7621/config-5.4 --------------------
index b4c8ab1f1c..050a47a3d2 100644
@@ -202,6 +202,7 @@ CONFIG_MODULES_USE_ELF_REL=y
 CONFIG_MT7621_WDT=y
 # CONFIG_MTD_CFI_INTELEXT is not set
 CONFIG_MTD_CMDLINE_PARTS=y
+CONFIG_MTD_SERCOMM_PARTS=y
 CONFIG_MTD_NAND_CORE=y
 CONFIG_MTD_NAND_ECC_SW_HAMMING=y
 CONFIG_MTD_NAND_MT7621=y

--------- target/linux/ramips/patches-5.4/303-mtd-scpart-parser.patch ---------
new file mode 100644
index 0000000000..f125d9c6af
@@ -0,0 +1,19 @@
+--- a/drivers/mtd/parsers/Kconfig
++++ b/drivers/mtd/parsers/Kconfig
+@@ -185,3 +185,9 @@ config MTD_ROUTERBOOT_PARTS
+ 	 flash, some of which are fixed and some of which are located at
+ 	 variable offsets. This parser handles both cases via properly
+ 	 formatted DTS.
++
++config MTD_SERCOMM_PARTS
++	tristate "SERCOMM partitioning information support"
++	depends on MTD_OF_PARTS
++	help
++	  This provides partition table parser for SERCOMM partition map
+--- a/drivers/mtd/parsers/Makefile
++++ b/drivers/mtd/parsers/Makefile
+@@ -11,3 +11,4 @@ obj-$(CONFIG_MTD_PARSER_TRX)		+= parser_
+ obj-$(CONFIG_MTD_SHARPSL_PARTS)		+= sharpslpart.o
+ obj-$(CONFIG_MTD_REDBOOT_PARTS)		+= redboot.o
+ obj-$(CONFIG_MTD_ROUTERBOOT_PARTS)		+= routerbootpart.o
++obj-$(CONFIG_MTD_SERCOMM_PARTS)		+= scpart.o

And my current partitions:

[    0.901170] mt7621-nand 1e003000.nand: Using programmed access timing: 31c07388
[    0.916012] nand: device found, Manufacturer ID: 0xc2, Chip ID: 0xf1
[    0.928662] nand: Macronix MX30LF1G18AC
[    0.936298] nand: 128 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64
[    0.951375] mt7621-nand 1e003000.nand: ECC strength adjusted to 4 bits
[    0.964409] mt7621-nand 1e003000.nand: Using programmed access timing: 21005134
[    0.978974] mt7621-nand 1e003000.nand: Using programmed access timing: 21005134
[    0.993533] Scanning device for bad blocks
[    1.500759] Bad eraseblock 393 at 0x000003120000
[    2.355373] scpart: valid 'SC PART MAP' found (29 partitions)
[    2.366973] 29 scpart partitions found on MTD device mt7621-nand
[    2.378938] Creating 29 MTD partitions on "mt7621-nand":
[    2.389529] 0x000000000000-0x000000100000 : "u-boot"
[    2.400735] 0x000000100000-0x000000200000 : "SC PART_MAP"
[    2.412601] 0x000000200000-0x000000600000 : "kernel"
[    2.423602] 0x000000600000-0x000002e00000 : "ubi"
[    2.434311] 0x000002e00000-0x000003000000 : "English UI"
[    2.446103] 0x000003000000-0x000003220000 : "ML1"
[    2.456599] 0x000003220000-0x000003420000 : "ML2"
[    2.467071] 0x000003420000-0x000003620000 : "ML3"
[    2.477639] 0x000003620000-0x000003820000 : "ML4"
[    2.488118] 0x000003820000-0x000003a20000 : "ML5"
[    2.498700] 0x000003a20000-0x000003c20000 : "ML6"
[    2.509450] 0x000003c20000-0x000003e20000 : "ML7"
[    2.520174] 0x000003e20000-0x000004020000 : "ML8"
[    2.530880] 0x000004020000-0x000004220000 : "ML9"
[    2.541610] 0x000004220000-0x000004420000 : "ML10"
[    2.552442] 0x000004420000-0x000004620000 : "ML11"
[    2.563301] 0x000004620000-0x000004820000 : "factory"
[    2.574668] 0x000004820000-0x000004a20000 : "SC Private Data"
[    2.587430] 0x000004a20000-0x000004c20000 : "POT"
[    2.598195] 0x000004c20000-0x000004e20000 : "Traffic Meter"
[    2.610678] 0x000004e20000-0x000005020000 : "SC PID"
[    2.621988] 0x000005020000-0x000005220000 : "SC Nvram"
[    2.633608] 0x000005220000-0x000005420000 : "Ralink Nvram"
[    2.645879] 0x000005420000-0x000005620000 : "reserved0"
[    2.657665] 0x000005620000-0x000005820000 : "reserved1"
[    2.669446] 0x000005820000-0x000005a20000 : "reserved2"
[    2.681236] 0x000005a20000-0x000005c20000 : "reserved3"
[    2.692964] 0x000005c20000-0x000005e20000 : "reserved4"
[    2.704672] 0x000005e20000-0x000007f80000 : "reserved5"

And iw phy:

root@ap:~# iw phy
Wiphy phy1
	wiphy index: 1
	max # scan SSIDs: 4
	max scan IEs length: 2304 bytes
	max # sched scan SSIDs: 0
	max # match sets: 0
	max # scan plans: 1
	max scan plan interval: 0
	max scan plan iterations: 0
	Retry short limit: 7
	Retry long limit: 4
	Coverage class: 0 (up to 0m)
	Device supports AP-side u-APSD.
	Device supports T-DLS.
	Available Antennas: TX 0xf RX 0xf
	Configured Antennas: TX 0xf RX 0xf
	Supported interface modes:
		 * IBSS
		 * managed
		 * AP
		 * AP/VLAN
		 * monitor
		 * mesh point
		 * P2P-client
		 * P2P-GO
	Band 2:
		Capabilities: 0x1ff
			RX LDPC
			HT20/HT40
			SM Power Save disabled
			RX Greenfield
			RX HT20 SGI
			RX HT40 SGI
			TX STBC
			RX STBC 1-stream
			Max AMSDU length: 3839 bytes
			No DSSS/CCK HT40
		Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
		Minimum RX AMPDU time spacing: No restriction (0x00)
		HT TX/RX MCS rate indexes supported: 0-31
		VHT Capabilities (0x338001fa):
			Max MPDU length: 11454
			Supported Channel Width: 160 MHz, 80+80 MHz
			RX LDPC
			short GI (80 MHz)
			short GI (160/80+80 MHz)
			TX STBC
			RX antenna pattern consistency
			TX antenna pattern consistency
		VHT RX MCS set:
			1 streams: MCS 0-9
			2 streams: MCS 0-9
			3 streams: MCS 0-9
			4 streams: MCS 0-9
			5 streams: not supported
			6 streams: not supported
			7 streams: not supported
			8 streams: not supported
		VHT RX highest supported: 0 Mbps
		VHT TX MCS set:
			1 streams: MCS 0-9
			2 streams: MCS 0-9
			3 streams: MCS 0-9
			4 streams: MCS 0-9
			5 streams: not supported
			6 streams: not supported
			7 streams: not supported
			8 streams: not supported
		VHT TX highest supported: 0 Mbps
		Frequencies:
			* 5180 MHz [36] (23.0 dBm)
			* 5200 MHz [40] (23.0 dBm)
			* 5220 MHz [44] (23.0 dBm)
			* 5240 MHz [48] (23.0 dBm)
			* 5260 MHz [52] (20.0 dBm) (radar detection)
			* 5280 MHz [56] (20.0 dBm) (radar detection)
			* 5300 MHz [60] (20.0 dBm) (radar detection)
			* 5320 MHz [64] (20.0 dBm) (radar detection)
			* 5500 MHz [100] (25.0 dBm) (radar detection)
			* 5520 MHz [104] (25.0 dBm) (radar detection)
			* 5540 MHz [108] (25.0 dBm) (radar detection)
			* 5560 MHz [112] (25.0 dBm) (radar detection)
			* 5580 MHz [116] (25.0 dBm) (radar detection)
			* 5600 MHz [120] (25.0 dBm) (radar detection)
			* 5620 MHz [124] (25.0 dBm) (radar detection)
			* 5640 MHz [128] (25.0 dBm) (radar detection)
			* 5660 MHz [132] (25.0 dBm) (radar detection)
			* 5680 MHz [136] (25.0 dBm) (radar detection)
			* 5700 MHz [140] (25.0 dBm) (radar detection)
			* 5720 MHz [144] (disabled)
			* 5745 MHz [149] (13.0 dBm)
			* 5765 MHz [153] (13.0 dBm)
			* 5785 MHz [157] (13.0 dBm)
			* 5805 MHz [161] (13.0 dBm)
			* 5825 MHz [165] (13.0 dBm)
			* 5845 MHz [169] (13.0 dBm)
			* 5865 MHz [173] (13.0 dBm)
	valid interface combinations:
		 * #{ IBSS } <= 1, #{ managed, AP, mesh point, P2P-client, P2P-GO } <= 4,
		   total <= 4, #channels <= 1, STA/AP BI must match, radar detect widths: { 20 MHz (no HT), 20 MHz, 40 MHz, 80 MHz, 80+80 MHz, 160 MHz }

	HT Capability overrides:
		 * MCS: ff ff ff ff ff ff ff ff ff ff
		 * maximum A-MSDU length
		 * supported channel width
		 * short GI for 40 MHz
		 * max A-MPDU length exponent
		 * min MPDU start spacing
	Supported extended features:
		* [ VHT_IBSS ]: VHT-IBSS
		* [ RRM ]: RRM
		* [ SET_SCAN_DWELL ]: scan dwell setting
		* [ CQM_RSSI_LIST ]: multiple CQM_RSSI_THOLD records
		* [ CONTROL_PORT_OVER_NL80211 ]: control port over nl80211
		* [ TXQS ]: FQ-CoDel-enabled intermediate TXQs
		* [ AIRTIME_FAIRNESS ]: airtime fairness scheduling
		* [ AQL ]: Airtime Queue Limits (AQL)
		* [ CONTROL_PORT_NO_PREAUTH ]: disable pre-auth over nl80211 control port support
		* [ DEL_IBSS_STA ]: deletion of IBSS station support
		* [ SCAN_FREQ_KHZ ]: scan on kHz frequency support
		* [ CONTROL_PORT_OVER_NL80211_TX_STATUS ]: tx status for nl80211 control port support
Wiphy phy0
	wiphy index: 0
	max # scan SSIDs: 4
	max scan IEs length: 2257 bytes
	max # sched scan SSIDs: 0
	max # match sets: 0
	max # scan plans: 1
	max scan plan interval: -1
	max scan plan iterations: 0
	Retry short limit: 7
	Retry long limit: 4
	Coverage class: 0 (up to 0m)
	Device supports AP-side u-APSD.
	Device supports T-DLS.
	Available Antennas: TX 0x3 RX 0x3
	Configured Antennas: TX 0x3 RX 0x3
	Supported interface modes:
		 * IBSS
		 * managed
		 * AP
		 * AP/VLAN
		 * monitor
		 * mesh point
		 * P2P-client
		 * P2P-GO
	Band 1:
		Capabilities: 0x1fe
			HT20/HT40
			SM Power Save disabled
			RX Greenfield
			RX HT20 SGI
			RX HT40 SGI
			TX STBC
			RX STBC 1-stream
			Max AMSDU length: 3839 bytes
			No DSSS/CCK HT40
		Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
		Minimum RX AMPDU time spacing: No restriction (0x00)
		HT TX/RX MCS rate indexes supported: 0-15
		Frequencies:
			* 2412 MHz [1] (20.0 dBm)
			* 2417 MHz [2] (20.0 dBm)
			* 2422 MHz [3] (20.0 dBm)
			* 2427 MHz [4] (20.0 dBm)
			* 2432 MHz [5] (20.0 dBm)
			* 2437 MHz [6] (20.0 dBm)
			* 2442 MHz [7] (20.0 dBm)
			* 2447 MHz [8] (20.0 dBm)
			* 2452 MHz [9] (20.0 dBm)
			* 2457 MHz [10] (20.0 dBm)
			* 2462 MHz [11] (20.0 dBm)
			* 2467 MHz [12] (20.0 dBm)
			* 2472 MHz [13] (20.0 dBm)
			* 2484 MHz [14] (disabled)
	valid interface combinations:
		 * #{ IBSS } <= 1, #{ managed, AP, mesh point, P2P-client, P2P-GO } <= 4,
		   total <= 4, #channels <= 1, STA/AP BI must match
	HT Capability overrides:
		 * MCS: ff ff ff ff ff ff ff ff ff ff
		 * maximum A-MSDU length
		 * supported channel width
		 * short GI for 40 MHz
		 * max A-MPDU length exponent
		 * min MPDU start spacing
	Supported extended features:
		* [ RRM ]: RRM
		* [ CQM_RSSI_LIST ]: multiple CQM_RSSI_THOLD records
		* [ CONTROL_PORT_OVER_NL80211 ]: control port over nl80211
		* [ TXQS ]: FQ-CoDel-enabled intermediate TXQs
		* [ AIRTIME_FAIRNESS ]: airtime fairness scheduling
		* [ AQL ]: Airtime Queue Limits (AQL)
		* [ SCAN_RANDOM_SN ]: use random sequence numbers in scans
		* [ SCAN_MIN_PREQ_CONTENT ]: use probe request with only rate IEs in scans
		* [ CONTROL_PORT_NO_PREAUTH ]: disable pre-auth over nl80211 control port support
		* [ DEL_IBSS_STA ]: deletion of IBSS station support
		* [ SCAN_FREQ_KHZ ]: scan on kHz frequency support
		* [ CONTROL_PORT_OVER_NL80211_TX_STATUS ]: tx status for nl80211 control port support
root@ap:~# 

Thank you again. :slight_smile:

I was wondering for a moment, as the patch applied without changes when I did a build two day ago. This difference is just because the mailing list software tries to hide e-mail addresses from the public archive (and seems to replace any @ sign).

Oh, that makes so much sense. I made some speed tests and you were right, I now have the right mac and the right txpower but some devices are still slow. This is what I found:

Samsung Galaxy S4: Speed ok (the maximum it can provide) (40mbps I think)
Samsung Galaxy S8: Poor speed. (3 mbps)
Xiaomi Mi A1: the maximum it can provide (148 mbps)
Two Intel Wifi6 AX200 in two separate computers: Poor speed. (4 mbps)
Intel AC 8265: the maximum speed it can provide (200mbps)

What they have in common is that newer devices that support Wifi 6 are prone to have speed issues with this router. If I change the channel width to HT40 (wifi N), speed is ok for that bandwidth, so it seems that something is wrong with wifi AC and newer devices.

Does this light up any idea?

The speed issue seems to have been fixed in this last week commits. Probably this issue on github was the cause:

https://github.com/openwrt/mt76/issues/432

Maybe you would like to try updating, @janh, and thank you again for your help.

This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.