ath79: add support for ELECOM WAB-S600-PS
authorINAGAKI Hiroshi <musashino.open@gmail.com>
Thu, 22 Feb 2024 10:00:57 +0000 (19:00 +0900)
committerChristian Lamparter <chunkeey@gmail.com>
Sat, 2 Mar 2024 13:08:08 +0000 (14:08 +0100)
ELECOM WAB-S600-PS is a 2.4/5 GHz band 11n (Wi-Fi 4) access point, based
on QCA9557.
This device also supports 11ac (Wi-Fi 5) with the another official
firmware.

Specification:

- SoC              : Qualcomm Atheros QCA9557
- RAM              : DDR2 128 MiB (2x Winbond W9751G6KB251)
- Flash            : SPI-NOR 16 MiB (Macronix MX25L12835FMI-10G)
- WLAN             : 2.4/5 GHz 2T2R
  - 2.4 GHz        : Qualcomm Atheros QCA9557 (SoC)
  - 5 GHz          : Qualcomm Atheros QCA9882
- Ethernet         : 2x 10/100/1000 Mbps
  - phy ("PD")     : Atheros AR8035
  - phy ("PSE")    : Atheros AR8033
- LEDs/keys (GPIO) : 3x/3x
- UART             : 1x RJ-45 port
  - "SERVICE"      : TTL (3.3V)
    - port         : ttyS0
    - assignment   : 1:3.3V, 2:GND, 3:TX, 4:RX
    - settings     : 115200n8
    - note         : no compatibility with "Cisco console cable"
- Buzzer           : 1x GPIO-controlled
- USB              : 1x USB 2.0 Type-A
- Power            : DC jack or PoE
  - DC jack        : 12 VDC, 1 A (device only, rating)
  - PoE            : 802.3af/at, 48 VDC, 0.25 A (device only, rating)
  - note           : supports 802.3af supply on PSE (downstream) port
                     when powered by DC adapter or 802.3at PoE

Flash instruction using factory.bin image:

1. Boot WAB-S600-PS without no upstream connection (or PoE connection
   without DHCP)
2. Access to the WebUI ("http://192.168.3.1") on the device and open
   firmware update page
   ("ツールボックス" -> "ファームウェア更新")
3. Select the OpenWrt factory.bin image and click update
   ("アップデート") button
4. Wait ~120 seconds to complete flashing

Revert to OEM firmware:

1. Download the latest OEM firmware
2. Remove 128 bytes(0x80) header from firmware image
3. Decode by xor with a pattern "8844a2d168b45a2d" (hex val)
4. Upload the decoded firmware to the device
5. Flash to "firmware" partition by mtd command
6. Reboot

Notes:

- To use the "SERVICE" port, the connection of 3.3V line is also
  required to enable console output.
  The uart line of "SERVICE" is branched out from the internal pin
  header with 74HC126D and 3.3V line is connected to OE pin on it.

- The same PCB is used with WAB-S1167-PS.

- To supply 802.3af PoE on "PSE" port when powered by DC adapter, 12 VDC
  3.5 A adapter is recommended. (official: WAB-EX-ADP1)

MAC addresses:

Ethernet (PD, PSE): BC:5C:4C:xx:xx:7C (Config, ethaddr (text))
2.4GHz            : BC:5C:4C:xx:xx:7C (Config, ethaddr (text))
5GHz              : BC:5C:4C:xx:xx:7D

[original work of common dtsi part for WAB-I1750-PS]
Signed-off-by: Yanase Yuki <dev@zpc.st>
[adding support for WAB-S600-PS]
Signed-off-by: INAGAKI Hiroshi <musashino.open@gmail.com>
target/linux/ath79/dts/qca9557_elecom_wab-s600-ps.dts [new file with mode: 0644]
target/linux/ath79/dts/qca955x_elecom_wab.dtsi [new file with mode: 0644]
target/linux/ath79/generic/base-files/etc/board.d/02_network
target/linux/ath79/generic/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
target/linux/ath79/image/generic.mk

