Adding OpenWrt support for Linksys MR6350

I have the OpenWrt 24.10.2 version installed, and I have SQM/CAKE running. My DOCSIS connection is 150+/45, so the ISP has overprovisioning.

Problem is, I have to set max 80 down and 36 up to get zero added latency due to bufferbloat. I'm following the instructions here exactly: [OpenWrt Wiki] SQM (Smart Queue Management), including the Link Layer Adaptation part.

Is this router too CPU limited for SQM or something? It has 4 cores and supports much faster speeds...

Hi @RonaldoMagico, after hard reset I flashed the 24.10.2 …-factory.bin file onto my MR6350 using the Linsys UI but after I did that router seemed bricked. I hard resetted the router 3 times and now it’s back to the stock firmware. However, I am not sure why did OpenWRT not work since others in this thread say it works fine. Do I need to do something before flashing or do I need to flash another file first? Thanks!

Back after playing more with images… I managed to install OpenWRT using the 23.05.5 factory image, this one seems to work fine.

However, my attempts to sysupgrade failed with all 24.10 images (0, 1, 2). @denisr24 I see you have those up and running, can you help please, maybe I am doing something wrong. After installing 23.05.5 I went to the firmware upgrade page in LuCy and chose the 24.10.x sysupgrade file to flash. Went ahead but after reboot the router seemed bricked - the blue light was on and network was inaccessible. Each time I did hard reset 3 times and the working version came back. Please help me upgrade to v 24.10. Thanks!

What is the output of fw_printenv when running Openwrt 23.05?

See also Adding OpenWrt support for Linksys MR6350 - #46 by RolandoMagico

Hi Ronaldo, running fw_printenv showed kernsize=300000 so I updated it to 500000 as mentioned in those steps (fw_setenv kernsize 500000) and rebooted. Then retried flash 24.10.2-sysupgrade and it worked fine this time.Thank you very much for the help. Your work to adapt OpenWrt to this router is much appreciated.

Good evening, could you please add the new OpenWrt version 24.10.3 :+1:for the Linksys MR6350? Thanks

You can try:

24.10.3 Images work for me. Able to add luci-app-advance-reboot and stubby.

Hi @RolandoMagico,

I stumbled over this thread after taking part in a discussion about this device and your prebuilt images in another thread, so I figured I could as well head over to this thread with my comments.

The Makefile from your patch is asking the build system to build include ipq-wifi-linksys_mr6350, but it can’t do that because it's not built due to your patch missing the required changes to the ipq-wifi package, like this:

