[openwrt/openwrt] ipq806x: add support for Netgear Nighthawk Pro Gaming XR500

LEDE Commits lede-commits at lists.infradead.org
Tue Oct 26 14:34:04 PDT 2021


adrian pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/70c12d26ca6eb01a938feb38f89720d78df0ca6d

commit 70c12d26ca6eb01a938feb38f89720d78df0ca6d
Author: Peter Geis <pgwipeout at gmail.com>
AuthorDate: Mon Sep 13 11:08:57 2021 -0400

    ipq806x: add support for Netgear Nighthawk Pro Gaming XR500
    
    This adds support for the Netgear Nighthawk Pro Gaming XR500.
    It is the successor to the Netgear Nighthawk R7800 and shares almost
    identical hardware to that device.
    The stock firmware is a heavily modified version of OpenWRT.
    
    Specifications:
      SoC: Qualcomm Atheros IPQ8065
      RAM: 512 MB
      Storage: 256 MiB NAND Flash
      Wireless: 2x Qualcomm Atheros QCA9984
      Ethernet: 2x 1000/100/10 dedicated interfaces
      Switch: 5x 1000/100/10 external ports
      USB: 2x 3.0 ports
    
    More information:
    Manufacturer page: https://www.netgear.com/gaming/xr500/
    Almost identical to Netgear R7800
    Differences (r7800 > xr500):
      Flash: 128MiB > 256MiB
      Removed esata
      swapped leds:
        usb1 (gpio 7 > 8)
        usb2 (gpio 8 > 26)
        guest/esata (gpio 26 > 7)
    
    MAC addresses:
    
    On the OEM firmware, the mac addresses are:
    
      WAN: *:50  art 0x6
      LAN: *:4f  art 0x0 (label)
      2G:  *:4f  art 0x0
      5G:  *:51  art 0xc
    
    Installation:
    Install via Web Interface (preferred):
    Utilize openwrt-ipq806x-netgear_xr500-squashfs-factory.img
    
    Install via TFTP recovery:
    1.Turn off the power, push and hold the reset button (in a hole on
      backside) with a pin
    2.Turn on the power and wait till power led starts flashing white
      (after it first flashes orange for a while)
    3.Release the reset button and tftp the factory img in binary mode.
      The power led will stop flashing if you succeeded in transferring
      the image, and the router reboots rather quickly with the new
      firmware.
    4.Try to ping the router (ping 192.168.1.1). If does not respond,
      then tftp will not work either.
    
    Uploading the firmware image with a TFTP client
    $ tftp 192.168.1.1
    bin
    put openwrt-ipq806x-netgear_xr500-squashfs-factory.img
    
    Note:
    
    The end of the last partition is at 0xee00000. This was chosen
    by the initial author, but nobody was able to tell why this
    particular arbitrary size was chosen. Since it's not leaving
    too much empty space and it's the only issue left, let's just
    keep it for now.
    
    Based on work by Adam Hnat <adamhnat at gmail.com>
    ref: https://github.com/openwrt/openwrt/pull/3215
    
    Signed-off-by: Peter Geis <pgwipeout at gmail.com>
    [squash commits, move common LEDs to DTSI, remove SPDX on old
     files, minor whitespace cleanup, commit message facelift,
     add MAC address overview, add Notes, fix MAC addresses,
     use generic name for partition nodes in DTS]
    Signed-off-by: Adrian Schmutzler <freifunk at adrianschmutzler.de>
---
 .../linux/ipq806x/base-files/etc/board.d/01_leds   |   3 +-
 .../ipq806x/base-files/etc/board.d/02_network      |   1 +
 .../etc/hotplug.d/firmware/11-ath10k-caldata       |   8 +
 .../ipq806x/base-files/lib/upgrade/platform.sh     |   1 +
 ...q8065-r7800.dts => qcom-ipq8065-nighthawk.dtsi} |  77 +---
 .../files/arch/arm/boot/dts/qcom-ipq8065-r7800.dts | 470 ++-------------------
 .../files/arch/arm/boot/dts/qcom-ipq8065-xr500.dts |  54 +++
 target/linux/ipq806x/image/Makefile                |  14 +
 .../patches-5.10/0069-arm-boot-add-dts-files.patch |   3 +-
 9 files changed, 129 insertions(+), 502 deletions(-)

