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
initramfsimage 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
sysupgradeimage 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.