diff mbox series

[OpenWrt-Devel] ramips: add support for Xiaomi Mi Wi-Fi Router 3G v2

Message ID 20190813165904.1988-1-fercerpav@gmail.com
State Changes Requested
Headers show
Series [OpenWrt-Devel] ramips: add support for Xiaomi Mi Wi-Fi Router 3G v2 | expand

Commit Message

Paul Fertser Aug. 13, 2019, 4:59 p.m. UTC
- CMIIT ID: 2019AP2581
- SoC:      MediaTek MT7621
- Flash:    16MiB NOR SPI (GigaDevice GD25Q128B)
- RAM:      128MiB DDR3 (ESMT M15T1G1664A)
- Serial:   As marked on PCB, 3V3 logic, baudrate is 115200, 8n1
- Ethernet: 3x 10/100/1000 Mbps (switched, 2xLAN + WAN)
- WIFI0:    MT7603E 2.4GHz 802.11b/g/n
- WIFI1:    MT7612E 5GHz 802.11ac
- Antennas: 4x external (2 per radio), non-detachable
- LEDs:     Programmable "power" LED (two-coloured, yellow/blue)
            Non-programmable "internet" LED (shows WAN activity)
- Buttons:  Reset

INSTALLATION:

Bootloader won't accept any serial input unless "boot_wait" u-boot
environment variable is changed to "on". Vendor firmware (looks like
an illegal OpenWrt fork) won't accept any serial input unless
"uart_en" is set to "1". Tricks to force u-boot to use default
environment do not help as it's restricted in the same way.

With bootloader unlocked the easiest way would be to TFTP the
sysupgrade image or to sysupgrade after loading an initramfs one.

For porting the flash contents were changed externally with an SPI
programmer (after lifting Vcc flash IC pin away from the PCB).

Signed-off-by: Paul Fertser <fercerpav@gmail.com>
---
 .../linux/ramips/base-files/etc/board.d/02_network |   4 +
 target/linux/ramips/dts/mt7621_xiaomi_mir3gv2.dts  | 147 +++++++++++++++++++++
 target/linux/ramips/image/mt7621.mk                |  10 ++
 3 files changed, 161 insertions(+)
 create mode 100644 target/linux/ramips/dts/mt7621_xiaomi_mir3gv2.dts

Comments

Adrian Schmutzler Aug. 13, 2019, 5:20 p.m. UTC | #1
> -----Original Message-----
> From: openwrt-devel [mailto:openwrt-devel-bounces@lists.openwrt.org] On Behalf Of Paul Fertser
> Sent: Dienstag, 13. August 2019 18:59
> To: John Crispin <john@phrozen.org>
> Cc: Paul Fertser <fercerpav@gmail.com>; openwrt-devel@lists.openwrt.org
> Subject: [OpenWrt-Devel] [PATCH] ramips: add support for Xiaomi Mi Wi-Fi Router 3G v2
> 

Hi,

just some comments without deeper review:

