ath79: add support for Devolo dLAN pro 1200+ WiFi ac
authorFelix Matouschek <felix@matouschek.org>
Thu, 18 Feb 2021 22:12:01 +0000 (23:12 +0100)
committerAdrian Schmutzler <freifunk@adrianschmutzler.de>
Sun, 6 Jun 2021 16:56:45 +0000 (18:56 +0200)
This patch adds support for the Devolo dLAN pro 1200+ WiFi ac.
This device is a plc wifi AC2400 router/extender with 2 Ethernet ports,
has a QCA7500 PLC and uses the HomePlug AV2 standard.

Other than the PLC the hardware is identical to the Devolo Magic 2 WIFI.
Therefore it uses the same dts, which was moved to a dtsi to be included
by both boards.

This is a board that was previously included in the ar71xx tree.

Hardware:
   SoC:         AR9344
   CPU:         560 MHz
   Flash:       16 MiB (W25Q128JVSIQ)
   RAM:         128 MiB DDR2
   Ethernet:    2xLAN 10/100/1000
   PLC:         QCA75000 (Qualcomm HPAV2)
   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

The Powerline (PLC) interface of the dLAN pro 1200+ WiFi ac requires 3rd
party firmware which is not available from standard OpenWrt package
feeds. There is a package feed on github which you must add to
OpenWrt buildroot so you can build a firmware image which supports the
plc interface.

See: https://github.com/0xFelix/dlan-openwrt (forked from Devolo and
added compatibility for OpenWrt 21.02)

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: Felix Matouschek <felix@matouschek.org>
[add "plus" to compatible and device name]
Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
target/linux/ath79/dts/ar9344_devolo_dlan-pro-1200plus-ac.dts [new file with mode: 0644]
target/linux/ath79/dts/ar9344_devolo_dlan_wifi.dtsi [new file with mode: 0644]
target/linux/ath79/dts/ar9344_devolo_magic-2-wifi.dts
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

diff --git a/target/linux/ath79/dts/ar9344_devolo_dlan-pro-1200plus-ac.dts b/target/linux/ath79/dts/ar9344_devolo_dlan-pro-1200plus-ac.dts
new file mode 100644 (file)
index 0000000..fb06d71
--- /dev/null
@@ -0,0 +1,8 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include "ar9344_devolo_dlan_wifi.dtsi"
+
+/ {
+       model = "Devolo dLAN pro 1200+ WiFi ac";
+       compatible = "devolo,dlan-pro-1200plus-ac", "qca,ar9344";
+};
diff --git a/target/linux/ath79/dts/ar9344_devolo_dlan_wifi.dtsi b/target/linux/ath79/dts/ar9344_devolo_dlan_wifi.dtsi
new file mode 100644 (file)
index 0000000..9424e48
--- /dev/null
@@ -0,0 +1,170 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include "ar9344.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+/ {
+       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 = "white:wlan";
+                       gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "phy1tpt";
+               };
+
+               led_dlan_white: dlan_white {
+                       label = "white:dlan";
+                       gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
+               };
+
+               led_dlan_red: dlan_red {
+                       label = "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 {
+       wlan_power {
+               gpio-hog;
+               line-name = "WLAN power";
+               gpios = <&gpio 21 GPIO_ACTIVE_HIGH>;
+               output-high;
+       };
+};
+
+&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>;
+
+                       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>;
+};
+
+&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 exchange, 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 627265bf70b48d06b233f886681daa36cbefec97..d2fd8ecadf74c858679b5ed450c10e2944c48c5c 100644 (file)
@@ -1,173 +1,8 @@
 // SPDX-License-Identifier: GPL-2.0-or-later OR MIT
 
