ath79: add suport for EnGenius EPG5000
authorTomasz Maciej Nowak <tomek_n@o2.pl>
Mon, 4 Mar 2019 14:18:53 +0000 (15:18 +0100)
committerChristian Lamparter <chunkeey@gmail.com>
Wed, 13 Mar 2019 15:25:35 +0000 (16:25 +0100)
EnGenius EPG5000 (v1.0.0, marketed as IoT Gateway) is a dual band
wireless router.

Specification
SoC: Qualcomm Atheros QCA9558
RAM: 256 MB DDR2
Flash: 16 MB SPI NOR
WIFI: 2.4 GHz 3T3R integrated
5 GHz 3T3R QCA9880 Mini PCIe card
Ethernet: 5x 10/100/1000 Mbps QCA8337N
USB: 1x 2.0
LEDS: 4x GPIO controlled
Buttons: 2x GPIO controlled
UART: 4 pin header, starting count from white triangle on PCB
1. VCC 3.3V, 2. GND, 3. TX, 4. RX
baud: 115200, parity: none, flow control: none

Installation
1. Connect to one of LAN (yellow) ethernet ports,
2. Open router configuration interface,
3. Go to Tools > Firmware,
4. Select OpenWrt factory image with dlf extension and hit Apply,
5. Wait few minutes, after the Power LED will stop blinking, the router
   is ready for configuration.

Alternative installation
1. Prepare TFTP server with OpenWrt sysupgrade image,
2. Connect to one of LAN (yellow) ethernet ports,
3. Connect to UART port (leaving out VCC pin!),
4. Power on router,
5. When asked to enter a number 1 or 3 hit 2, this will select flashing
   image from TFTP server option,
6. You'll be prompted to enter TFTP server ip (default is 192.168.99.8),
   then router ip (default is 192.168.99.9) and for last, image name
   downloaded from TFTP server (default is uImageESR1200_1750),
7. After providing all information U-Boot will start flashing the image,
   You can observe progress on console, it'll take few minutes and when
   the Power LED will stop blinking, router is ready for configuration.

Additional information
If connected to UART, when prompted for number on boot, one can enter
number 4 to open bootloader (U-Boot) command line.
OEM firmware shell password is: aigo3d0a0tdagr
useful for creating backup of original firmware.
When doing upgrade from OpenWrt ar71xx image, it is recomended to not keep
the old configuration.

Signed-off-by: Tomasz Maciej Nowak <tomek_n@o2.pl>
target/linux/ath79/base-files/etc/board.d/02_network
target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
target/linux/ath79/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
target/linux/ath79/dts/qca9558_engenius_epg5000.dts [new file with mode: 0644]
target/linux/ath79/image/generic.mk

index 5ab427f8ce6ec004922d10650fbc6f0a72d5b8d9..e2c303e56572743c21136fca9baa5a6f98201290 100755 (executable)
@@ -76,6 +76,7 @@ ath79_setup_interfaces()
        dlink,dir-825-c1|\
        dlink,dir-835-a1|\
        dlink,dir-859-a1|\
+       engenius,epg5000|\
        tplink,archer-c2-v3|\
        tplink,tl-wr1043nd-v4)
                ucidef_add_switch "switch0" \
@@ -269,6 +270,14 @@ ath79_setup_macs()
        elecom,wrc-300ghbk2-i)
                wan_mac=$(macaddr_add "$(mtd_get_mac_binary ART 4098)" -2)
                ;;
+       engenius,epg5000|\
+       iodata,wn-ac1167dgr|\
+       iodata,wn-ac1600dgr|\
+       iodata,wn-ac1600dgr2|\
+       iodata,wn-ag300dgr)
+               lan_mac=$(mtd_get_mac_ascii u-boot-env ethaddr)
+               wan_mac=$(mtd_get_mac_ascii u-boot-env wanaddr)
+               ;;
        engenius,ews511ap)
                lan_mac=$(mtd_get_mac_text "u-boot-env" 233)
                eth1_mac=$(macaddr_add "$lan_mac" 1)