> diff --git a/target/linux/ramips/dts/mt7621_xiaomi_mir3gv2.dts b/target/linux/ramips/dts/mt7621_xiaomi_mir3gv2.dts
> new file mode 100644
> index 0000000000..81f6d20ae8
> --- /dev/null
> +++ b/target/linux/ramips/dts/mt7621_xiaomi_mir3gv2.dts
> @@ -0,0 +1,147 @@
> +/dts-v1/;
> +
> +#include "mt7621.dtsi"
> +
> +#include <dt-bindings/gpio/gpio.h>
> +#include <dt-bindings/input/input.h>
> +
> +/ {
> +	compatible = "xiaomi,mir3gv2", "mediatek,mt7621-soc";
> +	model = "Xiaomi Mi Router 3G v2";

Please separate the version with a minus, so "xiaomi,mir3g-v2" for compatible and "xiaomi_mir3g-v2" for device node in .mk file. (Update 02_network, too ...)

> +	button {
> +		compatible = "gpio-keys-polled";
> +		poll-interval = <20>;

Try "gpio-keys" here and remove poll-interval ...

> +&ethernet {
> +	mtd-mac-address = <&factory 0xe000>;

Is there also a second MAC address for WAN in 0xe006 or somewhere else nearby? Can the WAN MAC address be read somewhere else from flash?
I would like to avoid setting wan_mac by the default case in 02_network.

> +define Device/xiaomi_mir3gv2
> +  MTK_SOC := mt7621
> +  IMAGE_SIZE := 14848k
> +  DEVICE_VENDOR := Xiaomi
> +  DEVICE_MODEL := Mi router 3G v2

Capitalize "router". Despite, use DEVICE_VARIANT, so:

+  DEVICE_MODEL := Mi Router 3G
+  DEVICE_VARIANT := v2

> +  SUPPORTED_DEVICES += mir3gv2

Drop this line.

Best

Adrian
Paul Fertser Aug. 13, 2019, 6:25 p.m. UTC | #2
Adrian, thank you for the review indeed.

The factory partition has a MAC that matches printed label at the
location you guessed, thanks for pointing that out.

From: Paul Fertser <fercerpav@gmail.com>
Date: Tue, 13 Aug 2019 18:57:39 +0300
Subject: [PATCH v2] ramips: add support for Xiaomi Mi Wi-Fi Router 3G v2

- CMIIT ID: 2019AP2581
- SoC:      MediaTek MT7621
- Flash:    16MiB NOR SPI (GigaDevice GD25Q128B)
- RAM:      128MiB DDR3 (ESMT M15T1G1664A)
- Serial:   As marked on PCB, 3V3 logic, baudrate is 115200, 8n1
- Ethernet: 3x 10/100/1000 Mbps (switched, 2xLAN + WAN)
- WIFI0:    MT7603E 2.4GHz 802.11b/g/n
- WIFI1:    MT7612E 5GHz 802.11ac
- Antennas: 4x external (2 per radio), non-detachable
- LEDs:     Programmable "power" LED (two-coloured, yellow/blue)
            Non-programmable "internet" LED (shows WAN activity)
- Buttons:  Reset

INSTALLATION:

Bootloader won't accept any serial input unless "boot_wait" u-boot
environment variable is changed to "on". Vendor firmware (looks like
an illegal OpenWrt fork) won't accept any serial input unless
"uart_en" is set to "1". Tricks to force u-boot to use default
environment do not help as it's restricted in the same way.

With bootloader unlocked the easiest way would be to TFTP the
sysupgrade image or to sysupgrade after loading an initramfs one.

For porting the flash contents were changed externally with an SPI
programmer (after lifting Vcc flash IC pin away from the PCB).

Signed-off-by: Paul Fertser <fercerpav@gmail.com>
---

Changes since v1:

- Addressed all Adrian Schmutzl's comments

Gave this version quick runtime testing, everything seems to be fine.

 .../linux/ramips/base-files/etc/board.d/02_network |   7 +
 target/linux/ramips/dts/mt7621_xiaomi_mir3g-v2.dts | 146 +++++++++++++++++++++
 target/linux/ramips/image/mt7621.mk                |  10 ++
 3 files changed, 163 insertions(+)
 create mode 100644 target/linux/ramips/dts/mt7621_xiaomi_mir3g-v2.dts

diff --git a/target/linux/ramips/base-files/etc/board.d/02_network b/target/linux/ramips/base-files/etc/board.d/02_network
index ca111c9d4c..3ffc684139 100755
--- a/target/linux/ramips/base-files/etc/board.d/02_network
+++ b/target/linux/ramips/base-files/etc/board.d/02_network
@@ -464,6 +464,10 @@ ramips_setup_interfaces()
 		ucidef_add_switch "switch0" \
 			"2:lan:2" "3:lan:1" "1:wan" "6t@eth0"
 		;;
+	xiaomi,mir3g-v2)
+		ucidef_add_switch "switch0" \
+			"2:lan:2" "3:lan:1" "4:wan" "6t@eth0"
+		;;
 	xiaomi,mir3p)
 		ucidef_add_switch "switch0" \
 			"1:lan:3" "2:lan:2" "3:lan:1" "4:wan" "6@eth0"
@@ -675,6 +679,9 @@ ramips_setup_macs()
 	xiaomi,mir3p)
 		lan_mac=$(mtd_get_mac_binary factory 0xe006)
 		;;
+	xiaomi,mir3g-v2)
+		wan_mac=$(mtd_get_mac_binary factory 0xe006)
+		;;
 	xiaomi,miwifi-mini)
 		lan_mac=$(macaddr_setbit_la "$(cat /sys/class/net/eth0/address)")
 		;;
