[openwrt/openwrt] qualcommax: add support for Aliyun AP8220

LEDE Commits lede-commits at lists.infradead.org
Mon Feb 17 01:21:27 PST 2025


robimarko pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/51d485ef315c943885216865582741fe4bbdf633

commit 51d485ef315c943885216865582741fe4bbdf633
Author: Chukun Pan <amadeus at jmu.edu.cn>
AuthorDate: Mon Feb 10 23:18:15 2025 +0800

    qualcommax: add support for Aliyun AP8220
    
    Aliyun AP8220 is an AP manufactured by Edgecore.
    (Very similar to Edgecore EAP102)
    
    Hardware specifications:
      SoC: Qualcomm IPQ8071A
      RAM: 1GB of DDR4 600MHz
      Flash1: MX25U3235F 4MB
      Flash2: MX30UF1G18AC 128MB
      Ethernet: 2x 2.5G RJ45 port
      USB: 2x USB-A 2.0 port
      WiFi1: QCN5024 2.4GHz
      WiFi2: QCN5054 5GHz
      Power: DC 12V / PoE
    
    Flash instructions:
      1. Connect the router via serial port
      2. Keep pressing @ until uboot is interrupted
      3. Download the initramfs image, rename it to
         initramfs.bin, host it with tftp server
      4. Run these commands:
         tftpboot initramfs.bin
         bootm
      5. After openwrt boots up, use scp or luci
         to upload sysupgrade.bin to upgrade.
    
    Signed-off-by: Chukun Pan <amadeus at jmu.edu.cn>
    Link: https://github.com/openwrt/openwrt/pull/17970
    Signed-off-by: Robert Marko <robimarko at gmail.com>
---
 .../boot/uboot-envtools/files/qualcommax_ipq807x   |  11 +-
 package/firmware/ipq-wifi/Makefile                 |   2 +
 .../arch/arm64/boot/dts/qcom/ipq8071-ap8220.dts    | 337 +++++++++++++++++++++
 target/linux/qualcommax/image/ipq807x.mk           |  13 +
 .../ipq807x/base-files/etc/board.d/02_network      |  16 +-
 .../etc/hotplug.d/firmware/11-ath11k-caldata       |   7 +
 .../ipq807x/base-files/lib/upgrade/platform.sh     |   9 +
 7 files changed, 385 insertions(+), 10 deletions(-)

diff --git a/package/boot/uboot-envtools/files/qualcommax_ipq807x b/package/boot/uboot-envtools/files/qualcommax_ipq807x
index 840e97fa10..21ec0ae5b1 100644
--- a/package/boot/uboot-envtools/files/qualcommax_ipq807x
+++ b/package/boot/uboot-envtools/files/qualcommax_ipq807x
@@ -26,6 +26,12 @@ ubootenv_add_mmc() {
 }
 
 case "$board" in
+aliyun,ap8220|\
+compex,wpq873|\
+edgecore,eap102|\
+zyxel,nbg7815)
+	ubootenv_add_mtd "0:appsblenv" "0x0" "0x10000" "0x10000"
+	;;
 dynalink,dl-wrx36|\
 netgear,rax120v2|\
 netgear,sxr80|\
@@ -37,11 +43,6 @@ tplink,eap620hd-v1|\
 tplink,eap660hd-v1)
 	ubootenv_add_mtd "0:appsblenv" "0x0" "0x40000" "0x20000"
 	;;
-compex,wpq873|\
-edgecore,eap102|\
-zyxel,nbg7815)
-	ubootenv_add_mtd "0:appsblenv" "0x0" "0x10000" "0x10000"
-	;;
 edimax,cax1800)
 	ubootenv_add_mtd "0:appsblenv" "0x0" "0x10000" "0x20000"
 	;;
diff --git a/package/firmware/ipq-wifi/Makefile b/package/firmware/ipq-wifi/Makefile
index cb7d71cb55..f784d9a2e4 100644
--- a/package/firmware/ipq-wifi/Makefile
+++ b/package/firmware/ipq-wifi/Makefile
@@ -28,6 +28,7 @@ endef
 
 ALLWIFIBOARDS:= \
 	8devices_mango \
+	aliyun_ap8220 \
 	arcadyan_aw1000 \
 	asus_rt-ax89x \
 	buffalo_wxr-5950ax12 \
@@ -166,6 +167,7 @@ endef
 #   board-<devicename>.<qca4019|qca9888|qca9889|qca9984|qca99x0|ipq8074>
 
 $(eval $(call generate-ipq-wifi-package,8devices_mango,8devices Mango))
