[openwrt/openwrt] ipq40xx: add support for devolo Magic 2 WiFi next

LEDE Commits lede-commits at lists.infradead.org
Tue Dec 22 14:55:56 EST 2020


ynezz pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/d3c88811942a9dc9bbb01ca0443ae9cd790d1988

commit d3c88811942a9dc9bbb01ca0443ae9cd790d1988
Author: Stefan Schake <stefan.schake at devolo.de>
AuthorDate: Fri Oct 2 14:32:55 2020 +0200

    ipq40xx: add support for devolo Magic 2 WiFi next
    
    SOC:     IPQ4018 / QCA Dakota
    CPU:     Quad-Core ARMv7 Processor rev 5 (v71) Cortex-A7
    DRAM:    256 MiB
    NOR:     32 MiB
    ETH:     Qualcomm Atheros QCA8075 (2 ports)
    PLC:     MaxLinear G.hn 88LX5152
    WLAN1:   Qualcomm Atheros QCA4018 2.4GHz 802.11bgn 2:2x2
    WLAN2:   Qualcomm Atheros QCA4018 5GHz 802.11a/n/ac 2:2x2
    INPUT:   RESET, WiFi, PLC Button
    LEDS:    red/white home, white WiFi
    
    To modify a retail device to run OpenWRT firmware:
    1) Setup a TFTP server on IP address 192.168.0.100 and copy the OpenWRT
       initramfs (initramfs-fit-uImage.itb) to the TFTP root as 'uploadfile'.
    2) Power on the device while pressing the recessed reset button next to
       the Ethernet ports. This causes the bootloader to retrieve and start
       the initramfs.
    3) Once the initramfs is booted, the device will come up with IP
       192.168.1.1. You can then connect through SSH (allow some time for
       the first connection).
    4) On the device shell, run 'fw_printenv' to show the U-boot environment.
       Backup this information since it contains device unique factory data.
    5) Change the boot command to support booting OpenWRT:
       # fw_setenv bootcmd 'sf probe && sf read 0x84000000 0x180000 0x400000 && bootm'
    6) Change directory to /tmp, download the sysupgrade (e.g. through wget)
       and install it with sysupgrade. The device will reboot into OpenWRT.
    
    Notice that there is currently no support for booting the G.hn chip.
    This requires userland software we lack the rights to share right now.
    
    Signed-off-by: Stefan Schake <stefan.schake at devolo.de>
---
 package/boot/uboot-envtools/files/ipq40xx          |   1 +
 package/firmware/ipq-wifi/Makefile                 |   2 +
 .../board-devolo_magic-2-wifi-next.qca4019         | Bin 0 -> 24340 bytes
 .../ipq40xx/base-files/etc/board.d/02_network      |   7 +
 .../etc/hotplug.d/firmware/11-ath10k-caldata       |   8 +
 .../lib/preinit/06_set_preinit_iface_ipq40xx.sh    |   3 +
 .../boot/dts/qcom-ipq4018-magic-2-wifi-next.dts    | 268 +++++++++++++++++++++
 target/linux/ipq40xx/image/Makefile                |  19 ++
 .../patches-5.4/901-arm-boot-add-dts-files.patch   |   3 +-
 9 files changed, 310 insertions(+), 1 deletion(-)