diff --git a/target/linux/ramips/dts/mt7621_xiaomi_mir3g-v2.dts b/target/linux/ramips/dts/mt7621_xiaomi_mir3g-v2.dts
new file mode 100644
index 0000000000..a1963d0072
--- /dev/null
+++ b/target/linux/ramips/dts/mt7621_xiaomi_mir3g-v2.dts
@@ -0,0 +1,146 @@
+/dts-v1/;
+
+#include "mt7621.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+/ {
+	compatible = "xiaomi,mir3g-v2", "mediatek,mt7621-soc";
+	model = "Xiaomi Mi Router 3G v2";
+
+	aliases {
+		led-boot = &led_status_yellow;
+		led-failsafe = &led_status_yellow;
+		led-running = &led_status_blue;
+		led-upgrade = &led_status_yellow;
+	};
+
+	chosen {
+		bootargs = "console=ttyS0,115200n8";
+	};
+
+	leds {
+		compatible = "gpio-leds";
+
+		led_status_blue: status_blue {
+			label = "mir3gv2:blue:status";
+			gpios = <&gpio0 8 GPIO_ACTIVE_LOW>;
+		};
+
+		led_status_yellow: status_yellow {
+			label = "mir3gv2:yellow:status";
+			gpios = <&gpio0 10 GPIO_ACTIVE_LOW>;
+		};
+	};
+
+	button {
+		compatible = "gpio-keys";
+
+		reset {
+			label = "reset";
+			gpios = <&gpio0 18 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_RESTART>;
+		};
+	};
+};
+
+&spi0 {
+	status = "okay";
+
+	m25p80@0 {
+		compatible = "jedec,spi-nor";
+		reg = <0>;
+		spi-max-frequency = <80000000>;
+
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			partition@0 {
+				label = "u-boot";
+				reg = <0x0 0x30000>;
+				read-only;
+			};
+
+			partition@30000 {
+				label = "u-boot-env";
+				reg = <0x30000 0x10000>;
+				read-only;
+			};
+
+			partition@40000 {
+				label = "Bdata";
+				reg = <0x40000 0x10000>;
+				read-only;
+			};
+
+			factory: partition@50000 {
+				label = "factory";
+				reg = <0x50000 0x10000>;
+				read-only;
+			};
+
+			partition@60000 {
+				label = "crash";
+				reg = <0x60000 0x10000>;
+				read-only;
+			};
+
+			partition@70000 {
+				label = "cfg_bak";
+				reg = <0x70000 0x10000>;
+				read-only;
+			};
+
+			partition@80000 {
+				label = "overlay";
+				reg = <0x80000 0x100000>;
+				read-only;
+			};
+
+			firmware: partition@180000 {
+				compatible = "denx,uimage";
+				label = "firmware";
+				reg = <0x180000 0xe80000>;
+			};
+		};
+	};
+};
+
+&pcie {
+	status = "okay";
+};
+
+&pcie0 {
+	wifi@0,0 {
+		compatible = "pci14c3,7662";
+		reg = <0x0000 0 0 0 0>;
+		mediatek,mtd-eeprom = <&factory 0x8000>;
+		ieee80211-freq-limit = <5000000 6000000>;
+	};
+};
+
+&pcie1 {
+	wifi@0,0 {
+		compatible = "pci14c3,7603";
+		reg = <0x0000 0 0 0 0>;
+		mediatek,mtd-eeprom = <&factory 0x0000>;
+		ieee80211-freq-limit = <2400000 2500000>;
+	};
+};
+
+&ethernet {
+	mtd-mac-address = <&factory 0xe000>;
+	mediatek,portmap = "lllwl";
+};
+
+&pinctrl {
+	state_default: pinctrl0 {
+		gpio {
+			ralink,group = "jtag", "uart2", "uart3", "wdt";
+			ralink,function = "gpio";
+		};
+	};
+};
diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk
index d32feb7eab..7d732e3c2e 100644
--- a/target/linux/ramips/image/mt7621.mk
+++ b/target/linux/ramips/image/mt7621.mk
@@ -656,6 +656,16 @@ define Device/xiaomi_mir3g
 endef
 TARGET_DEVICES += xiaomi_mir3g
 