+$(eval $(call generate-ipq-wifi-package,aliyun_ap8220,Aliyun AP8220))
 $(eval $(call generate-ipq-wifi-package,arcadyan_aw1000,Arcadyan AW1000))
 $(eval $(call generate-ipq-wifi-package,asus_rt-ax89x,Asus RT-AX89X))
 $(eval $(call generate-ipq-wifi-package,buffalo_wxr-5950ax12,Buffalo WXR-5950AX12))
diff --git a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq8071-ap8220.dts b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq8071-ap8220.dts
new file mode 100644
index 0000000000..176dc59155
--- /dev/null
+++ b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq8071-ap8220.dts
@@ -0,0 +1,337 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+/dts-v1/;
+
+#include "ipq8074.dtsi"
+#include "ipq8074-ac-cpu.dtsi"
+#include "ipq8074-ess.dtsi"
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/leds/common.h>
+
+/ {
+	model = "Aliyun AP8220";
+	compatible = "aliyun,ap8220", "qcom,ipq8074";
+
+	aliases {
+		serial0 = &blsp1_uart5;
+		led-boot = &led_power;
+		led-failsafe = &led_power;
+		led-running = &led_power;
+		led-upgrade = &led_power;
+	};
+
+	chosen {
+		stdout-path = "serial0:115200n8";
+		bootargs-append = " root=/dev/ubiblock0_1";
+	};
+
+	keys {
+		compatible = "gpio-keys";
+		pinctrl-0 = <&button_pins>;
+		pinctrl-names = "default";
+
+		reset {
+			label = "reset";
+			linux,code = <KEY_RESTART>;
+			gpios = <&tlmm 66 GPIO_ACTIVE_LOW>;
+		};
+	};
+
+	leds {
+		compatible = "gpio-leds";
+
+		led_power: power {
+			color = <LED_COLOR_ID_GREEN>;
+			function = LED_FUNCTION_POWER;
+			gpios = <&tlmm 46 GPIO_ACTIVE_HIGH>;
+		};
+
+		wlan2g {
+			color = <LED_COLOR_ID_GREEN>;
+			function = LED_FUNCTION_WLAN_2GHZ;
+			gpios = <&tlmm 47 GPIO_ACTIVE_HIGH>;
+			linux,default-trigger = "phy1radio";
+		};
+
+		wlan5g {
+			color = <LED_COLOR_ID_GREEN>;
+			function = LED_FUNCTION_WLAN_5GHZ;
+			gpios = <&tlmm 48 GPIO_ACTIVE_HIGH>;
+			linux,default-trigger = "phy0radio";
+		};
+
+		bluetooth {
+			color = <LED_COLOR_ID_GREEN>;
+			function = LED_FUNCTION_BLUETOOTH;
+			gpios = <&tlmm 50 GPIO_ACTIVE_HIGH>;
+		};
+	};
+
+	gpio-export {
+		compatible = "gpio-export";
+
+		ble-power {
+			gpio-export,name = "ble_power";
+			gpio-export,output = <1>;
+			gpios = <&tlmm 54 GPIO_ACTIVE_HIGH>;
+		};
+	};
+};
+
+&tlmm {
+	mdio_pins: mdio-pins {
+		mdc {
+			pins = "gpio68";
+			function = "mdc";
+			drive-strength = <8>;
+			bias-pull-up;
+		};
+
+		mdio {
+			pins = "gpio69";
+			function = "mdio";
+			drive-strength = <8>;
+			bias-pull-up;
+		};
+	};
+
+	button_pins: button-pins {
+		mux {
+			pins = "gpio66";
+			function = "gpio";
+			drive-strength = <8>;
+			bias-pull-up;
+		};
+	};
+};
+
+&blsp1_spi1 {
+	status = "okay";
+
+	flash at 0 {
+		compatible = "jedec,spi-nor";
+		#address-cells = <1>;
+		#size-cells = <1>;
+		reg = <0>;
+		spi-max-frequency = <50000000>;
+
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			partition at 0 {
+				label = "0:sbl1";
+				reg = <0x0 0x50000>;
+				read-only;
+			};
+
+			partition at 50000 {
+				label = "0:mibib";
+				reg = <0x50000 0x10000>;
+				read-only;
+			};
+
+			partition at 60000 {
+				label = "0:qsee";
+				reg = <0x60000 0x180000>;
+				read-only;
+			};
+
+			partition at 1e0000 {
+				label = "0:devcfg";
+				reg = <0x1e0000 0x10000>;
+				read-only;
+			};
+
+			partition at 1f0000 {
+				label = "0:apdp";
+				reg = <0x1f0000 0x10000>;
+				read-only;
+			};
+
+			partition at 200000 {
+				label = "0:rpm";
+				reg = <0x200000 0x40000>;
+				read-only;
+			};
+
+			partition at 240000 {
+				label = "0:cdt";
+				reg = <0x240000 0x10000>;
+				read-only;
+			};
+
+			partition at 250000 {
+				label = "0:appsblenv";
+				reg = <0x250000 0x10000>;
+			};
+
+			partition at 260000 {
+				label = "0:appsbl";
+				reg = <0x260000 0xa0000>;
+				read-only;
+			};
+
+			partition at 300000 {
+				label = "0:art";
+				reg = <0x300000 0x40000>;
+				read-only;
+			};
+
+			partition at 340000 {
+				label = "0:ethphyfw";
+				reg = <0x340000 0x80000>;
+				read-only;
+			};
+
+			partition at 3c0000 {
+				label = "product_info";
+				reg = <0x3c0000 0x10000>;
+				read-only;
+			};
+
+			partition at 3d0000 {
+				label = "mtdoops";
+				reg = <0x3d0000 0x20000>;
+			};
+
+			partition at 3f0000 {
+				label = "priv_data1";
+				reg = <0x3f0000 0x10000>;
+				read-only;
+			};
+		};
+	};
+};
+
+&blsp1_uart5 {
+	status = "okay";
+};
+
+&cryptobam {
+	status = "okay";
+};
+
+&crypto {
+	status = "okay";
+};
+
+&prng {
+	status = "okay";
+};
+
+&qpic_bam {
+	status = "okay";
+};
+
+&qusb_phy_0 {
+	status = "okay";
+};
+
+&ssphy_0 {
+	status = "okay";
+};
+
+&usb_0 {
+	status = "okay";
+};
+
+&qpic_nand {
+	status = "okay";
+
+	nand at 0 {
+		reg = <0>;
+		nand-ecc-strength = <4>;
+		nand-ecc-step-size = <512>;
+		nand-bus-width = <8>;
+
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			partition at 0 {
+				label = "rootfs1";
+				reg = <0x0000000 0x3000000>;
+			};
+
+			partition at 3000000 {
+				label = "rootfs2";
+				reg = <0x3000000 0x3000000>;
+			};
+
+			partition at 6000000 {
+				label = "usrdata";
+				reg = <0x6000000 0x2000000>;
+			};
+		};
+	};
+};
+
+&mdio {
+	status = "okay";
+
+	pinctrl-0 = <&mdio_pins>;
+	pinctrl-names = "default";
+
+	qca8081_24: ethernet-phy at 24 {
+		compatible = "ethernet-phy-id004d.d101";
+		reg = <24>;
+		reset-deassert-us = <10000>;
+		reset-gpios = <&tlmm 33 GPIO_ACTIVE_LOW>;
+	};
+
+	qca8081_28: ethernet-phy at 28 {
+		compatible = "ethernet-phy-id004d.d101";
+		reg = <28>;
+		reset-deassert-us = <10000>;
+		reset-gpios = <&tlmm 44 GPIO_ACTIVE_LOW>;
+	};
+};
+
+&switch {
+	status = "okay";
+
+	switch_lan_bmp = <ESS_PORT5>;
+	switch_wan_bmp = <ESS_PORT6>;
+	switch_mac_mode1 = <MAC_MODE_SGMII_PLUS>;
+	switch_mac_mode2 = <MAC_MODE_SGMII_PLUS>;
+
+	qcom,port_phyinfo {
+		port at 5 {
+			port_id = <5>;
+			phy_address = <24>;
+			port_mac_sel = "QGMAC_PORT";
+		};
+		port at 6 {
+			port_id = <6>;
+			phy_address = <28>;
+			port_mac_sel = "QGMAC_PORT";
+		};
+	};
+};
+
+&edma {
+	status = "okay";
+};
+
+&dp5 {
+	status = "okay";
+	phy-mode = "sgmii";
+	phy-handle = <&qca8081_24>;
+	label = "wan";
+};
+
+&dp6 {
+	status = "okay";
+	phy-handle = <&qca8081_28>;
+	label = "lan";
+};
+
+&wifi {
+	status = "okay";
+
+	qcom,ath11k-calibration-variant = "Aliyun-AP8220";
+};
diff --git a/target/linux/qualcommax/image/ipq807x.mk b/target/linux/qualcommax/image/ipq807x.mk
index 39fc63827c..4477e10505 100644
--- a/target/linux/qualcommax/image/ipq807x.mk
+++ b/target/linux/qualcommax/image/ipq807x.mk
@@ -33,6 +33,19 @@ define Build/wax6xx-netgear-tar
 	rm -rf $@.tmp
 endef
 
