Browse Source

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 <[email protected]>
Stefan Schake 5 years ago
parent
commit
d3c8881194

+ 1 - 0
package/boot/uboot-envtools/files/ipq40xx

@@ -32,6 +32,7 @@ ubootenv_mtdinfo () {
 
 
 case "$board" in
 case "$board" in
 alfa-network,ap120c-ac |\
 alfa-network,ap120c-ac |\
+devolo,magic-2-wifi-next |\
 edgecore,ecw5211 |\
 edgecore,ecw5211 |\
 glinet,gl-b1300 |\
 glinet,gl-b1300 |\
 luma,wrtq-329acn |\
 luma,wrtq-329acn |\

+ 2 - 0
package/firmware/ipq-wifi/Makefile

@@ -30,6 +30,7 @@ ALLWIFIBOARDS:= \
 	avm_fritzrepeater-1200 \
 	avm_fritzrepeater-1200 \
 	buffalo_wtr-m2133hp \
 	buffalo_wtr-m2133hp \
 	cellc_rtl30vw \
 	cellc_rtl30vw \
+	devolo_magic-2-wifi-next \
 	dlink_dap2610 \
 	dlink_dap2610 \
 	edgecore_ecw5410 \
 	edgecore_ecw5410 \
 	edgecore_oap100 \
 	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,avm_fritzrepeater-1200,AVM FRITZRepeater 1200))
 $(eval $(call generate-ipq-wifi-package,buffalo_wtr-m2133hp,Buffalo WTR-M2133HP))
 $(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,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,dlink_dap2610,D-Link DAP-2610))
 $(eval $(call generate-ipq-wifi-package,edgecore_ecw5410,Edgecore ECW5410))
 $(eval $(call generate-ipq-wifi-package,edgecore_ecw5410,Edgecore ECW5410))
 $(eval $(call generate-ipq-wifi-package,edgecore_oap100,Edgecore OAP100))
 $(eval $(call generate-ipq-wifi-package,edgecore_oap100,Edgecore OAP100))

BIN
package/firmware/ipq-wifi/board-devolo_magic-2-wifi-next.qca4019


+ 7 - 0
target/linux/ipq40xx/base-files/etc/board.d/02_network

@@ -84,6 +84,9 @@ ipq40xx_setup_interfaces()
 		ucidef_add_switch "switch0" \
 		ucidef_add_switch "switch0" \
 			"0u@eth0" "3:lan" "4:lan"
 			"0u@eth0" "3:lan" "4:lan"
 		;;
 		;;
+	devolo,magic-2-wifi-next)
+		ucidef_set_interface_lan "eth0 eth1 eth2"
+		;;
 	ezviz,cs-w3-wd1200g-eup)
 	ezviz,cs-w3-wd1200g-eup)
 		ucidef_set_interfaces_lan_wan "eth0" "eth1"
 		ucidef_set_interfaces_lan_wan "eth0" "eth1"
 		ucidef_add_switch "switch0" \
 		ucidef_add_switch "switch0" \
@@ -137,6 +140,10 @@ ipq40xx_setup_macs()
 	cilab,meshpoint-one)
 	cilab,meshpoint-one)
 		label_mac=$(mtd_get_mac_binary "ART" 0x1006)
 		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)
 	dlink,dap-2610)
 		lan_mac=$(mtd_get_mac_ascii bdcfg lanmac)
 		lan_mac=$(mtd_get_mac_ascii bdcfg lanmac)
 		label_mac=$lan_mac
 		label_mac=$lan_mac

+ 8 - 0
target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata

@@ -109,6 +109,10 @@ case "$FIRMWARE" in
 	unielec,u4019-32m)
 	unielec,u4019-32m)
 		caldata_extract "0:ART" 0x1000 0x2f20
 		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)
 	dlink,dap-2610)
 		caldata_extract "ART" 0x1000 0x2f20
 		caldata_extract "ART" 0x1000 0x2f20
 		ath10k_patch_mac $(mtd_get_mac_ascii bdcfg wlanmac)
 		ath10k_patch_mac $(mtd_get_mac_ascii bdcfg wlanmac)
@@ -208,6 +212,10 @@ case "$FIRMWARE" in
 	unielec,u4019-32m)
 	unielec,u4019-32m)
 		caldata_extract "0:ART" 0x5000 0x2f20
 		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)
 	dlink,dap-2610)
 		caldata_extract "ART" 0x5000 0x2f20
 		caldata_extract "ART" 0x5000 0x2f20
 		ath10k_patch_mac $(mtd_get_mac_ascii bdcfg wlanmac_a)
 		ath10k_patch_mac $(mtd_get_mac_ascii bdcfg wlanmac_a)