BDF patch (untested because I don't own this device)
diff --git a/package/firmware/ipq-wifi/Makefile b/package/firmware/ipq-wifi/Makefile
index aca52d1bba..057fd382fd 100644
--- a/package/firmware/ipq-wifi/Makefile
+++ b/package/firmware/ipq-wifi/Makefile
@@ -38,6 +38,7 @@ ALLWIFIBOARDS:= \
 	edgecore_eap102 \
 	edimax_cax1800 \
 	linksys_homewrk \
+	linksys_mr6350 \
 	linksys_mx4200 \
 	linksys_mx5300 \
 	linksys_mx8500 \
@@ -173,6 +174,7 @@ $(eval $(call generate-ipq-wifi-package,dynalink_dl-wrx36,Dynalink DL-WRX36))
 $(eval $(call generate-ipq-wifi-package,edgecore_eap102,Edgecore EAP102))
 $(eval $(call generate-ipq-wifi-package,edimax_cax1800,Edimax CAX1800))
 $(eval $(call generate-ipq-wifi-package,linksys_homewrk,Linksys HomeWRK))
+$(eval $(call generate-ipq-wifi-package,linksys_mr6350,Linksys MR6350))
 $(eval $(call generate-ipq-wifi-package,linksys_mx4200,Linksys MX4200))
 $(eval $(call generate-ipq-wifi-package,linksys_mx5300,Linksys MX5300))
 $(eval $(call generate-ipq-wifi-package,linksys_mx8500,Linksys MX8500))
diff --git a/package/firmware/ipq-wifi/src/board-linksys_mr6350.qca4019 b/package/firmware/ipq-wifi/src/board-linksys_mr6350.qca4019
new file mode 100644
index 0000000000000000000000000000000000000000..5f139e56e1f7ae888851e7505c4bdca59635c3ae
GIT binary patch
literal 24316
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
E|FOWHnE(I)

literal 0
HcmV?d00001

Note that the BDF from the above example isn't created by me, it's yours from firmware_qca-wireless/PR#24, just modified according to the last PR comment from August.

Then, you're including ath10k-firmware-qca9888-ct - I assume that to be an unneeded copy&paste remnant of the MR8300?

One more thing I noticed, your device support patch file that you kindly include with each one of your prebuilt images (kudos, don't see that often!) consists of a mixture of Windows and Unix linefeeds. You might want to fix that, for cosmetic reasons :slight_smile:

Also wondering why you haven't pursued merging of your two PRs (BDF and device support) since February/March this year anymore? Just curious, nothing more, since you're still very active and supportive in this thread, so it doesn't seem like you've given up!

Good evening, could you please add the new OpenWrt version 24.10.4 :+1:for the Linksys MR6350? Thanks​:smiling_face::smiling_face::smiling_face::smiling_face:

OpenWRT 24.10.4 has been released recently. This was found in the change log:

Packages / Firmware (6 changes)

20e5a5a qca4019: add Linksys MR6350 BDF ()

So the BDF was accepted upstream. Accordingly, the device support merge should follow shortly, I suppose.

Excellent news, we hope it is officially available.:smiley::smiley::smiley::smiley:

I don’t know if the recent AWS outage tentacles reached OpenWRT but

20e5a5a qca4019: add Linksys MR6350 BDF ()

was committed over 2 weeks ago. The base-file entries and dts have yet to be seen. Has @RolandoMagico submission timed out or does he need to update it?

I think he deserves main authorship for the submission and has demononstrated he will build for others to test. If tester’s are needed, I’d be glad to test.

The other thing is the install methods. The easiest path is to install an older build from this thread to allow editing fw kernel size and upgrading to a recent build. I used 22.03.x after failing usb+serial. The TFTP connection would “T T T T…..”. The connection attempts were timing out.

Ideally the older version should be hosted by the OpenWRT project rather than relying on a github account that may come or go.

It appears that @RolandoMagico was too busy and that’s why @testuser7 stepped in to submit the updated BDF. The Github issue for device support is still #17977 under @RolandoMagico.

I wonder why I bother so much, despite not owning this device and having already given away all my other ipq40xx devices, too...

Anyway, since this thread is quite large, and hard to read, here are full build and install instructions for this device, as of OpenWrt 24.10.4.

Factory installation:

  • Build your desired OpenWrt version using one of the patches below.
  • Either use UART and boot the initramfs image as described in the device support PR.
  • Or install the prebuilt OpenWrt 23.05.5 factory image via the vendor web UI. Do not use the factory image from your freshly created build - it will soft-brick your router, because its kernel is too large to load!
  • After the device has booted into OpenWrt, connect via SSH and run the command fw_setenv kernsize 500000. This will allow your router to load kernels up to 5MB, which is sufficient for 24.10.x or current SNAPSHOT.
  • Now install the sysupgrade image of your desired version (e.g. 24.10.4) without keeping settings. You can do this via LuCI web UI (if available in your image), or use CLI: sysupgrade -n openwrt-ipq40xx-generic-linksys_mr6350-squashfs-sysupgrade.bin
  • The device will reboot automatically and is ready to use.

Build:

Since the proper board file is now merged into the ipq-wifi package, here are the updated patches for supporting this device.

24.10 (rebased to 24.10.4)
diff --git a/package/boot/uboot-envtools/files/ipq40xx b/package/boot/uboot-envtools/files/ipq40xx
index 717158b042..ff2ad72949 100644
--- a/package/boot/uboot-envtools/files/ipq40xx
+++ b/package/boot/uboot-envtools/files/ipq40xx
@@ -61,6 +61,7 @@ linksys,ea6350v3)
 	ubootenv_add_uci_config "/dev/mtd7" "0x0" "0x20000" "0x20000"
 	;;
 linksys,ea8300|\
+linksys,mr6350|\
 linksys,mr8300)
 	ubootenv_add_uci_config "/dev/mtd7" "0x0" "0x40000" "0x20000"
 	;;
diff --git a/package/firmware/ipq-wifi/Makefile b/package/firmware/ipq-wifi/Makefile
index f939f65c89..56b7b076a1 100644
--- a/package/firmware/ipq-wifi/Makefile
+++ b/package/firmware/ipq-wifi/Makefile
@@ -38,6 +38,7 @@ ALLWIFIBOARDS:= \
 	edgecore_eap102 \
 	edimax_cax1800 \
 	linksys_homewrk \
+	linksys_mr6350 \
 	linksys_mx4200 \
 	linksys_mx5300 \
 	linksys_mx8500 \
