qualcommax: ipq807x: add Asus RT-AX89X BX revision
authorRobert Marko <robimarko@gmail.com>
Sun, 11 Feb 2024 17:57:52 +0000 (18:57 +0100)
committerRobert Marko <robimarko@gmail.com>
Tue, 9 Jul 2024 10:33:17 +0000 (12:33 +0200)
This commit adds support for Asus RT-AX89X BX revision.

WARNING: Only the BX revision boards (So B1, B2 etc) are supported because
AX revision boards use IPQ8074 v1 SoC which is unsupported.

Specifications:
---------------
* CPU: Qualcomm IPQ8074A Quad core Cortex-A53 @ 2.2GHz
* RAM: 1024MB
* Storage: 256MB SLC NAND (Macronix MX30UF2G18AC)
* Ethernet:
* 5x 1G RJ45 ports via QCA8337 switch
* 3x 1G RJ45 ports via internal switch (QCA8075 PHY)
* 1x 10G RJ45 via internal switch (AQR113C PHY)
* 1x 10G SFP+ slot via internal switch
* WLAN:
* 2.4GHz 4x4
* 5GHz 8x8
* 8 external antennas
* USB: 2x USB 3.0 Type-A
* Buttons:
* Power switch
* WPS
* Reset
* Wireless ON/OFF
* LED ON/OFF
LED-s:
* Power
* Wi-Fi
* WAN
* 10G
* SFP+
Power:
* 19.5V via DC jack

Installation instructions:
--------------------------
1. Flash temporary OpenWrt initramfs:
* Flash openwrt-qualcommax-ipq807x-asus_rt-ax89x-initramfs-factory.trx
via the stock firmware.
Administration -> Firmware Upgrade -> Manual Firmware update (Upload)

After flashing the device will reboot with OpenWrt initramfs and it can
be accesed via any of the LAN ports via SSH with the usual OpenWrt
default credentials.

2. Sysupgrade from OpenWrt initramfs:
* Copy openwrt-qualcommax-ipq807x-asus_rt-ax89x-squashfs-sysupgrade.bin to
/tmp/openwrt-qualcommax-ipq807x-asus_rt-ax89x-squashfs-sysupgrade.bin of
the running initramfs image.
* Simply sysupgrade -n /tmp/openwrt-qualcommax-ipq807x-asus_rt-ax89x-squashfs-sysupgrade.bin

After flashing the device will reboot with OpenWrt initramfs and it can
be accesed via any of the LAN ports via SSH with the usual OpenWrt
default credentials.

Link: https://github.com/openwrt/openwrt/pull/15840
Signed-off-by: Robert Marko <robimarko@gmail.com>
package/boot/uboot-envtools/files/qualcommax_ipq807x
target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq8074-rt-ax89x.dts [new file with mode: 0644]
target/linux/qualcommax/image/ipq807x.mk
target/linux/qualcommax/ipq807x/base-files/etc/board.d/01_leds
target/linux/qualcommax/ipq807x/base-files/etc/board.d/02_network
target/linux/qualcommax/ipq807x/base-files/etc/hotplug.d/firmware/11-ath11k-caldata
target/linux/qualcommax/ipq807x/base-files/lib/upgrade/platform.sh
target/linux/qualcommax/ipq807x/config-default

index 4ae0de4e26bee0b3d5078ba0ac4a03c0b52c4881..852e05f29a191bf0ab682907561333b83505c7bc 100644 (file)
@@ -58,6 +58,7 @@ prpl,haze)
        [ -n "$mmcpart" ] && \
                ubootenv_add_uci_config "$mmcpart" "0x0" "0x40000" "0x400" "0x100"
        ;;
+asus,rt-ax89x|\
 qnap,301w)
        idx="$(find_mtd_index 0:appsblenv)"
        [ -n "$idx" ] && \
