diff mbox series

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

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

Commit Message

Paul Fertser Aug. 28, 2019, 9:09 a.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).

Forum thread [0] indicates that this device is identical to "Xiaomi Mi
Router 4A Gigabit Edition".

[0] https://forum.openwrt.org/t/xiaomi-mi-router-4a-gigabit-edition-r4ag-r4a-gigabit-fully-supported-but-requires-overwriting-spi-flash-with-programmer/36685

Signed-off-by: Paul Fertser <fercerpav@gmail.com>
---
Changes for v2:                                                                                         
                                                                                                          
    - Addressed all Adrian Schmutzl's comments

Changes for v3:

    - Add SPDX license header
    - Use new ALT variables to support R4AG model name

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

Comments

Adrian Schmutzler Aug. 31, 2019, 9:32 p.m. UTC | #1
Hi,

additional comments below.

> -----Original Message-----
> From: Paul Fertser [mailto:fercerpav@gmail.com]
> Sent: Mittwoch, 28. August 2019 11:09
> To: John Crispin <john@phrozen.org>
> Cc: openwrt-devel@lists.openwrt.org; Adrian Schmutzler
> <mail@adrianschmutzler.de>; Roger Pueyo Centelles
> <roger.pueyo@guifi.net>; Paul Fertser <fercerpav@gmail.com>
> Subject: [PATCH v3] 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).
> 
> Forum thread [0] indicates that this device is identical to "Xiaomi Mi Router
> 4A Gigabit Edition".
> 
> [0] https://forum.openwrt.org/t/xiaomi-mi-router-4a-gigabit-edition-r4ag-
> r4a-gigabit-fully-supported-but-requires-overwriting-spi-flash-with-
> programmer/36685
> 
> Signed-off-by: Paul Fertser <fercerpav@gmail.com>
> ---
> Changes for v2:
> 
>     - Addressed all Adrian Schmutzl's comments
> 
> Changes for v3:
> 
>     - Add SPDX license header
>     - Use new ALT variables to support R4AG model name
> 
> 
>  .../linux/ramips/base-files/etc/board.d/02_network |   7 +
>  target/linux/ramips/dts/mt7621_xiaomi_mir3g-v2.dts | 147
> +++++++++++++++++++++
>  target/linux/ramips/image/mt7621.mk                |  12 ++
>  3 files changed, 166 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 27f85d7458..2b166dd944 100755
> --- a/target/linux/ramips/base-files/etc/board.d/02_network
> +++ b/target/linux/ramips/base-files/etc/board.d/02_network
> @@ -469,6 +469,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"
> +		;;

"6t@eth0" and "6@eth0" should be the same, so this can be merged with cudy,wr1000.

>  	xiaomi,mir3p)
>  		ucidef_add_switch "switch0" \
>  			"1:lan:3" "2:lan:2" "3:lan:1" "4:wan" "6@eth0"
> @@ -683,6 +687,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)
> +		;;

This can be merged with elecom,wrc-1167ghbk2-s|\ etc.

Best

Adrian
Paul Fertser Sept. 1, 2019, 7:33 a.m. UTC | #2
Hi,

Thank you for the reviewing.

On Sat, Aug 31, 2019 at 11:32:33PM +0200, mail@adrianschmutzler.de wrote:
> > +	xiaomi,mir3g-v2)
> > +		ucidef_add_switch "switch0" \
> > +			"2:lan:2" "3:lan:1" "4:wan" "6t@eth0"
> > +		;;
> 
> "6t@eth0" and "6@eth0" should be the same, so this can be merged with cudy,wr1000.
> 
> > +	xiaomi,mir3g-v2)
> > +		wan_mac=$(mtd_get_mac_binary factory 0xe006)
> > +		;;
> 
> This can be merged with elecom,wrc-1167ghbk2-s|\ etc.

The question is whether it should be merged. I can see both positives
(less places to change if/when scripts are refactored) and negatives
(not easy to compare with other probably related devices from the same
manufacturer). If the current practice is to merge everything
mergeable, sure, I can send a v4 with that.

I'm rather worried by the lack of feedback from R4AG developers/users
though!
Roger Pueyo Centelles | Guifi.net Oct. 11, 2019, 5:14 p.m. UTC | #3
Hi Paul,

I opened a pull request on GitHub to support the Mi Router 4A Gigabit
Edition, which is essentially the same device. You can find it at
https://github.com/openwrt/openwrt/pull/2486

There are a few differences you may want to address:

>>> +	xiaomi,mir3g-v2)
>>> +		wan_mac=$(mtd_get_mac_binary factory 0xe006)
>>> +		;;

You may want to add "label_mac=$wan_mac" there, if the MAC address on
the back label matches the WAN interface (on the R4G it does).

Also, it looks like a newline should be added at the end of the .dts file.

>>> +define Device/xiaomi_mir3g-v2
>>> + MTK_SOC := mt7621
>>> + IMAGE_SIZE := 14848k
>>> + DEVICE_VENDOR := Xiaomi
>>> + DEVICE_MODEL := Mi Router 3G
>>> + DEVICE_VARIANT := v2
>>> + DEVICE_ALT0_VENDOR := Xiaomi
>>> + DEVICE_ALT0_MODEL := Mi Router 4A Gigabit Edition
>>> + DEVICE_PACKAGES := kmod-mt7603 kmod-mt76x2 wpad-basic
>>> +endef
>>> +TARGET_DEVICES += xiaomi_mir3g-v2

Since there are two Xiaomi Router 4A variants, the 100m and the Gigabit
Edition, you may want to use:

