ipq806x: add support for Netgear Nighthawk Pro Gaming XR500
authorPeter Geis <pgwipeout@gmail.com>
Mon, 13 Sep 2021 15:08:57 +0000 (11:08 -0400)
committerAdrian Schmutzler <freifunk@adrianschmutzler.de>
Tue, 26 Oct 2021 20:30:18 +0000 (22:30 +0200)
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@gmail.com>
ref: https://github.com/openwrt/openwrt/pull/3215

Signed-off-by: Peter Geis <pgwipeout@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@adrianschmutzler.de>
target/linux/ipq806x/base-files/etc/board.d/01_leds
target/linux/ipq806x/base-files/etc/board.d/02_network
target/linux/ipq806x/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
target/linux/ipq806x/base-files/lib/upgrade/platform.sh
target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-nighthawk.dtsi [new file with mode: 0644]
target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-r7800.dts
target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-xr500.dts [new file with mode: 0644]
target/linux/ipq806x/image/Makefile
target/linux/ipq806x/patches-5.10/0069-arm-boot-add-dts-files.patch

index 74b94a29b4ceb10ca7672ff348a161591ac03075..097ba0afe19a6e34843bd004e279fbbfbebec252 100644 (file)
@@ -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"
index 1a1cec51aa9595ed60f0111c33b6d6acd97a6577..bb77332ef929c03e28d9a006ff0667df593a4dbb 100644 (file)
@@ -57,6 +57,7 @@ nec,wg2600hp3)
                "2:lan" "3:lan" "4:lan" "5:lan" "0@eth1" "1:wan" "6@eth0"
        ;;
 netgear,r7800 |\
+netgear,xr500 |\
 tplink,c2600)
        ucidef_add_switch "switch0" \
                "1:lan:4" "2:lan:3" "3:lan:2" "4:lan:1" "6@eth1" "5:wan" "0@eth0"