diff --git a/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq8074-rt-ax89x.dts b/target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq8074-rt-ax89x.dts
new file mode 100644 (file)
index 0000000..4af942c
--- /dev/null
@@ -0,0 +1,741 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/* Copyright (c) 2024, Robert Marko <robimarko@gmail.com> */
+
+/dts-v1/;
+
+#include "ipq8074.dtsi"
+#include "ipq8074-hk-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 = "Asus RT-AX89X";
+       compatible = "asus,rt-ax89x", "qcom,ipq8074";
+
+       aliases {
+               serial0 = &blsp1_uart5;
+               mdio-gpio0 = &mdio1;
+               ethernet0 = &dp1;
+               ethernet1 = &dp2;
+               ethernet2 = &dp3;
+               ethernet3 = &dp4;
+               ethernet4 = &dp5_syn;
+               ethernet5 = &dp6_syn;
+               led-boot = &led_pwr;
+               led-failsafe = &led_pwr;
+               led-running = &led_pwr;
+               led-upgrade = &led_pwr;
+       };
+
+       chosen {
+               stdout-path = "serial0:115200n8";
+               /* We have to override root and ubi device passed by bootloader */
+               bootargs-append = " ubi.block=0,jffs2 root=/dev/ubiblock0_4";
+       };
+
+       keys {
+               compatible = "gpio-keys";
+               pinctrl-0 = <&button_pins>;
+               pinctrl-names = "default";
+
+               wifi-button {
+                       label = "wifi";
+                       gpios = <&tlmm 26 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_WLAN>;
+               };
+
+               reset-button {
+                       label = "reset";
+                       gpios = <&tlmm 61 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_RESTART>;
+               };
+
+               wps-button {
+                       label = "wps";
+                       gpios = <&tlmm 34 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_WPS_BUTTON>;
+               };
+
+               led-button {
+                       label = "led";
+                       gpios = <&tlmm 25 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_LIGHTS_TOGGLE>;
+               };
+       };
+
+       leds {
+               compatible = "gpio-leds";
+               pinctrl-0 = <&led_pins>;
+               pinctrl-names = "default";
+
+               led_pwr: led-pwr {
+                       function = LED_FUNCTION_POWER;
+                       gpios = <&tlmm 21 GPIO_ACTIVE_HIGH>;
+                       color = <LED_COLOR_ID_WHITE>;
+               };
+
+               led-2g {
+                       function = LED_FUNCTION_WLAN_2GHZ;
+                       gpios = <&tlmm 18 GPIO_ACTIVE_HIGH>;
+                       color = <LED_COLOR_ID_WHITE>;
+                       linux,default-trigger = "phy0radio";
+               };
+
+               led-5g {
+                       function = LED_FUNCTION_WLAN_5GHZ;
+                       gpios = <&tlmm 19 GPIO_ACTIVE_HIGH>;
+                       color = <LED_COLOR_ID_WHITE>;
+                       linux,default-trigger = "phy1radio";
+               };
+
+               led-10g-copper {
+                       function = "aqr10g";
+                       gpios = <&tlmm 20 GPIO_ACTIVE_HIGH>;
+                       color = <LED_COLOR_ID_WHITE>;
+               };
+
+               led-lan {
+                       function = LED_FUNCTION_LAN;
+                       gpios = <&tlmm 35 GPIO_ACTIVE_HIGH>;
+                       color = <LED_COLOR_ID_WHITE>;
+               };
+
+               led-sfp {
+                       function = "sfp";
+                       gpios = <&tlmm 36 GPIO_ACTIVE_HIGH>;
+                       color = <LED_COLOR_ID_WHITE>;
+               };
+
+               led-wan-red {
+                       function = LED_FUNCTION_WAN;
+                       gpios = <&tlmm 44 GPIO_ACTIVE_HIGH>;
+                       color = <LED_COLOR_ID_RED>;
+               };
+
+               led-wan-white {
+                       function = LED_FUNCTION_WAN;
+                       gpios = <&tlmm 47 GPIO_ACTIVE_HIGH>;
+                       color = <LED_COLOR_ID_WHITE>;
+               };
+       };
+
+       gpio_fan: gpio-fan {
+               compatible = "gpio-fan";
+               pinctrl-0 = <&fan_pins>;
+               pinctrl-names = "default";
+               gpios = <&tlmm 64 GPIO_ACTIVE_HIGH
+                        &tlmm 66 GPIO_ACTIVE_HIGH>;
+               /*
+                * Not supported upstream, but good to document for
+                * future uses.
+                * It seems that Delta AFB0712VHB fan has its tacho
+                * output connected to GPIO 65.
+                */
+               //rpm-gpios = <&tlmm 65 GPIO_ACTIVE_HIGH>;
+               gpio-fan,speed-map = <    0 0
+                                         1600 1
+                                         1850 2
+                                         2100 3 >;
+               #cooling-cells = <2>;
+       };
+
+       usb0_vbus: regulator-usb0-vbus {
+               compatible = "regulator-fixed";
+               regulator-name = "usb0_vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&tlmm 30 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               regulator-boot-on;
+       };
+
+       usb1_vbus: regulator-usb1-vbus {
+               compatible = "regulator-fixed";
+               regulator-name = "usb1_vbus";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&tlmm 31 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               regulator-boot-on;
+       };
+
+       output-usb0-power {
+               compatible = "regulator-output";
+               vout-supply = <&usb0_vbus>;
+       };
+
+       output-usb1-power {
+               compatible = "regulator-output";
+               vout-supply = <&usb1_vbus>;
+       };
+};
+
+&cpu0_thermal {
+       trips {
+               cpu0_active: cpu-active {
+                       temperature = <70000>;
+                       hysteresis = <2000>;
+                       type = "active";
+               };
+       };
+
+       cooling-maps {
+               map2 {
+                       trip = <&cpu0_active>;
+                       cooling-device = <&gpio_fan THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+               };
+       };
+};
+
+&cpu1_thermal {
+       trips {
+               cpu1_active: cpu-active {
+                       temperature = <70000>;
+                       hysteresis = <2000>;
+                       type = "active";
+               };
+       };
+
+       cooling-maps {
+               map2 {
+                       trip = <&cpu1_active>;
+                       cooling-device = <&gpio_fan THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+               };
+       };
+};
+
+&cpu2_thermal {
+       trips {
+               cpu2_active: cpu-active {
+                       temperature = <70000>;
+                       hysteresis = <2000>;
+                       type = "active";
+               };
+       };
+
+       cooling-maps {
+               map2 {
+                       trip = <&cpu2_active>;
+                       cooling-device = <&gpio_fan THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+               };
+       };
+};
+
+&cpu3_thermal {
+       trips {
+               cpu3_active: cpu-active {
+                       temperature = <70000>;
+                       hysteresis = <2000>;
+                       type = "active";
+               };
+       };
+
+       cooling-maps {
+               map2 {
+                       trip = <&cpu3_active>;
+                       cooling-device = <&gpio_fan THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+               };
+       };
+};
+
+&cluster_thermal {
+       trips {
+               cluster_active: cluster-active {
+                       temperature = <70000>;
+                       hysteresis = <2000>;
+                       type = "active";
+               };
+       };
+
+       cooling-maps {
+               map2 {
+                       trip = <&cluster_active>;
+                       cooling-device = <&gpio_fan THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+               };
+       };
+};
+
+&tlmm {
+       button_pins: button-state {
+               pins = "gpio25", "gpio26", "gpio34", "gpio61";
+               function = "gpio";
+               drive-strength = <8>;
+               bias-pull-up;
+       };
+
+       i2c_pins: i2c-pins {
+               pins = "gpio42", "gpio43";
+               function = "blsp1_i2c";
+               drive-strength = <8>;
+               bias-disable;
+       };
+
+       mdio_pins: mdio-pins {
+               mdc {
+                       pins = "gpio68";
+                       function = "mdc";
+                       drive-strength = <16>;
+                       bias-pull-up;
+               };
+
+               mdio {
+                       pins = "gpio69";
+                       function = "mdio";
+                       drive-strength = <16>;
+                       bias-pull-up;
+               };
+       };
+
+       mdio_gpio_pins: mdio-gpio-pins {
+               pins = "gpio54", "gpio56";
+               function = "gpio";
+               drive-strength = <8>;
+               bias-pull-up;
+       };
+
+       uniphy_pins: uniphy_pinmux {
+               mux {
+                       pins = "gpio60";
+                       function = "rx2";
+                       bias-disable;
+               };
+
+               sfp_tx_disable {
+                       pins = "gpio48";
+                       function = "gpio";
+                       drive-strength = <8>;
+                       bias-pull-down;
+                       output-low;
+               };
+
+               sfp_tx_fault {
+                       pins = "gpio62";
+                       function = "gpio";
+                       drive-strength = <8>;
+                       bias-pull-up;
+                       output-high;
+               };
+
+               sfp_mod_def0 {
+                       pins = "gpio46";
+                       function = "gpio";
+                       drive-strength = <8>;
+                       bias-pull-up;
+               };
+       };
+
+       led_pins: led-state {
+               power {
+                       pins = "gpio21";
+                       function = "gpio";
+                       drive-strength = <8>;
+                       bias-pull-up;
+               };
+
+               default_off {
+                       pins = "gpio18", "gpio19", "gpio20", "gpio47",
+                              "gpio44", "gpio35", "gpio36";
+                       function = "gpio";
+                       drive-strength = <8>;
+                       bias-pull-down;
+               };
+       };
+
+       fan_pins: fan-state {
+               pins = "gpio64", "gpio66";
+               function = "gpio";
+               drive-strength = <8>;
+               bias-disable;
+               output-high;
+       };
+};
+
+&blsp1_uart5 {
+       status = "okay";
+};
+
+&prng {
+       status = "okay";
+};
+
+&cryptobam {
+       status = "okay";
+};
+
+&crypto {
+       status = "okay";
+};
+
+&ssphy_0 {
+       status = "okay";
+};
+
+&qusb_phy_0 {
+       status = "okay";
+};
+
+&ssphy_1 {
+       status = "okay";
+};
+
+&qusb_phy_1 {
+       status = "okay";
+};
+
+&usb_0 {
+       status = "okay";
+};
+
+&usb_1 {
+       status = "okay";
+};
+
+&qpic_bam {
+       status = "okay";
+};
+
+&qpic_nand {
+       status = "okay";
+
+       nand@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@0 {
+                               label = "0:sbl1";
+                               reg = <0x0 0x60000>;
+                               read-only;
+                       };
+
+                       partition@60000 {
+                               label = "0:mibib";
+                               reg = <0x00060000 0x40000>;
+                               read-only;
+                       };
+
+                       partition@a0000 {
+                               label = "0:qsee";
+                               reg = <0x000a0000 0x1e0000>;
+                               read-only;
+                       };
+
+                       partition@280000 {
+                               label = "0:devcfg";
+                               reg = <0x00280000 0x20000>;
+                               read-only;
+                       };
+
+                       partition@2a0000 {
+                               label = "0:apdp";
+                               reg = <0x002a0000 0x20000>;
+                               read-only;
+                       };
+
+                       partition@2c0000 {
+                               label = "0:rpm";
+                               reg = <0x002c0000 0x40000>;
+                               read-only;
+                       };
+
+                       partition@300000 {
+                               label = "0:cdt";
+                               reg = <0x00300000 0x20000>;
+                               read-only;
+                       };
+
+                       partition@320000 {
+                               label = "0:appsbl";
+                               reg = <0x00320000 0xc0000>;
+                               read-only;
+                       };
+
+                       partition@3e0000 {
+                               label = "0:appsblenv";
+                               reg = <0x003e0000 0x20000>;
+                       };
+
+                       partition@400000 {
+                               compatible = "linux,ubi";
+                               label = "UBI_DEV";
+                               reg = <0x00400000 0xfc00000>;
+                       };
+               };
+       };
+};
+
+&blsp1_i2c2 {
+       status = "okay";
+};
+
+&mdio {
+       status = "okay";
+
+       pinctrl-0 = <&mdio_pins>;
+       pinctrl-names = "default";
+       reset-gpios = <&tlmm 37 GPIO_ACTIVE_LOW>;
+
+       qca8337_0: ethernet-phy@0 {
+               compatible = "ethernet-phy-ieee802.3-c22";
+               reg = <0x0>;
+       };
+
+       qca8337_1: ethernet-phy@1 {
+               compatible = "ethernet-phy-ieee802.3-c22";
+               reg = <0x1>;
+       };
+
+       qca8337_2: ethernet-phy@2 {
+               compatible = "ethernet-phy-ieee802.3-c22";
+               reg = <0x2>;
+       };
+
+       qca8337_3: ethernet-phy@3 {
+               compatible = "ethernet-phy-ieee802.3-c22";
+               reg = <0x3>;
+       };
+
+       qca8337_4: ethernet-phy@4 {
+               compatible = "ethernet-phy-ieee802.3-c22";
+               reg = <0x4>;
+       };
+
+       /*
+        * Vendor bootloader has path for ethernet-phy@5 hardcoded
+        * and if its there it will delete the node, but since we
+        * need the QCA8035 for DSA lets fool the bootloader by using
+        * ethernet-phy@05 even though it causes DTC to print a warning.
+        */
+       qca8035: ethernet-phy@05 {
+               compatible = "ethernet-phy-ieee802.3-c22";
+               reg = <0x5>;
+       };
+
+       qca8033: ethernet-phy@6 {
+               compatible = "ethernet-phy-ieee802.3-c22";
+               reg = <0x6>;
+       };
+
+       ethernet-phy-package@8 {
+               #address-cells = <1>;
+               #size-cells = <0>;
+               compatible = "qcom,qca8075-package";
+               reg = <8>;
+
+               qcom,package-mode = "qsgmii";
+
+               qca8075_8: ethernet-phy@8 {
+                       compatible = "ethernet-phy-ieee802.3-c22";
+                       reg = <0x8>;
+               };
+
+               qca8075_9: ethernet-phy@9 {
+                       compatible = "ethernet-phy-ieee802.3-c22";
+                       reg = <0x9>;
+               };
+
+               qca8075_a: ethernet-phy@a {
+                       compatible = "ethernet-phy-ieee802.3-c22";
+                       reg = <0xa>;
+               };
+
+               qca8075_b: ethernet-phy@b {
+                       compatible = "ethernet-phy-ieee802.3-c22";
+                       reg = <0xb>;
+               };
+       };
+
+       qca8337: switch@10 {
+               compatible = "qca,qca8337";
+               #address-cells = <1>;
+               #size-cells = <0>;
+               reg = <0x10>;
+
+               ports {
+                       port@0 {
+                               reg = <0>;
+                               label = "cpu";
+                               ethernet = <&dp1>;
+                               phy-mode = "rgmii-rxid";
+                               phy-handle = <&qca8035>;
+                       };
+
+                       port@1 {
+                               reg = <1>;
+                               label = "lan7";
+                               phy-handle = <&qca8337_0>;
+                       };
+
+                       port@2 {
+                               reg = <2>;
+                               label = "lan6";
+                               phy-handle = <&qca8337_1>;
+                       };
+
+                       port@3 {
+                               reg = <3>;
+                               label = "lan5";
+                               phy-handle = <&qca8337_2>;
+                       };
+
+                       port@4 {
+                               reg = <4>;
+                               label = "lan4";
+                               phy-handle = <&qca8337_3>;
+                       };
+
+                       port@5 {
+                               reg = <5>;
+                               label = "lan3";
+                               phy-handle = <&qca8337_4>;
+                       };
+
+                       port@6 {
+                               reg = <6>;
+                               label = "lan8";
+                               phy-mode = "sgmii";
+                               phy-handle = <&qca8033>;
+                               managed = "in-band-status";
+                               qca,sgmii-enable-pll;
+                       };
+               };
+       };
+};
+
+&soc {
+       /*
+        * This is techically incorrect and will cause a DTC warning as
+        * all nodes under a bus are supposed to have addresses as well
+        * but its required as bootloader has this path hardcoded in
+        * order to enable AQR113C on newer revisions.
+        */
+       mdio1: mdio1 {
+               compatible = "virtual,mdio-gpio";
+               pinctrl-0 = <&mdio_gpio_pins>;
+               pinctrl-names = "default";
+               gpios = <&tlmm 56 GPIO_ACTIVE_HIGH>,
+                       <&tlmm 54 GPIO_ACTIVE_HIGH>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               /*
+                * PCB R5.00, AQR113C
+                * No idea why the bitbanged this one.
+                * @5 is wrong, but their bootloader has it hardcoded in
+                * order to dynamically enable the PHY for newer HW.
+                */
+               aqr113c: ethernet-phy@5 {
+                       status = "disabled";
+                       compatible ="ethernet-phy-ieee802.3-c45";
+                       reg = <8>;
+               };
+       };
+};
+
+&switch {
+       status = "okay";
+
+       pinctrl-0 = <&uniphy_pins>;
+       pinctrl-names = "default";
+
+       switch_lan_bmp = <(ESS_PORT1 | ESS_PORT2 | ESS_PORT3 | ESS_PORT5 | ESS_PORT6)>; /* lan port bitmap */
+       switch_wan_bmp = <ESS_PORT4>; /* wan port bitmap */
+       switch_mac_mode = <MAC_MODE_QSGMII>; /* mac mode for uniphy instance0*/
+       switch_mac_mode1 = <MAC_MODE_10GBASE_R>; /* mac mode for uniphy instance1*/
+       switch_mac_mode2 = <MAC_MODE_USXGMII>; /* mac mode for uniphy instance2*/
+
+       qcom,port_phyinfo {
+               port@0 {
+                       port_id = <1>;
+                       phy_address = <0x8>;
+               };
+               port@1 {
+                       port_id = <2>;
+                       phy_address = <0x9>;
+               };
+               port@2 {
+                       port_id = <3>;
+                       phy_address = <0xa>;
+               };
+               port@3 {
+                       port_id = <4>;
+                       phy_address = <0xb>;
+               };
+
+               sfp: port@4 {
+                       port_id = <5>;
+                       phy_address = <30>;
+                       phy_i2c_address = <30>;
+                       phy-i2c-mode; /*i2c access phy */
+                       media-type = "sfp"; /* fiber mode */
+                       sfp_tx_dis_pin = <&tlmm 48 GPIO_ACTIVE_HIGH>;
+                       sfp_mod_present_pin = <&tlmm 46 GPIO_ACTIVE_LOW>;
+               };
+
+               /* PCB R5.00, AQR113C */
+               port@5_113c {
+                       status = "disabled";
+                       port_id = <6>;
+                       phy_address = <8>;
+                       ethernet-phy-ieee802.3-c45;
+                       mdiobus = <&mdio1>;
+               };
+       };
+};
+
+&edma {
+       status = "okay";
+};
+
+&dp1 {
+       status = "okay";
+       phy-mode = "qsgmii";
+       phy-handle = <&qca8075_8>;
+       label = "switch";
+};
+
+&dp2 {
+       status = "okay";
+       phy-mode = "qsgmii";
+       phy-handle = <&qca8075_9>;
+       label = "lan2";
+};
+
+&dp3 {
+       status = "okay";
+       phy-mode = "qsgmii";
+       phy-handle = <&qca8075_a>;
+       label = "lan1";
+};
+
+&dp4 {
+       status = "okay";
+       phy-mode = "qsgmii";
+       phy-handle = <&qca8075_b>;
+       label = "wan";
+};
+
+&dp5_syn {
+       status = "okay";
+       phy-handle = <&sfp>;
+       label = "10g-sfp";
+};
+
+&dp6_syn {
+       status = "okay";
+       phy-handle = <&aqr113c>;
+       label = "10g-copper";
+};
+
+&wifi {
+       status = "okay";
+       qcom,ath11k-calibration-variant = "Asus-RT-AX89X";
+};
index e2a6da569c4c55339b0860ac989def493887d87b..8caa6a322c8f30835783463effcb5f0058a8cf41 100644 (file)
@@ -1,3 +1,26 @@
+define Build/asus-fake-ramdisk
+       rm -rf $(KDIR)/tmp/fakerd
+       dd if=/dev/zero bs=32 count=1 > $(KDIR)/tmp/fakerd
+       $(info KERNEL_INITRAMFS is $(KERNEL_INITRAMFS))
+endef
+
+define Build/asus-fake-rootfs
+       $(eval comp=$(word 1,$(1)))
+       $(eval filepath=$(word 2,$(1)))
+       $(eval filecont=$(word 3,$(1)))
+       rm -rf $(KDIR)/tmp/fakefs $(KDIR)/tmp/fakehsqs
+       mkdir -p $(KDIR)/tmp/fakefs/$$(dirname $(filepath))
+       echo '$(filecont)' > $(KDIR)/tmp/fakefs/$(filepath)
+       $(STAGING_DIR_HOST)/bin/mksquashfs4 $(KDIR)/tmp/fakefs $(KDIR)/tmp/fakehsqs -comp $(comp) \
+               -b 4096 -no-exports -no-sparse -no-xattrs -all-root -noappend \
+               $(wordlist 4,$(words $(1)),$(1))
+endef
+
+define Build/asus-trx
+       $(STAGING_DIR_HOST)/bin/asusuimage $(wordlist 1,$(words $(1)),$(1)) -i $@ -o $@.new
+       mv $@.new $@
+endef
+
 define Build/wax6xx-netgear-tar
        mkdir $@.tmp
        mv $@ $@.tmp/nand-ipq807x-apps.img
