filogic: add support for ASUS TUF-AX4200
Hardware
--------
SOC:   MediaTek MT7986
RAM:   512MB DDR3
FLASH: 256MB SPI-NAND (Winbond W25N02KV)
WIFI:  Mediatek MT7986 DBDC 802.11ax 2.4/5 GHz
ETH:   MediaTek MT7531 Switch
       MaxLinear GPY211C 2.5 N-Base-T PHY
UART:  3V3 115200 8N1 (Pinout silkscreened / Do not ocnnect VCC)
Installation
------------
1. Download the OpenWrt initramfs image. Copy the image to a TFTP server
   reachable at 192.168.1.66/24. Rename the image to tufax4200.bin.
2. Connect the TFTP server to the AX4200. Conect to the serial console,
   interrupt the autoboot process by pressing '4' when prompted.
3. Download & Boot the OpenWrt initramfs image.
   $ setenv ipaddr 192.168.1.1
   $ setenv serverip 192.168.1.66
   $ tftpboot 0x46000000 tufax4200.bin
   $ bootm 0x46000000
4. Wait for OpenWrt to boot. Transfer the sysupgrade image to the device
   using scp and install using sysupgrade.
   $ sysupgrade -n <path-to-sysupgrade.bin>
Missing features
----------------
 - The LAN port LEDs are driven by the switch but OpenWrt does not
   correctly configure the output.
Signed-off-by: David Bauer <mail@david-bauer.net>
			
			
This commit is contained in:
		
							
								
								
									
										291
									
								
								target/linux/mediatek/dts/mt7986a-asus-tuf-ax4200.dts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										291
									
								
								target/linux/mediatek/dts/mt7986a-asus-tuf-ax4200.dts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,291 @@ | |||||||
