On Fri, 31 Oct 2025 at 00:47, J. Scott Heppler <[email protected]> wrote: > > Developer Credits: > Many contributed as detailed in "https://forum.openwrt.org/t/ > adding-openwrt-support-for-linksys-mr6350/82812". > Contributors of note: @rolandomagico, @rwl408, @Shine > > Device Specs: > > IPQ4019 > Quad Core CPU > 256 MB RAM > 256 MB FLASH > 4 x 10/100/100 LAN ports, 1 x 10/100/1000 WAN port > 2.4GHz (802.11n) and 5GHz (802.11c) wifi based on ath10k > 3 LEDs (Red, blue, green) which are routed to one indicator at the top > of the case > 2 buttons (Reset, WPS) > Dual boot with booted image changing after the 3rd boot > > Disassembling the device: > > There are 4 screws at the bottom of the device which must be removed > Front Two, one under each front rubber foot pad > Two are under the labels in the back (corner next to the rear rubber > foot pads) > Photos in post 16 in the forum thread linked above > > Serial interface: > > The serial interface is already populated on the device with a 6-pin > header > Pin 1 is next to the heatsink > Pinout: 1: 3.3V, 2: TX, 3: RX, 4: unknown, 5: GND, 6: GND > Settings: 115200, 8N1 > Photo in post 16 of the forum thread > > Two ways to Migrate to OpenWrt each requiring multiple steps: > > Installation overview: > > For initial flash, aflash an image that has a <3MB kernel must be used > Can either be done by tftp+serial or OEM forced firmware flash. Once > the image loaded, ssh [email protected] and edit kernel size in fw_env > Then can use the either the Luci Administration firmware flash, or > command line to install the *factory*.bin > > tftp+serial: > > The @rwl408 images, linked in post 25 were tested with both > tftp+serial and OEM force flash. This image is not fully functional > but > does boot, allow ssh access, editing fw_env kernsize and finally > flashing the sysupgrade image > > Connect serial interface > Set up a TFTP server on IP 192.168.1.254 > Copy openwrt-ipq40xx-generic-linksys_mr6350-initramfs-zImage.itb > to TFTP server > Rename file to C0A80101.img > Boot up the device and stop in U-Boot > Run the following U-Boot commands after a link has been established: > "tftp" "bootm" > initramfs image should be started now. > > OEM firmware flash - tested with OEM firmware 1.1.3.216612 > username:password = admin:admin > select "ca" on the bottom > "Configuration" window should allow browsing to @rwl408 factory image: > Select and force upload. Reboot into the 22.04 OpenWRT image > > Adjust U-Boot settings to support bigger kernels: > > ssh [email protected] > Run "fw_printenv" in the image after booting > There should be an entry kernsize=300000 which indicates the maximum > size for the kernel is 3MB > When resetting the kernsize, do not reflexively insert an "=". > It will brick the router > Execute "fw_setenv kernsize 500000" to increase the max kernel size to > 5MB > Check that the change are applied with "fw_printenv" > > Flash the final image: > > Use *factory*.bin image. > > Dual boot settings: > > Consider the luci-app-advanced-reboot package and use it to > reboot/shutdown. > Alternatively, append the following commands to /etc/rc.local > to reset the bootcount to zero > "/rom/sbin/mtd unlock s_env" > "/rom/sbin/mtd erase s_env" > Note that the default /etc/rc.local file is -rw-rw-r--. > chmod 0774 /etc/rc.local to execute on boot. Test with > "sh /etc/rc.local" > > Revert back to OEM firmware: > > Only tested with FW_MR6350_1.1.3.210129_prod.img > Flash the OEM firmware via sysupgrade > Forced update is required in the OEM interface > > Signed-off-by: "J. Scott Heppler" <[email protected]> > Tested-by: "J. Scott Heppler" <[email protected]>
Hi, There is already an pending PR for this device: https://github.com/openwrt/openwrt/pull/17977 Regards, Robert > > 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 ba953216f5..f3f43e0584 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|\ > @@ -218,6 +219,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 3f68c0a60e..3eda947100 100644 > --- a/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh > +++ b/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh > @@ -165,6 +165,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..d936e720e4 > --- /dev/null > +++ > b/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4019-mr6350.dts > @@ -0,0 +1,114 @@ > +// 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; > + }; > + > + // 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 eeab128008..398419c0dd 100644 > --- a/target/linux/ipq40xx/image/generic.mk > +++ b/target/linux/ipq40xx/image/generic.mk > @@ -705,6 +705,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) > > > _______________________________________________ > openwrt-devel mailing list > [email protected] > https://lists.openwrt.org/mailman/listinfo/openwrt-devel _______________________________________________ openwrt-devel mailing list [email protected] https://lists.openwrt.org/mailman/listinfo/openwrt-devel