@@ -22,6 +45,34 @@ define Device/arcadyan_aw1000
 endef
 TARGET_DEVICES += arcadyan_aw1000
 
+define Device/asus_rt-ax89x
+       DEVICE_VENDOR := Asus
+       DEVICE_MODEL := RT-AX89X
+       BLOCKSIZE := 128k
+       PAGESIZE := 2048
+       DEVICE_DTS_CONFIG := config@hk01
+       SOC := ipq8074
+       DEVICE_PACKAGES := kmod-hwmon-gpiofan ipq-wifi-asus_rt-ax89x
+       KERNEL_NAME := vmlinux
+       KERNEL := kernel-bin | libdeflate-gzip
+       KERNEL_IN_UBI := 1
+       IMAGE/sysupgrade.bin/squashfs := \
+               append-kernel | asus-fake-ramdisk |\
+               multiImage gzip $$(KDIR)/tmp/fakerd $$(KDIR)/image-$$(DEVICE_DTS).dtb |\
+               sysupgrade-tar kernel=$$$$@ | append-metadata
+ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),)
+       ARTIFACTS := initramfs-factory.trx initramfs-uImage.itb
+       ARTIFACT/initramfs-uImage.itb := \
+               append-image-stage initramfs-kernel.bin | fit gzip $$(KDIR)/image-$$(DEVICE_DTS).dtb
+       ARTIFACT/initramfs-factory.trx := \
+               append-image-stage initramfs-kernel.bin |\
+               asus-fake-rootfs xz /lib/firmware/IPQ8074A/fw_version.txt "fake" -no-compression |\
+               multiImage gzip $$(KDIR)/tmp/fakehsqs $$(KDIR)/image-$$(DEVICE_DTS).dtb |\
+               asus-trx -v 2 -n RT-AX89U -b 388 -e 49000
+endif
+endef
+TARGET_DEVICES += asus_rt-ax89x
+
 define Device/buffalo_wxr-5950ax12
        $(call Device/FitImage)
        DEVICE_VENDOR := Buffalo