|  | // SPDX-License-Identifier: (GPL-2.0 OR MIT) | ||||||
|  |  | ||||||
|  | /dts-v1/; | ||||||
|  | #include <dt-bindings/input/input.h> | ||||||
|  | #include <dt-bindings/gpio/gpio.h> | ||||||
|  | #include <dt-bindings/leds/common.h> | ||||||
|  |  | ||||||
|  | #include "mt7986a.dtsi" | ||||||
|  |  | ||||||
|  | / { | ||||||
|  | 	model = "ASUS TUF-AX4200"; | ||||||
|  | 	compatible = "asus,tuf-ax4200", "mediatek,mt7986a"; | ||||||
|  |  | ||||||
|  | 	aliases { | ||||||
|  | 		serial0 = &uart0; | ||||||
|  | 		led-boot = &led_system; | ||||||
|  | 		led-failsafe = &led_system; | ||||||
|  | 		led-running = &led_system; | ||||||
|  | 		led-upgrade = &led_system; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	chosen { | ||||||
|  | 		stdout-path = "serial0:115200n8"; | ||||||
|  | 		bootargs-override = "ubi.mtd=UBI_DEV"; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	memory { | ||||||
|  | 		reg = <0 0x40000000 0 0x20000000>; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	keys { | ||||||
|  | 		compatible = "gpio-keys"; | ||||||
|  |  | ||||||
|  | 		reset { | ||||||
|  | 			label = "reset"; | ||||||
|  | 			gpios = <&pio 9 GPIO_ACTIVE_LOW>; | ||||||
|  | 			linux,code = <KEY_RESTART>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		mesh { | ||||||
|  | 			label = "wps"; | ||||||
|  | 			gpios = <&pio 10 GPIO_ACTIVE_LOW>; | ||||||
|  | 			linux,code = <KEY_WPS_BUTTON>; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	leds { | ||||||
|  | 		compatible = "gpio-leds"; | ||||||
|  |  | ||||||
|  | 		wlan24 { | ||||||
|  | 			label = "white:wlan24"; | ||||||
|  | 			gpios = <&pio 1 GPIO_ACTIVE_HIGH>; | ||||||
|  | 			linux,default-trigger = "phy0tpt"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		wlan5 { | ||||||
|  | 			label = "white:wlan5"; | ||||||
|  | 			gpios = <&pio 2 GPIO_ACTIVE_HIGH>; | ||||||
|  | 			linux,default-trigger = "phy1tpt"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		led_system: system { | ||||||
|  | 			label = "white:system"; | ||||||
|  | 			gpios = <&pio 11 GPIO_ACTIVE_HIGH>; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		wan-red { | ||||||
|  | 			label = "red:wan"; | ||||||
|  | 			gpios = <&pio 12 GPIO_ACTIVE_LOW>; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	reg_3p3v: regulator-3p3v { | ||||||
|  | 		compatible = "regulator-fixed"; | ||||||
|  | 		regulator-name = "fixed-3.3V"; | ||||||
|  | 		regulator-min-microvolt = <3300000>; | ||||||
|  | 		regulator-max-microvolt = <3300000>; | ||||||
|  | 		regulator-boot-on; | ||||||
|  | 		regulator-always-on; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	reg_5v: regulator-5v { | ||||||
|  | 		compatible = "regulator-fixed"; | ||||||
|  | 		regulator-name = "fixed-5V"; | ||||||
|  | 		regulator-min-microvolt = <5000000>; | ||||||
|  | 		regulator-max-microvolt = <5000000>; | ||||||
|  | 		regulator-boot-on; | ||||||
|  | 		regulator-always-on; | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | ð { | ||||||
|  | 	status = "okay"; | ||||||
|  |  | ||||||
|  | 	gmac0: mac@0 { | ||||||
|  | 		/* LAN */ | ||||||
|  | 		compatible = "mediatek,eth-mac"; | ||||||
|  | 		reg = <0>; | ||||||
|  | 		phy-mode = "2500base-x"; | ||||||
|  |  | ||||||
|  | 		fixed-link { | ||||||
|  | 			speed = <2500>; | ||||||
|  | 			full-duplex; | ||||||
|  | 			pause; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	gmac1: mac@1 { | ||||||
|  | 		/* WAN */ | ||||||
|  | 		compatible = "mediatek,eth-mac"; | ||||||
|  | 		reg = <1>; | ||||||
|  | 		phy-mode = "2500base-x"; | ||||||
|  | 		phy-handle = <&phy6>; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	mdio: mdio-bus { | ||||||
|  | 		#address-cells = <1>; | ||||||
|  | 		#size-cells = <0>; | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &mdio { | ||||||
|  | 	phy6: phy@6 { | ||||||
|  | 		compatible = "ethernet-phy-ieee802.3-c45"; | ||||||
|  | 		reg = <6>; | ||||||
|  |  | ||||||
|  | 		reset-gpios = <&pio 6 GPIO_ACTIVE_LOW>; | ||||||
|  | 		reset-assert-us = <10000>; | ||||||
|  | 		reset-deassert-us = <10000>; | ||||||
|  |  | ||||||
|  | 		/* LED0: CONN (WAN white) */ | ||||||
|  | 		mxl,led-config = <0x00f0 0x0 0x0 0x0>; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	switch: switch@0 { | ||||||
|  | 		compatible = "mediatek,mt7531"; | ||||||
|  | 		reg = <31>; | ||||||
|  |  | ||||||
|  | 		reset-gpios = <&pio 5 GPIO_ACTIVE_HIGH>; | ||||||
|  | 		reset-assert-us = <10000>; | ||||||
|  | 		reset-deassert-us = <10000>; | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &pio { | ||||||
|  | 	spi_flash_pins: spi-flash-pins-33-to-38 { | ||||||
|  | 		mux { | ||||||
|  | 			function = "spi"; | ||||||
|  | 			groups = "spi0", "spi0_wp_hold"; | ||||||
|  | 		}; | ||||||
|  | 		conf-pu { | ||||||
|  | 			pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			mediatek,pull-up-adv = <0>; /* bias-disable */ | ||||||
|  | 		}; | ||||||
|  | 		conf-pd { | ||||||
|  | 			pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO"; | ||||||
|  | 			drive-strength = <8>; | ||||||
|  | 			mediatek,pull-down-adv = <0>; /* bias-disable */ | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	wf_2g_5g_pins: wf_2g_5g-pins { | ||||||
|  | 		mux { | ||||||
|  | 			function = "wifi"; | ||||||
|  | 			groups = "wf_2g", "wf_5g"; | ||||||
|  | 		}; | ||||||
|  | 		conf { | ||||||
|  | 			pins = "WF0_HB1", "WF0_HB2", "WF0_HB3", "WF0_HB4", | ||||||
|  | 			       "WF0_HB0", "WF0_HB0_B", "WF0_HB5", "WF0_HB6", | ||||||
|  | 			       "WF0_HB7", "WF0_HB8", "WF0_HB9", "WF0_HB10", | ||||||
|  | 			       "WF0_TOP_CLK", "WF0_TOP_DATA", "WF1_HB1", | ||||||
|  | 			       "WF1_HB2", "WF1_HB3", "WF1_HB4", "WF1_HB0", | ||||||
|  | 			       "WF1_HB5", "WF1_HB6", "WF1_HB7", "WF1_HB8", | ||||||
|  | 			       "WF1_TOP_CLK", "WF1_TOP_DATA"; | ||||||
|  | 			drive-strength = <4>; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  |  | ||||||
|  | 	wf_dbdc_pins: wf-dbdc-pins { | ||||||
|  | 		mux { | ||||||
|  | 			function = "wifi"; | ||||||
|  | 			groups = "wf_dbdc"; | ||||||
|  | 		}; | ||||||
|  | 		conf { | ||||||
|  | 			pins = "WF0_HB1", "WF0_HB2", "WF0_HB3", "WF0_HB4", | ||||||
|  | 				"WF0_HB0", "WF0_HB0_B", "WF0_HB5", "WF0_HB6", | ||||||
|  | 				"WF0_HB7", "WF0_HB8", "WF0_HB9", "WF0_HB10", | ||||||
|  | 				"WF0_TOP_CLK", "WF0_TOP_DATA", "WF1_HB1", | ||||||
|  | 				"WF1_HB2", "WF1_HB3", "WF1_HB4", "WF1_HB0", | ||||||
|  | 				"WF1_HB5", "WF1_HB6", "WF1_HB7", "WF1_HB8", | ||||||
|  | 				"WF1_TOP_CLK", "WF1_TOP_DATA"; | ||||||
|  | 			drive-strength = <4>; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &spi0 { | ||||||
|  | 	pinctrl-names = "default"; | ||||||
|  | 	pinctrl-0 = <&spi_flash_pins>; | ||||||
|  | 	status = "okay"; | ||||||
|  |  | ||||||
|  | 	spi_nand_flash: flash@0 { | ||||||
|  | 		compatible = "spi-nand"; | ||||||
|  | 		#address-cells = <1>; | ||||||
|  | 		#size-cells = <1>; | ||||||
|  | 		reg = <0>; | ||||||
|  |  | ||||||
|  | 		spi-max-frequency = <20000000>; | ||||||
|  | 		spi-tx-buswidth = <4>; | ||||||
|  | 		spi-rx-buswidth = <4>; | ||||||
|  |  | ||||||
|  | 		partitions: partitions { | ||||||
|  | 			compatible = "fixed-partitions"; | ||||||
|  | 			#address-cells = <1>; | ||||||
|  | 			#size-cells = <1>; | ||||||
|  |  | ||||||
|  | 			partition@0 { | ||||||
|  | 				label = "bootloader"; | ||||||
|  | 				reg = <0x0 0x400000>; | ||||||
|  | 				read-only; | ||||||
|  | 			}; | ||||||
|  |  | ||||||
|  | 			partition@400000 { | ||||||
|  | 				label = "UBI_DEV"; | ||||||
|  | 				reg = <0x400000 0xfc00000>; | ||||||
|  | 			}; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &switch { | ||||||
|  | 	ports { | ||||||
|  | 		#address-cells = <1>; | ||||||
|  | 		#size-cells = <0>; | ||||||
|  |  | ||||||
|  | 		port@1 { | ||||||
|  | 			reg = <1>; | ||||||
|  | 			label = "lan1"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		port@2 { | ||||||
|  | 			reg = <2>; | ||||||
|  | 			label = "lan2"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		port@3 { | ||||||
|  | 			reg = <3>; | ||||||
|  | 			label = "lan3"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		port@4 { | ||||||
|  | 			reg = <4>; | ||||||
|  | 			label = "lan4"; | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		port@6 { | ||||||
|  | 			reg = <6>; | ||||||
|  | 			label = "cpu"; | ||||||
|  | 			ethernet = <&gmac0>; | ||||||
|  | 			phy-mode = "2500base-x"; | ||||||
|  |  | ||||||
|  | 			fixed-link { | ||||||
|  | 				speed = <2500>; | ||||||
|  | 				full-duplex; | ||||||
|  | 				pause; | ||||||
|  | 			}; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &wmac { | ||||||
|  | 	status = "okay"; | ||||||
|  | 	pinctrl-names = "default", "dbdc"; | ||||||
|  | 	pinctrl-0 = <&wf_2g_5g_pins>; | ||||||
|  | 	pinctrl-1 = <&wf_dbdc_pins>; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &uart0 { | ||||||
|  | 	status = "okay"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &ssusb { | ||||||
|  | 	vusb33-supply = <®_3p3v>; | ||||||
|  | 	vbus-supply = <®_5v>; | ||||||
|  | 	status = "okay"; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | &usb_phy { | ||||||
|  | 	status = "okay"; | ||||||
|  | }; | ||||||
| @@ -8,6 +8,10 @@ mediatek_setup_interfaces() | |||||||
| 	local board="$1" | 	local board="$1" | ||||||
|  |  | ||||||
| 	case $board in | 	case $board in | ||||||
|  | 	asus,tuf-ax4200) | ||||||
|  | 		CI_UBIPART="UBI_DEV" | ||||||
|  | 		ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 lan4" "eth1" | ||||||
|  | 		;; | ||||||
| 	mediatek,mt7986a-rfb|\ | 	mediatek,mt7986a-rfb|\ | ||||||
| 	mediatek,mt7986b-rfb) | 	mediatek,mt7986b-rfb) | ||||||
| 		ucidef_set_interfaces_lan_wan "lan0 lan1 lan2 lan3" eth1 | 		ucidef_set_interfaces_lan_wan "lan0 lan1 lan2 lan3" eth1 | ||||||
| @@ -34,6 +38,12 @@ mediatek_setup_macs() | |||||||
| 	local label_mac="" | 	local label_mac="" | ||||||
|  |  | ||||||
| 	case $board in | 	case $board in | ||||||
|  | 	asus,tuf-ax4200) | ||||||
|  | 		CI_UBIPART="UBI_DEV" | ||||||
|  | 		addr=$(mtd_get_mac_binary_ubi "Factory" 0x4) | ||||||
|  | 		wan_mac="${addr}" | ||||||
|  | 		lan_mac="${addr}" | ||||||
|  | 		;; | ||||||
| 	xiaomi,redmi-router-ax6000-stock|\ | 	xiaomi,redmi-router-ax6000-stock|\ | ||||||
| 	xiaomi,redmi-router-ax6000-ubootmod) | 	xiaomi,redmi-router-ax6000-ubootmod) | ||||||
| 		wan_mac=$(mtd_get_mac_ascii Bdata ethaddr_wan) | 		wan_mac=$(mtd_get_mac_ascii Bdata ethaddr_wan) | ||||||
|   | |||||||
| @@ -0,0 +1,21 @@ | |||||||
|  | #!/bin/sh | ||||||
|  |  | ||||||
|  | [ -e /lib/firmware/$FIRMWARE ] && exit 0 | ||||||
|  |  | ||||||
|  | . /lib/functions/caldata.sh | ||||||
|  |  | ||||||
|  | board=$(board_name) | ||||||
|  |  | ||||||
|  | case "$FIRMWARE" in | ||||||
|  | "mediatek/mt7986_eeprom_mt7976_dbdc.bin") | ||||||
|  | 	case "$board" in | ||||||
|  | 	asus,tuf-ax4200) | ||||||
|  | 		CI_UBIPART="UBI_DEV" | ||||||
|  | 		caldata_extract_ubi "Factory" 0x0 0x1000 | ||||||
|  | 		;; | ||||||
|  | 	esac | ||||||
|  | 	;; | ||||||
|  | *) | ||||||
|  | 	exit 1 | ||||||
|  | 	;; | ||||||
|  | esac | ||||||
| @@ -10,6 +10,15 @@ PHYNBR=${DEVPATH##*/phy} | |||||||
| board=$(board_name) | board=$(board_name) | ||||||
|  |  | ||||||
| case "$board" in | case "$board" in | ||||||
|  | 	asus,tuf-ax4200) | ||||||
|  | 		CI_UBIPART="UBI_DEV" | ||||||
|  | 		addr=$(mtd_get_mac_binary_ubi "Factory" 0x4) | ||||||
|  | 		# Originally, phy0 is phy1 mac with LA bit set. However, this would conflict | ||||||
|  | 		# addresses on mutiple VIFs with the other radio. Set LA bit and increment | ||||||
|  | 		# mac-address instead. | ||||||
|  | 		[ "$PHYNBR" = "0" ] && macaddr_setbit_la $(macaddr_add $addr 1) > /sys${DEVPATH}/macaddress | ||||||
|  | 		[ "$PHYNBR" = "1" ] && echo "$addr" > /sys${DEVPATH}/macaddress | ||||||
|  | 		;; | ||||||
| 	bananapi,bpi-r3) | 	bananapi,bpi-r3) | ||||||
| 		addr=$(macaddr_add $(cat /sys/class/net/eth0/address) 2) | 		addr=$(macaddr_add $(cat /sys/class/net/eth0/address) 2) | ||||||
| 		[ "$PHYNBR" = "0" ] && macaddr_unsetbit $addr 6 > /sys${DEVPATH}/macaddress | 		[ "$PHYNBR" = "0" ] && macaddr_unsetbit $addr 6 > /sys${DEVPATH}/macaddress | ||||||
|   | |||||||
| @@ -0,0 +1,14 @@ | |||||||
|  | . /lib/functions/system.sh | ||||||
|  |  | ||||||
|  | preinit_set_mac_address() { | ||||||
|  | 	case $(board_name) in | ||||||
|  | 	asus,tuf-ax4200) | ||||||
|  | 		CI_UBIPART="UBI_DEV" | ||||||
|  | 		addr=$(mtd_get_mac_binary_ubi "Factory" 0x4) | ||||||
|  | 		ip link set dev eth0 address "$addr" | ||||||
|  | 		ip link set dev eth1 address "$addr" | ||||||
|  | 		;; | ||||||
|  | 	esac | ||||||
|  | } | ||||||
|  |  | ||||||
|  | boot_hook_add preinit_main preinit_set_mac_address | ||||||
| @@ -42,6 +42,11 @@ platform_do_upgrade() { | |||||||
| 	local board=$(board_name) | 	local board=$(board_name) | ||||||
|  |  | ||||||
| 	case "$board" in | 	case "$board" in | ||||||
|  | 	asus,tuf-ax4200) | ||||||
|  | 		CI_UBIPART="UBI_DEV" | ||||||
|  | 		CI_KERNPART="linux" | ||||||
|  | 		nand_do_upgrade "$1" | ||||||
|  | 		;; | ||||||
| 	bananapi,bpi-r3) | 	bananapi,bpi-r3) | ||||||
| 		local rootdev="$(cmdline_get_var root)" | 		local rootdev="$(cmdline_get_var root)" | ||||||
| 		rootdev="${rootdev##*/}" | 		rootdev="${rootdev##*/}" | ||||||
|   | |||||||
| @@ -38,6 +38,24 @@ define Build/mt7986-gpt | |||||||
| 	rm $@.tmp | 	rm $@.tmp | ||||||
| endef | endef | ||||||
|  |  | ||||||
|  | define Device/asus_tuf-ax4200 | ||||||
|  |   DEVICE_VENDOR := ASUS | ||||||
|  |   DEVICE_MODEL := TUF-AX4200 | ||||||
|  |   DEVICE_DTS := mt7986a-asus-tuf-ax4200 | ||||||
|  |   DEVICE_DTS_DIR := ../dts | ||||||
|  |   DEVICE_DTS_LOADADDR := 0x47000000 | ||||||
|  |   DEVICE_PACKAGES := kmod-usb3 | ||||||
|  |   IMAGES := sysupgrade.bin | ||||||
|  |   KERNEL_LOADADDR := 0x48000000 | ||||||
|  |   KERNEL = kernel-bin | lzma | \ | ||||||
|  | 	fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb | ||||||
|  |   KERNEL_INITRAMFS := kernel-bin | lzma | \ | ||||||
|  | 	fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb with-initrd | pad-to 64k | ||||||
|  |   IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata | ||||||
|  | endef | ||||||
|  | TARGET_DEVICES += asus_tuf-ax4200 | ||||||
|  |  | ||||||
|  |  | ||||||
| define Device/bananapi_bpi-r3 | define Device/bananapi_bpi-r3 | ||||||
|   DEVICE_VENDOR := Bananapi |   DEVICE_VENDOR := Bananapi | ||||||
|   DEVICE_MODEL := BPi-R3 |   DEVICE_MODEL := BPi-R3 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 David Bauer
					David Bauer