ath79: add support for GL.iNet GL-MiFi
authorAntti Seppälä <a.seppala@gmail.com>
Thu, 2 Jul 2020 07:53:02 +0000 (10:53 +0300)
committerAdrian Schmutzler <freifunk@adrianschmutzler.de>
Fri, 3 Jul 2020 18:48:05 +0000 (20:48 +0200)
Add support for the ar71xx supported GL.iNet GL-MiFi to ath79.

Specifications:
 - Atheros AR9331
 - 64 MB of RAM
 - 16 MB of FLASH (SPI NOR)
 - 2x 10/100/1000 Mbps Ethernet
 - 2.4GHz (AR9330), 802.11b/g/n
 - 1x USB 2.0 (vbus driven by GPIO)
 - 4x LED, driven by GPIO
 - 1x button (reset)
 - 1x mini pci-e slot (vcc driven by GPIO)

Flash instructions:

Vendor software is based on openwrt so you can flash the sysupgrade
image via the vendor GUI or using command line sysupgrade utility.
Make sure to not save configuration over reflash as uci settings
differ between versions.

Note on MAC addresses:

Even though the platform is capable to providing separate MAC addresses
to the interfaces vendor firmware does not seem to take advantage of
that. It appears that there is only single unique pre-programmed
address in the art partition and vendor firmware uses that for
every interface (eth0/eth1/wlan0). Similar behaviour has also been
implemented in this patch.

Note on GPIOs:

In vendor firmware the gpio controlling mini pci-e slot is named
3gcontrol while it actually controls power supply to the entire mini
pci-e slot. Therefore a more descriptive name (minipcie) was chosen.
Also during development of this patch it became apparent that the
polarity of the signal is actually active low rather than active high
that can be found in vendor firmware.

Acknowledgements:

This patch is based on earlier work[1] done by Kyson Lok. Since the
initial mailing-list submission the patch has been modified to comply
with current openwrt naming schemes and dts conventions.

[1] http://lists.openwrt.org/pipermail/openwrt-devel/2018-September/019576.html

Signed-off-by: Antti Seppälä <a.seppala@gmail.com>
target/linux/ath79/dts/ar9331_glinet_gl-mifi.dts [new file with mode: 0644]
target/linux/ath79/generic/base-files/etc/board.d/01_leds
target/linux/ath79/generic/base-files/etc/uci-defaults/04_led_migration
target/linux/ath79/image/generic.mk

