[openwrt/openwrt] ath79: add support for TP-Link Archer A9 v6

LEDE Commits lede-commits at lists.infradead.org
Sun Feb 27 08:03:36 PST 2022


pepe2k pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/9c335accfe57f3049850b8fdb684c9e7e5feea82

commit 9c335accfe57f3049850b8fdb684c9e7e5feea82
Author: Piotr Dymacz <pepe2k at gmail.com>
AuthorDate: Fri Feb 25 23:01:10 2022 +0100

    ath79: add support for TP-Link Archer A9 v6
    
    TP-Link Archer A9 v6 (FCCID: TE7A9V6) is an AC1900 Wave-2 gigabit home
    router based on a combination of Qualcomm QCN5502 (most likely a 4x4:4
    version of the QCA9563 WiSOC), QCA9984 and QCA8337N.
    
    The vendor's firmware content reveals that the same device might be
    available on the US market under name 'Archer C90 v6'. Due to lack of
    access to such hardware, support introduced in this commit was tested
    only on the EU version (sold under 'Archer A9 v6' name).
    
    Based on the information on the PL version of the vendor website, this
    device has been already phased out and is no longer available.
    
    Specifications:
    
    - Qualcomm QCN5502 (775 MHz)
    - 128 MB of RAM (DDR2)
    - 16 MB of flash (SPI NOR)
    - 5x Gbps Ethernet (Qualcomm QCA8337N over SGMII)
    - Wi-Fi:
      - 802.11b/g/n on 2.4 GHz: Qualcomm QCN5502* in 4x4:4 mode
      - 802.11a/n/ac on 5 GHz: Qualcomm QCA9984 in 3x3:3 mode
      - 3x non-detachable, dual-band external antennas (~3.5 dBi for 5 GHz,
        ~2.2 dBi for 2.4 GHz, IPEX/U.FL connectors)
      - 1x internal PCB antenna for 2.4 GHz (~1.8 dBi)
    - 1x USB 2.0 Type-A
    - 11x LED (4x connected to QCA8337N, 7x connected to QCN5502)
    - 2x button (reset, WPS)
    - UART (4-pin, 2.54 mm pitch) header on PCB (not populated)
    - 1x mechanical power switch
    - 1x DC jack (12 V)
    
      *) unsupported due to missing support for QCN550x in ath9k
    
    UART system serial console notice:
    
    The RX signal of the main SOC's UART on this device is shared with the
    WPS button's GPIO. The first-stage U-Boot by default disables the RX,
    resulting in a non-functional UART input.
    If you press and keep 'ENTER' on the serial console during early
    boot-up, the first-stage U-Boot will enable RX input.
    
    Vendor firmware allows password-less access to the system over serial.
    
    Flash instruction (vendor GUI):
    
    1. It is recommended to first upgrade vendor firmware to the latest
       version (1.1.1 Build 20210315 rel.40637 at the time of writing).
    2. Use the 'factory' image directly in the vendor's GUI.
    
    Flash instruction (TFTP based recovery in second-stage U-Boot):
    
    1. Rename 'factory' image to 'ArcherA9v6_tp_recovery.bin'
    2. Setup a TFTP server on your PC with IP 192.168.0.66/24.
    3. Press and hold the reset button for ~5 sec while turning on power.
    4. The device will download image, flash it and reboot.
    
    Flash instruction (web based recovery in first-stage U-Boot):
    
    1. Use 'CTRL+C' during power-up to enable CLI in first-stage U-Boot.
    2. Connect a PC with IP set to 192.168.0.1 to one of the LAN ports.
    3. Issue 'httpd' command and visit http://192.168.0.1 in browser.
    4. Use the 'factory' image.
    
    If you would like to restore vendor's firmware, follow one of the
    recovery methods described above.
    
    Signed-off-by: Piotr Dymacz <pepe2k at gmail.com>
---
 .../ath79/dts/qcn5502_tplink_archer-a9-v6.dts      | 248 +++++++++++++++++++++
 .../ath79/generic/base-files/etc/board.d/01_leds   |   3 +
 .../generic/base-files/etc/board.d/02_network      |   2 +
 target/linux/ath79/image/generic-tp-link.mk        |  12 +
 4 files changed, 265 insertions(+)