@@ -172,6 +173,7 @@ $(eval $(call generate-ipq-wifi-package,dynalink_dl-wrx36,Dynalink DL-WRX36))
 $(eval $(call generate-ipq-wifi-package,edgecore_eap102,Edgecore EAP102))
 $(eval $(call generate-ipq-wifi-package,edimax_cax1800,Edimax CAX1800))
 $(eval $(call generate-ipq-wifi-package,linksys_homewrk,Linksys HomeWRK))
+$(eval $(call generate-ipq-wifi-package,linksys_mr6350,Linksys MR6350))
 $(eval $(call generate-ipq-wifi-package,linksys_mx4200,Linksys MX4200))
 $(eval $(call generate-ipq-wifi-package,linksys_mx5300,Linksys MX5300))
 $(eval $(call generate-ipq-wifi-package,linksys_mx8500,Linksys MX8500))
diff --git a/target/linux/ipq40xx/base-files/etc/board.d/02_network b/target/linux/ipq40xx/base-files/etc/board.d/02_network
index 549e1ac0c9..59abb5db29 100644
--- a/target/linux/ipq40xx/base-files/etc/board.d/02_network
+++ b/target/linux/ipq40xx/base-files/etc/board.d/02_network
@@ -17,6 +17,7 @@ ipq40xx_setup_interfaces()
 	asus,rt-ac58u|\
 	linksys,ea6350v3|\
 	linksys,ea8300|\
+	linksys,mr6350|\
 	linksys,mr8300|\
 	mikrotik,hap-ac2|\
 	mikrotik,hap-ac3|\
@@ -214,6 +215,7 @@ ipq40xx_setup_macs()
 		;;
 	linksys,ea6350v3|\
 	linksys,ea8300  |\
+	linksys,mr6350  |\
 	linksys,mr8300)
 		wan_mac=$(mtd_get_mac_ascii devinfo hw_mac_addr)
 		lan_mac=$(macaddr_add "$wan_mac" 1)
diff --git a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
index 4a1a0ff311..74b336022e 100644
--- a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
+++ b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
@@ -35,6 +35,7 @@ case "$FIRMWARE" in
 		/usr/bin/fritz_cal_extract -i 1 -s 0x3C000 -e 0x212 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader1")
 		;;
 	linksys,ea8300 |\
+	linksys,mr6350 |\
 	linksys,mr8300)
 		caldata_extract "ART" 0x9000 0x2f20
 		# OEM assigns 4 sequential MACs
@@ -103,6 +104,7 @@ case "$FIRMWARE" in
 		ath10k_patch_mac $(mtd_get_mac_ascii CFG1 RADIOADDR0)
 		;;
 	linksys,ea8300 |\
+	linksys,mr6350 |\
 	linksys,mr8300)
 		caldata_extract "ART" 0x1000 0x2f20
 		ath10k_patch_mac $(macaddr_add "$(cat /sys/class/net/eth0/address)" 2)
@@ -202,6 +204,7 @@ case "$FIRMWARE" in
 		ath10k_patch_mac $(mtd_get_mac_ascii CFG1 RADIOADDR1)
 		;;
 	linksys,ea8300 |\
+	linksys,mr6350 |\
 	linksys,mr8300)
 		caldata_extract "ART" 0x5000 0x2f20
 		ath10k_patch_mac $(macaddr_add "$(cat /sys/class/net/eth0/address)" 3)
diff --git a/target/linux/ipq40xx/base-files/etc/init.d/bootcount b/target/linux/ipq40xx/base-files/etc/init.d/bootcount
index 0120f78cfe..079edce24c 100755
--- a/target/linux/ipq40xx/base-files/etc/init.d/bootcount
+++ b/target/linux/ipq40xx/base-files/etc/init.d/bootcount
@@ -39,6 +39,7 @@ boot() {
 		;;
 	linksys,ea6350v3|\
 	linksys,ea8300|\
+	linksys,mr6350|\
 	linksys,mr8300|\
 	linksys,whw01|\
 	linksys,whw03v2)
diff --git a/target/linux/ipq40xx/base-files/etc/uci-defaults/05_fix-compat-version b/target/linux/ipq40xx/base-files/etc/uci-defaults/05_fix-compat-version
index c011920897..0f933b71cd 100644
--- a/target/linux/ipq40xx/base-files/etc/uci-defaults/05_fix-compat-version
+++ b/target/linux/ipq40xx/base-files/etc/uci-defaults/05_fix-compat-version
@@ -3,6 +3,7 @@
 case "$(board_name)" in
 linksys,ea6350v3|\
 linksys,ea8300|\