diff --git a/target/linux/ath79/dts/ar9331_glinet_gl-mifi.dts b/target/linux/ath79/dts/ar9331_glinet_gl-mifi.dts
new file mode 100644 (file)
index 0000000..e969007
--- /dev/null
@@ -0,0 +1,152 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/dts-v1/;
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+#include "ar9331.dtsi"
+
+/ {
+       compatible = "glinet,gl-mifi", "qca,ar9331";
+       model = "GL.iNet GL-MiFi";
+
+       aliases {
+               serial0 = &uart;
+               label-mac-device = &eth0;
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               wlan {
+                       label = "gl-mifi:green:wlan";
+                       gpios = <&gpio 1 GPIO_ACTIVE_HIGH>;
+                       linux,default-trigger = "phy0tpt";
+               };
+
+               lan {
+                       label = "gl-mifi:green:lan";
+                       gpios = <&gpio 16 GPIO_ACTIVE_HIGH>;
+               };
+
+               wan {
+                       label = "gl-mifi:green:wan";
+                       gpios = <&gpio 27 GPIO_ACTIVE_HIGH>;
+               };
+
+               3g4g {
+                       label = "gl-mifi:green:3g4g";
+                       gpios = <&gpio 0 GPIO_ACTIVE_HIGH>;
+               };
+       };
+
+       keys {
+               compatible = "gpio-keys";
+
+               reset {
+                       label = "reset";
+                       linux,code = <KEY_RESTART>;
+                       gpios = <&gpio 11 GPIO_ACTIVE_HIGH>;
+                       debounce-interval = <60>;
+               };
+       };
+
+       reg_usb_vbus: reg_usb_vbus {
+               compatible = "regulator-fixed";
+               regulator-name = "usb_vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio 6 GPIO_ACTIVE_LOW>;
+       };
+
+       gpio-export {
+               compatible = "gpio-export";
+
+               minipcie {
+                       gpio-export,name = "minipcie";
+                       gpio-export,output = <0>;
+                       gpios = <&gpio 7 GPIO_ACTIVE_LOW>;
+               };
+       };
+};
+
+&uart {
+       status = "okay";
+};
+
+&usb {
+       status = "okay";
+
+       dr_mode = "host";
+       vbus-supply = <&reg_usb_vbus>;
+};
+
+&usb_phy {
+       status = "okay";
+};
+
+&spi {
+       status = "okay";
+
+       num-chipselects = <1>;
+
+       flash@0 {
+               compatible = "jedec,spi-nor";
+               spi-max-frequency = <33000000>;
+               reg = <0>;
+
+               partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       partition@0 {
+                               label = "u-boot";
+                               reg = <0x000000 0x040000>;
+                               read-only;
+                       };
+
+                       partition@40000 {
+                               label = "u-boot-env";
+                               reg = <0x040000 0x010000>;
+                       };
+
+                       partition@50000 {
+                               compatible = "denx,uimage";
+                               label = "firmware";
+                               reg = <0x050000 0xfa0000>;
+                       };
+
+                       art: partition@ff0000 {
+                               label = "art";
+                               reg = <0xff0000 0x010000>;
+                               read-only;
+                       };
+               };
+       };
+};
+
+&eth0 {
+       status = "okay";
+
+       mtd-mac-address = <&art 0x0>;
+
+       gmac-config {
+               device = <&gmac>;
+
+               switch-phy-addr-swap = <0>;
+               switch-phy-swap = <0>;
+       };
+};
+
+&eth1 {
+       status = "okay";
+
+       mtd-mac-address = <&art 0x0>;
+};
+
+&wmac {
+       status = "okay";
+
+       mtd-cal-data = <&art 0x1000>;
+};
index 2bd70aae3163b3c026b3bb2b3d35ffb12f0ad7af..f3e3b758b5ab36bdea7c17efc46991ecacda33d2 100755 (executable)
@@ -153,6 +153,10 @@ glinet,gl-ar300m-lite)
 glinet,gl-ar300m16)
        ucidef_set_led_netdev "lan" "LAN" "gl-ar300m:green:lan" "eth0"
        ;;
+glinet,gl-mifi)
+       ucidef_set_led_switch "lan" "LAN" "$boardname:green:lan" "switch0" "0x02"
+       ucidef_set_led_netdev "wan" "WAN" "$boardname:green:wan" "eth1"
+       ;;
 glinet,gl-x750)
        ucidef_set_led_netdev "wan" "WAN" "$boardname:green:wan" "eth1"
        ;;
index 1c7ecba5f862cd00b1a349d283b6456c9ee90a4c..757b0c99741c54d7d0c3e6b6908aa004d0fdbce6 100644 (file)
@@ -8,6 +8,9 @@ case "$board" in
 engenius,epg5000)
        migrate_leds ":wlan-2g=:wlan2g" ":wlan-5g=:wlan5g"
        ;;
+glinet,gl-mifi)
+       migrate_leds ":net=:3g4g"
+       ;;
 tplink,archer-c25-v1|\
 tplink,archer-c58-v1|\
 tplink,archer-c59-v1|\
index 5ef6104ef68f86ba184747d399b866fa44eb4ed2..0e7efa32afea1bc7a56ef53223e0a54fc134d94a 100644 (file)
@@ -821,6 +821,16 @@ define Device/glinet_gl-ar750
 endef
 TARGET_DEVICES += glinet_gl-ar750
 
+define Device/glinet_gl-mifi
+  SOC := ar9331
+  DEVICE_VENDOR := GL.iNET
+  DEVICE_MODEL := GL-MiFi
+  DEVICE_PACKAGES := kmod-usb-chipidea2
+  IMAGE_SIZE := 16000k
+  SUPPORTED_DEVICES += gl-mifi
+endef
+TARGET_DEVICES += glinet_gl-mifi
+
 define Device/glinet_gl-x750
   SOC := qca9531
   DEVICE_VENDOR := GL.iNet