diff --git a/target/linux/ath79/dts/qca9557_elecom_wab-s600-ps.dts b/target/linux/ath79/dts/qca9557_elecom_wab-s600-ps.dts
new file mode 100644 (file)
index 0000000..8d4b1d3
--- /dev/null
@@ -0,0 +1,8 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include "qca955x_elecom_wab.dtsi"
+
+/ {
+       compatible = "elecom,wab-s600-ps", "qca,qca9557";
+       model = "ELECOM WAB-S600-PS";
+};
diff --git a/target/linux/ath79/dts/qca955x_elecom_wab.dtsi b/target/linux/ath79/dts/qca955x_elecom_wab.dtsi
new file mode 100644 (file)
index 0000000..f94f582
--- /dev/null
@@ -0,0 +1,261 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include "qca955x.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/leds/common.h>
+
+/ {
+       aliases {
+               led-boot = &led_status;
+               led-failsafe = &led_status;
+               led-upgrade = &led_status;
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               led-0 {
+                       gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
+                       color = <LED_COLOR_ID_GREEN>;
+                       function = LED_FUNCTION_WLAN;
+                       function-enumerator = <24>;
+                       linux,default-trigger = "phy1tpt";
+               };
+
+               led_status: led-1 {
+                       gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
+                       color = <LED_COLOR_ID_RED>;
+                       function = LED_FUNCTION_STATUS;
+               };
+
+               led-2 {
+                       gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
+                       color = <LED_COLOR_ID_GREEN>;
+                       function = LED_FUNCTION_USB;
+                       trigger-sources = <&usb_port1>;
+                       linux,default-trigger = "usbport";
+               };
+       };
+
+       keys {
+               compatible = "gpio-keys";
+
+               button-wps {
+                       label = "wps";
+                       gpios = <&gpio 16 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_WPS_BUTTON>;
+                       debounce-interval = <60>;
+               };
+
+               button-reset {
+                       label = "reset";
+                       gpios = <&gpio 18 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_RESTART>;
+                       debounce-interval = <60>;
+               };
+
+               button-eject {
+                       label = "eject";
+                       gpios = <&gpio 19 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_EJECTCD>;
+                       debounce-interval = <60>;
+               };
+       };
+
+       beeper {
+               compatible = "gpio-beeper";
+               gpios = <&gpio 4 GPIO_ACTIVE_HIGH>;
+       };
+
+       reg_usb_vbus: regulator {
+               compatible = "regulator-fixed";
+               regulator-name = "usb-vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&gpio 11 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               regulator-always-on;
+       };
+
+       watchdog {
+               compatible = "linux,wdt-gpio";
+               gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
+               hw_algo = "toggle";
+               hw_margin_ms = <300>;
+               always-running;
+       };
+};
+
+&mdio0 {
+       status = "okay";
+
+       ethphy4: ethernet-phy@4 {
+               compatible = "ethernet-phy-id004d,d072",
+                            "ethernet-phy-ieee802.3-c22";
+               reg = <0x4>;
+               eee-broken-100tx;
+               eee-broken-1000t;
+       };
+};
+
+&eth0 {
+       status = "okay";
+
+       phy-handle = <&ethphy4>;
+       phy-mode = "rgmii-rxid";
+       pll-data = <0xae000000 0x80000101 0x80001313>;
+
+       gmac-config {
+               device = <&gmac>;
+
+               rxdv-delay = <3>;
+               rxd-delay = <3>;
+               txen-delay = <0>;
+               txd-delay = <0>;
+               rgmii-enabled = <1>;
+       };
+};
+
+&mdio1 {
+       status = "okay";
+
+       ethphy1: ethernet-phy@1 {
+               compatible = "ethernet-phy-id004d,d074",
+                            "ethernet-phy-ieee802.3-c22";
+               reg = <0x1>;
+               at803x-override-sgmii-link-check;
+       };
+};
+
+&eth1 {
+       status = "okay";
+
+       phy-handle = <&ethphy1>;
+       pll-data = <0x03000000 0x00000101 0x00001313>;
+
+       qca955x-sgmii-fixup;
+};
+
+&pcie0 {
+       status = "okay";
+
+       wifi@0,0 {
+               compatible = "qcom,ath10k";
+               reg = <0x0000 0 0 0 0>;
+               nvmem-cells = <&cal_art_5000>;
+               nvmem-cell-names = "calibration";
+       };
+};
+
+&spi {
+       status = "okay";
+
+       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 = <0x0 0x40000>;
+                               read-only;
+                       };
+
+                       partition@40000 {
+                               label = "u-boot-env";
+                               reg = <0x40000 0x10000>;
+                               read-only;
+                       };
+
+                       partition@50000 {
+                               label = "art";
+                               reg = <0x50000 0x10000>;
+                               read-only;
+
+                               nvmem-layout {
+                                       compatible = "fixed-layout";
+                                       #address-cells = <1>;
+                                       #size-cells = <1>;
+
+                                       cal_art_1000: calibration@1000 {
+                                               reg = <0x1000 0x440>;
+                                       };
+
+                                       cal_art_5000: calibration@5000 {
+                                               reg = <0x5000 0x844>;
+                                       };
+                               };
+                       };
+
+                       partition@60000 {
+                               label = "art2";
+                               reg = <0x60000 0x10000>;
+                               read-only;
+                       };
+
+                       partition@70000 {
+                               compatible = "denx,uimage";
+                               label = "firmware";
+                               reg = <0x70000 0xe00000>;
+                       };
+
+                       partition@e70000 {
+                               label = "manufacture";
+                               reg = <0xe70000 0x100000>;
+                               read-only;
+                       };
+
+                       partition@f70000 {
+                               label = "backup";
+                               reg = <0xf70000 0x10000>;
+                               read-only;
+                       };
+
+                       partition@f80000 {
+                               label = "storage";
+                               reg = <0xf80000 0x80000>;
+                               read-only;
+                       };
+               };
+       };
+};
+
+&uart {
+       status = "okay";
+};
+
+&usb_phy0 {
+       status = "okay";
+};
+
+&usb0 {
+       #address-cells = <1>;
+       #size-cells = <0>;
+       status = "okay";
+
+       dr_mode = "host";
+       vbus-supply = <&reg_usb_vbus>;
+
+       usb_port1: port@1 {
+               reg = <1>;
+               #trigger-source-cells = <0>;
+       };
+};
+
+&wdt {
+       status = "disabled";
+};
+
+&wmac {
+       status = "okay";
+
+       nvmem-cells = <&cal_art_1000>;
+       nvmem-cell-names = "calibration";
+};
index 4ed5605fa22ead128b9c8e0e89ef5af97bc43297..56ef7dd51fbf9fe48b36cc78fe20828e9586ed9d 100644 (file)
@@ -144,6 +144,7 @@ ath79_setup_interfaces()
        alfa-network,n5q|\
        devolo,dvl1200e|\
        devolo,dvl1750e|\
