[openwrt/openwrt] ath79: add support for Senao WatchGuard AP200

LEDE Commits lede-commits at lists.infradead.org
Sun Sep 11 12:55:45 PDT 2022


hauke pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/9f6e24785439d7838fc7a338505cbfac9687a90d

commit 9f6e24785439d7838fc7a338505cbfac9687a90d
Author: Michael Pratt <mcpratt at pm.me>
AuthorDate: Sat Jun 12 15:08:18 2021 -0400

    ath79: add support for Senao WatchGuard AP200
    
    FCC ID: U2M-CAP4200AG
    
    WatchGuard AP200 is an indoor wireless access point with
    1 Gb ethernet port, dual-band wireless,
    internal antenna plates, and 802.3at PoE+
    
    this board is a Senao device:
    the hardware is equivalent to EnGenius EAP600
    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 WMAC, 2x2
      - AR9382 WLAN         PCI card 168c:0030, 5 GHz, 2x2, 26dBm
      - 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
      - 4 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 ---- *:be art 0x0 -2
      phy1 ---- *:bf art 0x0 -1
      phy0 ---- *:be 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 at gmail.com>
    Tested-by: John Delaney <johnd at ankco.net>
    Signed-off-by: Michael Pratt <mcpratt at pm.me>
---
 package/boot/uboot-envtools/files/ath79            |  1 +
 target/linux/ath79/dts/ar9344_watchguard_ap200.dts | 86 ++++++++++++++++++++++
 .../ath79/generic/base-files/etc/board.d/01_leds   |  1 +
 .../generic/base-files/etc/board.d/02_network      |  1 +
 .../etc/hotplug.d/firmware/10-ath9k-eeprom         |  1 +
 .../generic/base-files/lib/upgrade/platform.sh     |  1 +
 target/linux/ath79/image/generic.mk                | 14 ++++
 7 files changed, 105 insertions(+)

diff --git a/package/boot/uboot-envtools/files/ath79 b/package/boot/uboot-envtools/files/ath79
index 64b2b34d8a..588c7dee02 100644
--- a/package/boot/uboot-envtools/files/ath79
+++ b/package/boot/uboot-envtools/files/ath79
@@ -67,6 +67,7 @@ openmesh,om5p-ac-v1|\
 openmesh,om5p-ac-v2|\
 samsung,wam250|\
 ubnt,nanostation-m|\
+watchguard,ap200|\
 watchguard,ap300|\
 yuncore,a770|\
 yuncore,a782|\
diff --git a/target/linux/ath79/dts/ar9344_watchguard_ap200.dts b/target/linux/ath79/dts/ar9344_watchguard_ap200.dts
new file mode 100644
index 0000000000..0cd966476c
--- /dev/null
+++ b/target/linux/ath79/dts/ar9344_watchguard_ap200.dts
@@ -0,0 +1,86 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include "ar9344_senao_ap-dual.dtsi"
+
+/ {
+	compatible = "watchguard,ap200", "qca,ar9344";
+	model = "WatchGuard AP200";
+
+	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 {
+	wifi at 0,0,0 {
+		nvmem-cells = <&macaddr_art_0>;
+		nvmem-cell-names = "mac-address";
+		mac-address-increment = <(-1)>;
+	};
+};
+
+&wmac {
+	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 at 0 {
+		reg = <0x0 0x6>;
+	};
+};
diff --git a/target/linux/ath79/generic/base-files/etc/board.d/01_leds b/target/linux/ath79/generic/base-files/etc/board.d/01_leds
index d5395e74b7..57cd78989a 100644
--- a/target/linux/ath79/generic/base-files/etc/board.d/01_leds
+++ b/target/linux/ath79/generic/base-files/etc/board.d/01_leds
@@ -41,6 +41,7 @@ alfa-network,n5q)
 	ucidef_set_led_rssi "signal4" "SIGNAL4" "green:signal4" "wlan0" "75" "100"
 	;;
 alfa-network,pi-wifi4|\
+watchguard,ap200|\
 watchguard,ap300)
 	ucidef_set_led_netdev "lan_data" "LAN_DATA" "orange:lan_data" "eth0" "tx rx"
 	ucidef_set_led_netdev "lan_link" "LAN_LINK" "green:lan_link" "eth0" "link"
diff --git a/target/linux/ath79/generic/base-files/etc/board.d/02_network b/target/linux/ath79/generic/base-files/etc/board.d/02_network
index 95260c016a..f5adf354a0 100644
--- a/target/linux/ath79/generic/base-files/etc/board.d/02_network
+++ b/target/linux/ath79/generic/base-files/etc/board.d/02_network
@@ -110,6 +110,7 @@ ath79_setup_interfaces()
 	ubnt,unifiac-lr|\
 	ubnt,unifiac-mesh|\
 	ubnt,unifi|\
+	watchguard,ap200|\
 	watchguard,ap300|\
 	wd,mynet-wifi-rangeextender|\
 	winchannel,wb2000|\
diff --git a/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom b/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
index df293c44db..532f084c86 100644
--- a/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
+++ b/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
@@ -91,6 +91,7 @@ case "$FIRMWARE" in
 	tplink,tl-wdr4310-v1|\
 	tplink,tl-wdr4900-v2|\
 	ubnt,unifi-ap-pro|\
+	watchguard,ap200|\
 	winchannel,wb2000)
 		caldata_extract "art" 0x5000 0x440
 		;;
diff --git a/target/linux/ath79/generic/base-files/lib/upgrade/platform.sh b/target/linux/ath79/generic/base-files/lib/upgrade/platform.sh
index d80927679d..104eaf302e 100644
--- a/target/linux/ath79/generic/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ath79/generic/base-files/lib/upgrade/platform.sh
@@ -41,6 +41,7 @@ platform_do_upgrade() {
 	engenius,ecb600|\
 	engenius,ens202ext-v1|\
 	engenius,enstationac-v1|\
+	watchguard,ap200|\
 	watchguard,ap300)
 		IMAGE_LIST="tar tzf $1"
 		IMAGE_CMD="tar xzOf $1"
diff --git a/target/linux/ath79/image/generic.mk b/target/linux/ath79/image/generic.mk
index b0b8b70ba4..6d23ba4be6 100644
--- a/target/linux/ath79/image/generic.mk
+++ b/target/linux/ath79/image/generic.mk
@@ -2589,6 +2589,20 @@ define Device/wallys_dr531
 endef
 TARGET_DEVICES += wallys_dr531
 
+define Device/watchguard_ap200
+  $(Device/senao_loader_okli)
+  SOC := ar9344
+  DEVICE_VENDOR := WatchGuard
+  DEVICE_MODEL := AP200
+  IMAGE_SIZE := 12096k
+  LOADER_FLASH_OFFS := 0x220000
+  SENAO_IMGNAME := senao-ap200
+  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_ap200
+
 define Device/watchguard_ap300
   $(Device/senao_loader_okli)
   SOC := qca9558




More information about the lede-commits mailing list