diff --git a/package/boot/uboot-envtools/files/ipq40xx b/package/boot/uboot-envtools/files/ipq40xx
index bcb4c5c962..34aea1b999 100644
--- a/package/boot/uboot-envtools/files/ipq40xx
+++ b/package/boot/uboot-envtools/files/ipq40xx
@@ -32,6 +32,7 @@ ubootenv_mtdinfo () {
 
 case "$board" in
 alfa-network,ap120c-ac |\
+devolo,magic-2-wifi-next |\
 edgecore,ecw5211 |\
 glinet,gl-b1300 |\
 luma,wrtq-329acn |\
diff --git a/package/firmware/ipq-wifi/Makefile b/package/firmware/ipq-wifi/Makefile
index dfb9e0feb3..f1a0c1c474 100644
--- a/package/firmware/ipq-wifi/Makefile
+++ b/package/firmware/ipq-wifi/Makefile
@@ -30,6 +30,7 @@ ALLWIFIBOARDS:= \
 	avm_fritzrepeater-1200 \
 	buffalo_wtr-m2133hp \
 	cellc_rtl30vw \
+	devolo_magic-2-wifi-next \
 	dlink_dap2610 \
 	edgecore_ecw5410 \
 	edgecore_oap100 \
@@ -110,6 +111,7 @@ $(eval $(call generate-ipq-wifi-package,aruba_ap-303,Aruba AP-303))
 $(eval $(call generate-ipq-wifi-package,avm_fritzrepeater-1200,AVM FRITZRepeater 1200))
 $(eval $(call generate-ipq-wifi-package,buffalo_wtr-m2133hp,Buffalo WTR-M2133HP))
 $(eval $(call generate-ipq-wifi-package,cellc_rtl30vw, Cell C RTL30VW))
+$(eval $(call generate-ipq-wifi-package,devolo_magic-2-wifi-next,devolo Magic 2 WiFi next))
 $(eval $(call generate-ipq-wifi-package,dlink_dap2610,D-Link DAP-2610))
 $(eval $(call generate-ipq-wifi-package,edgecore_ecw5410,Edgecore ECW5410))
 $(eval $(call generate-ipq-wifi-package,edgecore_oap100,Edgecore OAP100))
diff --git a/package/firmware/ipq-wifi/board-devolo_magic-2-wifi-next.qca4019 b/package/firmware/ipq-wifi/board-devolo_magic-2-wifi-next.qca4019
new file mode 100644
index 0000000000..cf86721fea
Binary files /dev/null and b/package/firmware/ipq-wifi/board-devolo_magic-2-wifi-next.qca4019 differ
diff --git a/target/linux/ipq40xx/base-files/etc/board.d/02_network b/target/linux/ipq40xx/base-files/etc/board.d/02_network
index 4361b7c395..07bacaf51b 100755
--- a/target/linux/ipq40xx/base-files/etc/board.d/02_network
+++ b/target/linux/ipq40xx/base-files/etc/board.d/02_network
@@ -84,6 +84,9 @@ ipq40xx_setup_interfaces()
 		ucidef_add_switch "switch0" \
 			"0u at eth0" "3:lan" "4:lan"
 		;;
+	devolo,magic-2-wifi-next)
+		ucidef_set_interface_lan "eth0 eth1 eth2"
+		;;
 	ezviz,cs-w3-wd1200g-eup)
 		ucidef_set_interfaces_lan_wan "eth0" "eth1"
 		ucidef_add_switch "switch0" \
@@ -137,6 +140,10 @@ ipq40xx_setup_macs()
 	cilab,meshpoint-one)
 		label_mac=$(mtd_get_mac_binary "ART" 0x1006)
 		;;
+	devolo,magic-2-wifi-next)
+		lan_mac=$(mtd_get_mac_ascii APPSBLENV MacAddress0)
+		label_mac=$lan_mac
+		;;
 	dlink,dap-2610)
 		lan_mac=$(mtd_get_mac_ascii bdcfg lanmac)
 		label_mac=$lan_mac
diff --git a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
index e50732586a..7293438dfa 100644
--- a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
+++ b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
@@ -109,6 +109,10 @@ case "$FIRMWARE" in
 	unielec,u4019-32m)
 		caldata_extract "0:ART" 0x1000 0x2f20
 		;;
+	devolo,magic-2-wifi-next)
+		caldata_extract "ART" 0x1000 0x2f20
+		ath10k_patch_mac $(mtd_get_mac_ascii APPSBLENV WiFiMacAddress0)
+		;;
 	dlink,dap-2610)
 		caldata_extract "ART" 0x1000 0x2f20
 		ath10k_patch_mac $(mtd_get_mac_ascii bdcfg wlanmac)