+define Device/aliyun_ap8220
+	$(call Device/FitImage)
+	$(call Device/UbiFit)
+	DEVICE_VENDOR := Aliyun
+	DEVICE_MODEL := AP8220
+	BLOCKSIZE := 128k
+	PAGESIZE := 2048
+	DEVICE_DTS_CONFIG := config at ac02
+	SOC := ipq8071
+	DEVICE_PACKAGES := ipq-wifi-aliyun_ap8220
+endef
+TARGET_DEVICES += aliyun_ap8220
+
 define Device/arcadyan_aw1000
 	$(call Device/FitImage)
 	$(call Device/UbiFit)
diff --git a/target/linux/qualcommax/ipq807x/base-files/etc/board.d/02_network b/target/linux/qualcommax/ipq807x/base-files/etc/board.d/02_network
index c464be6701..7d55f6ab69 100644
--- a/target/linux/qualcommax/ipq807x/base-files/etc/board.d/02_network
+++ b/target/linux/qualcommax/ipq807x/base-files/etc/board.d/02_network
@@ -11,6 +11,12 @@ ipq807x_setup_interfaces()
 	local board="$1"
 
 	case "$board" in
+	aliyun,ap8220|\
+	edgecore,eap102|\
+	yuncore,ax880|\
+	zte,mf269)
+		ucidef_set_interfaces_lan_wan "lan" "wan"
+		;;
 	asus,rt-ax89x)
 		ucidef_set_interfaces_lan_wan "10g-sfp 10g-copper lan1 lan2 lan3 lan4 lan5 lan6 lan7 lan8" "wan"
 		;;
