ath79: add support for EnGenius EWS511AP
authorGuan-Hong Lin <GH.Lin@senao.com>
Tue, 18 Dec 2018 08:35:30 +0000 (16:35 +0800)
committerMathias Kresin <dev@kresin.me>
Mon, 31 Dec 2018 15:25:09 +0000 (16:25 +0100)
EnGenius EWS511AP is a wireless managed wall AP with PoE support,
based on Qualcomm/Atheros QCA9531(Honeybee) + QCA9887.

Short specification:

- 128MB of RAM
- 16 MB of SPI FLASH
- 2T2R 2.4 GHz (QCA9531), 802.11b/g/n
- 1T1R 5 GHz (QCA9887), 802.11ac/n/a
- 2x 10/100 Mbps Ethernet (one port with PoE support)
- 1x Power LED, 2x LAN LEDs, 1x WLAN 2.4G LED, 1x WLAN 5G LED
- 1x RESET button
- built-in watchdog chipset

Flash instruction:

From EnGenius firmware to OpenWrt firmware:

Original firmware is based on QSDK.
Use sysupgrade firmware directly in vendor GUI.
Reset to factory default is necessary.

From OpenWrt firmware to EnGenius firmware:

1. Setup a TFTP server on your computer and configure static IP to 192.168.99.8
   Put the OpenWrt firmware in the root directory on your computer.
2. Power up EWS511AP. Press 4 and then press any key to enter u-boot.
3. Download OpenWrt firmware
   (ath)> tftpboot 0x80060000 ${dir}"openwrt-ath79-generic-engenius_ews511ap-squashfs-sysupgrade.bin"
4. Flash the firmware
   (ath)> erase 0x9f060000 +f50000
   (ath)> cp.b $fileaddr 0x9f060000 $filesize
5. Reboot
   (ath)> reset

Signed-off-by: Guan-Hong Lin <GH.Lin@senao.com>
target/linux/ath79/base-files/etc/board.d/01_leds
target/linux/ath79/base-files/etc/board.d/02_network
target/linux/ath79/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
target/linux/ath79/dts/qca9531_engenius_ews511ap.dts [new file with mode: 0644]
target/linux/ath79/image/generic.mk

index ec1b6bb..87c9c29 100755 (executable)
@@ -31,6 +31,10 @@ buffalo,whr-g301n)
 dlink,dir-859-a1)
        ucidef_set_led_switch "internet" "WAN" "$boardname:green:internet" "switch0" "0x20"
        ;;
+engenius,ews511ap)
+       ucidef_set_led_netdev "lan1" "LAN1" "$boardname:blue:lan1" "eth0"
+       ucidef_set_led_netdev "lan2" "LAN2" "$boardname:blue:lan2" "eth1"
+       ;;
 etactica,eg200)
        ucidef_set_led_netdev "lan" "LAN" "$boardname:red:eth0" "eth0"
        ucidef_set_led_oneshot "modbus" "Modbus" "$boardname:red:modbus" "100" "33"
index 626fb2c..3316607 100755 (executable)
@@ -86,6 +86,9 @@ ath79_setup_interfaces()
                ucidef_add_switch "switch0" \
                        "0@eth0" "1:wan" "2:lan:3" "3:lan:2"
                ;;
+       engenius,ews511ap)
+               ucidef_set_interface_lan "eth0 eth1" "dhcp"
+               ;;
        etactica,eg200)
                ucidef_set_interface_lan "eth0" "dhcp"
                ;;
@@ -252,6 +255,12 @@ ath79_setup_macs()
        elecom,wrc-300ghbk2-i)
                wan_mac=$(macaddr_add "$(mtd_get_mac_binary ART 4098)" -2)
                ;;
+       engenius,ews511ap)
+               lan_mac=$(mtd_get_mac_text "u-boot-env" 233)
+               eth1_mac=$(macaddr_add "$lan_mac" 1)
+               ucidef_set_interface "eth0" ifname "eth0" protocol "none" macaddr "$lan_mac"
+               ucidef_set_interface "eth1" ifname "eth1" protocol "none" macaddr "$eth1_mac"
+               ;;
        iodata,etg3-r)
                lan_mac=$(mtd_get_mac_ascii u-boot-env ethaddr)
                wan_mac=$(macaddr_add "$lan_mac" -1)