diff --git a/target/linux/ipq806x/base-files/etc/board.d/01_leds b/target/linux/ipq806x/base-files/etc/board.d/01_leds
index 74b94a29b4..097ba0afe1 100644
--- a/target/linux/ipq806x/base-files/etc/board.d/01_leds
+++ b/target/linux/ipq806x/base-files/etc/board.d/01_leds
@@ -32,7 +32,8 @@ nec,wg2600hp3)
 netgear,d7800 |\
 netgear,r7500 |\
 netgear,r7500v2 |\
-netgear,r7800)
+netgear,r7800 |\
+netgear,xr500)
 	ucidef_set_led_usbport "usb1" "USB 1" "white:usb1" "usb1-port1" "usb2-port1"
 	ucidef_set_led_usbport "usb2" "USB 2" "white:usb2" "usb3-port1" "usb4-port1"
 	ucidef_set_led_switch "wan" "WAN" "white:wan" "switch0" "0x20"
diff --git a/target/linux/ipq806x/base-files/etc/board.d/02_network b/target/linux/ipq806x/base-files/etc/board.d/02_network
index 1a1cec51aa..bb77332ef9 100644
--- a/target/linux/ipq806x/base-files/etc/board.d/02_network
+++ b/target/linux/ipq806x/base-files/etc/board.d/02_network
@@ -57,6 +57,7 @@ nec,wg2600hp3)
 		"2:lan" "3:lan" "4:lan" "5:lan" "0 at eth1" "1:wan" "6 at eth0"
 	;;
 netgear,r7800 |\
+netgear,xr500 |\
 tplink,c2600)
 	ucidef_add_switch "switch0" \
 		"1:lan:4" "2:lan:3" "3:lan:2" "4:lan:1" "6 at eth1" "5:wan" "0 at eth0"
diff --git a/target/linux/ipq806x/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ipq806x/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
index 8cea017ea4..a1cbe0a8f6 100644
--- a/target/linux/ipq806x/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
+++ b/target/linux/ipq806x/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
@@ -48,6 +48,10 @@ case "$FIRMWARE" in
 		caldata_extract "art" 0x1000 0x2f20
 		ath10k_patch_mac $(macaddr_add $(mtd_get_mac_binary art 0x6) 1)
 		;;
+	netgear,xr500)
+		caldata_extract "art" 0x1000 0x2f20
+		ath10k_patch_mac $(mtd_get_mac_binary art 0xc)
+		;;
 	tplink,ad7200 |\
 	tplink,c2600)
 		caldata_extract "radio" 0x1000 0x2f20
@@ -102,6 +106,10 @@ case "$FIRMWARE" in
 		caldata_extract "art" 0x5000 0x2f20
 		ath10k_patch_mac $(macaddr_add $(mtd_get_mac_binary art 0x6) 2)
 		;;
+	netgear,xr500)
+		caldata_extract "art" 0x5000 0x2f20
+		ath10k_patch_mac $(mtd_get_mac_binary art 0x0)
+		;;
 	tplink,ad7200 |\
 	tplink,c2600)
 		caldata_extract "radio" 0x5000 0x2f20
diff --git a/target/linux/ipq806x/base-files/lib/upgrade/platform.sh b/target/linux/ipq806x/base-files/lib/upgrade/platform.sh
index a5e18201df..308d7017b3 100644
--- a/target/linux/ipq806x/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ipq806x/base-files/lib/upgrade/platform.sh
@@ -16,6 +16,7 @@ platform_do_upgrade() {
 	netgear,r7500 |\
 	netgear,r7500v2 |\
 	netgear,r7800 |\
+	netgear,xr500 |\
 	qcom,ipq8064-ap148 |\
 	qcom,ipq8064-ap161)
 		nand_do_upgrade "$1"
