ath79: add support for COMFAST CF-E313AC
authorRoger Pueyo Centelles <roger.pueyo@guifi.net>
Mon, 18 Mar 2019 12:20:47 +0000 (13:20 +0100)
committerChuanhong Guo <gch981213@gmail.com>
Sun, 13 Oct 2019 12:34:57 +0000 (20:34 +0800)
This patch adds support for the COMFAST CF-E313AC, an  outdoor wireless
CPE with two Ethernet ports and a 802.11ac radio.

Specifications:

 - QCA9531 SoC
 - 650/400/216 MHz (CPU/DDR/AHB)
 - 1x 10/100 Mbps WAN Ethernet, 48V PoE-in
 - 1x 10/100 Mbps LAN Ethernet, pass-through 48V PoE-out
 - 1x manual pass-through PoE switch
 - 64 MB RAM (DDR2)
 - 16 MB FLASH
 - QCA9886 2T2R 5 GHz 802.11ac, 23 dBm
 - 12 dBi built-in antenna
 - POWER/LAN/WAN/WLAN green LEDs
 - 4x RSSI LEDs (2x red, 2x green)
 - UART (115200 8N1)

Flashing instructions:

 The original firmware is based on OpenWrt so a sysupgrade image can be
 installed via the stock web GUI. Settings from the original firmware
 will be saved and restored on the new one, so a factory reset will be
 needed. To do so, once the new firmware is flashed, enter into failsafe
 mode by pressing the reset button several times during the boot
 process, while the WAN LED flashes, until it starts flashing faster.
 Once in failsafe mode, perform a factory reset as usual.

 Alternatively, the U-boot bootloader contains a recovery HTTP server
 to upload the  firmware. Push the reset button while powering the
 device on and keep it pressed for >10 seconds. The device's LEDs will
 blink several times and the recovery page will be at
 http://192.168.1.1; use it to upload the sysupgrade image.

Note:

 Four MAC addresses are stored in the "art" partition (read-only):
  - 0x0000: 40:A5:EF:AA:AA:A0
  - 0x0006: 40:A5:EF:AA:AA:A2
  - 0x1002: 40:A5:EF:AA:AA:A1
  - 0x5006: 40:A5:EF:AA.AA:A3 (inside the 5 GHz calibration data)

 The stock firmware assigns MAC addresses to physical and virtual
 interfaces in a very particular way:
  - eth0 corresponds to the physical Ethernet port labeled as WAN
  - eth1 corresponds to the physical Ethernet port labeled as LAN

  - eth0 belongs to the bridge interface br-wan
  - eth1 belongs to the bridge interface br-lan

  - eth0 is assigned the MAC from 0x0 (*:A0)
  - eth1 is assigned the MAC from 0x1002 (*:A1)

  - br-wan is forced to use the MAC from 0x1002 (*:A1)
  - br-lan is forced to use the MAC from 0x0 (*:A0)

  - radio0 uses the calibration data from 0x5000 (which contains
    a valid MAC address, *:A3). However, it is overwritten by the
    one at 0x6 (*:A2)

 This commit preserves the LAN/WAN roles of the physical Ethernet
 ports (as labeled on the router) and the MAC addresses they expose
 by default (i.e., *:A0 on LAN, *:A1 on WAN), but swaps the position
 of the eth0/eth1 compared to the stock firmware:
  - eth0 corresponds to the physical Ethernet port labeled as LAN
  - eth1 corresponds to the physical Ethernet port labeled as WAN

  - eth0 belongs to the bridge interface br-lan
  - eth1 is the interface at @wan

  - eth0 is assigned the MAC from 0x0 (*:A0)
  - eth1 is assigned the MAC from 0x1002 (*:A1)

  - br-lan inherits the MAC from eth0 (*:A0)
  - @wan inherits the MAC from eth1 (*:A1)

  - radio0's MAC is overwritten to the one at 0x6

