Add support for Cudy X6 (Wifi 6 router)?

The Cudy X6 is a very new product that just became available on Amazon. It is an MT7621 architecture router supporting AX1800. The router runs on a custom build of 21.02.1 OpenWrt and the manufacturer's website provides a .dts file as well an excel spreadsheet laying out the gpio.

Here is the product listing:

This is the download site for their custom openwrt build:
https://www.cudytech.com/openwrt_software_download

I tried to use the firmware from the link above but I ran into trouble trying to install wpad-wolfssl. The wireless configuration doesn't support WPA3 and I was unable to set up an 802.11s mesh network.

I'm hoping that with official support, it can be upgraded to the latest kernel that might have better support.

1 Like

No, it's not running OpenWrt, but a vendor firmware loosely based on Mediatek's semi-proprietary SDK, which in turn is loosely based on a (typically ancient) not further specified fork of OpenWrt. Even if it might partially look like OpenWrt under the hood, very crucial parts of it have been ripped out and replaced with proprietary components. This typically entails, kernel, wireless drivers, config backend, storage backend, proprietary offloading, parts of the init system, upgrade integration and the webinterface. The result has very little in common with OpenWrt, especially regarding the most crucial components and won't really help you to get OpenWrt working.

In general, mt7621a+mt7915e 'should' be relatively easy to port (unless the vendor intentionally spent time on making it difficult), but the mt7621a is a bit low-end for the capabilities usually expected from a wifi6 router at the throughput it's supposed to cover. mt7622 would be a better match for a contemporary router SOC.

2 Likes

At $70 you should have added $20 and got the Belkin RT3200.

2 Likes

Thanks! I'll keep this in mind if I decide to return the cudy or more likely, I'll purchase the Belkin to act as another node in my mesh.

Edit: On second thought... Belkin had been pretty good in the past for me. I may go that route.

Hi, thanks for your reply. This is a screenshot of the firmware after I installed the Openwrt from Cudy's website (linked above):

and here is the content of the .dts file

// SPDX-License-Identifier: GPL-2.0-or-later OR MIT

#include "mt7621.dtsi"

#include <dt-bindings/input/input.h>
#include <dt-bindings/gpio/gpio.h>

/ {
	compatible = "cudy-x6", "mediatek,mt7621-soc";
	model = "CUDY X6";

	memory@0 {
		device_type = "memory";
		reg = <0x0 0x10000000>;
	};

	chosen {
		bootargs = "console=ttyS0,115200";
	};

	keys {
		compatible = "gpio-keys";

		reset {
			label = "reset";
			gpios = <&gpio 8 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_RESTART>;
		};

		wps {
			label = "wps";
			gpios = <&gpio 7 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_WPS_BUTTON>;
		};
	};

	leds {
		compatible = "gpio-leds";

		led_blue: blue {
			label = "blue";
			gpios = <&gpio 15 GPIO_ACTIVE_HIGH>;
		};

		led_red: red {
			label = "red";
			gpios = <&gpio 16 GPIO_ACTIVE_LOW>;
		};
	};

};

&spi0 {
	status = "okay";

	flash@0 {
		compatible = "jedec,spi-nor";
		reg = <0>;
		spi-max-frequency = <80000000>;
		m25p,fast-read;

		partitions {
			compatible = "fixed-partitions";
			#address-cells = <1>;
			#size-cells = <1>;

			partition@0 {
				label = "u-boot";
				reg = <0x0 0x30000>;
				read-only;
			};

			partition@30000 {
				label = "u-boot-env";
				reg = <0x30000 0x10000>;
				read-only;
			};

			factory: partition@40000 {
				label = "factory";
				reg = <0x40000 0x10000>;
			};

			debug: partition@1fd0000 {
				label = "debug";
				reg = <0x1fd0000 0x10000>;
			};

			backup: partition@1fe0000 {
				label = "backup";
				reg = <0x1fe0000 0x10000>;
			};

			bdinfo: partition@ff0000 {
				label = "bdinfo";
				reg = <0x1ff0000 0x10000>;
				read-only;
			};

			firmware: partition@50000 {
				compatible = "denx,uimage";
				label = "firmware";
				reg = <0x50000 0x1f80000>;
			};
		};
	};
};

&pcie {
	status = "okay";
};

&pcie1 {
	wifi@0,0 {
		compatible = "mediatek,mt76";
		reg = <0x0000 0 0 0 0>;
		mediatek,mtd-eeprom = <&factory 0x0000>;
	};
};

&gmac0 {
	mtd-mac-address = <&bdinfo 0xDE00>;
};

