From 2791ee79fa32805be0c8adac4fd791c1ea79c8b0 Mon Sep 17 00:00:00 2001 From: INAGAKI Hiroshi Date: Thu, 22 Feb 2024 19:00:57 +0900 Subject: [PATCH] ath79: add support for ELECOM WAB-S600-PS MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 [adding support for WAB-S600-PS] Signed-off-by: INAGAKI Hiroshi --- .../ath79/dts/qca9557_elecom_wab-s600-ps.dts | 8 + .../linux/ath79/dts/qca955x_elecom_wab.dtsi | 261 ++++++++++++++++++ .../generic/base-files/etc/board.d/02_network | 12 +- .../etc/hotplug.d/ieee80211/10_fix_wifi_mac | 8 + target/linux/ath79/image/generic.mk | 19 ++ 5 files changed, 303 insertions(+), 5 deletions(-) create mode 100644 target/linux/ath79/dts/qca9557_elecom_wab-s600-ps.dts create mode 100644 target/linux/ath79/dts/qca955x_elecom_wab.dtsi 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 index 000000000000..8d4b1d3a852e --- /dev/null +++ b/target/linux/ath79/dts/qca9557_elecom_wab-s600-ps.dts @@ -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 index 000000000000..f94f58246858 --- /dev/null +++ b/target/linux/ath79/dts/qca955x_elecom_wab.dtsi @@ -0,0 +1,261 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT + +#include "qca955x.dtsi" + +#include +#include +#include + +/ { + 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 = ; + function = LED_FUNCTION_WLAN; + function-enumerator = <24>; + linux,default-trigger = "phy1tpt"; + }; + + led_status: led-1 { + gpios = <&gpio 14 GPIO_ACTIVE_LOW>; + color = ; + function = LED_FUNCTION_STATUS; + }; + + led-2 { + gpios = <&gpio 15 GPIO_ACTIVE_LOW>; + color = ; + 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 = ; + debounce-interval = <60>; + }; + + button-reset { + label = "reset"; + gpios = <&gpio 18 GPIO_ACTIVE_LOW>; + linux,code = ; + debounce-interval = <60>; + }; + + button-eject { + label = "eject"; + gpios = <&gpio 19 GPIO_ACTIVE_LOW>; + linux,code = ; + 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; + }; +}; + +ð0 { + status = "okay"; + + phy-handle = <ðphy4>; + 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; + }; +}; + +ð1 { + status = "okay"; + + phy-handle = <ðphy1>; + 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 = <®_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"; +}; 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 4ed5605fa22e..56ef7dd51fbf 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 @@ -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|\ diff --git a/target/linux/ath79/generic/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac b/target/linux/ath79/generic/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac index 1a845a4ed717..3d24a4f31a8c 100644 --- a/target/linux/ath79/generic/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac +++ b/target/linux/ath79/generic/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac @@ -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 ] && \ diff --git a/target/linux/ath79/image/generic.mk b/target/linux/ath79/image/generic.mk index 68c410556151..16ef4fdca383 100644 --- a/target/linux/ath79/image/generic.mk +++ b/target/linux/ath79/image/generic.mk @@ -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 -- 2.30.2