@@ -208,6 +212,10 @@ case "$FIRMWARE" in
 	unielec,u4019-32m)
 		caldata_extract "0:ART" 0x5000 0x2f20
 		;;
+	devolo,magic-2-wifi-next)
+		caldata_extract "ART" 0x5000 0x2f20
+		ath10k_patch_mac $(mtd_get_mac_ascii APPSBLENV WiFiMacAddress1)
+		;;
 	dlink,dap-2610)
 		caldata_extract "ART" 0x5000 0x2f20
 		ath10k_patch_mac $(mtd_get_mac_ascii bdcfg wlanmac_a)
diff --git a/target/linux/ipq40xx/base-files/lib/preinit/06_set_preinit_iface_ipq40xx.sh b/target/linux/ipq40xx/base-files/lib/preinit/06_set_preinit_iface_ipq40xx.sh
index 0311922f08..e97133f105 100644
--- a/target/linux/ipq40xx/base-files/lib/preinit/06_set_preinit_iface_ipq40xx.sh
+++ b/target/linux/ipq40xx/base-files/lib/preinit/06_set_preinit_iface_ipq40xx.sh
@@ -13,6 +13,9 @@ set_preinit_iface() {
 	zyxel,nbg6617)
 		ifname=eth0
 		;;
+	devolo,magic-2-wifi-next)
+		ifname=eth1
+		;;
 	esac
 }
 
