diff mbox series

[v1,4/4] ramips: add support for TP-Link MR6400 v4

Message ID e8e30e152ce73c5c50da6f3bef8d6174afa7d5a9.1605364389.git.lede@moc6.cz
State Superseded
Headers show
Series [v1,1/4] uqmi: add support for IPv4 autoconf from QMI | expand

Commit Message

Filip Moc Nov. 17, 2020, 11:33 a.m. UTC
You can flash via tftp recovery:
 - serve tftp-recovery image as /tp_recovery.bin on 192.168.0.225/24
 - connect to any ethernet port
 - power on the device while holding the reset button
 - wait at least 8 seconds before releasing reset button

Flashing via OEM web interface does not work.

LTE module does not support DHCP so it must be configured via QMI.

Hardware Specification (v4.0 EU):
 - SoC: MT7628NN
 - Flash: Winbond W25Q64JVS (8MiB)
 - RAM: ESMT M14D5121632A (64MiB)
 - Wireless: SoC platform only (2.4GHz b/g/n, 2x internal antenna)
 - Ethernet: 1NIC (4x100M)
 - WWAN: TP-LINK LTE MODULE (2x external detachable antenna)
 - Power: DC 9V 0.85A

Signed-off-by: Filip Moc <lede@moc6.cz>
---

Notes:
    Bugs:
      This device is affected by first uqmi command hang.
      This causes qmi proto to hang sometimes when setting up wwan connection for
      the first time after boot.
      There is already a patch [1] which aims to fix this.
      So far it can be manually restarted or workarounded by editing qmi.sh [2].
    
    There are also some other issues with LTE module which are addressed by
    preceding patches.
    
    [1] https://patchwork.ozlabs.org/project/openwrt/patch/20191107115408.13013-1-zefir.kurtisi@neratec.com/
    [2] https://forum.openwrt.org/t/solved-lte-qmi-troubles/28379

 .../dts/mt7628an_tplink_tl-mr6400-v4.dts      | 97 +++++++++++++++++++
 target/linux/ramips/image/mt76x8.mk           | 16 +++
 .../mt76x8/base-files/etc/board.d/01_leds     |  5 +
 .../mt76x8/base-files/etc/board.d/02_network  |  4 +
 4 files changed, 122 insertions(+)
 create mode 100644 target/linux/ramips/dts/mt7628an_tplink_tl-mr6400-v4.dts

Comments

Adrian Schmutzler Nov. 17, 2020, 11:53 a.m. UTC | #1
Hi,