+linksys,mr6350|\
 linksys,mr8300|\
 ezviz,cs-w3-wd1200g-eup)
 	uci set system.@system[0].compat_version="2.0"
diff --git a/target/linux/ipq40xx/base-files/lib/preinit/05_set_iface_mac_ipq40xx.sh b/target/linux/ipq40xx/base-files/lib/preinit/05_set_iface_mac_ipq40xx.sh
index 092f9da440..8a8d224a45 100644
--- a/target/linux/ipq40xx/base-files/lib/preinit/05_set_iface_mac_ipq40xx.sh
+++ b/target/linux/ipq40xx/base-files/lib/preinit/05_set_iface_mac_ipq40xx.sh
@@ -25,6 +25,7 @@ preinit_set_mac_address() {
 		ip link set dev eth0 address $(mtd_get_mac_ascii CFG1 ethaddr)
 		;;
 	linksys,ea8300|\
+	linksys,mr6350|\
 	linksys,mr8300)
 		base_mac=$(mtd_get_mac_ascii devinfo hw_mac_addr)
 		ip link set dev lan1 address $(macaddr_add "$base_mac" 1)
diff --git a/target/linux/ipq40xx/base-files/lib/upgrade/linksys.sh b/target/linux/ipq40xx/base-files/lib/upgrade/linksys.sh
index 860c3fd2de..256b3cfb91 100644
--- a/target/linux/ipq40xx/base-files/lib/upgrade/linksys.sh
+++ b/target/linux/ipq40xx/base-files/lib/upgrade/linksys.sh
@@ -16,7 +16,7 @@ linksys_get_target_firmware() {
 			"${cur_boot_part}" "${mtd_ubi0}"
 	fi
 
-	# OEM U-Boot for EA6350v3, EA8300 and MR8300; bootcmd=
+	# OEM U-Boot for EA6350v3, EA8300, MR6350 and MR8300; bootcmd=
 	#  if test $auto_recovery = no;
 	#      then bootipq;
 	#  elif test $boot_part = 1;
diff --git a/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh b/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh
index 53a9561148..53e36a9def 100644
--- a/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh
@@ -170,6 +170,7 @@ platform_do_upgrade() {
 		;;
 	linksys,ea6350v3 |\
 	linksys,ea8300 |\
+	linksys,mr6350 |\
 	linksys,mr8300 |\
 	linksys,whw01 |\
 	linksys,whw03v2)
diff --git a/target/linux/ipq40xx/files-6.6/arch/arm/boot/dts/qcom/qcom-ipq4019-mr6350.dts b/target/linux/ipq40xx/files-6.6/arch/arm/boot/dts/qcom/qcom-ipq4019-mr6350.dts
new file mode 100644
index 0000000000..d936e720e4
--- /dev/null
+++ b/target/linux/ipq40xx/files-6.6/arch/arm/boot/dts/qcom/qcom-ipq4019-mr6350.dts
@@ -0,0 +1,115 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include "qcom-ipq4019-xx8300.dtsi"
+#include <dt-bindings/leds/common.h>
+
+/ {
+	model = "Linksys MR6350";
+	compatible = "linksys,mr6350", "qcom,ipq4019";
+
+	aliases {
+		led-boot = &led_blue;
+		led-failsafe = &led_red;
+		led-running = &led_green;
+		led-upgrade = &led_blue;
+		serial0 = &blsp1_uart1;
+		label-mac-device = &gmac;
+	};
+
+	// Top panel LEDs, above Linksys logo
+	leds {
+		compatible = "gpio-leds";
+		
+		led_blue: led-blue {
+			color = <LED_COLOR_ID_BLUE>;
+			function = LED_FUNCTION_STATUS;
+			gpios = <&tlmm 46 GPIO_ACTIVE_LOW>;
+		};
+
+		led_red: led-red {
+			color = <LED_COLOR_ID_RED>;
+			function = LED_FUNCTION_STATUS;
+			gpios = <&tlmm 47 GPIO_ACTIVE_HIGH>;
+			panic-indicator;
+		};
+
+		led_green: led-green {
+			color = <LED_COLOR_ID_GREEN>;
+			function = LED_FUNCTION_STATUS;
+			gpios = <&tlmm 49 GPIO_ACTIVE_HIGH>;
+		};
+	};
+
+	keys {
+		compatible = "gpio-keys";
+
+		button-reset {
+			label = "reset";
+			linux,code = <KEY_RESTART>;
+			gpios = <&tlmm 50 GPIO_ACTIVE_LOW>;
+		};
+
+		button-wps {
+			label = "wps";
+			linux,code = <KEY_WPS_BUTTON>;
+			gpios = <&tlmm 18 GPIO_ACTIVE_LOW>;
+		};
+	};
+};
+
+&mdio {
+	status = "okay";
+	pinctrl-0 = <&mdio_pins>;
+	pinctrl-names = "default";
+	reset-gpios = <&tlmm 54 GPIO_ACTIVE_LOW>;
+	reset-delay-us = <2000>;
+	reset-post-delay-us = <5000>;
+};
+	
+&tlmm {
+	status = "okay";
+
+	mdio_pins: mdio_pinmux {
+		mdio {
+			pins = "gpio6";
+			function = "mdio";
+			bias-pull-up;
+		};
+
+		mdc {
+			pins = "gpio7";
+			function = "mdc";
+			bias-pull-up;
+		};
+	};
+};
+
+&wifi0 {
+	status = "okay";
+	qcom,ath10k-calibration-variant = "linksys-mr6350";
+};
+
+&wifi1 {
+	status = "okay";
+	qcom,ath10k-calibration-variant = "linksys-mr6350";
+};
+
+&swport1 {
+	label = "wan";
+};
+
+&swport2 {
+	label = "lan1";
+};
+
+&swport3 {
+	label = "lan2";
+};
+
+&swport4 {
+	label = "lan3";
+};
+
+&swport5 {
+	label = "lan4";
+};
diff --git a/target/linux/ipq40xx/image/generic.mk b/target/linux/ipq40xx/image/generic.mk
index 86bcaf8406..61a80600a5 100644
--- a/target/linux/ipq40xx/image/generic.mk
+++ b/target/linux/ipq40xx/image/generic.mk
@@ -713,6 +713,23 @@ define Device/linksys_ea8300
 endef
 TARGET_DEVICES += linksys_ea8300
 
+define Device/linksys_mr6350
+	$(call Device/FitzImage)
+	$(call Device/kernel-size-6350-8300)
+	DEVICE_VENDOR := Linksys
+	DEVICE_MODEL := MR6350
+	SOC := qcom-ipq4019
+	KERNEL_SIZE := 5120k
+	IMAGE_SIZE := 84992k
+	BLOCKSIZE := 128k
+	PAGESIZE := 2048
+	UBINIZE_OPTS := -E 5    # EOD marks to "hide" factory sig at EOF
+	IMAGES += factory.bin
+	IMAGE/factory.bin  := append-kernel | pad-to $$(KERNEL_SIZE) | append-ubi | linksys-image type=MR6350
+	DEVICE_PACKAGES := ipq-wifi-linksys_mr6350 kmod-usb-ledtrig-usbport
+endef
+TARGET_DEVICES += linksys_mr6350
+
 define Device/linksys_mr8300
 	$(call Device/FitzImage)
 	$(call Device/kernel-size-6350-8300)
Main (rebased to Snapshot from Oct. 31, 2025)
diff --git a/package/boot/uboot-tools/uboot-envtools/files/ipq40xx b/package/boot/uboot-tools/uboot-envtools/files/ipq40xx
index 717158b042..ff2ad72949 100644
--- a/package/boot/uboot-tools/uboot-envtools/files/ipq40xx
+++ b/package/boot/uboot-tools/uboot-envtools/files/ipq40xx
@@ -61,6 +61,7 @@ linksys,ea6350v3)
 	ubootenv_add_uci_config "/dev/mtd7" "0x0" "0x20000" "0x20000"
 	;;
 linksys,ea8300|\