index 45d3819..d9ce0c9 100644 (file)
@@ -104,6 +104,7 @@ case "$FIRMWARE" in
                ath10kcal_extract "art" 20480 2116
                ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +1)
                ;;
+       engenius,ews511ap|\
        glinet,gl-x750)
                ath10kcal_extract "art" 20480 2116
                ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +1)
diff --git a/target/linux/ath79/dts/qca9531_engenius_ews511ap.dts b/target/linux/ath79/dts/qca9531_engenius_ews511ap.dts
new file mode 100644 (file)
index 0000000..62b6a76
--- /dev/null
@@ -0,0 +1,144 @@
+// 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 "qca953x.dtsi"
+
+/ {
+       compatible = "engenius,ews511ap", "qca,qca9531";
+       model = "EnGenius EWS511AP";
+
+       keys {
+               compatible = "gpio-keys-polled";
+
+               poll-interval = <20>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&jtag_disable_pins>;
+
+               reset {
+                       label = "reset";
+                       linux,code = <KEY_RESTART>;
+                       gpios = <&gpio 1 GPIO_ACTIVE_LOW>;
+               };
+       };
+
+       aliases {
+               led-boot = &power_led;
+               led-failsafe = &power_led;
+               led-running = &power_led;
+               led-upgrade = &power_led;
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               power_led: power {
+                       label = "ews511ap:amber:power";
+                       gpios = <&gpio 0 GPIO_ACTIVE_LOW>;
+                       default-state = "on";
+               };
+
+               lan1 {
+                       label = "ews511ap:blue:lan1";
+                       gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
+               };
+
+               lan2 {
+                       label = "ews511ap:blue:lan2";
+                       gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
+               };
+
+               wlan2g {
+                       label = "ews511ap:green:wlan2g";
+                       gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "phy0tpt";
+               };
+
+               wlan5g {
+                       label = "ews511ap:green:wlan5g";
+                       gpios = <&gpio 3 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "phy1tpt";
+               };
+       };
+
+       watchdog {
+               compatible = "linux,wdt-gpio";
+
+               gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
+               hw_algo = "toggle";
+               /* hw_margin_ms is actually 300s but driver limits it to 60s */
+               hw_margin_ms = <60000>;
+               always-running;
+       };
+};
+
+&wdt {
+       status = "okay";
+};
+
+&rst {
+       status = "okay";
+};
+
+&pcie0 {
+       status = "okay";
+};
+
+&uart {
+       status = "okay";
+};
+
+&spi {
+       status = "okay";
+       num-cs = <0>;
+
+       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 0x040000>;
+                               read-only;
+                       };
+
+                       ubootenv: partition@40000 {
+                               label = "u-boot-env";
+                               reg = <0x040000 0x010000>;
+                       };
+
+                       art: partition@50000 {
+                               label = "art";
+                               reg = <0x050000 0x010000>;
+                       };
+
+                       partition@60000 {
+                               compatible = "denx,uimage";
+                               label = "firmware";
+                               reg = <0x060000 0xfa0000>;
+                       };
+               };
+       };
+};
+
+&eth0 {
+       status = "okay";
+       phy-handle = <&swphy4>;
+};
+
+&eth1 {
+       status = "okay";
+};
+
+&wmac {
+       status = "okay";
+       mtd-cal-data = <&art 0x1000>;
+};
index 774695b..aedd67d 100644 (file)
@@ -250,6 +250,14 @@ define Device/embeddedwireless_dorin
 endef
 TARGET_DEVICES += embeddedwireless_dorin
 
+define Device/engenius_ews511ap
+  ATH_SOC := qca9531
+  DEVICE_TITLE := EnGenius EWS511AP
+  DEVICE_PACKAGES := kmod-ath10k-ct ath10k-firmware-qca9887-ct
+  IMAGE_SIZE := 16000k
+endef
+TARGET_DEVICES += engenius_ews511ap
+
 define Device/etactica_eg200
   ATH_SOC := ar9331
   DEVICE_TITLE := eTactica EG200