ath79: add support for Senao Watchguard AP100
authorMichael Pratt <mcpratt@pm.me>
Tue, 2 Nov 2021 17:41:41 +0000 (13:41 -0400)
committerHauke Mehrtens <hauke@hauke-m.de>
Sun, 11 Sep 2022 19:54:00 +0000 (21:54 +0200)
FCC ID: U2M-CAP2100AG

WatchGuard AP100 is an indoor wireless access point with
1 Gb ethernet port, dual-band but single-radio wireless,
internal antenna plates, and 802.3at PoE+

this board is a Senao device:
the hardware is equivalent to EnGenius EAP300 v2
the software is modified Senao SDK which is based on openwrt and uboot
including image checksum verification at boot time,
and a failsafe image that boots if checksum fails

**Specification:**

  - AR9344 SOC          MIPS 74kc, 2.4 GHz AND 5 GHz WMAC, 2x2
  - AR8035-A EPHY       RGMII GbE with PoE+ IN
  - 25 MHz clock
  - 16 MB FLASH         mx25l12805d
  - 2x 64 MB RAM
  - UART console        J11, populated
  - GPIO watchdog       GPIO 16, 20 sec toggle
  - 2 antennas          5 dBi, internal omni-directional plates
  - 5 LEDs              power, eth0 link/data, 2G, 5G
  - 1 button            reset

**MAC addresses:**

  Label has no MAC
  Only one Vendor MAC address in flash at art 0x0

  eth0 ---- *:e5 art 0x0 -2
  phy0 ---- *:e5 art 0x0 -2

**Installation:**

  Method 1: OEM webpage

    use OEM webpage for firmware upgrade to upload factory.bin

  Method 2: root shell

    It may be necessary to use a Watchguard router to flash the image to the AP
    and / or to downgrade the software on the AP to access SSH
    For some Watchguard devices, serial console over UART is disabled.

  NOTE: DHCP is not enabled by default after flashing

**TFTP recovery:**

  reset button has no function at boot time
  only possible with modified uboot environment,
  (see commit message for Watchguard AP300)

**Return to OEM:**

  user should make backup of MTD partitions
  and write the backups back to mtd devices
  in order to revert to OEM reliably

  It may be possible to use sysupgrade
  with an OEM image as well...
  (not tested)

**OEM upgrade info:**

  The OEM upgrade script is at /etc/fwupgrade.sh

  OKLI kernel loader is required because the OEM software
  expects the kernel to be no greater than 1536k
  and the factory.bin upgrade procedure would otherwise
  overwrite part of the kernel when writing rootfs.

**Note on eth0 PLL-data:**

  The default Ethernet Configuration register values will not work
  because of the external AR8035 switch between
  the SOC and the ethernet port.

  For AR934x series, the PLL registers for eth0
  can be see in the DTSI as 0x2c.
  Therefore the PLL registers can be read from uboot
  for each link speed after attempting tftpboot
  or another network action using that link speed
  with `md 0x1805002c 1`.

  The clock delay required for RGMII can be applied
  at the PHY side, using the at803x driver `phy-mode`.
  Therefore the PLL registers for GMAC0
  do not need the bits for delay on the MAC side.
  This is possible due to fixes in at803x driver
  since Linux 5.1 and 5.3

**Note on WatchGuard Magic string:**

  The OEM upgrade script is a modified version of
  the generic Senao sysupgrade script
  which is used on EnGenius devices.

  On WatchGuard boards produced by Senao,
  images are verified using a md5sum checksum of
  the upgrade image concatenated with a magic string.
  this checksum is then appended to the end of the final image.

  This variable does not apply to all the senao devices
  so set to null string as default

Tested-by: Steve Wheeler <stephenw10@gmail.com>
Signed-off-by: Michael Pratt <mcpratt@pm.me>
package/boot/uboot-envtools/files/ath79
target/linux/ath79/dts/ar9344_watchguard_ap100.dts [new file with mode: 0644]
target/linux/ath79/generic/base-files/etc/board.d/01_leds
target/linux/ath79/generic/base-files/etc/board.d/02_network
target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
target/linux/ath79/generic/base-files/lib/upgrade/platform.sh
target/linux/ath79/image/generic.mk

index 588c7dee027baf12a6158769f0f869dd1f8ff1f8..d9e504bf8949a5ef93e1641d01334fc61523bd68 100644 (file)
@@ -67,6 +67,7 @@ openmesh,om5p-ac-v1|\
 openmesh,om5p-ac-v2|\
 samsung,wam250|\
 ubnt,nanostation-m|\
+watchguard,ap100|\
 watchguard,ap200|\
 watchguard,ap300|\
 yuncore,a770|\