+linksys,mr6350|\
 linksys,mr8300)
 	ubootenv_add_uci_config "/dev/mtd7" "0x0" "0x40000" "0x20000"
 	;;
diff --git a/package/firmware/ipq-wifi/Makefile b/package/firmware/ipq-wifi/Makefile
index 01d2990c61..e8f399f26c 100644
--- a/package/firmware/ipq-wifi/Makefile
+++ b/package/firmware/ipq-wifi/Makefile
@@ -48,6 +48,7 @@ ALLWIFIBOARDS:= \
 	iodata_wn-dax3000gr \
 	linksys_homewrk \
 	linksys_mr5500 \
+	linksys_mr6350 \
 	linksys_mr7350 \
 	linksys_mr7500 \
 	linksys_mx2000 \
@@ -224,6 +225,7 @@ $(eval $(call generate-ipq-wifi-package,ignitenet_ss-w2-ac2600,Ignitenet SS-W2-A
 $(eval $(call generate-ipq-wifi-package,iodata_wn-dax3000gr,I-O DATA WN-DAX3000GR))
 $(eval $(call generate-ipq-wifi-package,linksys_homewrk,Linksys HomeWRK))
 $(eval $(call generate-ipq-wifi-package,linksys_mr5500,Linksys MR5500))
+$(eval $(call generate-ipq-wifi-package,linksys_mr6350,Linksys MR6350))
 $(eval $(call generate-ipq-wifi-package,linksys_mr7350,Linksys MR7350))
 $(eval $(call generate-ipq-wifi-package,linksys_mr7500,Linksys MR7500))
 $(eval $(call generate-ipq-wifi-package,linksys_mx2000,Linksys MX2000))
diff --git a/target/linux/ipq40xx/base-files/etc/board.d/02_network b/target/linux/ipq40xx/base-files/etc/board.d/02_network
index 727165870c..7cd6879e4f 100644
--- a/target/linux/ipq40xx/base-files/etc/board.d/02_network
+++ b/target/linux/ipq40xx/base-files/etc/board.d/02_network
@@ -17,6 +17,7 @@ ipq40xx_setup_interfaces()
 	asus,rt-ac58u|\
 	linksys,ea6350v3|\
 	linksys,ea8300|\
+	linksys,mr6350|\
 	linksys,mr8300|\
 	mikrotik,hap-ac2|\
 	mikrotik,hap-ac3|\
@@ -219,6 +220,7 @@ ipq40xx_setup_macs()
 		;;
 	linksys,ea6350v3|\
 	linksys,ea8300|\
+	linksys,mr6350|\
 	linksys,mr8300)
 		wan_mac=$(mtd_get_mac_ascii devinfo hw_mac_addr)
 		lan_mac=$(macaddr_add "$wan_mac" 1)
diff --git a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
index 0c8a5d8aa5..ab394d049d 100644
--- a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
+++ b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
@@ -26,6 +26,7 @@ case "$FIRMWARE" in
 		/usr/bin/fritz_cal_extract -i 1 -s 0x3C000 -e 0x212 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader1")
 		;;
 	linksys,ea8300|\
+	linksys,mr6350|\
 	linksys,mr8300)
 		caldata_extract "ART" 0x9000 0x2f20
 		# OEM assigns 4 sequential MACs