diff --git a/target/linux/ath79/dts/qcn5502_tplink_archer-a9-v6.dts b/target/linux/ath79/dts/qcn5502_tplink_archer-a9-v6.dts
new file mode 100644
index 0000000000..c095bbd2ed
--- /dev/null
+++ b/target/linux/ath79/dts/qcn5502_tplink_archer-a9-v6.dts
@@ -0,0 +1,248 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include "qca956x.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+/ {
+	model = "TP-Link Archer A9 v6";
+	compatible = "tplink,archer-a9-v6", "qca,qcn5500", "qca,qca9560";
+
+	aliases {
+		label-mac-device = &eth0;
+		led-boot = &led_power;
+		led-failsafe = &led_power;
+		led-running = &led_power;
+		led-upgrade = &led_power;
+	};
+
+	keys {
+		compatible = "gpio-keys";
+
+		reset {
+			label = "reset";
+			linux,code = <KEY_RESTART>;
+			gpios = <&gpio 16 GPIO_ACTIVE_LOW>;
+			debounce-interval = <60>;
+		};
+
+		wps {
+			label = "wps";
+			linux,code = <KEY_WPS_BUTTON>;
+			gpios = <&gpio 18 GPIO_ACTIVE_LOW>;
+			debounce-interval = <60>;
+		};
+	};
+
+	leds {
+		compatible = "gpio-leds";
+
+		led_power: power {
+			label = "green:power";
+			gpios = <&gpio 17 GPIO_ACTIVE_LOW>;
+			default-state = "on";
+		};
+
+		usb {
+			label = "green:usb";
+			gpios = <&gpio 0 GPIO_ACTIVE_HIGH>;
+			trigger-sources = <&hub_port0>;
+			linux,default-trigger = "usbport";
+		};
+
+		wan {
+			label = "green:wan";
+			gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
+		};
+
+		wan_orange {
+			label = "orange:wan";
+			gpios = <&gpio 3 GPIO_ACTIVE_LOW>;
+		};
+
+		wlan2g {
+			label = "green:wlan2g";
+			gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
+			linux,default-trigger = "phy1tpt";
+		};
+
+		wlan5g {
+			label = "green:wlan5g";
+			gpios = <&gpio 20 GPIO_ACTIVE_HIGH>;
+			linux,default-trigger = "phy0tpt";
+		};
+
+		wps {
+			label = "green:wps";
+			gpios = <&gpio 1 GPIO_ACTIVE_LOW>;
+		};
+	};
+};
+
+&eth0 {
+	status = "okay";
+
+	pll-data = <0x03000101 0x00000101 0x00001919>;
+
+	phy-mode = "sgmii";
+	phy-handle = <&phy0>;
+
+	nvmem-cells = <&macaddr_info_8>;
+	nvmem-cell-names = "mac-address";
+};
+
+&mdio0 {
+	status = "okay";
+
+	phy-mask = <0>;
+
+	phy0: ethernet-phy at 0 {
+		reg = <0>;
+		phy-mode = "sgmii";
+		qca,mib-poll-interval = <500>;
+
+		qca,ar8327-initvals = <
+			0x04 0x80080080 /* PORT0 PAD MODE CTRL */
+			0x08 0x00000000 /* PORT5 PAD MODE CTRL */
+			0x0c 0x00000000 /* PORT6 PAD MODE CTRL */
+			0x10 0x00000080 /* POWER_ON_STRAP */
+			0x7c 0x0000007e /* PORT0_STATUS */
+			0x94 0x00000200 /* PORT6_STATUS */
+			>;
+	};
+};
+
+&pcie {
+	status = "okay";
+
+	wifi at 0,0 {
+		compatible = "pci168c,0046";
+		reg = <0 0 0 0 0>;
+
+		nvmem-cells = <&macaddr_info_8>, <&precal_art_5000>;
+		nvmem-cell-names = "mac-address", "pre-calibration";
+
+		mac-address-increment = <(-1)>;
+	};
+};
+
+&spi {
+	status = "okay";
+
+	flash at 0 {
+		compatible = "jedec,spi-nor";
+		reg = <0>;
+		spi-max-frequency = <25000000>;
+		m25p,fast-read;
+
+		mtdparts: partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			partition at 0 {
+				label = "factory-uboot";
+				reg = <0x000000 0x020000>;
+				read-only;
+			};
+
+			partition at 20000 {
+				label = "u-boot";
+				reg = <0x020000 0x020000>;
+				read-only;
+			};
+
+			partition at 40000 {
+				label = "partition-table";
+				reg = <0x040000 0x010000>;
+				read-only;
+			};
+
+			partition at 50000 {
+				label = "art";
+				reg = <0x050000 0x010000>;
+				read-only;
+
+				compatible = "nvmem-cells";
+				#address-cells = <1>;
+				#size-cells = <1>;
+
+				cal_art_1000: cal at 1000 {
+					reg = <0x1000 0x440>;
+				};
+
+				precal_art_5000: precal at 5000 {
+					reg = <0x5000 0x2f20>;
+				};
+			};
+
+			partition at 60000 {
+				label = "info";
+				reg = <0x060000 0x020000>;
+				read-only;
+
+				compatible = "nvmem-cells";
+				#address-cells = <1>;
+				#size-cells = <1>;
+
+				macaddr_info_8: macaddr at 8 {
+					reg = <0x8 0x6>;
+				};
+			};
+
+			partition at 80000 {
+				label = "user-config";
+				reg = <0x080000 0x040000>;
+				read-only;
+			};
+
+			partition at c0000 {
+				compatible = "denx,uimage";
+				label = "firmware";
+				reg = <0x0c0000 0xf00000>;
+			};
+
+			partition at fc0000 {
+				label = "log";
+				reg = <0xfc0000 0x020000>;
+				read-only;
+			};
+
+			partition at fe0000 {
+				label = "certificate";
+				reg = <0xfe0000 0x010000>;
+				read-only;
+			};
+
+			partition at ff0000 {
+				label = "default-config";
+				reg = <0xff0000 0x010000>;
+				read-only;
+			};
+		};
+	};
+};
+
+&usb_phy0 {
+	status = "okay";
+};
+
+&usb0 {
+	#address-cells = <1>;
+	#size-cells = <0>;
+	status = "okay";
+
+	hub_port0: port at 1 {
+		reg = <1>;
+		#trigger-source-cells = <0>;
+	};
+};
+
+&wmac {
+	/* TODO: missing support in ath9k */
+	status = "disabled";
+
+	nvmem-cells = <&cal_art_1000>, <&macaddr_info_8>;
+	nvmem-cell-names = "calibration", "mac-address";
+};
diff --git a/target/linux/ath79/generic/base-files/etc/board.d/01_leds b/target/linux/ath79/generic/base-files/etc/board.d/01_leds
index 354df1da6f..2ce489b0d1 100644
--- a/target/linux/ath79/generic/base-files/etc/board.d/01_leds
+++ b/target/linux/ath79/generic/base-files/etc/board.d/01_leds
@@ -325,6 +325,9 @@ tplink,archer-c7-v5)
 	ucidef_set_led_switch "lan3" "LAN3" "green:lan3" "switch0" "0x10"
 	ucidef_set_led_switch "lan4" "LAN4" "green:lan4" "switch0" "0x20"
 	;;