diff --git a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-magic-2-wifi-next.dts b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-magic-2-wifi-next.dts
new file mode 100644
index 0000000000..2709aef502
--- /dev/null
+++ b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4018-magic-2-wifi-next.dts
@@ -0,0 +1,268 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include "qcom-ipq4019.dtsi"
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+/ {
+	model = "devolo Magic 2 WiFi next";
+	compatible = "devolo,magic-2-wifi-next";
+
+	memory {
+		device_type = "memory";
+		reg = <0x80000000 0x10000000>;
+	};
+
+	soc {
+		rng at 22000 {
+			status = "okay";
+		};
+
+		mdio at 90000 {
+			status = "okay";
+			pinctrl-0 = <&mdio_pins>;
+			pinctrl-names = "default";
+			reset-gpios = <&tlmm 59 GPIO_ACTIVE_LOW>;
+			reset-delay-us = <2000>;
+
+			/delete-node/ ethernet-phy at 0;
+			/delete-node/ ethernet-phy at 1;
+		};
+
+		ess-psgmii at 98000 {
+			status = "okay";
+		};
+
+		crypto at 8e3a000 {
+			status = "okay";
+		};
+
+		watchdog at b017000 {
+			status = "okay";
+		};
+
+		ess-switch at c000000 {
+			status = "okay";
+			switch_lan_bmp = <0x3e>;
+			switch_wan_bmp = <0x0>;
+		};
+
+		edma at c080000 {
+			status = "okay";
+			qcom,num_gmac = <3>;
+
+			gmac0 {
+				qcom,phy_mdio_addr = <3>;
+				qcom,poll_required = <1>;
+				/delete-property/ qcom,forced_speed;
+				/delete-property/ qcom,forced_duplex;
+				vlan_tag = <1 0x10>;
+			};
+
+			gmac1 {
+				qcom,phy_mdio_addr = <2>;
+				qcom,poll_required = <1>;
+				/delete-property/ qcom,forced_speed;
+				/delete-property/ qcom,forced_duplex;
+				vlan_tag = <1 0x08>;
+			};
+
+			gmac2 {
+				local-mac-address = [00 00 00 00 00 00];
+				qcom,phy_mdio_addr = <4>;
+				qcom,poll_required = <1>;
+				/delete-property/ qcom,forced_speed;
+				/delete-property/ qcom,forced_duplex;
+				vlan_tag = <1 0x20>;
+			};
+		};
+
+		gpio_export {
+			compatible = "gpio-export";
+			#size-cells = <0>;
+
+			plc {
+				gpio-export,name = "plc-enable";
+				gpio-export,output = <1>;
+				gpios = <&tlmm 63 GPIO_ACTIVE_HIGH>;
+			};
+		};
+
+	};
+
+	keys {
+		compatible = "gpio-keys";
+
+		wlan {
+			label = "WLAN";
+			gpios = <&tlmm 5 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_WPS_BUTTON>;
+		};
+
+		reset {
+			label = "Reset";
+			gpios = <&tlmm 0 GPIO_ACTIVE_HIGH>;
+			linux,code = <KEY_RESTART>;
+		};
+	};
+
+	leds {
+		compatible = "gpio-leds";
+
+		status_dlan {
+			label = "white:dlan";
+			gpios = <&tlmm 4 GPIO_ACTIVE_LOW>;
+			default-state = "keep";
+		};
+
+		status_wlan {
+			label = "white:wlan";
+			gpios = <&tlmm 58 GPIO_ACTIVE_LOW>;
+			default-state = "keep";
+		};
+
+		error_dlan {
+			label = "red:dlan";
+			gpios = <&tlmm 3 GPIO_ACTIVE_HIGH>;
+			default-state = "keep";
+		};
+	};
+};
+
+&tlmm {
+	spi_0_pins: spi_0_pinmux {
+		mux {
+			function = "blsp_spi0";
+			pins = "gpio55", "gpio56", "gpio57";
+			drive-strength = <12>;
+			bias-disable;
+		};
+
+		mux_cs {
+			function = "gpio";
+			pins = "gpio54";
+			drive-strength = <2>;
+			bias-disable;
+			output-high;
+		};
+	};
+
+	mdio_pins: mdio_pinmux {
+		mux_1 {
+			pins = "gpio53";
+			function = "mdio";
+			bias-pull-up;
+		};
+		mux_2 {
+			pins = "gpio52";
+			function = "mdc";
+			bias-pull-up;
+		};
+	};
+
+	serial_pins: serial_pinmux {
+		mux {
+			pins = "gpio61", "gpio60";
+			function = "blsp_uart0";
+			bias-disable;
+		};
+	};
+
+	button_pins: button_pinmux {
+		mux {
+			function = "gpio";
+			pins = "gpio0", "gpio5";
+			bias-disable;
+			input;
+		};
+	};
+};
+
+&cryptobam {
+	status = "okay";
+};
+
+&blsp_dma {
+	status = "okay";
+};
+
+&blsp1_uart1 {
+	pinctrl-0 = <&serial_pins>;
+	pinctrl-names = "default";
+	status = "okay";
+};
+
+&wifi0 {
+	status = "okay";
+	qcom,ath10k-calibration-variant = "devolo,magic-2-wifi-next";
+};
+
+&wifi1 {
+	status = "okay";
+	qcom,ath10k-calibration-variant = "devolo,magic-2-wifi-next";
+};
+
+&blsp1_spi1 {
+	pinctrl-0 = <&spi_0_pins>;
+	pinctrl-names = "default";
+	status = "okay";
+	cs-gpios = <&tlmm 54 GPIO_ACTIVE_HIGH>;
+
+	flash at 0 {
+		compatible = "jedec,spi-nor";
+		reg = <0>;
+		linux,modalias = "n25q128a11";
+		spi-max-frequency = <24000000>;
+
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			partition at 0 {
+				label = "SBL1";
+				reg = <0x00000000 0x00040000>;
+				read-only;
+			};
+			partition at 40000 {
+				label = "MIBIB";
+				reg = <0x00040000 0x00020000>;
+				read-only;
+			};
+			partition at 60000 {
+				label = "QSEE";
+				reg = <0x00060000 0x00060000>;
+				read-only;
+			};
+			partition at c0000 {
+				label = "CDT";
+				reg = <0x000c0000 0x00010000>;
+				read-only;
+			};
+			partition at d0000 {
+				label = "DDRPARAMS";
+				reg = <0x000d0000 0x00010000>;
+				read-only;
+			};
+			partition at e0000 {
+				label = "APPSBLENV"; /* uboot env*/
+				reg = <0x000e0000 0x00010000>;
+			};
+			partition at f0000 {
+				label = "APPSBL"; /* uboot */
+				reg = <0x000f0000 0x00080000>;
+				read-only;
+			};
+			partition at 170000 {
+				label = "ART";
+				reg = <0x00170000 0x00010000>;
+				read-only;
+			};
+			firmware at 180000 {
+				compatible = "denx,fit";
+				label = "firmware";
+				reg = <0x00180000 0x01a80000>;
+			};
+		};
+	};
+};
diff --git a/target/linux/ipq40xx/image/Makefile b/target/linux/ipq40xx/image/Makefile
index 86bf5a2ccb..487f3b5638 100644
--- a/target/linux/ipq40xx/image/Makefile
+++ b/target/linux/ipq40xx/image/Makefile
@@ -317,6 +317,25 @@ define Device/compex_wpj428
 endef
 TARGET_DEVICES += compex_wpj428
 