This way, eth0/eth1's positions differ from the stock firmware, but
the weird MAC ressignations in br-lan/br-wan are avoided while the
external behaviour of the router is maintained. Additionally, WAN
port is connected to the PHY gmac, allowing to monitor the link
status (e.g., to restart DHCP negotiation when plugging a cable).

Signed-off-by: Roger Pueyo Centelles <roger.pueyo@guifi.net>
target/linux/ath79/base-files/etc/board.d/01_leds
target/linux/ath79/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
target/linux/ath79/dts/qca9531_comfast_cf-e313ac.dts [new file with mode: 0644]
target/linux/ath79/image/generic.mk

index 778316e45039448358de4e202684c042c9c20542..4ea9586d3dd03816b37bf20bc60ef030f5b09e62 100755 (executable)
@@ -54,6 +54,15 @@ comfast,cf-e120a-v3)
        ucidef_set_led_rssi "rssimediumhigh" "RSSIMEDIUMHIGH" "$boardname:green:rssimediumhigh" "wlan0" "51" "100"
        ucidef_set_led_rssi "rssihigh" "RSSIHIGH" "$boardname:green:rssihigh" "wlan0" "76" "100"
        ;;
+comfast,cf-e313ac)
+       ucidef_set_led_switch "lan" "LAN" "$boardname:green:lan" "switch0" "0x02"
+       ucidef_set_led_netdev "wan" "WAN" "$boardname:green:wan" "eth1"
+       ucidef_set_rssimon "wlan0" "200000" "1"
+       ucidef_set_led_rssi "rssilow" "RSSILOW" "$boardname:red:rssilow" "wlan0" "1" "100"
+       ucidef_set_led_rssi "rssimediumlow" "RSSIMEDIUMLOW" "$boardname:red:rssimediumlow" "wlan0" "26" "100"
+       ucidef_set_led_rssi "rssimediumhigh" "RSSIMEDIUMHIGH" "$boardname:green:rssimediumhigh" "wlan0" "51" "100"
+       ucidef_set_led_rssi "rssihigh" "RSSIHIGH" "$boardname:green:rssihigh" "wlan0" "76" "100"
+       ;;
 comfast,cf-e314n-v2)
        ucidef_set_led_netdev "wan" "WAN" "$boardname:green:wan" "eth0"
        ucidef_set_led_netdev "lan" "LAN" "$boardname:green:lan" "eth1"
index 446b729a2b6cb7a9345e77dc5c0afa5ff50b41e9..0aa8f3d918948fa9e4bc4c671c386825cb0b9954 100644 (file)
@@ -192,6 +192,13 @@ case "$FIRMWARE" in
        ;;
 "ath10k/pre-cal-pci-0000:00:00.0.bin")
        case $board in
+       comfast,cf-e313ac)
+               ath10kcal_extract "art" 0x5000 0x2f20
+               ath10kcal_patch_mac_crc $(mtd_get_mac_binary art 0x6)
+               ln -sf /lib/firmware/ath10k/pre-cal-pci-0000\:00\:00.0.bin \
+                       /lib/firmware/ath10k/QCA9888/hw2.0/board.bin
+               rm /lib/firmware/ath10k/QCA9888/hw2.0/board-2.bin
+               ;;
        dlink,dir-842-c1|\
        dlink,dir-842-c2|\
        dlink,dir-842-c3|\