index 23d87f1b2d81a7a9200df7b09f87cccc74635f3e..b5c3cbc73656fa57003804465896528819222d76 100644 (file)
@@ -11,6 +11,11 @@ arcadyan,aw1000)
        ucidef_set_led_netdev "wan" "WAN" "green:internet" "wan"
        ucidef_set_led_netdev "wan-port-link" "WAN-PORT-LINK" "90000.mdio-1:1c:green:wan" "wan" "tx rx link_10 link_100 link_1000 link_2500"
        ;;
+asus,rt-ax89x)
+       ucidef_set_led_netdev "aqr" "AQR" "white:aqr10g" "10g-copper"
+       ucidef_set_led_netdev "sfp" "SFP" "white:sfp" "10g-sfp"
+       ucidef_set_led_netdev "wan" "WAN" "white:wan" "wan"
+       ;;
 dynalink,dl-wrx36)
        ucidef_set_led_netdev "wan-port-link-green" "WAN-PORT-LINK-GREEN" "90000.mdio-1:1c:green:wan" "wan" "link_2500"
        ucidef_set_led_netdev "wan-port-link-yellow" "WAN-PORT-LINK-YELLOW" "90000.mdio-1:1c:yellow:wan" "wan" "tx rx link_10 link_100 link_1000"