@@ -279,13 +288,6 @@ ath79_setup_macs()
                lan_mac=$(mtd_get_mac_ascii u-boot-env ethaddr)
                wan_mac=$(macaddr_add "$lan_mac" -1)
                ;;
-       iodata,wn-ac1167dgr|\
-       iodata,wn-ac1600dgr|\
-       iodata,wn-ac1600dgr2|\
-       iodata,wn-ag300dgr)
-               lan_mac=$(mtd_get_mac_ascii u-boot-env ethaddr)
-               wan_mac=$(mtd_get_mac_ascii u-boot-env wanaddr)
-               ;;
        nec,wg800hp)
                lan_mac=$(mtd_get_mac_text board_data 640)
                wan_mac=$(mtd_get_mac_text board_data 1152)
index 84e4d07b35c8a823ec9853a7820355d81fe3a4f6..4061aa67eb12915028ed1f7db8a750b3ed031b24 100644 (file)
@@ -109,6 +109,7 @@ case "$FIRMWARE" in
                ath9k_eeprom_extract "art" 4096 1088
                ath9k_patch_fw_mac $(mtd_get_mac_ascii devdata "wlan24mac") 2
                ;;
+       engenius,epg5000|\
        iodata,wn-ac1167dgr|\
        iodata,wn-ac1600dgr|\
        iodata,wn-ac1600dgr2|\
index 501a475571859332146a7437843b5f2c9d79895b..cf8dcde7110b54b60ca9400499b26db27ff64e12 100644 (file)
@@ -102,6 +102,12 @@ case "$FIRMWARE" in
        elecom,wrc-1750ghbk2-i)
                ath10kcal_extract "ART" 20480 2116
                ;;
+       engenius,epg5000|\
+       iodata,wn-ac1167dgr|\
+       iodata,wn-ac1600dgr2)
+               ath10kcal_extract "art" 20480 2116
+               ath10kcal_patch_mac $(macaddr_add $(mtd_get_mac_ascii u-boot-env ethaddr) +1)
+               ;;
        engenius,ews511ap|\
        glinet,gl-ar750s|\
        glinet,gl-x750|\
@@ -109,11 +115,6 @@ case "$FIRMWARE" in
                ath10kcal_extract "art" 20480 2116
                ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +1)
                ;;
-       iodata,wn-ac1167dgr|\
-       iodata,wn-ac1600dgr2)
-               ath10kcal_extract "art" 20480 2116
-               ath10kcal_patch_mac $(macaddr_add $(mtd_get_mac_ascii u-boot-env ethaddr) +1)
-               ;;
        nec,wg800hp)
                ath10kcal_extract "art" 20480 2116
                ath10kcal_patch_mac_crc $(mtd_get_mac_text board_data 2176)