+ DEVICE_ALT0_VENDOR := Xiaomi
+ DEVICE_ALT0_MODEL := Mi Router 4A + DEVICE_ALT0_VARIANT := Gigabit Edition


Last, I added the device to uboot-envtools. Feel free to copy it:
https://github.com/openwrt/openwrt/pull/2486/commits/2625499ca554449e7a19bb5f6f61acdefb5a69e1

Best,

Roger
Paul Fertser Oct. 21, 2019, 12:51 p.m. UTC | #4
Dear maintainers,

Do you request me to make all of the changes proposed by Roger
(including adding u-boot data? But the env partition is marked
read-only and most other targets do not do that)? Or the merging
proposed by Adrian?

Please clarify!
John Crispin Oct. 21, 2019, 12:53 p.m. UTC | #5
On 31/08/2019 23:32, mail@adrianschmutzler.de wrote:
> "6t@eth0" and "6@eth0" should be the same, so this can be merged with cudy,wr1000.

I meant that part, sorry the mail was sitting in my draft folder
	John
Roger Pueyo Centelles | Guifi.net Oct. 21, 2019, 2:20 p.m. UTC | #6
Hi,

Mine were just suggestions; feel free to do it or not! :)

Roger

El 21/10/19 a les 14:53, John Crispin ha escrit:
> On 31/08/2019 23:32, mail@adrianschmutzler.de wrote:
>> "6t@eth0" and "6@eth0" should be the same, so this can be merged with
>> cudy,wr1000.
>
> I meant that part, sorry the mail was sitting in my draft folder
>     John
>
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel@lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel
Paul Fertser Oct. 25, 2019, 10:23 a.m. UTC | #7
Hi,

On Sat, Aug 31, 2019 at 11:32:33PM +0200, mail@adrianschmutzler.de wrote:
> > +	xiaomi,mir3g-v2)
> > +		ucidef_add_switch "switch0" \
> > +			"2:lan:2" "3:lan:1" "4:wan" "6t@eth0"
> > +		;;
> 
> "6t@eth0" and "6@eth0" should be the same, so this can be merged with cudy,wr1000.

Done.

> > +	xiaomi,mir3g-v2)
> > +		wan_mac=$(mtd_get_mac_binary factory 0xe006)
> > +		;;
> 
> This can be merged with elecom,wrc-1167ghbk2-s|\ etc.

I rebased to current master and added label_mac (as per Roger's
suggestion), and since I can not be sure about all the other devices,
I left the dedicated section for this model.
Paul Fertser Oct. 25, 2019, 10:25 a.m. UTC | #8
Hi Roger,

Thank you for the review!

On Fri, Oct 11, 2019 at 07:14:25PM +0200, Roger Pueyo Centelles | Guifi.net wrote:
>  +       xiaomi,mir3g-v2)
>  +               wan_mac=$(mtd_get_mac_binary factory 0xe006)
>  +               ;;
> 
> You may want to add "label_mac=$wan_mac" there, if the MAC address on the back
> label matches the WAN interface (on the R4G it does).

Indeed, done.

> Also, it looks like a newline should be added at the end of the .dts file.

I've checked and I see there's already a newline present at the end of
the file.

> Since there are two Xiaomi Router 4A variants, the 100m and the Gigabit Edition,
> you may want to use:
> 
> +  DEVICE_ALT0_VENDOR := Xiaomi
> +  DEVICE_ALT0_MODEL := Mi Router 4A
> +  DEVICE_ALT0_VARIANT := Gigabit Edition

Done.

> Last, I added the device to uboot-envtools. Feel free to copy it:
> [2]https://github.com/openwrt/openwrt/pull/2486/commits/2625499ca554449e7a19bb5f6f61acdefb5a69e1

Since the uboot partition is not writeable by default, and there's no
way to install OpenWrt without changing it first by some other means
(such as an external SPI flash programmer) I have a feeling adding it
to uboot-envtools wouldn't be useful.
Adrian Schmutzler Oct. 25, 2019, 11:12 a.m. UTC | #9
Hi,

> > > +	xiaomi,mir3g-v2)
> > > +		wan_mac=$(mtd_get_mac_binary factory 0xe006)
> > > +		;;
> >
> > This can be merged with elecom,wrc-1167ghbk2-s|\ etc.
> 
> I rebased to current master and added label_mac (as per Roger's
> suggestion), and since I can not be sure about all the other devices,
> I left the dedicated section for this model.

Yes, merging only makes sense if cases are exactly the same. With the addition of label_mac (providing additional information), you cannot merge this anymore. (So, you did it correctly in v4).

Best

Adrian
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 27f85d7458..2b166dd944 100755
--- a/target/linux/ramips/base-files/etc/board.d/02_network
+++ b/target/linux/ramips/base-files/etc/board.d/02_network
@@ -469,6 +469,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"
@@ -683,6 +687,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..58da88a862
--- /dev/null
+++ b/target/linux/ramips/dts/mt7621_xiaomi_mir3g-v2.dts
@@ -0,0 +1,147 @@ 
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/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 5dc8efe7c5..10aa92a88c 100644
--- a/target/linux/ramips/image/mt7621.mk
+++ b/target/linux/ramips/image/mt7621.mk
@@ -665,6 +665,18 @@  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_ALT0_VENDOR := Xiaomi
+  DEVICE_ALT0_MODEL := Mi Router 4A Gigabit Edition
+  DEVICE_PACKAGES := kmod-mt7603 kmod-mt76x2 wpad-basic
+endef
+TARGET_DEVICES += xiaomi_mir3g-v2
+
 define Device/xiaomi_mir3p
   MTK_SOC := mt7621
   BLOCKSIZE := 128k