ath79: add support for Devolo Magic 2 WIFI
authorManuel Giganto <mgigantoregistros@gmail.com>
Mon, 16 Sep 2019 10:25:23 +0000 (10:25 +0000)
committerChuanhong Guo <gch981213@gmail.com>
Sat, 7 Mar 2020 03:02:13 +0000 (11:02 +0800)
This patch support Devolo Magic 2 WIFI, board devolo_dlan2-2400-ac.
This device is a plc wifi AC2400 router/extender with 2 Ethernet
ports, has a G.hn PLC and uses LCMP protocol from Home Grid Forum.

Hardware:
   SoC:         AR9344
   CPU:         560 MHz
   Flash:       16 MiB (W25Q128JVSIQ)
   RAM:         128 MiB DDR2
   Ethernet:    2xLAN 10/100/1000
   PLC:         88LX5152 (MaxLinear G.hn)
   PLC Flash:   W25Q32JVSSIQ
   PLC Uplink:  1Gbps MIMO
   PLC Link:    RGMII 1Gbps (WAN)
   WiFi:        Atheros AR9340 2.4GHz 802.11bgn
                Atheros AR9882-BR4A 5GHz 802.11ac
   Switch:      QCA8337, Port0:CPU, Port2:PLC, Port3:LAN1, Port4:LAN2
   Button:      3x Buttons (Reset, wifi and plc)
   LED:         3x Leds (wifi, plc white, plc red)
   GPIO Switch: 11-PLC Pairing (Active Low)
                13-PLC Enable
                21-WLAN power

MACs Details verified with the stock firmware:
   Radio1: 2.4 GHz &wmac     *:4c Art location: 0x1002
   Radio0: 5.0 GHz &pcie     *:4d Art location: 0x5006
   Ethernet        &ethernet *:4e = 2.4 GHz + 2
   PLC uplink      ---       *:4f = 2.4 GHz + 3
Label MAC address is from PLC uplink

OEM SSID: echo devolo-$(grep SerialNumber /dev/mtd1 | grep -o ...$)
OEM WiFi password: grep DlanSecurityID /dev/mtd1|tr -d -|cut -d'=' -f 2

Recommendations: Configure and link your PLC with OEM firmware
BEFORE you flash the device. PLC configuration/link should
remain in different memory and should work straight forward
after flashing.

Restrictions: PLC link detection to trigger plc red led is not
available. PLC G.hn chip is not compatible with open-plc-tools,
it uses LCMP protocol with AES-128 and requires different
software.

Notes: Pairing should be possible with gpio switch. Default
configuration will trigger wifi led with 2.4Ghz wifi traffic
and plc white led with wan traffic.

Flash instruction (TFTP):
 1. Set PC to fixed ip address 192.168.0.100
 2. Download the sysupgrade image and rename it to uploadfile
 3. Start a tftp server with the image file in its root directory
 4. Turn off the router
 5. Press and hold Reset button
 6. Turn on router with the reset button pressed and wait ~15 seconds
 7. Release the reset button and after a short time
    the firmware should be transferred from the tftp server
 8. Allow 1-2 minutes for the first boot.

Signed-off-by: Manuel Giganto <mgigantoregistros@gmail.com>
package/boot/uboot-envtools/files/ath79
target/linux/ath79/dts/ar9344_devolo_magic-2-wifi.dts [new file with mode: 0644]
target/linux/ath79/generic/base-files/etc/board.d/01_leds
target/linux/ath79/generic/base-files/etc/board.d/02_network
target/linux/ath79/generic/base-files/etc/board.d/03_gpio_switches
target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
target/linux/ath79/image/generic.mk

index e37e5a9b2137a2ec2b87c8a7adb08eb87f1e473d..60a1ffb6bcd38363f311d66520214397fb4b533d 100644 (file)
@@ -15,6 +15,7 @@ board=$(board_name)
 case "$board" in
 alfa-network,ap121f|\
 buffalo,bhr-4grv2|\
+devolo,magic-2-wifi|\
 domywifi,dw33d|\
 engenius,ecb1750|\
 etactica,eg200|\