index 0bf224f380e8753c04d63fcf46cb1c92c0d35cb6..f87dbdd2bea0e14067f699f767a3fab6b89c4e68 100644 (file)
@@ -11,6 +11,9 @@ ipq807x_setup_interfaces()
        local board="$1"
 
        case "$board" in
+       asus,rt-ax89x)
+               ucidef_set_interfaces_lan_wan "10g-sfp 10g-copper lan1 lan2 lan3 lan4 lan5 lan6 lan7 lan8" "wan"
+               ;;
        arcadyan,aw1000|\
        buffalo,wxr-5950ax12|\
        dynalink,dl-wrx36|\
index 1170a354136d5700b6b0af2f642e8ab4575d9d20..e413801ef94c53d60eba705025123ebe6a4d3f60 100644 (file)
@@ -9,6 +9,10 @@ board=$(board_name)
 case "$FIRMWARE" in
 "ath11k/IPQ8074/hw2.0/cal-ahb-c000000.wifi.bin")
        case "$board" in
+       asus,rt-ax89x)
+               CI_UBIPART="UBI_DEV"
+               caldata_extract_ubi "Factory" 0x1000 0x20000
+               ;;
        arcadyan,aw1000|\
        buffalo,wxr-5950ax12|\
        cmcc,rm2-6|\