&switch0 {
	ports {
		port@0 {
			status = "okay";
			label = "lan1";
		};

		port@1 {
			status = "okay";
			label = "lan2";
		};

		port@2 {
			status = "okay";
			label = "lan3";
		};

		port@3 {
			status = "okay";
			label = "lan4";
		};

		port@4 {
			status = "okay";
			label = "wan";
			mtd-mac-address = <&factory 0xA>;
		};
	};
};

&state_default {
	gpio {
		groups = "i2c", "wdt";
		function = "gpio";
	};
};

Reach out to them, and request the source tarball for the openwrt image they posted on their home page.

They're should provide one, in compliance with GPL.

2 Likes

yes belkin is very good for more powerfull :wink:

Someone is based on this to make Cudy WR2100 officially released, and it says this could also be used for develop X6. You may take a look.

1 Like

Thank you, I will look at this

Small update to this topic:

Using the mirror that @fatreedl pointed me to, I found the commit that added support for Cudy X6:
ramips-add support for cudy wr2100-x6 ยท zxg120-openwrt@2cb83c9

From there, I figured out where to add the .dts file Cudy provided and edit the .mk file. I then cloned the official Openwrt v21.02.0-rc3 tag and added Cudy X6.

My resulting build had the same behavior as the Openwrt provided by Cudy. It seems that the driver detects two wifi devices but really only knows how to access one of them.

So this is a waiting game for the MT7915E drivers to mature (I say waiting game because I, in no way, have the skills to fix the drivers myself).

fist test:

serial port TX ( near r5314 ) RX GND +3V

For recover firmware request a file with name: recovery.bin in tftp folder
Power up ans push reset button ( some 10 seconds ) and you have tftp recovery request in the serial console
For recovery.bin file
download X6 For Developer.zip

Extract , rename openwrt-ramips-mt7621-cudy-x6-flash.bin to recovery.bin & copy in your tftp folder

flash is 16 pins Winbond W25Q256JVFQ

to use the 8-pin spi memory, some components are not wired ?

with openwrt developper no wifi AC/AX

build:

git clone https://git.openwrt.org/openwrt/openwrt.git
./scripts/feeds update -a
./scripts/feeds install -a

look at the end for source code

Photos:




Thanks! That should be somehow pinned or added to wiki.

These are down to $39 now on Amazon -- was looking at the Belkin RT3200, but I'm skeptical that one Belkin will provide better coverage than 2 of these in a mesh.

In terms of wireless coverage and throughput, two (even slightly lower-class) APs are always better than one single high-end wireless router. The concern about the combination of mt7621a and wifi6 mt7915e is about the SOC performance, yes it's good at offloading, but when speed is required, it's still a comparatively old/ low-end 2*880 MHz mips CPU, which isn't the best match to keep a fast WAN and wifi6 network busy.

1 Like

Hi everyone,
I've build the OpenWRT-Master with the support to Cudy X6 and it seems to work great, i was wondering how can i share what i did.
Should i create a New Branch etc?
Also, there's one small problem, 160MHZ channel don't work, it errors out with DFS and won't work even with channels manually set, but i found this: https://patchwork.kernel.org/project/linux-wireless/patch/20210804134337.2582-5-greearb@candelatech.com/

pushed to the linux kernel, i think that's what causing the problem on openwrt, because the latest update to mt76 is from july and the commit linked above is from Aug.
(Was wondering if we can manually update the mt76 files ourselves(?))

Anyway can't wait for an answer :slight_smile:

(Also first time posting ever replying to some post :slight_smile: )

1 Like

Hi again,

I've created the pull request (https://github.com/openwrt/openwrt/pull/4582), now i'll get to work on the patch in: https://github.com/openwrt/mt76.
The pain in the back is that changing the mt76 requires: Fork, branch, commit, push and pull request (all pretty standard here) AND needs to be referenced in the openwrt (this is referred as "updating mt76" in openwrt's commit)

I'll keep this post updated :slight_smile:

UPDATE:

I've also applied the 160 mhz patch to the MT76 and created a pull request, is smth at least :slight_smile: here's the request: https://github.com/openwrt/mt76/pull/587

1 Like

Small update, i closed the MT76 pull request, the problem is not solved for the CudyX6, still can't get the 5ghz up with 160mhz

1 Like

Good morning,
I kindly ask where I can find the complete openwrt file with all services for the cudy x1800, as I am interested in entering the DDNS and possibly the vnp
Thank you

Hi :),
pls refer to this: https://github.com/openwrt/openwrt/pull/4582

1 Like