diff --git a/target/linux/ath79/dts/ar9344_devolo_magic-2-wifi.dts b/target/linux/ath79/dts/ar9344_devolo_magic-2-wifi.dts
new file mode 100644 (file)
index 0000000..4f58cd5
--- /dev/null
@@ -0,0 +1,182 @@
+// 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 "ar9344.dtsi"
+
+/ {
+       model = "Devolo Magic 2 Wifi";
+       compatible = "devolo,magic-2-wifi", "qca,ar9344";
+
+       aliases {
+               led-boot = &led_dlan_red;
+               led-failsafe = &led_dlan_red;
+               led-running = &led_dlan_white;
+               led-upgrade = &led_dlan_red;
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               wlan {
+                       label = "devolo:white:wlan";
+                       gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "phy1tpt";
+               };
+
+               led_dlan_white: dlan_white {
+                       label = "devolo:white:dlan";
+                       gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
+               };
+
+               led_dlan_red: dlan_red {
+                       label = "devolo:red:dlan";
+                       gpios = <&gpio 15 GPIO_ACTIVE_HIGH>;
+                       panic-indicator;
+               };
+       };
+
+       keys {
+               compatible = "gpio-keys";
+
+               reset {
+                       label = "Reset button";
+                       linux,code = <KEY_RESTART>;
+                       gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
+                       debounce-interval = <60>;
+               };
+
+               wifi {
+                       label = "WIFI button";
+                       linux,code = <KEY_RFKILL>;
+                       gpios = <&gpio 20 GPIO_ACTIVE_HIGH>;
+                       debounce-interval = <60>;
+               };
+
+               dlan {
+                       label = "DLAN button";
+                       linux,code = <BTN_0>;
+                       gpios = <&gpio 22 GPIO_ACTIVE_LOW>;
+                       debounce-interval = <60>;
+               };
+       };
+};
+
+&gpio {
+       status = "okay";
+
+       wlan_power {
+               gpio-hog;
+               line-name = "WLAN power";
+               gpios = <&gpio 21 GPIO_ACTIVE_HIGH>;
+               output-high;
+       };
+};
+
+&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>;
+
+                       uboot: partition@0 {
+                               label = "u-boot";
+                               reg = <0x0 0x40000>;
+                               read-only;
+                       };
+
+                       partition@40000 {
+                               label = "u-boot-env";
+                               reg = <0x40000 0x10000>;
+                               read-only;
+                       };
+
+                       partition@50000 {
+                               label = "Config1";
+                               reg = <0x50000 0x10000>;
+                               read-only;
+                       };
+
+                       partition@60000 {
+                               label = "Config2";
+                               reg = <0x60000 0x10000>;
+                               read-only;
+                       };
+
+                       partition@70000 {
+                               compatible = "denx,uimage";
+                               label = "firmware";
+                               reg = <0x70000 0xf80000>;
+                       };
+
+                       art: partition@ff0000 {
+                               label = "art";
+                               reg = <0xff0000 0x10000>;
+                               read-only;
+                       };
+               };
+       };
+};
+
+&ref {
+       clock-frequency = <40000000>;
+};
+
+&uart {
+       status = "okay";
+};
+
+&eth0 {
+       status = "okay";
+
+       pll-data = <0x02000000 0x00000101 0x00001616>;
+
+       mtd-mac-address = <&art 0x1002>;
+       mtd-mac-address-increment = <2>;
+
+       phy-mode = "rgmii";
+       phy-handle = <&phy0>;
+};
+
+&wmac {
+       status = "okay";
+
+       mtd-cal-data = <&art 0x1000>;
+};
+
+&pcie {
+       status = "okay";
+
+       wifi@0,0 {
+               compatible = "qcom,ath10k";
+               reg = <0 0 0 0 0>;
+       };
+};
+
+&mdio0 {
+       status = "okay";
+
+       phy0: ethernet-phy@0 {
+               reg = <0>;
+               phy-mode = "rgmii";
+
+               qca,ar8327-initvals = <
+                       /* PORT0: RGMII, MAC0/6 exchage, tx_delay 01, No rx_delay */
+                       0x04 0x06400000
+                       0x08 0x00000000 /* PORT5 PAD MODE CTRL */
+                       0x0c 0x00000000 /* PORT6 PAD MODE CTRL */
+                       0x7c 0x0000007e /* PORT0_STATUS */
+               >;
+       };
+};
index 6668e15a74dd4167ed6ee1a1e65400a93eebd1e8..390f5f3657e51b5441a5a855a92fec634b86e7de 100755 (executable)
@@ -80,6 +80,9 @@ comfast,cf-e560ac)
        ucidef_set_led_switch "lan3" "LAN3" "$boardname:blue:lan3" "switch0" "0x08"
        ucidef_set_led_switch "lan4" "LAN4" "$boardname:blue:lan4" "switch0" "0x10"
        ;;