@@ -94,6 +95,7 @@ case "$FIRMWARE" in
 		ath10k_patch_mac $(mtd_get_mac_ascii CFG1 RADIOADDR0)
 		;;
 	linksys,ea8300|\
+	linksys,mr6350|\
 	linksys,mr8300)
 		caldata_extract "ART" 0x1000 0x2f20
 		ath10k_patch_mac $(macaddr_add "$(cat /sys/class/net/eth0/address)" 2)
@@ -188,6 +190,7 @@ case "$FIRMWARE" in
 		ath10k_patch_mac $(mtd_get_mac_ascii CFG1 RADIOADDR1)
 		;;
 	linksys,ea8300|\
+	linksys,mr6350|\
 	linksys,mr8300)
 		caldata_extract "ART" 0x5000 0x2f20
 		ath10k_patch_mac $(macaddr_add "$(cat /sys/class/net/eth0/address)" 3)
diff --git a/target/linux/ipq40xx/base-files/etc/init.d/bootcount b/target/linux/ipq40xx/base-files/etc/init.d/bootcount
index 0120f78cfe..079edce24c 100755
--- a/target/linux/ipq40xx/base-files/etc/init.d/bootcount
+++ b/target/linux/ipq40xx/base-files/etc/init.d/bootcount
@@ -39,6 +39,7 @@ boot() {
 		;;
 	linksys,ea6350v3|\
 	linksys,ea8300|\
+	linksys,mr6350|\
 	linksys,mr8300|\
 	linksys,whw01|\
 	linksys,whw03v2)
diff --git a/target/linux/ipq40xx/base-files/etc/uci-defaults/05_fix-compat-version b/target/linux/ipq40xx/base-files/etc/uci-defaults/05_fix-compat-version
index 9ee8adbf7f..e0547c3650 100644
--- a/target/linux/ipq40xx/base-files/etc/uci-defaults/05_fix-compat-version
+++ b/target/linux/ipq40xx/base-files/etc/uci-defaults/05_fix-compat-version
@@ -4,6 +4,7 @@ case "$(board_name)" in
 ezviz,cs-w3-wd1200g-eup|\
 linksys,ea6350v3|\
 linksys,ea8300|\
