ath79: add support for ELECOM WAB-S600-PS

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>
This commit is contained in:
INAGAKI Hiroshi 2024-02-22 19:00:57 +09:00 committed by Christian Lamparter
parent f5b2b08190
commit 2791ee79fa
5 changed files with 303 additions and 5 deletions

View File

@ -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";
};

View File

@ -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";
};

View File

@ -144,6 +144,7 @@ ath79_setup_interfaces()
alfa-network,n5q|\ alfa-network,n5q|\
devolo,dvl1200e|\ devolo,dvl1200e|\
devolo,dvl1750e|\ devolo,dvl1750e|\
elecom,wab-s600-ps|\
engenius,enstationac-v1|\ engenius,enstationac-v1|\
engenius,ews511ap|\ engenius,ews511ap|\
engenius,ews660ap|\ engenius,ews660ap|\
@ -702,16 +703,17 @@ ath79_setup_macs()
lan_mac=$(mtd_get_mac_ascii devdata "lanmac") lan_mac=$(mtd_get_mac_ascii devdata "lanmac")
wan_mac=$(mtd_get_mac_ascii devdata "wanmac") wan_mac=$(mtd_get_mac_ascii devdata "wanmac")
;; ;;
elecom,wrc-1750ghbk2-i|\ elecom,wab-s600-ps|\
elecom,wrc-300ghbk2-i)
wan_mac=$(mtd_get_mac_ascii hwconfig "HW.WAN.MAC.Address")
label_mac=$wan_mac
;;
engenius,ecb1200|\ engenius,ecb1200|\
engenius,ecb1750) engenius,ecb1750)
lan_mac=$(mtd_get_mac_ascii u-boot-env ethaddr) lan_mac=$(mtd_get_mac_ascii u-boot-env ethaddr)
label_mac=$lan_mac 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,epg5000|\
engenius,esr1200|\ engenius,esr1200|\
engenius,esr1750|\ engenius,esr1750|\

View File

@ -41,6 +41,14 @@ case "$board" in
[ "$PHYNBR" -eq 1 ] && \ [ "$PHYNBR" -eq 1 ] && \
mtd_get_mac_ascii bdcfg "wlanmac" > /sys${DEVPATH}/macaddress 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,ecb1200|\
engenius,ecb1750) engenius,ecb1750)
[ "$PHYNBR" -eq 0 ] && \ [ "$PHYNBR" -eq 0 ] && \

View File

@ -9,6 +9,7 @@ DEVICE_VARS += ADDPATTERN_ID ADDPATTERN_VERSION
DEVICE_VARS += SEAMA_SIGNATURE SEAMA_MTDBLOCK DEVICE_VARS += SEAMA_SIGNATURE SEAMA_MTDBLOCK
DEVICE_VARS += KERNEL_INITRAMFS_PREFIX DAP_SIGNATURE DEVICE_VARS += KERNEL_INITRAMFS_PREFIX DAP_SIGNATURE
DEVICE_VARS += EDIMAX_HEADER_MAGIC EDIMAX_HEADER_MODEL DEVICE_VARS += EDIMAX_HEADER_MAGIC EDIMAX_HEADER_MODEL
DEVICE_VARS += ELECOM_HWID
DEVICE_VARS += MOXA_MAGIC MOXA_HWID DEVICE_VARS += MOXA_MAGIC MOXA_HWID
DEVICE_VARS += OPENMESH_CE_TYPE ZYXEL_MODEL_STRING DEVICE_VARS += OPENMESH_CE_TYPE ZYXEL_MODEL_STRING
DEVICE_VARS += SUPPORTED_TELTONIKA_DEVICES DEVICE_VARS += SUPPORTED_TELTONIKA_DEVICES
@ -1316,6 +1317,24 @@ define Device/dlink_dir-869-a1
endef endef
TARGET_DEVICES += dlink_dir-869-a1 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 define Device/elecom_wrc-1750ghbk2-i
SOC := qca9563 SOC := qca9563
DEVICE_VENDOR := ELECOM DEVICE_VENDOR := ELECOM