index 5d89554133fe1755af6c909e0e27a8808377c66e..f78a4b04f1d08808c08b9697908757b2f054e02e 100644 (file)
@@ -27,12 +27,23 @@ xiaomi_initramfs_prepare() {
        ubiformat /dev/mtd$kern_mtdnum -y
 }
 
+asus_initial_setup() {
+       # Remove existing linux and jffs2 volumes
+       [ "$(rootfs_type)" = "tmpfs" ] || return 0
+
+       ubirmvol /dev/ubi0 -N linux
+       ubirmvol /dev/ubi0 -N jffs2
+}
+
 platform_check_image() {
        return 0;
 }
 
 platform_pre_upgrade() {
        case "$(board_name)" in
+       asus,rt-ax89x)
+               asus_initial_setup
+               ;;
        redmi,ax6|\
        xiaomi,ax3600|\
        xiaomi,ax9000)
@@ -56,6 +67,12 @@ platform_do_upgrade() {
        netgear,wax630)
                nand_do_upgrade "$1"
                ;;
+       asus,rt-ax89x)
+               CI_UBIPART="UBI_DEV"
+               CI_KERNPART="linux"
+               CI_ROOTPART="jffs2"
+               nand_do_upgrade "$1"
+               ;;
        buffalo,wxr-5950ax12)
                CI_KERN_UBIPART="rootfs"
                CI_ROOT_UBIPART="user_property"
index 1fa8d84ad699994c5fe278ac0b12f8aabaf17355..f4942c32ccff7177725bb6a190a2123af16b27f8 100644 (file)
@@ -32,6 +32,7 @@ CONFIG_REGULATOR_CPR4_APSS=y
 # CONFIG_REGULATOR_QCOM_LABIBB is not set
 CONFIG_REGULATOR_QCOM_SPMI=y
 # CONFIG_REGULATOR_QCOM_USB_VBUS is not set
+CONFIG_REGULATOR_USERSPACE_CONSUMER=y
 CONFIG_RTC_DRV_PM8XXX=y
 CONFIG_SPMI=y
 # CONFIG_SPMI_HISI3670 is not set