> -----Original Message-----
> From: openwrt-devel [mailto:openwrt-devel-bounces@lists.openwrt.org]
> On Behalf Of Filip Moc
> Sent: Dienstag, 17. November 2020 12:34
> To: openwrt-devel@lists.openwrt.org
> Subject: [PATCH v1 4/4] ramips: add support for TP-Link MR6400 v4
> 
> You can flash via tftp recovery:
>  - serve tftp-recovery image as /tp_recovery.bin on 192.168.0.225/24
>  - connect to any ethernet port
>  - power on the device while holding the reset button
>  - wait at least 8 seconds before releasing reset button
> 
> Flashing via OEM web interface does not work.
> 
> LTE module does not support DHCP so it must be configured via QMI.
> 
> Hardware Specification (v4.0 EU):
>  - SoC: MT7628NN
>  - Flash: Winbond W25Q64JVS (8MiB)
>  - RAM: ESMT M14D5121632A (64MiB)
>  - Wireless: SoC platform only (2.4GHz b/g/n, 2x internal antenna)
>  - Ethernet: 1NIC (4x100M)
>  - WWAN: TP-LINK LTE MODULE (2x external detachable antenna)
>  - Power: DC 9V 0.85A
> 
> Signed-off-by: Filip Moc <lede@moc6.cz>
> ---
> 
> Notes:
>     Bugs:
>       This device is affected by first uqmi command hang.
>       This causes qmi proto to hang sometimes when setting up wwan
> connection for
>       the first time after boot.
>       There is already a patch [1] which aims to fix this.
>       So far it can be manually restarted or workarounded by editing qmi.sh [2].
> 
>     There are also some other issues with LTE module which are addressed by
>     preceding patches.
> 
>     [1]
> https://patchwork.ozlabs.org/project/openwrt/patch/20191107115408.1301
> 3-1-zefir.kurtisi@neratec.com/
>     [2] https://forum.openwrt.org/t/solved-lte-qmi-troubles/28379
> 
>  .../dts/mt7628an_tplink_tl-mr6400-v4.dts      | 97 +++++++++++++++++++
>  target/linux/ramips/image/mt76x8.mk           | 16 +++
>  .../mt76x8/base-files/etc/board.d/01_leds     |  5 +
>  .../mt76x8/base-files/etc/board.d/02_network  |  4 +
>  4 files changed, 122 insertions(+)
>  create mode 100644 target/linux/ramips/dts/mt7628an_tplink_tl-mr6400-
> v4.dts
> 
> diff --git a/target/linux/ramips/dts/mt7628an_tplink_tl-mr6400-v4.dts
> b/target/linux/ramips/dts/mt7628an_tplink_tl-mr6400-v4.dts
> new file mode 100644
> index 0000000000..9dc71ffd9e
> --- /dev/null
> +++ b/target/linux/ramips/dts/mt7628an_tplink_tl-mr6400-v4.dts
> @@ -0,0 +1,97 @@
> +#include "mt7628an_tplink_8m.dtsi"
> +
> +/ {
> +	compatible = "tplink,tl-mr6400-v4", "mediatek,mt7628an-soc";
> +	model = "TP-Link TL-MR6400 v4";
> +
> +	aliases {
> +		led-boot = &led_power;
> +		led-failsafe = &led_power;
> +		led-running = &led_power;
> +		led-upgrade = &led_power;
> +	};
> +
> +	keys {
> +		compatible = "gpio-keys";
> +
> +		reset {
> +			label = "reset";
> +			gpios = <&gpio 38 GPIO_ACTIVE_LOW>;
> +			linux,code = <KEY_RESTART>;
> +		};
> +
> +		rfkill {
> +			label = "rfkill";
> +			gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
> +			linux,code = <KEY_RFKILL>;
> +		};
> +	};
> +
> +	leds {
> +		compatible = "gpio-leds";
> +
> +		led_power: power {
> +			label = "white:power";
> +			gpios = <&gpio 37 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		wan {
> +			label = "white:wan";
> +			gpios = <&gpio 39 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		wlan {
> +			label = "white:wlan";
> +			gpios = <&gpio 40 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		lan {
> +			label = "white:lan";
> +			gpios = <&gpio 41 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		signal1 {
> +			label = "white:signal1";
> +			gpios = <&gpio 42 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		signal2 {
> +			label = "white:signal2";
> +			gpios = <&gpio 43 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		signal3 {
> +			label = "white:signal3";
> +			gpios = <&gpio 44 GPIO_ACTIVE_LOW>;
> +		};
> +	};
> +};
> +
> +&ehci {
> +	status = "okay";
> +};
> +
> +&ohci {
> +	status = "okay";
> +};
> +
> +&state_default {
> +	gpio {
> +		groups = "p0led_an", "p1led_an", "p2led_an", "p3led_an",
> "p4led_an", "refclk", "uart1", "wdt", "wled_an";
> +		function = "gpio";
> +	};
> +};
> +
> +&esw {
> +	mediatek,portmap = <0x2f>;
> +	mediatek,portdisable = <0x21>;
> +};
> +
> +

Remove second empty line here.

> +&wmac {
> +	mtd-mac-address = <&factory 0x1f100>;
> +};
> +
> +&ethernet {
> +	mtd-mac-address = <&factory 0x1f100>;
> +};
> diff --git a/target/linux/ramips/image/mt76x8.mk
> b/target/linux/ramips/image/mt76x8.mk
> index 6327c95bb0..f3b25bf189 100644
> --- a/target/linux/ramips/image/mt76x8.mk
> +++ b/target/linux/ramips/image/mt76x8.mk
> @@ -473,6 +473,22 @@ define Device/tplink_tl-mr3420-v5  endef
> TARGET_DEVICES += tplink_tl-mr3420-v5
> 
> +define Device/tplink_tl-mr6400-v4
> +  $(Device/tplink-v2)
> +  IMAGE_SIZE := 7808k
> +  DEVICE_MODEL := TL-MR6400
> +  DEVICE_VARIANT := v4
> +  TPLINK_FLASHLAYOUT := 8Mmtk
> +  TPLINK_HWID := 0x64000004
> +  TPLINK_HWREV := 0x4
> +  TPLINK_HWREVADD := 0x4
> +  DEVICE_PACKAGES := kmod-usb2 kmod-usb-ohci kmod-usb-ledtrig-
> usbport \

I don't see a usb trigger anywhere? Is this needed?

> +	kmod-usb-serial kmod-usb-serial-option kmod-usb-net-qmi-wwan
> uqmi
> +  IMAGES := sysupgrade.bin tftp-recovery.bin
> +  IMAGE/tftp-recovery.bin := pad-extra 128k | $$(IMAGE/factory.bin)
> +endef TARGET_DEVICES += tplink_tl-mr6400-v4
> +
>  define Device/tplink_tl-wa801nd-v5
>    $(Device/tplink-v2)
>    IMAGE_SIZE := 7808k
> diff --git a/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
> b/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
> index e1c3454237..5475052833 100755
> --- a/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
> +++ b/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
> @@ -75,6 +75,11 @@ tplink,tl-wr842n-v5)
>  	ucidef_set_led_switch "lan" "lan" "green:lan" "switch0" "0x1e"
>  	ucidef_set_led_switch "wan" "wan" "green:wan" "switch0" "0x01"
>  	;;
> +tplink,tl-mr6400-v4)
> +	ucidef_set_led_wlan "wlan2g" "wlan2g" "white:wlan" "phy0tpt"

A DT trigger for WiFi LED would be preferred.

> +	ucidef_set_led_switch "lan" "lan" "white:lan" "switch0" "0x0e"
> +	ucidef_set_led_switch "wan" "wan" "white:wan" "switch0" "0x10"
> +	;;
>  tplink,tl-wr841n-v13)
>  	ucidef_set_led_wlan "wlan2g" "wlan2g" "green:wlan" "phy0tpt"
>  	ucidef_set_led_switch "lan1" "lan1" "green:lan1" "switch0" "0x2"
> diff --git a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
> b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
> index 2cda818b2a..9ed0b967f5 100755
> --- a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
> +++ b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
> @@ -82,6 +82,10 @@ ramips_setup_interfaces()
>  		ucidef_add_switch "switch0" \
>  			"1:lan" "2:lan" "3:lan" "4:lan" "0:wan" "6@eth0"
>  		;;
> +	tplink,tl-mr6400-v4)
> +		ucidef_add_switch "switch0" \
> +			"1:lan" "2:lan" "3:lan" "4:wan" "6@eth0"
> +		;;

Please move to match alphabetic sorting with respect to the first entry in each node.

Best

Adrian

>  	hiwifi,hc5761a)
>  		ucidef_add_switch "switch0" \
>  			"0:lan" "1:lan" "4:wan" "6@eth0"
> --
> 2.28.0
> 
> 
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel@lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel
Filip Moc Nov. 18, 2020, 8:07 p.m. UTC | #2
Hi Adrian,

I updated patches 1,2,4 to address your comments.

As for this
> > +  DEVICE_PACKAGES := kmod-usb2 kmod-usb-ohci kmod-usb-ledtrig-
> > usbport \
> 
> I don't see a usb trigger anywhere? Is this needed?
> 
> > +	kmod-usb-serial kmod-usb-serial-option kmod-usb-net-qmi-wwan
> > uqmi

Indeed usbport ledtrig is not used by default. But since this is router
with embedded LTE module I guess that users would most likely want to
set this trigger to some LED (e.g. wan or some signal LED).
Same could be said for QMI which is in fact not needed by default too.
But I guess that since this is router with embedded LTE module users
will most likely want this installed.

There is a significant difference though. If you reset your device and
your only connection is GSM you can install usbport ledtrig after you
set up your connection. Without qmi you're pretty much doomed.

So I think it's convinient to have usbport ledtrig preinstalled though
when compared to qmi it's far less necessary.
Anyway if different set of packages is preferred I will update it.

Filip
diff mbox series

Patch

diff --git a/target/linux/ramips/dts/mt7628an_tplink_tl-mr6400-v4.dts b/target/linux/ramips/dts/mt7628an_tplink_tl-mr6400-v4.dts
new file mode 100644
index 0000000000..9dc71ffd9e
--- /dev/null
+++ b/target/linux/ramips/dts/mt7628an_tplink_tl-mr6400-v4.dts
@@ -0,0 +1,97 @@ 
+#include "mt7628an_tplink_8m.dtsi"
+
+/ {
+	compatible = "tplink,tl-mr6400-v4", "mediatek,mt7628an-soc";
+	model = "TP-Link TL-MR6400 v4";
+
+	aliases {
+		led-boot = &led_power;
+		led-failsafe = &led_power;
+		led-running = &led_power;
+		led-upgrade = &led_power;
+	};
+
+	keys {
+		compatible = "gpio-keys";
+
+		reset {
+			label = "reset";
+			gpios = <&gpio 38 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_RESTART>;
+		};
+
+		rfkill {
+			label = "rfkill";
+			gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_RFKILL>;
+		};
+	};
+
+	leds {
+		compatible = "gpio-leds";
+
+		led_power: power {
+			label = "white:power";
+			gpios = <&gpio 37 GPIO_ACTIVE_LOW>;
+		};
+
+		wan {
+			label = "white:wan";
+			gpios = <&gpio 39 GPIO_ACTIVE_LOW>;
+		};
+
+		wlan {
+			label = "white:wlan";
+			gpios = <&gpio 40 GPIO_ACTIVE_LOW>;
+		};
+
+		lan {
+			label = "white:lan";
+			gpios = <&gpio 41 GPIO_ACTIVE_LOW>;
+		};
+
+		signal1 {
+			label = "white:signal1";
+			gpios = <&gpio 42 GPIO_ACTIVE_LOW>;
+		};
+
+		signal2 {
+			label = "white:signal2";
+			gpios = <&gpio 43 GPIO_ACTIVE_LOW>;
+		};
+
+		signal3 {
+			label = "white:signal3";
+			gpios = <&gpio 44 GPIO_ACTIVE_LOW>;
+		};
+	};
+};
+
+&ehci {
+	status = "okay";
+};
+
+&ohci {
+	status = "okay";
+};
+
+&state_default {
+	gpio {
+		groups = "p0led_an", "p1led_an", "p2led_an", "p3led_an", "p4led_an", "refclk", "uart1", "wdt", "wled_an";
+		function = "gpio";
+	};
+};
+
+&esw {
+	mediatek,portmap = <0x2f>;
+	mediatek,portdisable = <0x21>;
+};
+
+
+&wmac {
+	mtd-mac-address = <&factory 0x1f100>;
+};
+
+&ethernet {
+	mtd-mac-address = <&factory 0x1f100>;
+};
diff --git a/target/linux/ramips/image/mt76x8.mk b/target/linux/ramips/image/mt76x8.mk
index 6327c95bb0..f3b25bf189 100644
--- a/target/linux/ramips/image/mt76x8.mk
+++ b/target/linux/ramips/image/mt76x8.mk
@@ -473,6 +473,22 @@  define Device/tplink_tl-mr3420-v5
 endef
 TARGET_DEVICES += tplink_tl-mr3420-v5
 
+define Device/tplink_tl-mr6400-v4
+  $(Device/tplink-v2)
+  IMAGE_SIZE := 7808k
+  DEVICE_MODEL := TL-MR6400
+  DEVICE_VARIANT := v4
+  TPLINK_FLASHLAYOUT := 8Mmtk
+  TPLINK_HWID := 0x64000004
+  TPLINK_HWREV := 0x4
+  TPLINK_HWREVADD := 0x4
+  DEVICE_PACKAGES := kmod-usb2 kmod-usb-ohci kmod-usb-ledtrig-usbport \
+	kmod-usb-serial kmod-usb-serial-option kmod-usb-net-qmi-wwan uqmi
+  IMAGES := sysupgrade.bin tftp-recovery.bin
+  IMAGE/tftp-recovery.bin := pad-extra 128k | $$(IMAGE/factory.bin)
+endef
+TARGET_DEVICES += tplink_tl-mr6400-v4
+
 define Device/tplink_tl-wa801nd-v5
   $(Device/tplink-v2)
   IMAGE_SIZE := 7808k
diff --git a/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds b/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
index e1c3454237..5475052833 100755
--- a/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
+++ b/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
@@ -75,6 +75,11 @@  tplink,tl-wr842n-v5)
 	ucidef_set_led_switch "lan" "lan" "green:lan" "switch0" "0x1e"
 	ucidef_set_led_switch "wan" "wan" "green:wan" "switch0" "0x01"
 	;;