-#include "ar9344.dtsi"
-
-#include <dt-bindings/gpio/gpio.h>
-#include <dt-bindings/input/input.h>
+#include "ar9344_devolo_dlan_wifi.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 = "white:wlan";
-                       gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
-                       linux,default-trigger = "phy1tpt";
-               };
-
-               led_dlan_white: dlan_white {
-                       label = "white:dlan";
-                       gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
-               };
-
-               led_dlan_red: dlan_red {
-                       label = "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 {
-       wlan_power {
-               gpio-hog;
-               line-name = "WLAN power";
-               gpios = <&gpio 21 GPIO_ACTIVE_HIGH>;
-               output-high;
-       };
-};
-
-&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>;
-
-                       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>;
-};
-
-&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 8ead3ec0a38a8cb070a15a1140ffad5825e2912e..9720e37f99764d1f8b1a87ade2b720f8a4568f32 100644 (file)
@@ -178,6 +178,7 @@ compex,wpj531-16m)
        ucidef_set_led_rssi "sig3" "SIG3" "green:sig3" "wlan0" "65" "100"
        ucidef_set_led_rssi "sig4" "SIG4" "green:sig4" "wlan0" "50" "100"
        ;;
+devolo,dlan-pro-1200plus-ac|\
 devolo,magic-2-wifi)
        ucidef_set_led_netdev "plcw" "dLAN" "white:dlan" "eth0.1" "rx"
        ;;
index 8ea52af67a9509ee57d1dac6ac4c62c0b55b0e2e..ffafe7db20ea582445e31c77437f182a86ecb2de 100644 (file)
@@ -210,6 +210,7 @@ ath79_setup_interfaces()
                ucidef_add_switch "switch0" \
                        "0@eth0" "3:lan" "2:wan"
                ;;
+       devolo,dlan-pro-1200plus-ac|\
        devolo,magic-2-wifi)
                ucidef_add_switch "switch0" \
                        "0@eth0" "2:wan" "3:lan" "4:lan"
@@ -502,6 +503,7 @@ ath79_setup_macs()
        compex,wpj563)
                wan_mac=$(mtd_get_mac_binary u-boot 0x2e018)
                ;;
+       devolo,dlan-pro-1200plus-ac|\
        devolo,magic-2-wifi)
                label_mac=$(macaddr_add "$(mtd_get_mac_binary art 0x1002)" 3)
                ;;
index cd21932bfd42c67f69d4d704363359b1bfdeda44..83f428c54ad83d7f45a599deeed464bcd11d02d6 100644 (file)
@@ -31,6 +31,9 @@ telco,t1)
        ucidef_add_gpio_switch "lte_poweroff" "LTE Poweroff" "1" "1"
        ucidef_add_gpio_switch "lte_reset" "LTE Reset" "12" "1"
        ;;
+devolo,dlan-pro-1200plus-ac)
+       ucidef_add_gpio_switch "plc_enable" "PLC enable" "13" "0"
+       ;;
 devolo,magic-2-wifi)
        ucidef_add_gpio_switch "plc_pairing" "PLC pairing" "11" "1"
        ucidef_add_gpio_switch "plc_enable" "PLC enable" "13" "1"
index b7cb2da8cd97dd4d95fb7470067b28b66c495c0d..b2392c2c64d10ae0aa615213b4606ff2675fb2be 100644 (file)
@@ -23,6 +23,7 @@ case "$FIRMWARE" in
                ;;
        comfast,cf-wr650ac-v1|\
        comfast,cf-wr650ac-v2|\
+       devolo,dlan-pro-1200plus-ac|\
        devolo,magic-2-wifi|\
        qxwlan,e1700ac-v2-8m|\
        qxwlan,e1700ac-v2-16m|\
index 4d3f455e493b3bb627ed0fe4d780af466ed9779c..b459136ef57533a10e073cb8cb8d5ffbd9867277 100644 (file)
@@ -664,6 +664,15 @@ define Device/compex_wpj563
 endef
 TARGET_DEVICES += compex_wpj563
 
+define Device/devolo_dlan-pro-1200plus-ac
+  SOC := ar9344
+  DEVICE_VENDOR := Devolo
+  DEVICE_MODEL := dLAN pro 1200+ WiFi ac
+  DEVICE_PACKAGES := kmod-ath10k-ct ath10k-firmware-qca988x-ct
+  IMAGE_SIZE := 15872k
+endef
+TARGET_DEVICES += devolo_dlan-pro-1200plus-ac
+
 define Device/devolo_dvl1200e
   SOC := qca9558
   DEVICE_VENDOR := devolo