diff --git a/target/linux/ath79/dts/ar9344_watchguard_ap100.dts b/target/linux/ath79/dts/ar9344_watchguard_ap100.dts
new file mode 100644 (file)
index 0000000..d2ebe14
--- /dev/null
@@ -0,0 +1,84 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include "ar9344_senao_ap-dual.dtsi"
+
+/ {
+       compatible = "watchguard,ap100", "qca,ar9344";
+       model = "WatchGuard AP100";
+
+       aliases {
+               led-boot = &led_power_amber;
+               led-failsafe = &led_power_amber;
+               led-running = &led_power_green;
+               led-upgrade = &led_power_amber;
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               led_power_amber: power_amber {
+                       label = "amber:power";
+                       gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
+               };
+
+               led_power_green: power_green {
+                       label = "green:power";
+                       gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
+                       default-state = "on";
+               };
+
+               lan_data {
+                       label = "orange:lan_data";
+                       gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
+               };
+
+               lan_link {
+                       label = "green:lan_link";
+                       gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
+               };
+
+               wifi_amber {
+                       label = "amber:wifi";
+                       gpios = <&gpio 19 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "phy1tpt";
+               };
+
+               wifi_green {
+                       label = "green:wifi";
+                       gpios = <&gpio 18 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "phy0tpt";
+               };
+       };
+};
+
+&ref {
+       clock-frequency = <25000000>;
+};
+
+&eth0 {
+       nvmem-cells = <&macaddr_art_0>;
+       nvmem-cell-names = "mac-address";
+       mac-address-increment = <(-2)>;
+};
+
+&pcie {
+       status = "disabled";
+};
+
+&wmac {
+       /delete-property/ qca,disable-2ghz;
+
+       nvmem-cells = <&macaddr_art_0>;
+       nvmem-cell-names = "mac-address";
+       mac-address-increment = <(-2)>;
+};
+
+&art {
+       compatible = "nvmem-cells";
+       #address-cells = <1>;
+       #size-cells = <1>;
+
+       macaddr_art_0: macaddr@0 {
+               reg = <0x0 0x6>;
+       };
+};
index 57cd78989a393616a0b26c920c8489af9f068cae..606a194f7eb7baa9eca816d82df8b4cec7121416 100644 (file)
@@ -41,6 +41,7 @@ alfa-network,n5q)
        ucidef_set_led_rssi "signal4" "SIGNAL4" "green:signal4" "wlan0" "75" "100"
        ;;
 alfa-network,pi-wifi4|\
+watchguard,ap100|\
 watchguard,ap200|\
 watchguard,ap300)
        ucidef_set_led_netdev "lan_data" "LAN_DATA" "orange:lan_data" "eth0" "tx rx"
index f5adf354a0217dadb819cbc88de2c86f2876dead..3b69c2bded24e40c7940ecfc149a32983d2156cc 100644 (file)
@@ -110,6 +110,7 @@ ath79_setup_interfaces()
        ubnt,unifiac-lr|\
        ubnt,unifiac-mesh|\
        ubnt,unifi|\
+       watchguard,ap100|\
        watchguard,ap200|\
        watchguard,ap300|\
        wd,mynet-wifi-rangeextender|\
index 532f084c861b2df92423039cf2ab9090a3e37aaa..9127aed36e10ea1b70b1c0ed86cd049c2e5f7458 100644 (file)
@@ -91,6 +91,7 @@ case "$FIRMWARE" in
        tplink,tl-wdr4310-v1|\
        tplink,tl-wdr4900-v2|\
        ubnt,unifi-ap-pro|\
+       watchguard,ap100|\
        watchguard,ap200|\
        winchannel,wb2000)
                caldata_extract "art" 0x5000 0x440
index 104eaf302e1726453f04016f38cce62caf8dcf7a..8aa7e90ab8a8c7e30c314e406333b7ca6109b58d 100644 (file)
@@ -41,6 +41,7 @@ platform_do_upgrade() {
        engenius,ecb600|\
        engenius,ens202ext-v1|\
        engenius,enstationac-v1|\
+       watchguard,ap100|\
        watchguard,ap200|\
        watchguard,ap300)
                IMAGE_LIST="tar tzf $1"
index 6d23ba4be6b4529e55b78d3c2c440b36c2e90194..1ba02fc0fc512b9610bc0774f362db08573c2669 100644 (file)
@@ -2589,6 +2589,20 @@ define Device/wallys_dr531
 endef
 TARGET_DEVICES += wallys_dr531
 
+define Device/watchguard_ap100
+  $(Device/senao_loader_okli)
+  SOC := ar9344
+  DEVICE_VENDOR := WatchGuard
+  DEVICE_MODEL := AP100
+  IMAGE_SIZE := 12096k
+  LOADER_FLASH_OFFS := 0x220000
+  SENAO_IMGNAME := senao-ap100
+  WATCHGUARD_MAGIC := 82kdlzk2
+  IMAGE/factory.bin := append-kernel | pad-to $$$$(BLOCKSIZE) | append-rootfs | pad-rootfs | \
+       check-size | senao-tar-gz $$$$(SENAO_IMGNAME) | watchguard-cksum $$$$(WATCHGUARD_MAGIC)
+endef
+TARGET_DEVICES += watchguard_ap100
+
 define Device/watchguard_ap200
   $(Device/senao_loader_okli)
   SOC := ar9344