+linksys,mr6350|\
 linksys,mr8300)
 	uci set system.@system[0].compat_version="2.0"
 	uci commit system
diff --git a/target/linux/ipq40xx/base-files/lib/preinit/05_set_iface_mac_ipq40xx.sh b/target/linux/ipq40xx/base-files/lib/preinit/05_set_iface_mac_ipq40xx.sh
index 092f9da440..8a8d224a45 100644
--- a/target/linux/ipq40xx/base-files/lib/preinit/05_set_iface_mac_ipq40xx.sh
+++ b/target/linux/ipq40xx/base-files/lib/preinit/05_set_iface_mac_ipq40xx.sh
@@ -25,6 +25,7 @@ preinit_set_mac_address() {
 		ip link set dev eth0 address $(mtd_get_mac_ascii CFG1 ethaddr)
 		;;
 	linksys,ea8300|\
+	linksys,mr6350|\
 	linksys,mr8300)
 		base_mac=$(mtd_get_mac_ascii devinfo hw_mac_addr)
 		ip link set dev lan1 address $(macaddr_add "$base_mac" 1)
diff --git a/target/linux/ipq40xx/base-files/lib/upgrade/linksys.sh b/target/linux/ipq40xx/base-files/lib/upgrade/linksys.sh
index 860c3fd2de..256b3cfb91 100644
--- a/target/linux/ipq40xx/base-files/lib/upgrade/linksys.sh
+++ b/target/linux/ipq40xx/base-files/lib/upgrade/linksys.sh
@@ -16,7 +16,7 @@ linksys_get_target_firmware() {
 			"${cur_boot_part}" "${mtd_ubi0}"
 	fi
 
-	# OEM U-Boot for EA6350v3, EA8300 and MR8300; bootcmd=
+	# OEM U-Boot for EA6350v3, EA8300, MR6350 and MR8300; bootcmd=
 	#  if test $auto_recovery = no;
 	#      then bootipq;
 	#  elif test $boot_part = 1;
diff --git a/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh b/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh
index 58108fce73..6622a24ddf 100644
--- a/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh
@@ -167,6 +167,7 @@ platform_do_upgrade() {
 		;;
 	linksys,ea6350v3|\
 	linksys,ea8300|\
+	linksys,mr6350|\
 	linksys,mr8300|\
 	linksys,whw01|\
 	linksys,whw03v2)
diff --git a/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4019-mr6350.dts b/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4019-mr6350.dts
new file mode 100644
index 0000000000..b8410bbd93
--- /dev/null
+++ b/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4019-mr6350.dts
@@ -0,0 +1,115 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include "qcom-ipq4019-xx8300.dtsi"
+#include <dt-bindings/leds/common.h>
+
+/ {
+	model = "Linksys MR6350";
+	compatible = "linksys,mr6350", "qcom,ipq4019";
+
+	aliases {
+		led-boot = &led_blue;
+		led-failsafe = &led_red;
+		led-running = &led_green;
+		led-upgrade = &led_blue;
+		serial0 = &blsp1_uart1;
+		label-mac-device = &gmac;
+	};
+
+	// Top panel LEDs, above Linksys logo
+	leds {
+		compatible = "gpio-leds";
+		
+		led_blue: led-blue {
+			color = <LED_COLOR_ID_BLUE>;
+			function = LED_FUNCTION_STATUS;
+			gpios = <&tlmm 46 GPIO_ACTIVE_LOW>;
+		};
+
+		led_red: led-red {
+			color = <LED_COLOR_ID_RED>;
+			function = LED_FUNCTION_STATUS;
+			gpios = <&tlmm 47 GPIO_ACTIVE_HIGH>;
+			panic-indicator;
+		};
+
+		led_green: led-green {
+			color = <LED_COLOR_ID_GREEN>;
+			function = LED_FUNCTION_STATUS;
+			gpios = <&tlmm 49 GPIO_ACTIVE_HIGH>;
+		};
+	};
+
+	keys {
+		compatible = "gpio-keys";
+
+		button-reset {
+			label = "reset";
+			linux,code = <KEY_RESTART>;
+			gpios = <&tlmm 50 GPIO_ACTIVE_LOW>;
+		};
+
+		button-wps {
+			label = "wps";
+			linux,code = <KEY_WPS_BUTTON>;
+			gpios = <&tlmm 18 GPIO_ACTIVE_LOW>;
+		};
+	};
+};
+
+&mdio {
+	status = "okay";
+	pinctrl-0 = <&mdio_pins>;
+	pinctrl-names = "default";
+	reset-gpios = <&tlmm 54 GPIO_ACTIVE_LOW>;
+	reset-delay-us = <2000>;
+	reset-post-delay-us = <5000>;
+};
+	
+&tlmm {
+	status = "okay";
+
+	mdio_pins: mdio_pinmux {
+		mdio {
+			pins = "gpio6";
+			function = "mdio";
+			bias-pull-up;
+		};
+
+		mdc {
+			pins = "gpio7";
+			function = "mdc";
+			bias-pull-up;
+		};
+	};
+};
+
+&wifi0 {
+	status = "okay";
+	qcom,ath10k-calibration-variant = "linksys-mr6350";
+};
+
+&wifi1 {
+	status = "okay";
+	qcom,ath10k-calibration-variant = "linksys-mr6350";
+};
+
+&swport1 {
+	label = "wan";
+};
+
+&swport2 {
+	label = "lan1";
+};
+
+&swport3 {
+	label = "lan2";
+};
+
+&swport4 {
+	label = "lan3";
+};
+
+&swport5 {
+	label = "lan4";
+};
diff --git a/target/linux/ipq40xx/image/generic.mk b/target/linux/ipq40xx/image/generic.mk
index 8961d7faf7..e13ffa498c 100644
--- a/target/linux/ipq40xx/image/generic.mk
+++ b/target/linux/ipq40xx/image/generic.mk
@@ -714,6 +714,23 @@ define Device/linksys_ea8300
 endef
 TARGET_DEVICES += linksys_ea8300
 
+define Device/linksys_mr6350
+	$(call Device/FitzImage)
+	$(call Device/kernel-size-6350-8300)
+	DEVICE_VENDOR := Linksys
+	DEVICE_MODEL := MR6350
+	SOC := qcom-ipq4019
+	KERNEL_SIZE := 5120k
+	IMAGE_SIZE := 84992k
+	BLOCKSIZE := 128k
+	PAGESIZE := 2048
+	UBINIZE_OPTS := -E 5    # EOD marks to "hide" factory sig at EOF
+	IMAGES += factory.bin
+	IMAGE/factory.bin  := append-kernel | pad-to $$(KERNEL_SIZE) | append-ubi | linksys-image type=MR6350
+	DEVICE_PACKAGES := ipq-wifi-linksys_mr6350 kmod-usb-ledtrig-usbport
+endef
+TARGET_DEVICES += linksys_mr6350
+
 define Device/linksys_mr8300
 	$(call Device/FitzImage)
 	$(call Device/kernel-size-6350-8300)

All credit goes to @RolandoMagico.
Build-tested, not run-tested.

Don't ask me to share prebuilt images, please, I will never share untested binaries.

      Thank you very much for continuing with the project and for the router being able to officially install OPEWRT. Where can I download the latest version 24.10.4)?

