Adding OpenWrt support for Xiaomi AX6000

True, but apart from the significantly more expensive AX9000 (which also isn't supported all that well) they all only reach 2402 Mbps at 5 GHz, while the AX6000 reaches 4804 Mbps. IMHO that's quite a difference.

Sadly, most devices this fast seem to use Broadcom chipsets. :frowning:

I compiled a firmware using qsdk-11.5.When I burn into AX6000 ,ethernet chip qca8081 doesn't work.
I found that I can't read the correct phy id on mdio1.
log as follows:
[ 13.791953] ssdk_switch_device_num_init[1167]:INFO:ess-switch dts node number: 2
[ 13.792003] ssdk_dt_get_switch_node[978]:INFO:ess-switch DT exist!
[ 13.798478] ssdk_dt_parse_access_mode[864]:INFO:switch_access_mode: local bus
[ 13.804398] ssdk_dt_parse_access_mode[877]:INFO:switchreg_base_addr: 0x39c00000
[ 13.811628] ssdk_dt_parse_access_mode[878]:INFO:switchreg_size: 0x200000
[ 13.818736] ssdk_dt_parse_mac_mode[296]:INFO:mac mode = 0xf
[ 13.825679] ssdk_dt_parse_mac_mode[302]:INFO:mac mode1 doesn't exit!
[ 13.830960] ssdk_dt_parse_mac_mode[311]:INFO:mac mode2 doesn't exit!
[ 13.837606] of_get_named_gpiod_flags: can't parse 'phy-reset-gpio' property of node '/soc/mdio@88000[0]'
[ 13.837621] ssdk_dt_parse_phy_info[660]:INFO:[PORT 2] port_mac_sel = QGMAC_PORT
[ 13.843929] of_get_named_gpiod_flags: parsed 'phy-reset-gpio' property of node '/soc/mdio@90000[0]' - status (0)
[ 13.843937] ssdk_dt_parse_phy_info[686]:INFO:port2's phy-reset-gpio is GPIO39
[ 13.851017] ssdk_dt_parse_port_bmp[765]:INFO:port_bmp doesn't exist!
[ 13.858265] ssdk_dt_parse_uniphy[333]:INFO:ess-uniphy DT exist!
[ 13.864642] ssdk_dt_parse_led[951]:INFO:current dts led_source_num is 0
[ 13.870322] ssdk_plat_init start
[ 16.285488] ssdk_mp_reset_init[739]:INFO:MP reset successfully!
[ 16.285550] ssdk_gcc_clock_init[1044]:INFO:SSDK gcc clock init successfully!
[ 16.291558] ssdk_phy_driver_init[325]:INFO:dev_id = 0, phy_adress = 255, phy_id = 0x0 phy
[ 16.297632] ssdk_phy_driver_init[325]:INFO:dev_id = 0, phy_adress = 7, phy_id = 0x4dd0c0 phy
[ 16.314109] ssdk_phy_driver_init[325]:INFO:dev_id = 0, phy_adress = 8, phy_id = 0x0 phy
[ 16.330627] ssdk_phy_driver_init[343]:INFO:dev_id = 0, phy_adress = 8, phy_id = 0x0 phytype doesn't match
[ 16.338976] ssdk_phy_driver_init[325]:INFO:dev_id = 0, phy_adress = 2, phy_id = 0x0 phy
[ 16.348686] ssdk_phy_driver_init[325]:INFO:dev_id = 0, phy_adress = 3, phy_id = 0x0 phy
[ 16.356495] ssdk_phy_driver_init[325]:INFO:dev_id = 0, phy_adress = 4, phy_id = 0x0 phy
[ 16.364449] ssdk_phy_driver_init[325]:INFO:dev_id = 0, phy_adress = 5, phy_id = 0x0 phy
[ 16.372479] ssdk_phy_driver_init[325]:INFO:dev_id = 0, phy_adress = 6, phy_id = 0x0 phy
[ 16.380478] ssdk_phy_driver_init[325]:INFO:dev_id = 0, phy_adress = 7, phy_id = 0x4dd0c0 phy
[ 16.388448] ssdk_phy_driver_init[325]:INFO:dev_id = 0, phy_adress = 8, phy_id = 0x0 phy
[ 16.397134] ssdk_phy_driver_init[325]:INFO:dev_id = 0, phy_adress = 9, phy_id = 0x8aa21ac8 phy
[ 16.405636] ssdk_phy_driver_init[325]:INFO:dev_id = 0, phy_adress = 10, phy_id = 0x0 phy
[ 16.414422] ssdk_phy_driver_init[325]:INFO:dev_id = 0, phy_adress = 11, phy_id = 0x0 phy
[ 16.423579] ssdk_phy_driver_init[325]:INFO:dev_id = 0, phy_adress = 12, phy_id = 0x0 phy
[ 16.429887] ssdk_phy_driver_init[325]:INFO:dev_id = 0, phy_adress = 13, phy_id = 0x0 phy
[ 16.437994] ssdk_phy_driver_init[325]:INFO:dev_id = 0, phy_adress = 14, phy_id = 0x0 phy
[ 16.445987] mpge_phy_api_ops_init[1089]:INFO:qca probe mpge phy driver succeeded!
[ 16.454386] mpge_phy_dac_set[917]:INFO:phy mdac is set as 0x10
[ 16.461480] mpge_phy_dac_set[929]:INFO:phy edac is set as 0x10
[ 16.467234] regi_init[3604]:INFO:Initializing SCOMPHY!
[ 17.805477] hsl_port_phy_gpio_reset[700]:INFO:GPIO39 reset PHY done
[ 17.915482] ssdk_switch_register[1714]:INFO:Chip version 0xee
[ 17.915524] qca_link_polling_select[1318]:INFO:link-polling-required node does not exist
[ 17.920193] ssdk_switch_register[1748]:INFO:polling is selected
[ 17.928371] regi_init[3614]:INFO:Initializing SCOMPHY Done!!
[ 17.934028] ssdk_dt_get_switch_node[978]:INFO:ess-switch DT exist!
[ 17.939917] ssdk_dt_parse_access_mode[864]:INFO:switch_access_mode: mdio
[ 17.945900] ssdk_dt_parse_mac_mode[293]:INFO:mac mode doesn't exit!
[ 17.952744] ssdk_dt_parse_mac_mode[302]:INFO:mac mode1 doesn't exit!
[ 17.958743] ssdk_dt_parse_mac_mode[311]:INFO:mac mode2 doesn't exit!
[ 17.965360] ssdk_dt_parse[1069]:INFO:switch node is qca83xx!
[ 17.971680] ssdk_plat_init start
[ 18.041247] ssdk_phy_driver_init[325]:INFO:dev_id = 1, phy_adress = 255, phy_id = 0x0 phy
[ 18.041295] ssdk_phy_driver_init[325]:INFO:dev_id = 1, phy_adress = 0, phy_id = 0x4dd036 phy
[ 18.056941] ssdk_phy_driver_init[325]:INFO:dev_id = 1, phy_adress = 1, phy_id = 0x4dd036 phy
[ 18.074111] ssdk_phy_driver_init[325]:INFO:dev_id = 1, phy_adress = 2, phy_id = 0x4dd036 phy
[ 18.091306] ssdk_phy_driver_init[325]:INFO:dev_id = 1, phy_adress = 3, phy_id = 0x4dd036 phy
[ 18.108493] ssdk_phy_driver_init[325]:INFO:dev_id = 1, phy_adress = 4, phy_id = 0x4dd036 phy
[ 18.117260] ssdk_phy_driver_init[325]:INFO:dev_id = 1, phy_adress = 5, phy_id = 0xffffffff phy
[ 18.125680] ssdk_phy_driver_init[325]:INFO:dev_id = 1, phy_adress = 6, phy_id = 0xffffffff phy
[ 18.134093] ssdk_phy_driver_init[325]:INFO:dev_id = 1, phy_adress = 7, phy_id = 0xffffffff phy
[ 18.142693] ssdk_phy_driver_init[325]:INFO:dev_id = 1, phy_adress = 8, phy_id = 0x4dd101 phy
[ 18.151287] ssdk_phy_driver_init[325]:INFO:dev_id = 1, phy_adress = 9, phy_id = 0x8aa21ac8 phy
[ 18.159883] ssdk_phy_driver_init[325]:INFO:dev_id = 1, phy_adress = 10, phy_id = 0xffffffff phy
[ 18.168303] ssdk_phy_driver_init[325]:INFO:dev_id = 1, phy_adress = 11, phy_id = 0xffffffff phy
[ 18.176901] ssdk_phy_driver_init[325]:INFO:dev_id = 1, phy_adress = 12, phy_id = 0xffffffff phy
[ 18.185586] ssdk_phy_driver_init[325]:INFO:dev_id = 1, phy_adress = 13, phy_id = 0xffffffff phy
[ 18.194249] ssdk_phy_driver_init[325]:INFO:dev_id = 1, phy_adress = 14, phy_id = 0xffffffff phy
[ 18.202918] f1_phy_api_ops_init[1517]:INFO:qca probe f1 phy driver succeeded!
[ 18.211594] regi_init[3562]:INFO:Initializing ISISC!!
[ 18.218890] of_get_named_gpiod_flags: can't parse 'reset_gpio' property of node '/soc/ess-instance/ess-switch1@1[0]'
[ 18.218896] qca_ar8327_gpio_reset[3476]:INFO:reset_gpio node does not exist
[ 18.224068] ssdk_switch_register[1722]:INFO:Chip version 0x1302
[ 18.230713] qca_link_polling_select[1318]:INFO:link-polling-required node does not exist
[ 18.236595] ssdk_switch_register[1748]:INFO:polling is selected
[ 19.885485] regi_init[3567]:INFO:Initializing ISISC Done!!
[ 19.885678] regi_init[3637]:INFO:qca-ssdk module init succeeded!

and the device tree file is as follows:
ess-instance {
num_devices = <0x2>;
ess-switch@0x39c00000 {
compatible = "qcom,ess-switch-ipq50xx";
device_id = <0>;
reg = <0x39c00000 0x200000>;
switch_access_mode = "local bus";
switch_mac_mode = <0xf>; /* mac mode for uniphy instance*/
cmnblk_clk = "internal_96MHz"; /* cmnblk clk*/
qcom,port_phyinfo {
port@0 {
port_id = <1>;
mdiobus = <&mdio0>;
phy_address = <7>;
phy_dac= <0x10 0x10>;
};
port@1 {
port_id = <2>;
phy_address = <0x8>;
mdiobus = <&mdio1>;
port_mac_sel="QGMAC_PORT";
};
};
#if 0
led_source@0 {
source = <0>;
mode = "normal";
speed = "all";
blink_en = "enable";
active = "high";
};
#endif
};
ess-switch1@1 {
compatible = "qcom,ess-switch-qca83xx";
device_id = <1>;
switch_access_mode = "mdio";
mdio-bus = <&mdio1>;
//reset_gpio = <0x27>;
switch_cpu_bmp = <0x40>; /* cpu port bitmap /
switch_lan_bmp = <0x1e>; /
lan port bitmap /
switch_wan_bmp = <0x0>; /
wan port bitmap /
qca,ar8327-initvals = <
0x00004 0x7600000 /
PAD0_MODE /
0x00008 0x1000000 /
PAD5_MODE /
0x0000c 0x80 /
PAD6_MODE /
0x00010 0x2613a0 /
PORT6 FORCE MODE*/
0x000e4 0xaa545 /* MAC_POWER_SEL /
0x000e0 0xc74164de /
SGMII_CTRL /
0x0007c 0x4e /
PORT0_STATUS /
0x00094 0x4e /
PORT6_STATUS */
>;
qcom,port_phyinfo {
port@0 {
port_id = <1>;
phy_address = <0>;
};
port@1 {
port_id = <2>;
phy_address = <1>;
};
port@2 {
port_id = <3>;
phy_address = <2>;
};
port@3 {
port_id = <4>;
phy_address = <3>;
};
};
};
};

I would like to know why this happens. thank you to all

By the looks of it, he extracted the dts file from the factory firmware.

I bring up a ipq5000+qcn6122 wifi6 router. based on qsdk 12.1 .
the kernel version I use is 5.15
ethernet and wifi is ok now.
the code is based on

manifest AU_LINUX_QSDK_NHSS.QSDK.12.1.R3_TARGET_ALL.12.1.03.841.039.xml
but the code is not based on openwrt. but I can send the kernel and driver patch to one interesting.

1 Like

the qca/feeds/wlan-open/mac80211/ package in QSDK 12.1 is actually ath11k + qsdk patch. that can bring wifi 6 up .

1 Like

hey guys, as the question was raised already multiple times, but there was no answer to it, how likely AX6000 will get OpenWrt support?

Pls. do not be confused by Xiaomi AX6000 and Redmi AX6000, they are different.
If you are asking Redmi AX6000, it is already working with snapshot.
I just bought a Redmi AX6000 and flashed, fully working hardware, thanks to those talented people.

I'm sorry, is this the topic about Redmi AX6000?

Hey, can you send me the kernel and patches? i'm trying to port openwrt based on qsdk to xiaomi ax3000RA80 (same soc ipq5018+qcn6122 but 256ram ) and i'm having problems to make wifi work

Hi

the attachmen is ipq5018 patch for kernel 5.15.38

(Attachment patches-5.15.tar.xz is missing)

this forum not support attachment, what's your email.

you can send to my email kowak@proton.me

Hello, could you please help me by explaining how to generate kernel patch from AU_LINUX_QSDK_NHSS.QSDK.12.1.R3_TARGET_ALL.12.1.03.841.039.xml

And how to apply the patch afterwards

Thanks

Any news on OpenWRT firmware for Xiaomi AX 6000 (not a Redmi one)? Maybe some ETA on it?

Looking forward to see more good news of OpenWRT supporting Xiaomi AX6000!

hello!

do you have any updates?
your idea is very interesting!

thanks

Hi!
I wanted to ask if there is currently already support for the Xiaomi AX6000 AIoT?
As with @yuanjianpeng his router, it also has a Qualcomm IPQ5018 installed.

Unfortunately, I have no idea how to assemble the firmware myself so that I can create a suitable image for it.

There is no one working on ipq50xx so far, and quite a lot of very basic and fundamental kernel support is missing for this SOC, I wouldn't see that changing anytime soon either.

Have a look at (supported-) ipq807x based devices instead, which aren't necessarily more expensive (e.g. the Dynalink DL-WRX36 is even ~35% cheaper than the ax6000), but are working - now.

Thanks for the info.
I decided to go for the Xiaomi Redmi AX6000 after all.
I just ordered it for a few euros more.
I want to hang the router on the wall, this is a bit tricky with the Dynalink.
The MediaTek MT7986A is supported with the Snapshot version.