diff --git a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-r7800.dts b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-nighthawk.dtsi
similarity index 86%
copy from target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-r7800.dts
copy to target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-nighthawk.dtsi
index b12e348145..a1fde4d698 100644
--- a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-r7800.dts
+++ b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-nighthawk.dtsi
@@ -3,9 +3,6 @@
 #include <dt-bindings/input/input.h>
 
 / {
-	model = "Netgear Nighthawk X4S R7800";
-	compatible = "netgear,r7800", "qcom,ipq8065", "qcom,ipq8064";
-
 	memory at 0 {
 		reg = <0x42000000 0x1e000000>;
 		device_type = "memory";
@@ -19,13 +16,14 @@
 	};
 
 	aliases {
-		mdio-gpio0 = &mdio0;
+		label-mac-device = &gmac2;
 
 		led-boot = &power_white;
 		led-failsafe = &power_amber;
 		led-running = &power_white;
 		led-upgrade = &power_amber;
-		label-mac-device = &gmac2;
+
+		mdio-gpio0 = &mdio0;
 	};
 
 	keys {
@@ -58,7 +56,7 @@
 		};
 	};
 
-	leds {
+	leds: leds {
 		compatible = "gpio-leds";
 		pinctrl-0 = <&led_pins>;
 		pinctrl-names = "default";
@@ -84,21 +82,6 @@
 			gpios = <&qcom_pinmux 23 GPIO_ACTIVE_HIGH>;
 		};
 
-		usb1 {
-			label = "white:usb1";
-			gpios = <&qcom_pinmux 7 GPIO_ACTIVE_HIGH>;
-		};
-
-		usb2 {
-			label = "white:usb2";
-			gpios = <&qcom_pinmux 8 GPIO_ACTIVE_HIGH>;
-		};
-
-		esata {
-			label = "white:esata";
-			gpios = <&qcom_pinmux 26 GPIO_ACTIVE_HIGH>;
-		};
-
 		wifi {
 			label = "white:wifi";
 			gpios = <&qcom_pinmux 64 GPIO_ACTIVE_HIGH>;
@@ -123,8 +106,9 @@
 
 	led_pins: led_pins {
 		mux {
-			pins = "gpio7", "gpio8", "gpio9", "gpio22", "gpio23",
-				"gpio24","gpio26", "gpio53", "gpio64";
+			pins = "gpio7", "gpio8", "gpio9",
+				"gpio22", "gpio23", "gpio24",
+				"gpio26", "gpio53", "gpio64";
 			function = "gpio";
 			drive-strength = <2>;
 			bias-pull-down;
@@ -140,7 +124,8 @@
 
 	rgmii2_pins: rgmii2_pins {
 		tx {
-			pins = "gpio27", "gpio28", "gpio29", "gpio30", "gpio31", "gpio32" ;
+			pins = "gpio27", "gpio28", "gpio29",
+				"gpio30", "gpio31", "gpio32";
 			input-disable;
 		};
 	};
@@ -243,56 +228,45 @@
 		nand-is-boot-medium;
 		qcom,boot_pages_size = <0x1180000>;
 
-		partitions {
+		partitions: partitions {
 			compatible = "fixed-partitions";
 			#address-cells = <1>;
 			#size-cells = <1>;
 
-			qcadata at 0 {
+			partition at 0 {
 				label = "qcadata";
 				reg = <0x0000000 0x0c80000>;
 				read-only;
 			};
 
-			APPSBL at c80000 {
+			partition at c80000 {
 				label = "APPSBL";
 				reg = <0x0c80000 0x0500000>;
 				read-only;
 			};
 
-			APPSBLENV at 1180000 {
+			partition at 1180000 {
 				label = "APPSBLENV";
 				reg = <0x1180000 0x0080000>;
 				read-only;
 			};
 
-			art: art at 1200000 {
+			art: partition at 1200000 {
 				label = "art";
 				reg = <0x1200000 0x0140000>;
 				read-only;
 			};
 
-			artbak: art at 1340000 {
+			partition at 1340000 {
 				label = "artbak";
 				reg = <0x1340000 0x0140000>;
 				read-only;
 			};
 
-			kernel at 1480000 {
+			partition at 1480000 {
 				label = "kernel";
 				reg = <0x1480000 0x0400000>;
 			};
-
-			ubi at 1880000 {
-				label = "ubi";
-				reg = <0x1880000 0x6080000>;
-			};
-
-			reserve at 7900000 {
-				label = "reserve";
-				reg = <0x7900000 0x0700000>;
-				read-only;
-			};
 		};
 	};
 };
@@ -345,6 +319,7 @@
 
 &gmac1 {
 	status = "okay";
+
 	phy-mode = "rgmii";
 	qcom,id = <1>;
 	qcom,phy_mdio_addr = <4>;
@@ -369,6 +344,7 @@
 
 &gmac2 {
 	status = "okay";
+
 	phy-mode = "sgmii";
 	qcom,id = <2>;
 	qcom,phy_mdio_addr = <0>;	/* none */
@@ -402,14 +378,14 @@
 
 &usb3_0 {
 	status = "okay";
-	
+
 	pinctrl-0 = <&usb0_pwr_en_pins>;
 	pinctrl-names = "default";
 };
 
 &usb3_1 {
 	status = "okay";
-	
+
 	pinctrl-0 = <&usb1_pwr_en_pins>;
 	pinctrl-names = "default";
 };
@@ -423,19 +399,16 @@
 		#size-cells = <2>;
 		ranges;
 
-		wifi at 1,0 {
+		wifi0: wifi at 1,0 {
 			compatible = "pci168c,0046";
 			reg = <0x00010000 0 0 0 0>;
-
-			nvmem-cells = <&macaddr_art_6>;
-			nvmem-cell-names = "mac-address";
-			mac-address-increment = <(1)>;
 		};
 	};
 };
 
 &pcie1 {
 	status = "okay";
+
 	max-link-speed = <1>;
 
 	bridge at 0,0 {
@@ -444,13 +417,9 @@
 		#size-cells = <2>;
 		ranges;
 
-		wifi at 1,0 {
+		wifi1: wifi at 1,0 {
 			compatible = "pci168c,0046";
 			reg = <0x00010000 0 0 0 0>;
-
-			nvmem-cells = <&macaddr_art_6>;
-			nvmem-cell-names = "mac-address";
-			mac-address-increment = <(2)>;
 		};
 	};
 };
diff --git a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-r7800.dts b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-r7800.dts
index b12e348145..48beaf313e 100644
--- a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-r7800.dts
+++ b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-r7800.dts
@@ -1,470 +1,48 @@
-#include "qcom-ipq8065.dtsi"
-
-#include <dt-bindings/input/input.h>
+#include "qcom-ipq8065-nighthawk.dtsi"
 
 / {
 	model = "Netgear Nighthawk X4S R7800";
 	compatible = "netgear,r7800", "qcom,ipq8065", "qcom,ipq8064";
-
-	memory at 0 {
-		reg = <0x42000000 0x1e000000>;
-		device_type = "memory";
-	};
-
-	reserved-memory {
-		rsvd at 5fe00000 {
-			reg = <0x5fe00000 0x200000>;
-			reusable;
-		};
-	};
-
-	aliases {
-		mdio-gpio0 = &mdio0;
-
-		led-boot = &power_white;
-		led-failsafe = &power_amber;
-		led-running = &power_white;
-		led-upgrade = &power_amber;
-		label-mac-device = &gmac2;
-	};
-
-	keys {
-		compatible = "gpio-keys";
-		pinctrl-0 = <&button_pins>;
-		pinctrl-names = "default";
-
-		wifi {
-			label = "wifi";
-			gpios = <&qcom_pinmux 6 GPIO_ACTIVE_LOW>;
-			linux,code = <KEY_RFKILL>;
-			debounce-interval = <60>;
-			wakeup-source;
-		};
-
-		reset {
-			label = "reset";
-			gpios = <&qcom_pinmux 54 GPIO_ACTIVE_LOW>;
-			linux,code = <KEY_RESTART>;
-			debounce-interval = <60>;
-			wakeup-source;
-		};
-
-		wps {
-			label = "wps";
-			gpios = <&qcom_pinmux 65 GPIO_ACTIVE_LOW>;
-			linux,code = <KEY_WPS_BUTTON>;
-			debounce-interval = <60>;
-			wakeup-source;
-		};
-	};
-
-	leds {
-		compatible = "gpio-leds";
-		pinctrl-0 = <&led_pins>;
-		pinctrl-names = "default";
-
-		power_white: power_white {
-			label = "white:power";
-			gpios = <&qcom_pinmux 53 GPIO_ACTIVE_HIGH>;
-			default-state = "keep";
-		};
-
-		power_amber: power_amber {
-			label = "amber:power";
-			gpios = <&qcom_pinmux 9 GPIO_ACTIVE_HIGH>;
-		};
-
-		wan_white {
-			label = "white:wan";
-			gpios = <&qcom_pinmux 22 GPIO_ACTIVE_HIGH>;
-		};
-
-		wan_amber {
-			label = "amber:wan";
-			gpios = <&qcom_pinmux 23 GPIO_ACTIVE_HIGH>;
-		};
-
-		usb1 {
-			label = "white:usb1";
-			gpios = <&qcom_pinmux 7 GPIO_ACTIVE_HIGH>;
-		};
-
-		usb2 {
-			label = "white:usb2";
-			gpios = <&qcom_pinmux 8 GPIO_ACTIVE_HIGH>;
-		};
-
-		esata {
-			label = "white:esata";
-			gpios = <&qcom_pinmux 26 GPIO_ACTIVE_HIGH>;
-		};
-
-		wifi {
-			label = "white:wifi";
-			gpios = <&qcom_pinmux 64 GPIO_ACTIVE_HIGH>;
-		};
-
-		wps {
-			label = "white:wps";
-			gpios = <&qcom_pinmux 24 GPIO_ACTIVE_HIGH>;
-		};
-	};
 };
 
-&qcom_pinmux {
-	button_pins: button_pins {
-		mux {
-			pins = "gpio6", "gpio54", "gpio65";
-			function = "gpio";
-			drive-strength = <2>;
-			bias-pull-up;
-		};
+&leds {
+	usb1 {
+		label = "white:usb1";
+		gpios = <&qcom_pinmux 7 GPIO_ACTIVE_HIGH>;
 	};
 
-	led_pins: led_pins {
-		mux {
-			pins = "gpio7", "gpio8", "gpio9", "gpio22", "gpio23",
-				"gpio24","gpio26", "gpio53", "gpio64";
-			function = "gpio";
-			drive-strength = <2>;
-			bias-pull-down;
-		};
+	usb2 {
+		label = "white:usb2";
+		gpios = <&qcom_pinmux 8 GPIO_ACTIVE_HIGH>;
 	};
 
-	mdio0_pins: mdio0_pins {
-		clk {
-			pins = "gpio1";
-			input-disable;
-		};
-	};
-
-	rgmii2_pins: rgmii2_pins {
-		tx {
-			pins = "gpio27", "gpio28", "gpio29", "gpio30", "gpio31", "gpio32" ;
-			input-disable;
-		};
-	};
-
-	spi_pins: spi_pins {
-		mux {
-			pins = "gpio18", "gpio19", "gpio21";
-			function = "gsbi5";
-			bias-pull-down;
-		};
-
-		data {
-			pins = "gpio18", "gpio19";
-			drive-strength = <10>;
-		};
-
-		cs {
-			pins = "gpio20";
-			drive-strength = <10>;
-			bias-pull-up;
-		};
-
-		clk {
-			pins = "gpio21";
-			drive-strength = <12>;
-		};
-	};
-
-	spi6_pins: spi6_pins {
-		mux {
-			pins = "gpio55", "gpio56", "gpio58";
-			function = "gsbi6";
-			bias-pull-down;
-		};
-
-		mosi {
-			pins = "gpio55";
-			drive-strength = <12>;
-		};
-
-		miso {
-			pins = "gpio56";
-			drive-strength = <14>;
-		};
-
-		cs {
-			pins = "gpio57";
-			drive-strength = <12>;
-			bias-pull-up;
-		};
-
-		clk {
-			pins = "gpio58";
-			drive-strength = <12>;
-		};
-
-		reset {
-			pins = "gpio33";
-			drive-strength = <10>;
-			bias-pull-down;
-			output-high;
-		};
-	};
-
-	usb0_pwr_en_pins: usb0_pwr_en_pins {
-		mux {
-			pins = "gpio15";
-			function = "gpio";
-			drive-strength = <12>;
-			bias-pull-down;
-			output-high;
-		};
-	};
-
-	usb1_pwr_en_pins: usb1_pwr_en_pins {
-		mux {
-			pins = "gpio16", "gpio68";
-			function = "gpio";
-			drive-strength = <12>;
-			bias-pull-down;
-			output-high;
-		};
-	};
-};
-
-&nand_controller {
-	status = "okay";
-
-	pinctrl-0 = <&nand_pins>;
-	pinctrl-names = "default";
-
-	nand at 0 {
-		reg = <0>;
-		compatible = "qcom,nandcs";
-
-		nand-ecc-strength = <4>;
-		nand-bus-width = <8>;
-		nand-ecc-step-size = <512>;
-
-		nand-is-boot-medium;
-		qcom,boot_pages_size = <0x1180000>;
-
-		partitions {
-			compatible = "fixed-partitions";
-			#address-cells = <1>;
-			#size-cells = <1>;
-
-			qcadata at 0 {
-				label = "qcadata";
-				reg = <0x0000000 0x0c80000>;
-				read-only;
-			};
-
-			APPSBL at c80000 {
-				label = "APPSBL";
-				reg = <0x0c80000 0x0500000>;
-				read-only;
-			};
-
-			APPSBLENV at 1180000 {
-				label = "APPSBLENV";
-				reg = <0x1180000 0x0080000>;
-				read-only;
-			};
-
-			art: art at 1200000 {
-				label = "art";
-				reg = <0x1200000 0x0140000>;
-				read-only;
-			};
-
-			artbak: art at 1340000 {
-				label = "artbak";
-				reg = <0x1340000 0x0140000>;
-				read-only;
-			};
-
-			kernel at 1480000 {
-				label = "kernel";
-				reg = <0x1480000 0x0400000>;
-			};
-
-			ubi at 1880000 {
-				label = "ubi";
-				reg = <0x1880000 0x6080000>;
-			};
-
-			reserve at 7900000 {
-				label = "reserve";
-				reg = <0x7900000 0x0700000>;
-				read-only;
-			};
-		};
+	esata {
+		label = "white:esata";
+		gpios = <&qcom_pinmux 26 GPIO_ACTIVE_HIGH>;
 	};
 };
 
-&mdio0 {
-	status = "okay";
-
-	pinctrl-0 = <&mdio0_pins>;
-	pinctrl-names = "default";
-
-	phy0: ethernet-phy at 0 {
-		reg = <0>;
-		qca,ar8327-initvals = <
-			0x00004 0x7600000   /* PAD0_MODE */
-			0x00008 0x1000000   /* PAD5_MODE */
-			0x0000c 0x80        /* PAD6_MODE */
-			0x000e4 0xaa545     /* MAC_POWER_SEL */
-			0x000e0 0xc74164de  /* SGMII_CTRL */
-			0x0007c 0x4e        /* PORT0_STATUS */
-			0x00094 0x4e        /* PORT6_STATUS */
-			0x00970 0x1e864443  /* QM_PORT0_CTRL0 */
-			0x00974 0x000001c6  /* QM_PORT0_CTRL1 */
-			0x00978 0x19008643  /* QM_PORT1_CTRL0 */
-			0x0097c 0x000001c6  /* QM_PORT1_CTRL1 */
-			0x00980 0x19008643  /* QM_PORT2_CTRL0 */
-			0x00984 0x000001c6  /* QM_PORT2_CTRL1 */
-			0x00988 0x19008643  /* QM_PORT3_CTRL0 */
-			0x0098c 0x000001c6  /* QM_PORT3_CTRL1 */
-			0x00990 0x19008643  /* QM_PORT4_CTRL0 */
-			0x00994 0x000001c6  /* QM_PORT4_CTRL1 */
-			0x00998 0x1e864443  /* QM_PORT5_CTRL0 */
-			0x0099c 0x000001c6  /* QM_PORT5_CTRL1 */
-			0x009a0 0x1e864443  /* QM_PORT6_CTRL0 */
-			0x009a4 0x000001c6  /* QM_PORT6_CTRL1 */
-			>;
-		qca,ar8327-vlans = <
-			0x1	0x5e	    /* VLAN1 Ports 1/2/3/4/6 */
-			0x2	0x21	    /* VLAN2 Ports 0/5 */
-		>;
+&partitions {
+	partition at 1880000 {
+		label = "ubi";
+		reg = <0x1880000 0x6080000>;
 	};
 
-	phy4: ethernet-phy at 4 {
-		reg = <4>;
-		qca,ar8327-initvals = <
-			0x000e4 0x6a545     /* MAC_POWER_SEL */
-			0x0000c 0x80        /* PAD6_MODE */
-			>;
+	partition at 7900000 {
+		label = "reserve";
+		reg = <0x7900000 0x0700000>;
+		read-only;
 	};
 };
 
-&gmac1 {
-	status = "okay";
-	phy-mode = "rgmii";
-	qcom,id = <1>;
-	qcom,phy_mdio_addr = <4>;
-	qcom,poll_required = <0>;
-	qcom,rgmii_delay = <1>;
-	qcom,phy_mii_type = <0>;
-	qcom,emulation = <0>;
-	qcom,irq = <255>;
-	mdiobus = <&mdio0>;
-
-	pinctrl-0 = <&rgmii2_pins>;
-	pinctrl-names = "default";
-
+&wifi0 {
 	nvmem-cells = <&macaddr_art_6>;
 	nvmem-cell-names = "mac-address";
-
-	fixed-link {
-		speed = <1000>;
-		full-duplex;
-	};
+	mac-address-increment = <(1)>;
 };
 
-&gmac2 {
-	status = "okay";
-	phy-mode = "sgmii";
-	qcom,id = <2>;
-	qcom,phy_mdio_addr = <0>;	/* none */
-	qcom,poll_required = <0>;	/* no polling */
-	qcom,rgmii_delay = <0>;
-	qcom,phy_mii_type = <1>;
-	qcom,emulation = <0>;
-	qcom,irq = <258>;
-	mdiobus = <&mdio0>;
-
-	nvmem-cells = <&macaddr_art_0>;
+&wifi1 {
+	nvmem-cells = <&macaddr_art_6>;
 	nvmem-cell-names = "mac-address";
-
-	fixed-link {
-		speed = <1000>;
-		full-duplex;
-	};
-};
-
-&adm_dma {
-	status = "okay";
-};
-
-&sata_phy {
-	status = "okay";
-};
-
-&sata {
-	status = "okay";
-};
-
-&usb3_0 {
-	status = "okay";
-	
-	pinctrl-0 = <&usb0_pwr_en_pins>;
-	pinctrl-names = "default";
-};
-
-&usb3_1 {
-	status = "okay";
-	
-	pinctrl-0 = <&usb1_pwr_en_pins>;
-	pinctrl-names = "default";
-};
-
-&pcie0 {
-	status = "okay";
-
-	bridge at 0,0 {
-		reg = <0x00000000 0 0 0 0>;
-		#address-cells = <3>;
-		#size-cells = <2>;
-		ranges;
-
-		wifi at 1,0 {
-			compatible = "pci168c,0046";
-			reg = <0x00010000 0 0 0 0>;
-
-			nvmem-cells = <&macaddr_art_6>;
-			nvmem-cell-names = "mac-address";
-			mac-address-increment = <(1)>;
-		};
-	};
-};
-
-&pcie1 {
-	status = "okay";
-	max-link-speed = <1>;
-
-	bridge at 0,0 {
-		reg = <0x00000000 0 0 0 0>;
-		#address-cells = <3>;
-		#size-cells = <2>;
-		ranges;
-
-		wifi at 1,0 {
-			compatible = "pci168c,0046";
-			reg = <0x00010000 0 0 0 0>;
-
-			nvmem-cells = <&macaddr_art_6>;
-			nvmem-cell-names = "mac-address";
-			mac-address-increment = <(2)>;
-		};
-	};
-};
-
-&art {
-	compatible = "nvmem-cells";
-	#address-cells = <1>;
-	#size-cells = <1>;
-
-	macaddr_art_0: macaddr at 0 {
-		reg = <0x0 0x6>;
-	};
-
-	macaddr_art_6: macaddr at 6 {
-		reg = <0x6 0x6>;
-	};
+	mac-address-increment = <(2)>;
 };
diff --git a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-xr500.dts b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-xr500.dts
new file mode 100644
index 0000000000..b7f00a7a6f
--- /dev/null
+++ b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-xr500.dts
@@ -0,0 +1,54 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include "qcom-ipq8065-nighthawk.dtsi"
+
+/ {
+	model = "Netgear Nighthawk XR500";
+	compatible = "netgear,xr500", "qcom,ipq8065", "qcom,ipq8064";
+
+};
+
+&leds {
+	usb1 {
+		label = "white:usb1";
+		gpios = <&qcom_pinmux 8 GPIO_ACTIVE_HIGH>;
+	};
+
+	usb2 {
+		label = "white:usb2";
+		gpios = <&qcom_pinmux 26 GPIO_ACTIVE_HIGH>;
+	};
+};
+
+&partitions {
+	partition at 1880000 {
+		label = "ubi";
+		reg = <0x1880000 0xce00000>;
+	};
+
+	partition at e680000 {
+		label = "reserve";
+		reg = <0xe680000 0x0780000>;
+		read-only;
+	};
+};
+
+&wifi0 {
+	nvmem-cells = <&macaddr_art_c>;
+	nvmem-cell-names = "mac-address";
+};
+
+&wifi1 {
+	nvmem-cells = <&macaddr_art_0>;
+	nvmem-cell-names = "mac-address";
+};
+
+&art {
+	compatible = "nvmem-cells";
+	#address-cells = <1>;
+	#size-cells = <1>;
+
+	macaddr_art_c: macaddr at c {
+		reg = <0xc 0x6>;
+	};
+};
diff --git a/target/linux/ipq806x/image/Makefile b/target/linux/ipq806x/image/Makefile
index 93e7ba3151..acb95347bf 100644
--- a/target/linux/ipq806x/image/Makefile
+++ b/target/linux/ipq806x/image/Makefile
@@ -284,6 +284,20 @@ define Device/netgear_r7800
 endef
 TARGET_DEVICES += netgear_r7800
 
+define Device/netgear_xr500
+	$(call Device/DniImage)
+	DEVICE_VENDOR := NETGEAR
+	DEVICE_MODEL := Nighthawk XR500
+	SOC := qcom-ipq8065
+	KERNEL_SIZE := 4096k
+	NETGEAR_BOARD_ID := XR500
+	NETGEAR_HW_ID := 29764958+0+256+512+4x4+4x4+cascade
+	BLOCKSIZE := 128k
+	PAGESIZE := 2048
+	DEVICE_PACKAGES := ath10k-firmware-qca9984-ct
+endef
+TARGET_DEVICES += netgear_xr500
+
 define Device/qcom_ipq8064-ap148
 	$(call Device/FitImage)
 	$(call Device/UbiFit)
diff --git a/target/linux/ipq806x/patches-5.10/0069-arm-boot-add-dts-files.patch b/target/linux/ipq806x/patches-5.10/0069-arm-boot-add-dts-files.patch
index 87d6b65694..ca43a759ef 100644
--- a/target/linux/ipq806x/patches-5.10/0069-arm-boot-add-dts-files.patch
+++ b/target/linux/ipq806x/patches-5.10/0069-arm-boot-add-dts-files.patch
@@ -10,7 +10,7 @@ Signed-off-by: John Crispin <john at phrozen.org>
 
 --- a/arch/arm/boot/dts/Makefile
 +++ b/arch/arm/boot/dts/Makefile
-@@ -907,8 +907,26 @@ dtb-$(CONFIG_ARCH_QCOM) += \
+@@ -907,8 +907,27 @@ dtb-$(CONFIG_ARCH_QCOM) += \
  	qcom-ipq4019-ap.dk04.1-c3.dtb \
  	qcom-ipq4019-ap.dk07.1-c1.dtb \
  	qcom-ipq4019-ap.dk07.1-c2.dtb \
@@ -33,6 +33,7 @@ Signed-off-by: John Crispin <john at phrozen.org>
 +	qcom-ipq8065-nbg6817.dtb \
 +	qcom-ipq8065-r7800.dtb \
 +	qcom-ipq8065-rt4230w-rev6.dtb \
++	qcom-ipq8065-xr500.dtb \
 +	qcom-ipq8068-ecw5410.dtb \
  	qcom-msm8660-surf.dtb \
  	qcom-msm8960-cdp.dtb \



More information about the lede-commits mailing list