diff --git a/target/linux/ath79/dts/qca9531_comfast_cf-e313ac.dts b/target/linux/ath79/dts/qca9531_comfast_cf-e313ac.dts
new file mode 100644 (file)
index 0000000..b29dc17
--- /dev/null
@@ -0,0 +1,148 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/dts-v1/;
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+#include "qca953x.dtsi"
+
+/ {
+       compatible = "comfast,cf-e313ac", "qca,qca9531";
+       model = "COMFAST CF-E313AC";
+
+       aliases {
+               serial0 = &uart;
+               led-boot = &rssihigh;
+               led-failsafe = &rssihigh;
+               led-upgrade = &rssihigh;
+               label-mac-device = &eth1;
+       };
+
+       leds {
+               compatible = "gpio-leds";
+               pinctrl-names = "default";
+
+               wlan {
+                       label = "cf-e313ac:green:wlan";
+                       gpios = <&gpio 0 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "phy0tpt";
+               };
+
+               lan {
+                       label = "cf-e313ac:green:lan";
+                       gpios = <&gpio 2 GPIO_ACTIVE_LOW>;
+               };
+
+               wan {
+                       label = "cf-e313ac:green:wan";
+                       gpios = <&gpio 3 GPIO_ACTIVE_LOW>;
+               };
+
+               rssilow {
+                       label = "cf-e313ac:red:rssilow";
+                       gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
+               };
+
+               rssimediumlow {
+                       label = "cf-e313ac:red:rssimediumlow";
+                       gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
+               };
+
+               rssimediumhigh {
+                       label = "cf-e313ac:green:rssimediumhigh";
+                       gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
+               };
+
+               rssihigh: rssihigh {
+                       label = "cf-e313ac:green:rssihigh";
+                       gpios = <&gpio 16 GPIO_ACTIVE_LOW>;
+               };
+       };
+
+       keys {
+               compatible = "gpio-keys";
+
+               reset {
+                       label = "reset";
+                       linux,code = <KEY_RESTART>;
+                       gpios = <&gpio 17 GPIO_ACTIVE_LOW>;
+                       debounce-interval = <60>;
+               };
+       };
+};
+
+&spi {
+       status = "okay";
+       num-cs = <1>;
+
+       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 = <0x000000 0x010000>;
+                               read-only;
+                       };
+
+                       art: partition@10000 {
+                               label = "art";
+                               reg = <0x010000 0x010000>;
+                               read-only;
+                       };
+
+                       partition@20000 {
+                               compatible = "denx,uimage";
+                               label = "firmware";
+                               reg = <0x020000 0x7c0000>;
+                       };
+
+                       partition@7e0000 {
+                               label = "config";
+                               reg = <0x7e0000 0x010000>;
+                               read-only;
+                       };
+
+                       partition@7f0000 {
+                               label = "nvram";
+                               reg = <0x7f0000 0x010000>;
+                               read-only;
+                       };
+               };
+       };
+};
+
+&uart {
+       status = "okay";
+};
+
+&eth0 {
+       status = "okay";
+       phy-handle = <&swphy0>;
+       mtd-mac-address = <&art 0x1002>;
+
+       gmac-config {
+               device = <&gmac>;
+               switch-phy-swap = <1>;
+       };
+};
+
+&eth1 {
+       status = "okay";
+       mtd-mac-address = <&art 0x0>;
+};
+
+&pcie0 {
+       status = "okay";
+
+       wifi@0,0 {
+               compatible = "qcom,ath10k";
+               reg = <0 0 0 0 0>;
+       };
+};
index cb6a38126aae13d4a90afe6c9315d7f398e5385b..acb1ab4b0b7a68710960b94e3adc94253c288b26 100644 (file)
@@ -258,6 +258,16 @@ define Device/comfast_cf-e120a-v3
 endef
 TARGET_DEVICES += comfast_cf-e120a-v3
 
+define Device/comfast_cf-e313ac
+  ATH_SOC := qca9531
+  DEVICE_VENDOR := COMFAST
+  DEVICE_MODEL := CF-E313AC
+  DEVICE_PACKAGES := rssileds kmod-leds-gpio kmod-ath10k-ct ath10k-firmware-qca9888-ct \
+       -swconfig -uboot-envtools
+  IMAGE_SIZE := 7936k
+endef
+TARGET_DEVICES += comfast_cf-e313ac
+
 define Device/comfast_cf-e314n-v2
   ATH_SOC := qca9531
   DEVICE_VENDOR := COMFAST