index 8cea017ea42beff0cac097ef3b65a64213b52916..a1cbe0a8f6bbf7edc659c20b055fb19777354919 100644 (file)
@@ -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
index a5e18201df04d20d144772edc07dbcda9d45be42..308d7017b32c02f4b9a1bfcb183c87f0fe6c43fb 100644 (file)
@@ -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-nighthawk.dtsi b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-nighthawk.dtsi
new file mode 100644 (file)
index 0000000..a1fde4d
--- /dev/null
@@ -0,0 +1,439 @@
+#include "qcom-ipq8065.dtsi"
+
+#include <dt-bindings/input/input.h>
+
+/ {
+       memory@0 {
+               reg = <0x42000000 0x1e000000>;
+               device_type = "memory";
+       };
+
+       reserved-memory {
+               rsvd@5fe00000 {
+                       reg = <0x5fe00000 0x200000>;
+                       reusable;
+               };
+       };
+
+       aliases {
+               label-mac-device = &gmac2;
+
+               led-boot = &power_white;
+               led-failsafe = &power_amber;
+               led-running = &power_white;
+               led-upgrade = &power_amber;
+
+               mdio-gpio0 = &mdio0;
+       };
+
+       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: 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>;
+               };
+
+               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;
+               };
+       };
+
+       led_pins: led_pins {
+               mux {
+                       pins = "gpio7", "gpio8", "gpio9",
+                               "gpio22", "gpio23", "gpio24",
+                               "gpio26", "gpio53", "gpio64";
+                       function = "gpio";
+                       drive-strength = <2>;
+                       bias-pull-down;
+               };
+       };
+
+       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@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: partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       partition@0 {
+                               label = "qcadata";
+                               reg = <0x0000000 0x0c80000>;
+                               read-only;
+                       };
+
+                       partition@c80000 {
+                               label = "APPSBL";
+                               reg = <0x0c80000 0x0500000>;
+                               read-only;
+                       };
+
+                       partition@1180000 {
+                               label = "APPSBLENV";
+                               reg = <0x1180000 0x0080000>;
+                               read-only;
+                       };
+
+                       art: partition@1200000 {
+                               label = "art";
+                               reg = <0x1200000 0x0140000>;
+                               read-only;
+                       };
+
+                       partition@1340000 {
+                               label = "artbak";
+                               reg = <0x1340000 0x0140000>;
+                               read-only;
+                       };
+
+                       partition@1480000 {
+                               label = "kernel";
+                               reg = <0x1480000 0x0400000>;
+                       };
+               };
+       };
+};
+
+&mdio0 {
+       status = "okay";
+
+       pinctrl-0 = <&mdio0_pins>;
+       pinctrl-names = "default";
+
+       phy0: ethernet-phy@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 */
+               >;
+       };
+
+       phy4: ethernet-phy@4 {
+               reg = <4>;
+               qca,ar8327-initvals = <
+                       0x000e4 0x6a545     /* MAC_POWER_SEL */
+                       0x0000c 0x80        /* PAD6_MODE */
+                       >;
+       };
+};
+
+&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";
+
+       nvmem-cells = <&macaddr_art_6>;
+       nvmem-cell-names = "mac-address";
+
+       fixed-link {
+               speed = <1000>;
+               full-duplex;
+       };
+};
+
+&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>;
+       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@0,0 {
+               reg = <0x00000000 0 0 0 0>;
+               #address-cells = <3>;
+               #size-cells = <2>;
+               ranges;
+
+               wifi0: wifi@1,0 {
+                       compatible = "pci168c,0046";
+                       reg = <0x00010000 0 0 0 0>;
+               };
+       };
+};
+
+&pcie1 {
+       status = "okay";
+
+       max-link-speed = <1>;
+
+       bridge@0,0 {
+               reg = <0x00000000 0 0 0 0>;
+               #address-cells = <3>;
+               #size-cells = <2>;
+               ranges;
+
+               wifi1: wifi@1,0 {
+                       compatible = "pci168c,0046";
+                       reg = <0x00010000 0 0 0 0>;
+               };
+       };
+};
+
+&art {
+       compatible = "nvmem-cells";
+       #address-cells = <1>;
+       #size-cells = <1>;
+
+       macaddr_art_0: macaddr@0 {
+               reg = <0x0 0x6>;
+       };
+
+       macaddr_art_6: macaddr@6 {
+               reg = <0x6 0x6>;
+       };
+};
index b12e3481458454ee749b8021a962ee5228c698a2..48beaf313e760b5d2179c40eadeda51fb9606483 100644 (file)
-#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@0 {
-               reg = <0x42000000 0x1e000000>;
-               device_type = "memory";
-       };
-
-       reserved-memory {
-               rsvd@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@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@0 {
-                               label = "qcadata";
-                               reg = <0x0000000 0x0c80000>;
-                               read-only;
-                       };
-
-                       APPSBL@c80000 {
-                               label = "APPSBL";
-                               reg = <0x0c80000 0x0500000>;
-                               read-only;
-                       };
-
-                       APPSBLENV@1180000 {
-                               label = "APPSBLENV";
-                               reg = <0x1180000 0x0080000>;
-                               read-only;
-                       };
-
-                       art: art@1200000 {
-                               label = "art";
-                               reg = <0x1200000 0x0140000>;
-                               read-only;
-                       };
-
-                       artbak: art@1340000 {
-                               label = "artbak";
-                               reg = <0x1340000 0x0140000>;
-                               read-only;
-                       };
-
-                       kernel@1480000 {
-                               label = "kernel";
-                               reg = <0x1480000 0x0400000>;
-                       };
-
-                       ubi@1880000 {
-                               label = "ubi";
-                               reg = <0x1880000 0x6080000>;
-                       };
-
-                       reserve@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@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@1880000 {
+               label = "ubi";
+               reg = <0x1880000 0x6080000>;
        };
 
-       phy4: ethernet-phy@4 {
-               reg = <4>;
-               qca,ar8327-initvals = <
-                       0x000e4 0x6a545     /* MAC_POWER_SEL */
-                       0x0000c 0x80        /* PAD6_MODE */
-                       >;
+       partition@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@0,0 {
-               reg = <0x00000000 0 0 0 0>;
-               #address-cells = <3>;
-               #size-cells = <2>;
-               ranges;
-
-               wifi@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@0,0 {
-               reg = <0x00000000 0 0 0 0>;
-               #address-cells = <3>;
-               #size-cells = <2>;
-               ranges;
-
-               wifi@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@0 {
-               reg = <0x0 0x6>;
-       };
-
-       macaddr_art_6: macaddr@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 (file)
index 0000000..b7f00a7
--- /dev/null
@@ -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@1880000 {
+               label = "ubi";
+               reg = <0x1880000 0xce00000>;
+       };
+
+       partition@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@c {
+               reg = <0xc 0x6>;
+       };
+};
index 93e7ba315112044e95e15b1949d09ba931692ec7..acb95347bfdc31fda3721d802056745821709704 100644 (file)
@@ -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)
index 87d6b65694c8ad156fa8664ac1738711da75b4ba..ca43a759ef126a2ae004188fc65c70f0a8ef5658 100644 (file)
@@ -10,7 +10,7 @@ Signed-off-by: John Crispin <john@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@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 \