+devolo,magic-2-wifi)
+       ucidef_set_led_netdev "plcw" "dLAN" "devolo:white:dlan" "eth0.1" "rx"
+       ;;
 dlink,dir-842-c1|\
 dlink,dir-842-c2|\
 dlink,dir-842-c3|\
index ef58d9e124a0251d622ee126f27e312fffca0840..ac0ee5b2eb7b201866d8f0e91a1d5d03def1060b 100755 (executable)
@@ -123,6 +123,10 @@ ath79_setup_interfaces()
        ocedo,ursus)
                ucidef_set_interface_lan "eth0 eth1"
                ;;
+       devolo,magic-2-wifi)
+               ucidef_add_switch "switch0" \
+                       "0@eth0" "2:wan" "3:lan" "4:lan"
+               ;;
        dlink,dir-825-b1)
                ucidef_set_interface_wan "eth1"
                ucidef_add_switch "switch0" \
@@ -328,6 +332,9 @@ ath79_setup_macs()
                lan_mac=$(fritz_tffs -n maca -i $(find_mtd_part "tffs (1)"))
                wan_mac=$(fritz_tffs -n macb -i $(find_mtd_part "tffs (1)"))
                ;;
+       devolo,magic-2-wifi)
+               label_mac=$(macaddr_add "$(mtd_get_mac_binary art 0x1002)" 3)
+               ;;
        dlink,dir-825-b1)
                lan_mac=$(mtd_get_mac_text "caldata" 0xffa0)
                wan_mac=$(mtd_get_mac_text "caldata" 0xffb4)
index b5b46f16bfaa44410712907dee7e1549ed0e268d..051c468f87bbdc645d6baf9e60ceed37086617b4 100755 (executable)
@@ -31,6 +31,10 @@ comfast,cf-e5)
        ucidef_add_gpio_switch "lte_poweroff" "LTE Poweroff" "1" "1"
        ucidef_add_gpio_switch "lte_reset" "LTE Reset" "12" "1"
        ;;
+devolo,magic-2-wifi)
+       ucidef_add_gpio_switch "plc_pairing" "PLC pairing" "11" "1"
+       ucidef_add_gpio_switch "plc_enable" "PLC enable" "13" "1"
+       ;;
 dlink,dir-825-c1|\
 dlink,dir-835-a1)
        ucidef_add_gpio_switch "wan_led_auto" "WAN LED Auto" "20" "0"
index 877a1391a97a74fb8b3056195ad4921d90beb231..ed81e6e8f500b49df03f3d852c11c72c13a74647 100644 (file)
@@ -13,6 +13,7 @@ case "$FIRMWARE" in
        case $board in
        comfast,cf-wr650ac-v1|\
        comfast,cf-wr650ac-v2|\
+       devolo,magic-2-wifi|\
        ubnt,unifiac-lite|\
        ubnt,unifiac-lr|\
        ubnt,unifiac-mesh|\
index 3c0aa2ee4d6869ae8641654db1d905b6934da64a..c5e3df9539c32afc2135c1d0170ab0bc39b0d756 100644 (file)
@@ -401,6 +401,15 @@ define Device/devolo_dvl1750x
 endef
 TARGET_DEVICES += devolo_dvl1750x
 
+define Device/devolo_magic-2-wifi
+  SOC := ar9344
+  DEVICE_VENDOR := Devolo
+  DEVICE_MODEL := Magic 2 WiFi
+  DEVICE_PACKAGES := kmod-ath10k-ct ath10k-firmware-qca988x-ct
+  IMAGE_SIZE := 15872k
+endef
+TARGET_DEVICES += devolo_magic-2-wifi
+
 define Device/dlink_dir-505
   SOC := ar9330
   DEVICE_VENDOR := D-Link