+define Device/xiaomi_mir3g-v2
+  MTK_SOC := mt7621
+  IMAGE_SIZE := 14848k
+  DEVICE_VENDOR := Xiaomi
+  DEVICE_MODEL := Mi Router 3G
+  DEVICE_VARIANT := v2
+  DEVICE_PACKAGES := kmod-mt7603 kmod-mt76x2 wpad-basic
+endef
+TARGET_DEVICES += xiaomi_mir3g-v2
+
 define Device/xiaomi_mir3p
   MTK_SOC := mt7621
   BLOCKSIZE := 128k
Paul Fertser Aug. 13, 2019, 6:41 p.m. UTC | #3
On Tue, Aug 13, 2019 at 09:25:41PM +0300, Paul Fertser wrote:
> From: Paul Fertser <fercerpav@gmail.com>
> Date: Tue, 13 Aug 2019 18:57:39 +0300
> Subject: [PATCH v2] ramips: add support for Xiaomi Mi Wi-Fi Router 3G v2

OK, I messed it up, and this is not picked up by patchwork
properly. Please excuse me, I'll do better when sending the next
version after review.
Paul Fertser Aug. 22, 2019, 6:27 a.m. UTC | #4
Hello Adrian,

New question surfaced, please see inline.

On Tue, Aug 13, 2019 at 07:20:57PM +0200, Adrian Schmutzler wrote:
> > +define Device/xiaomi_mir3gv2
> > +  MTK_SOC := mt7621
> > +  IMAGE_SIZE := 14848k
> > +  DEVICE_VENDOR := Xiaomi
> > +  DEVICE_MODEL := Mi router 3G v2
> 
> Capitalize "router". Despite, use DEVICE_VARIANT, so:
> 
> +  DEVICE_MODEL := Mi Router 3G
> +  DEVICE_VARIANT := v2
> 
> > +  SUPPORTED_DEVICES += mir3gv2
> 
> Drop this line.

So apparently this "v2" is in fact an _officially_ relabled "Xiaomi Mi
Router 4A Gigabit Edition (R4AG/R4A Gigabit)", according to the
reports from [1] and the related thread on "4pda.ru" forum. Insane,
yes.

What course of actions would you recommend in this case?

TIA

[1] https://forum.openwrt.org/t/xiaomi-mi-router-4a-gigabit-edition-r4ag-r4a-gigabit-fully-supported-but-requires-overwriting-spi-flash-with-programmer/36685/41
Adrian Schmutzler Aug. 22, 2019, 9:18 a.m. UTC | #5
Hi,

> > > +  DEVICE_MODEL := Mi router 3G v2
> >
> > Capitalize "router". Despite, use DEVICE_VARIANT, so:
> >
> > +  DEVICE_MODEL := Mi Router 3G
> > +  DEVICE_VARIANT := v2
> >
> > > +  SUPPORTED_DEVICES += mir3gv2
> >
> > Drop this line.
> 
> So apparently this "v2" is in fact an _officially_ relabled "Xiaomi Mi Router 4A
> Gigabit Edition (R4AG/R4A Gigabit)", according to the reports from [1] and
> the related thread on "4pda.ru" forum. Insane, yes.
> 
> What course of actions would you recommend in this case?

Well, you essentially have two options then:

You could just add the new image anyway, if device names are different and there is a chance for taking the wrong image (i.e. mir3g because there is no v2), this is generally reasonable.

If the devices really are 100 % similar, you might instead want to exploit the syntax introduced in https://github.com/openwrt/openwrt/pull/2250 and just add
DEVICE_ALT0_VENDOR := Xiaomi
DEVICE_ALT0_MODEL := Mi Router 3G
DEVICE_ALT0_VARIANT := v2
to the existing configuration of the "Xiaomi Mi Router 4A Gigabit Edition (R4AG/R4A Gigabit)" (without adding a new device).

The second approach would have the advantage that you do not need to create the same image twice.
The disadvantage would be that the new name is only available in "make menuconfig" etc., i.e. when you build the image, but you won't get an additional image file with the new name.
Despite, the PR is already waiting for a long time, so this might additionally prolong your waiting (although device support typically has long waiting, too).

Since there is a "v1" for the mir3g, I personally would go for option 1 and just keep what you did so far.

Unless I misunderstood something, this has nothing to do with SUPPORTED_DEVICES which should be removed, unless Xiaomi ships an OpenWrt distro as vendor firmware.

Best

Adrian