+ 3 - 0
target/linux/ipq40xx/base-files/lib/preinit/06_set_preinit_iface_ipq40xx.sh

@@ -13,6 +13,9 @@ set_preinit_iface() {
 	zyxel,nbg6617)
 	zyxel,nbg6617)
 		ifname=eth0
 		ifname=eth0
 		;;
 		;;
+	devolo,magic-2-wifi-next)
+		ifname=eth1
+		;;
 	esac
 	esac
 }
 }
 
 

+ 268 - 0
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@22000 {
+			status = "okay";
+		};
+
+		mdio@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@0;
+			/delete-node/ ethernet-phy@1;
+		};
+
+		ess-psgmii@98000 {
+			status = "okay";
+		};
+
+		crypto@8e3a000 {
+			status = "okay";
+		};
+
+		watchdog@b017000 {
+			status = "okay";
+		};
+
+		ess-switch@c000000 {
+			status = "okay";
+			switch_lan_bmp = <0x3e>;
+			switch_wan_bmp = <0x0>;
+		};
+
+		edma@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@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@0 {
+				label = "SBL1";
+				reg = <0x00000000 0x00040000>;
+				read-only;
+			};
+			partition@40000 {
+				label = "MIBIB";
+				reg = <0x00040000 0x00020000>;
+				read-only;
+			};
+			partition@60000 {
+				label = "QSEE";
+				reg = <0x00060000 0x00060000>;
+				read-only;
+			};
+			partition@c0000 {
+				label = "CDT";
+				reg = <0x000c0000 0x00010000>;
+				read-only;
+			};
+			partition@d0000 {
+				label = "DDRPARAMS";
+				reg = <0x000d0000 0x00010000>;
+				read-only;
+			};
+			partition@e0000 {
+				label = "APPSBLENV"; /* uboot env*/
+				reg = <0x000e0000 0x00010000>;
+			};
+			partition@f0000 {
+				label = "APPSBL"; /* uboot */
+				reg = <0x000f0000 0x00080000>;
+				read-only;
+			};
+			partition@170000 {
+				label = "ART";
+				reg = <0x00170000 0x00010000>;
+				read-only;
+			};
+			firmware@180000 {
+				compatible = "denx,fit";
+				label = "firmware";
+				reg = <0x00180000 0x01a80000>;
+			};
+		};
+	};
+};

+ 19 - 0
target/linux/ipq40xx/image/Makefile

@@ -317,6 +317,25 @@ define Device/compex_wpj428
 endef
 endef
 TARGET_DEVICES += compex_wpj428
 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
 define Device/dlink_dap-2610
 	$(call Device/FitImageLzma)
 	$(call Device/FitImageLzma)
 	DEVICE_VENDOR := D-Link
 	DEVICE_VENDOR := D-Link

+ 2 - 1
target/linux/ipq40xx/patches-5.4/901-arm-boot-add-dts-files.patch

@@ -10,7 +10,7 @@ Signed-off-by: John Crispin <[email protected]>
 
 
 --- a/arch/arm/boot/dts/Makefile
 --- a/arch/arm/boot/dts/Makefile
 +++ b/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-apq8074-dragonboard.dtb \
  	qcom-apq8084-ifc6540.dtb \
  	qcom-apq8084-ifc6540.dtb \
  	qcom-apq8084-mtp.dtb \
  	qcom-apq8084-mtp.dtb \
@@ -18,6 +18,7 @@ Signed-off-by: John Crispin <[email protected]>
 +	qcom-ipq4018-ap120c-ac.dtb \
 +	qcom-ipq4018-ap120c-ac.dtb \
 +	qcom-ipq4018-dap-2610.dtb \
 +	qcom-ipq4018-dap-2610.dtb \
 +	qcom-ipq4018-cs-w3-wd1200g-eup.dtb \
 +	qcom-ipq4018-cs-w3-wd1200g-eup.dtb \
++	qcom-ipq4018-magic-2-wifi-next.dtb \
 +	qcom-ipq4018-ea6350v3.dtb \
 +	qcom-ipq4018-ea6350v3.dtb \
 +	qcom-ipq4018-eap1300.dtb \
 +	qcom-ipq4018-eap1300.dtb \
 +	qcom-ipq4018-ecw5211.dtb \
 +	qcom-ipq4018-ecw5211.dtb \