+tplink,archer-a9-v6)
+	ucidef_set_led_switch "wan" "WAN" "green:wan" "switch0" "0x02"
+	;;
 tplink,archer-c2-v3|\
 tplink,tl-wr1043nd-v4|\
 tplink,tl-wr1043n-v5)
diff --git a/target/linux/ath79/generic/base-files/etc/board.d/02_network b/target/linux/ath79/generic/base-files/etc/board.d/02_network
index bb5c63a33e..86ce8f5bd7 100644
--- a/target/linux/ath79/generic/base-files/etc/board.d/02_network
+++ b/target/linux/ath79/generic/base-files/etc/board.d/02_network
@@ -337,6 +337,7 @@ ath79_setup_interfaces()
 		;;
 	mercury,mw4530r-v1|\
 	tplink,archer-a7-v5|\
+	tplink,archer-a9-v6|\
 	tplink,archer-c6-v2|\
 	tplink,archer-c6-v2-us|\
 	tplink,archer-c7-v4|\
@@ -691,6 +692,7 @@ ath79_setup_macs()
 		label_mac=$lan_mac
 		;;
 	tplink,archer-a7-v5|\
+	tplink,archer-a9-v6|\
 	tplink,archer-c7-v4|\
 	tplink,archer-c7-v5|\
 	tplink,tl-wr1043nd-v4|\
diff --git a/target/linux/ath79/image/generic-tp-link.mk b/target/linux/ath79/image/generic-tp-link.mk
index c47fcd0039..d6f7e7655d 100644
--- a/target/linux/ath79/image/generic-tp-link.mk
+++ b/target/linux/ath79/image/generic-tp-link.mk
@@ -12,6 +12,18 @@ define Device/tplink_archer-a7-v5
 endef
 TARGET_DEVICES += tplink_archer-a7-v5
 
+define Device/tplink_archer-a9-v6
+  $(Device/tplink-safeloader-uimage)
+  SOC := qcn5502
+  IMAGE_SIZE := 15360k
+  DEVICE_MODEL := Archer A9
+  DEVICE_VARIANT := v6
+  DEVICE_PACKAGES := kmod-usb2 kmod-usb-ledtrig-usbport kmod-ath10k-ct \
+	ath10k-firmware-qca9984-ct
+  TPLINK_BOARD_ID := ARCHER-A9-V6
+endef
+TARGET_DEVICES += tplink_archer-a9-v6
+
 define Device/tplink_archer-c2-v3
   $(Device/tplink-safeloader-uimage)
   SOC := qca9563



More information about the lede-commits mailing list