+       elecom,wab-s600-ps|\
        engenius,enstationac-v1|\
        engenius,ews511ap|\
        engenius,ews660ap|\
@@ -702,16 +703,17 @@ ath79_setup_macs()
                lan_mac=$(mtd_get_mac_ascii devdata "lanmac")
                wan_mac=$(mtd_get_mac_ascii devdata "wanmac")
                ;;
-       elecom,wrc-1750ghbk2-i|\
-       elecom,wrc-300ghbk2-i)
-               wan_mac=$(mtd_get_mac_ascii hwconfig "HW.WAN.MAC.Address")
-               label_mac=$wan_mac
-               ;;
+       elecom,wab-s600-ps|\
        engenius,ecb1200|\
        engenius,ecb1750)
                lan_mac=$(mtd_get_mac_ascii u-boot-env ethaddr)
                label_mac=$lan_mac
                ;;
+       elecom,wrc-1750ghbk2-i|\
+       elecom,wrc-300ghbk2-i)
+               wan_mac=$(mtd_get_mac_ascii hwconfig "HW.WAN.MAC.Address")
+               label_mac=$wan_mac
+               ;;
        engenius,epg5000|\
        engenius,esr1200|\
        engenius,esr1750|\
index 1a845a4ed717fb539724621fa2a9984178c0b93c..3d24a4f31a8c3bbf69c284ec53e1fb5d3c2fc50c 100644 (file)
@@ -41,6 +41,14 @@ case "$board" in
                [ "$PHYNBR" -eq 1 ] && \
                        mtd_get_mac_ascii bdcfg "wlanmac" > /sys${DEVPATH}/macaddress
                ;;
+       elecom,wab-s600-ps)
+               # set the 5G MAC address (= ethaddr + 1)
+               [ "$PHYNBR" -eq 0 ] && \
+                       macaddr_add "$(mtd_get_mac_ascii u-boot-env ethaddr)" 1 > /sys${DEVPATH}/macaddress
+               # set the 2.4G MAC address (= ethaddr)
+               [ "$PHYNBR" -eq 1 ] && \
+                       mtd_get_mac_ascii u-boot-env "ethaddr" > /sys${DEVPATH}/macaddress
+               ;;
        engenius,ecb1200|\
        engenius,ecb1750)
                [ "$PHYNBR" -eq 0 ] && \
index 68c410556151304f8fb5e7b6df57c17363fa3508..16ef4fdca3836a0c14e36deb909ade07bbf520a4 100644 (file)
@@ -9,6 +9,7 @@ DEVICE_VARS += ADDPATTERN_ID ADDPATTERN_VERSION
 DEVICE_VARS += SEAMA_SIGNATURE SEAMA_MTDBLOCK
 DEVICE_VARS += KERNEL_INITRAMFS_PREFIX DAP_SIGNATURE
 DEVICE_VARS += EDIMAX_HEADER_MAGIC EDIMAX_HEADER_MODEL
+DEVICE_VARS += ELECOM_HWID
 DEVICE_VARS += MOXA_MAGIC MOXA_HWID
 DEVICE_VARS += OPENMESH_CE_TYPE ZYXEL_MODEL_STRING
 DEVICE_VARS += SUPPORTED_TELTONIKA_DEVICES
@@ -1316,6 +1317,24 @@ define Device/dlink_dir-869-a1
 endef
 TARGET_DEVICES += dlink_dir-869-a1
 
+define Device/elecom_wab
+  DEVICE_VENDOR := ELECOM
+  IMAGE_SIZE := 14336k
+  IMAGES += factory.bin
+  IMAGE/factory.bin := append-kernel | pad-to $$$$(BLOCKSIZE) | append-rootfs | \
+       pad-rootfs | check-size | elx-header $$$$(ELECOM_HWID) 8844A2D168B45A2D
+  DEVICE_PACKAGES := kmod-ath10k-ct ath10k-firmware-qca988x-ct kmod-gpio-beeper \
+       kmod-usb2 kmod-usb-ledtrig-usbport
+endef
+
+define Device/elecom_wab-s600-ps
+  $(Device/elecom_wab)
+  SOC := qca9557
+  DEVICE_MODEL := WAB-S600-PS
+  ELECOM_HWID := 01070028
+endef
+TARGET_DEVICES += elecom_wab-s600-ps
+
 define Device/elecom_wrc-1750ghbk2-i
   SOC := qca9563
   DEVICE_VENDOR := ELECOM