+tplink,tl-mr6400-v4)
+	ucidef_set_led_wlan "wlan2g" "wlan2g" "white:wlan" "phy0tpt"
+	ucidef_set_led_switch "lan" "lan" "white:lan" "switch0" "0x0e"
+	ucidef_set_led_switch "wan" "wan" "white:wan" "switch0" "0x10"
+	;;
 tplink,tl-wr841n-v13)
 	ucidef_set_led_wlan "wlan2g" "wlan2g" "green:wlan" "phy0tpt"
 	ucidef_set_led_switch "lan1" "lan1" "green:lan1" "switch0" "0x2"
diff --git a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
index 2cda818b2a..9ed0b967f5 100755
--- a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
+++ b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
@@ -82,6 +82,10 @@  ramips_setup_interfaces()
 		ucidef_add_switch "switch0" \
 			"1:lan" "2:lan" "3:lan" "4:lan" "0:wan" "6@eth0"
 		;;
+	tplink,tl-mr6400-v4)
+		ucidef_add_switch "switch0" \
+			"1:lan" "2:lan" "3:lan" "4:wan" "6@eth0"
+		;;
 	hiwifi,hc5761a)
 		ucidef_add_switch "switch0" \
 			"0:lan" "1:lan" "4:wan" "6@eth0"