> 
> TIA
> 
> [1] https://forum.openwrt.org/t/xiaomi-mi-router-4a-gigabit-edition-r4ag-
> r4a-gigabit-fully-supported-but-requires-overwriting-spi-flash-with-
> programmer/36685/41
> 
> --
> Be free, use free (http://www.gnu.org/philosophy/free-sw.html) software!
> mailto:fercerpav@gmail.com
Rafał Miłecki Aug. 22, 2019, 11:02 a.m. UTC | #6
On Tue, 13 Aug 2019 at 20:25, Paul Fertser <fercerpav@gmail.com> wrote:
> diff --git a/target/linux/ramips/dts/mt7621_xiaomi_mir3g-v2.dts b/target/linux/ramips/dts/mt7621_xiaomi_mir3g-v2.dts
> new file mode 100644
> index 0000000000..a1963d0072
> --- /dev/null
> +++ b/target/linux/ramips/dts/mt7621_xiaomi_mir3g-v2.dts
> @@ -0,0 +1,146 @@
> +/dts-v1/;
> +
> +#include "mt7621.dtsi"

Please specify .dts file license, see:
https://openwrt.org/submitting-patches#dts_checklist
Paul Fertser Aug. 22, 2019, 11:10 a.m. UTC | #7
Hey Rafał!

On Thu, Aug 22, 2019 at 01:02:03PM +0200, Rafał Miłecki wrote:
> On Tue, 13 Aug 2019 at 20:25, Paul Fertser <fercerpav@gmail.com> wrote:
> > diff --git a/target/linux/ramips/dts/mt7621_xiaomi_mir3g-v2.dts b/target/linux/ramips/dts/mt7621_xiaomi_mir3g-v2.dts
> > new file mode 100644
> > index 0000000000..a1963d0072
> > --- /dev/null
> > +++ b/target/linux/ramips/dts/mt7621_xiaomi_mir3g-v2.dts
> > @@ -0,0 +1,146 @@
> > +/dts-v1/;
> > +
> > +#include "mt7621.dtsi"
> 
> Please specify .dts file license, see:
> https://openwrt.org/submitting-patches#dts_checklist

Sure, noted.

I saw that page but guess I was confused by the lack of license in some
other DTS files there.
Paul Fertser Aug. 22, 2019, 11:28 a.m. UTC | #8
Thank you for the reply.

On Thu, Aug 22, 2019 at 11:18:01AM +0200, mail@adrianschmutzler.de wrote:
> to the existing configuration of the "Xiaomi Mi Router 4A Gigabit
> Edition (R4AG/R4A Gigabit)" (without adding a new device).

There's also an issue of R4AG not present in upstream and I can't see
any relevant submission in the Patchwork. Adding patch author to Cc.

> Unless I misunderstood something, this has nothing to do with
> SUPPORTED_DEVICES which should be removed, unless Xiaomi ships an
> OpenWrt distro as vendor firmware.

Sorry for a confusing quote, I didn't mean to imply SUPPORTED_DEVICES
is to be used here.

In fact, Xiaomi does ship an OpenWrt-based distro, it seems to be an
illegal GPL-violating fork...
diff mbox series

Patch

diff --git a/target/linux/ramips/base-files/etc/board.d/02_network b/target/linux/ramips/base-files/etc/board.d/02_network
index ca111c9d4c..7280da50fc 100755
--- a/target/linux/ramips/base-files/etc/board.d/02_network
+++ b/target/linux/ramips/base-files/etc/board.d/02_network
@@ -464,6 +464,10 @@  ramips_setup_interfaces()
 		ucidef_add_switch "switch0" \
 			"2:lan:2" "3:lan:1" "1:wan" "6t@eth0"
 		;;
+	xiaomi,mir3gv2)
+		ucidef_add_switch "switch0" \
+			"2:lan:2" "3:lan:1" "4:wan" "6t@eth0"
+		;;
 	xiaomi,mir3p)
 		ucidef_add_switch "switch0" \
 			"1:lan:3" "2:lan:2" "3:lan:1" "4:wan" "6@eth0"