Thank you very much for continuing with the project and awaiting an official OPEWRT image. Where can I download the latest version (24.10.4)?

In the "too busy" link in @wfgriffin88 post above, @RolandoMagico closed the issue - he is not going to submit.

"Don't ask me to share prebuilt images, please, I will never share untested bina
ries."

Without getting into the ego's involved, I think it's nuts to have all the infrastructure for the MR6350 in place and not have it committed to the project. And
before I get snobbish comments about 5 year old hardware, this device is more than adequate for a good chunk of the population. I'm in a rural U.S., West Coast community and don't have fiber, just 500Mb cable. Secure, privacy oriented code is reason enough for OpenWRT on older devices. On top of that, the project already supports similar hardware.

Options:

  1. I would be willing to test @Shine images. @denisr24 might also - I won't speak
    for him. I would add @rwl408 as a developer as he did the initial case opening
    photos, boot log, chipset ID and built a 22.04 base image that is also useful as a bridge install.
  2. I can build Main, test and submit a patch via email. My understanding is that email submissions are still looked at and this is a one-off for me. I have an older AMD am2 that I can put Debian on as a build box.

Excellent, I look forward to your updated compilation.

I happen to acquire a Linksys MR6350 recently so I am interested to join the new build test also.

For what is worth: IPQ4019-based WiFi-5 router can still provide decent performance nowadays, able to reach 600 Mbps DL throughput if you have a 1Gbps WAN connection. Not bad at all. If you just want to add another WiFi AP (think like Deco M5) in addition to existing wired/wifi router, this is more than good enough.

We can more or less borrow the information from MR8300 Wiki page, as example, in the 2-step installation procedure. Let me know if I can be of any help.