diff --git a/target/linux/ath79/dts/qca9558_engenius_epg5000.dts b/target/linux/ath79/dts/qca9558_engenius_epg5000.dts
new file mode 100644 (file)
index 0000000..38cd81a
--- /dev/null
@@ -0,0 +1,180 @@
+// 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 "qca9557.dtsi"
+
+/ {
+       model = "EnGenius EPG5000";
+       compatible = "engenius,epg5000", "qca,qca9557";
+
+       chosen {
+               bootargs = "console=ttyS0,115200n8";
+       };
+
+       aliases {
+               led-boot = &power;
+               led-failsafe = &power;
+               led-running = &power;
+               led-upgrade = &power;
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               power: power {
+                       label = "epg5000:amber:power";
+                       gpios = <&gpio 2 GPIO_ACTIVE_LOW>;
+                       default-state = "on";
+               };
+
+               wan {
+                       label = "epg5000:blue:wan";
+                       gpios = <&gpio 22 GPIO_ACTIVE_LOW>;
+               };
+
+               wlan2g {
+                       label = "epg5000:blue:wlan2g";
+                       gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "phy1tpt";
+               };
+
+               wlan5g {
+                       label = "epg5000:blue:wlan5g";
+                       gpios = <&gpio 23 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "phy0tpt";
+               };
+
+               wps {
+                       label = "epg5000:blue:wps";
+                       gpios = <&gpio 19 GPIO_ACTIVE_LOW>;
+               };
+       };
+
+       keys {
+               compatible = "gpio-keys-polled";
+               poll-interval = <20>;
+
+               reset {
+                       label = "reset";
+                       linux,code = <KEY_RESTART>;
+                       gpios = <&gpio 17 GPIO_ACTIVE_LOW>;
+                       debounce-interval = <60>;
+               };
+
+               wps {
+                       label = "wps";
+                       linux,code = <KEY_WPS_BUTTON>;
+                       gpios = <&gpio 16 GPIO_ACTIVE_LOW>;
+                       debounce-interval = <60>;
+               };
+       };
+};
+
+&eth0 {
+       status = "okay";
+
+       phy-handle = <&phy0>;
+       pll-data = <0xa6000000 0x00000101 0x00001616>;
+};
+
+&mdio0 {
+       status = "okay";
+
+       phy0: ethernet-phy@0 {
+               reg = <0>;
+
+               qca,ar8327-initvals = <
+                       0x04 0x87600000 /* PORT0 PAD MODE CTRL */
+                       0x7c 0x0000007e /* PORT0_STATUS */
+                       >;
+       };
+};
+
+&pcie0 {
+       status = "okay";
+
+       wifi@0,0 {
+               compatible = "pci168c,003c";
+               reg = <0x0000 0 0 0 0>;
+       };
+};
+
+&spi {
+       status = "okay";
+
+       num-cs = <1>;
+
+       flash@0 {
+               compatible = "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <25000000>;
+
+               partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       partition@0 {
+                               label = "u-boot";
+                               reg = <0x000000 0x030000>;
+                               read-only;
+                       };
+
+                       partition@30000 {
+                               label = "u-boot-env";
+                               reg = <0x030000 0x010000>;
+                       };
+
+                       partition@40000 {
+                               compatible = "denx,uimage";
+                               label = "firmware";
+                               reg = <0x040000 0xe50000>;
+                       };
+
+                       partition@790000 {
+                               label = "manufacture";
+                               reg = <0xe90000 0x100000>;
+                               read-only;
+                       };
+
+                       partition@ed0000 {
+                               label = "backup";
+                               reg = <0xf90000 0x010000>;
+                               read-only;
+                       };
+
+                       partition@fe0000 {
+                               label = "storage";
+                               reg = <0xfa0000 0x050000>;
+                               read-only;
+                       };
+
+                       partition@ff0000 {
+                               label = "art";
+                               reg = <0xff0000 0x010000>;
+                               read-only;
+                       };
+               };
+       };
+};
+
+&uart {
+       status = "okay";
+};
+
+&usb_phy1 {
+       status = "okay";
+};
+
+&usb1 {
+       status = "okay";
+};
+
+&wmac {
+       status = "okay";
+
+       qca,no-eeprom;
+};
index 16212826d847a5b6487744ea5c495a09fb4d4a80..6b20b66669c4a4287cf9c3111ce2393d3419ca48 100644 (file)
@@ -287,6 +287,19 @@ define Device/embeddedwireless_dorin
 endef
 TARGET_DEVICES += embeddedwireless_dorin
 
+define Device/engenius_epg5000
+  ATH_SOC := qca9558
+  DEVICE_TITLE := EnGenius EPG5000
+  DEVICE_PACKAGES := ath10k-firmware-qca988x-ct kmod-ath10k-ct kmod-usb2
+  IMAGE_SIZE := 14656k
+  IMAGES += factory.dlf
+  IMAGE/factory.dlf := append-kernel | pad-to $$$$(BLOCKSIZE) | \
+       append-rootfs | pad-rootfs | check-size $$$$(IMAGE_SIZE) | \
+       senao-header -r 0x101 -p 0x71 -t 2
+  SUPPORTED_DEVICES += epg5000
+endef
+TARGET_DEVICES += engenius_epg5000
+
 define Device/engenius_ews511ap
   ATH_SOC := qca9531
   DEVICE_TITLE := EnGenius EWS511AP