diff --git a/target/linux/ramips/dts/mt7621_xiaomi_mir3gv2.dts b/target/linux/ramips/dts/mt7621_xiaomi_mir3gv2.dts
new file mode 100644
index 0000000000..81f6d20ae8
--- /dev/null
+++ b/target/linux/ramips/dts/mt7621_xiaomi_mir3gv2.dts
@@ -0,0 +1,147 @@ 
+/dts-v1/;
+
+#include "mt7621.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+/ {
+	compatible = "xiaomi,mir3gv2", "mediatek,mt7621-soc";
+	model = "Xiaomi Mi Router 3G v2";
+
+	aliases {
+		led-boot = &led_status_yellow;
+		led-failsafe = &led_status_yellow;
+		led-running = &led_status_blue;
+		led-upgrade = &led_status_yellow;
+	};
+
+	chosen {
+		bootargs = "console=ttyS0,115200n8";
+	};
+
+	leds {
+		compatible = "gpio-leds";
+
+		led_status_blue: status_blue {
+			label = "mir3gv2:blue:status";
+			gpios = <&gpio0 8 GPIO_ACTIVE_LOW>;
+		};
+
+		led_status_yellow: status_yellow {
+			label = "mir3gv2:yellow:status";
+			gpios = <&gpio0 10 GPIO_ACTIVE_LOW>;
+		};
+	};
+
+	button {
+		compatible = "gpio-keys-polled";
+		poll-interval = <20>;
+
+		reset {
+			label = "reset";
+			gpios = <&gpio0 18 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_RESTART>;
+		};
+	};
+};
+
+&spi0 {
+	status = "okay";
+
+	m25p80@0 {
+		compatible = "jedec,spi-nor";
+		reg = <0>;
+		spi-max-frequency = <80000000>;
+
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			partition@0 {
+				label = "u-boot";
+				reg = <0x0 0x30000>;
+				read-only;
+			};
+
+			partition@30000 {
+				label = "u-boot-env";
+				reg = <0x30000 0x10000>;
+				read-only;
+			};
+
+			partition@40000 {
+				label = "Bdata";
+				reg = <0x40000 0x10000>;
+				read-only;
+			};
+
+			factory: partition@50000 {
+				label = "factory";
+				reg = <0x50000 0x10000>;
+				read-only;
+			};
+
+			partition@60000 {
+				label = "crash";
+				reg = <0x60000 0x10000>;
+				read-only;
+			};
+
+			partition@70000 {
+				label = "cfg_bak";
+				reg = <0x70000 0x10000>;
+				read-only;
+			};
+
+			partition@80000 {
+				label = "overlay";
+				reg = <0x80000 0x100000>;
+				read-only;
+			};
+
+			firmware: partition@180000 {
+				compatible = "denx,uimage";
+				label = "firmware";
+				reg = <0x180000 0xe80000>;
+			};
+		};
+	};
+};
+
+&pcie {
+	status = "okay";
+};
+
+&pcie0 {
+	wifi@0,0 {
+		compatible = "pci14c3,7662";
+		reg = <0x0000 0 0 0 0>;
+		mediatek,mtd-eeprom = <&factory 0x8000>;
+		ieee80211-freq-limit = <5000000 6000000>;
+	};
+};
+
+&pcie1 {
+	wifi@0,0 {
+		compatible = "pci14c3,7603";
+		reg = <0x0000 0 0 0 0>;
+		mediatek,mtd-eeprom = <&factory 0x0000>;
+		ieee80211-freq-limit = <2400000 2500000>;
+	};
+};
+
+&ethernet {
+	mtd-mac-address = <&factory 0xe000>;
+	mediatek,portmap = "lllwl";
+};
+
+&pinctrl {
+	state_default: pinctrl0 {
+		gpio {
+			ralink,group = "jtag", "uart2", "uart3", "wdt";
+			ralink,function = "gpio";
+		};
+	};
+};
diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk
index d32feb7eab..a0c37f0bfe 100644
--- a/target/linux/ramips/image/mt7621.mk
+++ b/target/linux/ramips/image/mt7621.mk
@@ -656,6 +656,16 @@  define Device/xiaomi_mir3g
 endef
 TARGET_DEVICES += xiaomi_mir3g
 
+define Device/xiaomi_mir3gv2
+  MTK_SOC := mt7621
+  IMAGE_SIZE := 14848k
+  DEVICE_VENDOR := Xiaomi
+  DEVICE_MODEL := Mi router 3G v2
+  DEVICE_PACKAGES := kmod-mt7603 kmod-mt76x2 wpad-basic
+  SUPPORTED_DEVICES += mir3gv2
+endef
+TARGET_DEVICES += xiaomi_mir3gv2
+
 define Device/xiaomi_mir3p
   MTK_SOC := mt7621
   BLOCKSIZE := 128k