+define Device/devolo_magic-2-wifi-next
+	$(call Device/FitImage)
+	DEVICE_VENDOR := devolo
+	DEVICE_MODEL := Magic 2 WiFi next
+	SOC := qcom-ipq4018
+	KERNEL_SIZE := 4096k
+
+	# If the bootloader sees 0xDEADC0DE and this trailer at the 64k boundary of a TFTP image
+	# it will bootm it, just like we want for the initramfs.
+	KERNEL_INITRAMFS := kernel-bin | gzip | fit gzip $$(DTS_DIR)/$$(DEVICE_DTS).dtb | pad-to 64k |\
+		append-string -e '\xDE\xAD\xC0\xDE{"fl_initramfs":""}\x00'
+
+	IMAGE_SIZE := 26624k
+	IMAGES := sysupgrade.bin
+	IMAGE/sysupgrade.bin := append-kernel | append-rootfs | pad-rootfs | append-metadata
+	DEVICE_PACKAGES := ipq-wifi-devolo_magic-2-wifi-next uboot-envtools
+endef
+TARGET_DEVICES += devolo_magic-2-wifi-next
+
 define Device/dlink_dap-2610
 	$(call Device/FitImageLzma)
 	DEVICE_VENDOR := D-Link
diff --git a/target/linux/ipq40xx/patches-5.4/901-arm-boot-add-dts-files.patch b/target/linux/ipq40xx/patches-5.4/901-arm-boot-add-dts-files.patch
index c4502aa3f7..d470bb7204 100644
--- a/target/linux/ipq40xx/patches-5.4/901-arm-boot-add-dts-files.patch
+++ b/target/linux/ipq40xx/patches-5.4/901-arm-boot-add-dts-files.patch
@@ -10,7 +10,7 @@ Signed-off-by: John Crispin <john at phrozen.org>
 
 --- a/arch/arm/boot/dts/Makefile
 +++ b/arch/arm/boot/dts/Makefile
-@@ -837,11 +837,56 @@ dtb-$(CONFIG_ARCH_QCOM) += \
+@@ -837,11 +837,57 @@ dtb-$(CONFIG_ARCH_QCOM) += \
  	qcom-apq8074-dragonboard.dtb \
  	qcom-apq8084-ifc6540.dtb \
  	qcom-apq8084-mtp.dtb \
@@ -18,6 +18,7 @@ Signed-off-by: John Crispin <john at phrozen.org>
 +	qcom-ipq4018-ap120c-ac.dtb \
 +	qcom-ipq4018-dap-2610.dtb \
 +	qcom-ipq4018-cs-w3-wd1200g-eup.dtb \
++	qcom-ipq4018-magic-2-wifi-next.dtb \
 +	qcom-ipq4018-ea6350v3.dtb \
 +	qcom-ipq4018-eap1300.dtb \
 +	qcom-ipq4018-ecw5211.dtb \



More information about the lede-commits mailing list