@@ -37,11 +43,6 @@ ipq807x_setup_interfaces()
 	xiaomi,ax3600)
 		ucidef_set_interfaces_lan_wan "lan1 lan2 lan3" "wan"
 		;;
-	edgecore,eap102|\
-	yuncore,ax880|\
-	zte,mf269)
-		ucidef_set_interfaces_lan_wan "lan" "wan"
-		;;
 	edimax,cax1800)
 		ucidef_set_interfaces_lan_wan "lan"
 		;;
@@ -83,6 +84,11 @@ ipq807x_setup_macs()
 	local label_mac=""
 
 	case "$board" in
+	aliyun,ap8220)
+		wan_mac=$(mtd_get_mac_text product_info 0x4b)
+		lan_mac=$(macaddr_add "$wan_mac" 1)
+		label_mac="$wan_mac"
+		;;
 	linksys,mx4200v2|\
 	linksys,mx4300)
 		label_mac=$(mtd_get_mac_ascii devinfo hw_mac_addr)
diff --git a/target/linux/qualcommax/ipq807x/base-files/etc/hotplug.d/firmware/11-ath11k-caldata b/target/linux/qualcommax/ipq807x/base-files/etc/hotplug.d/firmware/11-ath11k-caldata
index ec772de8eb..508ecec314 100644
--- a/target/linux/qualcommax/ipq807x/base-files/etc/hotplug.d/firmware/11-ath11k-caldata
+++ b/target/linux/qualcommax/ipq807x/base-files/etc/hotplug.d/firmware/11-ath11k-caldata
@@ -9,6 +9,13 @@ board=$(board_name)
 case "$FIRMWARE" in
 "ath11k/IPQ8074/hw2.0/cal-ahb-c000000.wifi.bin")
 	case "$board" in
+	aliyun,ap8220)
+		caldata_extract "0:art" 0x1000 0x20000
+		addr=$(mtd_get_mac_text product_info 0x4b)
+		ath11k_patch_mac $addr 0
+		ath11k_patch_mac $(macaddr_add $addr 8) 1
+		ath11k_set_macflag
+		;;
 	asus,rt-ax89x)
 		CI_UBIPART="UBI_DEV"
 		caldata_extract_ubi "Factory" 0x1000 0x20000
diff --git a/target/linux/qualcommax/ipq807x/base-files/lib/upgrade/platform.sh b/target/linux/qualcommax/ipq807x/base-files/lib/upgrade/platform.sh
index cb60c5daf6..431491c141 100644
--- a/target/linux/qualcommax/ipq807x/base-files/lib/upgrade/platform.sh
+++ b/target/linux/qualcommax/ipq807x/base-files/lib/upgrade/platform.sh
@@ -166,6 +166,15 @@ platform_pre_upgrade() {
 
 platform_do_upgrade() {
 	case "$(board_name)" in
+	aliyun,ap8220)
+		active="$(fw_printenv -n active)"
+		if [ "$active" -eq "1" ]; then
+			CI_UBIPART="rootfs1"
+		else
+			CI_UBIPART="rootfs2"
+		fi
+		nand_do_upgrade "$1"
+		;;
 	arcadyan,aw1000|\
 	cmcc,rm2-6|\
 	compex,wpq873|\




More information about the lede-commits mailing list