ath79: add support for Netgear EX6400 and EX7300
authorDaniel Gimpelevich <daniel@gimpelevich.san-francisco.ca.us>
Fri, 14 Sep 2018 04:08:51 +0000 (21:08 -0700)
committerPetr Štetiar <ynezz@true.cz>
Tue, 9 Apr 2019 09:09:26 +0000 (11:09 +0200)
This is sold as a dual-band 802.11ac range extender. It has a sliding
switch for Extender mode or Access Point mode, a WPS button, a recessed
Reset button, a hard-power button, and a multitude of LED's, some
multiplexed via an NXP 74AHC164D chip. The internal serial header pinout is
Vcc, Tx, Rx, GND, with GND closest to the corner of the board. You may
connect at 115200 bps, 8 data bits, no parity, 1 stop bit.

Specification:
- System-On-Chip: QCA9558
- CPU/Speed: 720 MHz
- Flash-Chip: Winbond 25Q128FVSG
- Flash size: 16 MiB
- RAM: 128 MiB
- Wireless No1: QCA9558 on-chip 2.4GHz 802.11bgn, 3x3
- Wireless No2: QCA99x0 chip 5GHz 802.11an+ac, 4x4
- PHY: Atheros AR8035-A

Installation:
If you can get to the stock firmware's firmware upgrade option, just feed
it the factory.img and boot as usual. As an alternative, TFTP the
factory.img to the bootloader.

Signed-off-by: Daniel Gimpelevich <daniel@gimpelevich.san-francisco.ca.us>
[whitespace fix in DTS and reorder of make variables]
Signed-off-by: Petr Štetiar <ynezz@true.cz>
package/boot/uboot-envtools/files/ath79
target/linux/ath79/base-files/etc/board.d/02_network
target/linux/ath79/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
target/linux/ath79/dts/qca9558_netgear_ex6400.dts [new file with mode: 0644]
target/linux/ath79/dts/qca9558_netgear_ex7300.dts [new file with mode: 0644]
target/linux/ath79/dts/qca9558_netgear_ex7300.dtsi [new file with mode: 0644]
target/linux/ath79/image/common-netgear.mk
target/linux/ath79/image/generic.mk

index 495392b69adb9c883284a76c51e4828c721bb714..2144f61070427f8a2a21fb0e0ad7c59d3012f265 100644 (file)
@@ -20,6 +20,8 @@ buffalo,bhr-4grv2|\
 glinet,gl-ar300m-nand|\
 glinet,gl-ar300m-nor|\
 librerouter,librerouter-v1|\
+netgear,ex6400|\
+netgear,ex7300|\
 ocedo,koala|\
 ocedo,raccoon|\
 openmesh,om5p-ac-v2|\
index 4c734ac69ab15b597bd0049e8aecda60930cd96f..2f4fb62a5f2a8d0d43417ca80cb80e3c97ff1bf1 100755 (executable)
@@ -14,6 +14,8 @@ ath79_setup_interfaces()
        devolo,dvl1750c|\
        devolo,dvl1750i|\
        glinet,ar300m-lite|\
+       netgear,ex6400|\
+       netgear,ex7300|\
        ocedo,koala|\
        ocedo,raccoon|\
        pcs,cap324|\
index bfddb5f1c3113660120613a5780a10824c5c1f43..fc3f7142bbd09119e108dccff1cd46a2aec1eb2e 100644 (file)
@@ -170,6 +170,11 @@ case "$FIRMWARE" in
                ln -sf /lib/firmware/ath10k/pre-cal-pci-0000\:00\:00.0.bin \
                        /lib/firmware/ath10k/QCA9888/hw2.0/board.bin
                ;;
+       netgear,ex6400|\
+       netgear,ex7300)
+               ath10kcal_extract "caldata" 20480 12064
+               ath10kcal_patch_mac $(mtd_get_mac_binary caldata 12)
+               ;;
        phicomm,k2t)
                ath10kcal_extract "art" 20480 12064
                ath10kcal_patch_mac_crc $(k2t_get_mac "5g_mac")
diff --git a/target/linux/ath79/dts/qca9558_netgear_ex6400.dts b/target/linux/ath79/dts/qca9558_netgear_ex6400.dts
new file mode 100644 (file)
index 0000000..8b61331
--- /dev/null
@@ -0,0 +1,9 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/dts-v1/;
+
+#include "qca9558_netgear_ex7300.dtsi"
+
+/ {
+       model = "Netgear EX6400";
+       compatible = "netgear,ex6400", "qca,qca9558";
+};
diff --git a/target/linux/ath79/dts/qca9558_netgear_ex7300.dts b/target/linux/ath79/dts/qca9558_netgear_ex7300.dts
new file mode 100644 (file)
index 0000000..23102bf
--- /dev/null
@@ -0,0 +1,9 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/dts-v1/;
+
+#include "qca9558_netgear_ex7300.dtsi"
+
+/ {
+       model = "Netgear EX7300";
+       compatible = "netgear,ex7300", "qca,qca9558";
+};
diff --git a/target/linux/ath79/dts/qca9558_netgear_ex7300.dtsi b/target/linux/ath79/dts/qca9558_netgear_ex7300.dtsi
new file mode 100644 (file)
index 0000000..21c25a5
--- /dev/null
@@ -0,0 +1,222 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/dts-v1/;
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+#include "qca9557.dtsi"
+
+/ {
+       chosen {
+               bootargs = "console=ttyS0,115200n8";
+       };
+
+       aliases {
+               led-boot = &power_green;
+               led-failsafe = &power_amber;
+               led-running = &power_green;
+               led-upgrade = &power_amber;
+       };
+
+       led_spi {
+               compatible = "spi-gpio";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               gpio-sck = <&gpio 18 GPIO_ACTIVE_HIGH>;
+               gpio-mosi = <&gpio 15 GPIO_ACTIVE_HIGH>;
+               num-chipselects = <0>;
+
+               led_gpio: led_gpio@0 {
+                       compatible = "nxp,74lvc594";
+                       reg = <0>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       registers-number = <1>;
+                       lines-initial-states = /bits/ 8 <0xff>;
+                       spi-max-frequency = <500000>;
+
+                       gpio_latch_bit {
+                               gpio-hog;
+                               gpios = <4 GPIO_ACTIVE_HIGH>;
+                               output-high;
+                               line-name = "gpio-latch-bit";
+                       };
+               };
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               power_green: power_green {
+                       label = "netgear:green:power";
+                       gpios = <&gpio 19 GPIO_ACTIVE_LOW>;
+               };
+
+               power_amber: power_amber {
+                       label = "netgear:amber:power";
+                       gpios = <&gpio 20 GPIO_ACTIVE_LOW>;
+               };
+
+               left_blue {
+                       label = "netgear:blue:left";
+                       gpios = <&led_gpio 7 GPIO_ACTIVE_LOW>;
+               };
+
+               right_blue {
+                       label = "netgear:blue:right";
+                       gpios = <&led_gpio 6 GPIO_ACTIVE_LOW>;
+               };
+
+               wps_green {
+                       label = "netgear:green:wps";
+                       gpios = <&led_gpio 5 GPIO_ACTIVE_LOW>;
+               };
+
+               client_red {
+                       label = "netgear:red:client";
+                       gpios = <&led_gpio 3 GPIO_ACTIVE_LOW>;
+               };
+
+               client_green {
+                       label = "netgear:green:client";
+                       gpios = <&led_gpio 2 GPIO_ACTIVE_LOW>;
+               };
+
+               router_red {
+                       label = "netgear:red:router";
+                       gpios = <&led_gpio 1 GPIO_ACTIVE_LOW>;
+               };
+
+               router_green {
+                       label = "netgear:green:router";
+                       gpios = <&led_gpio 0 GPIO_ACTIVE_LOW>;
+               };
+       };
+
+       keys {
+               compatible = "gpio-keys";
+
+               reset {
+                       label = "Reset button";
+                       linux,code = <KEY_RESTART>;
+                       gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
+                       debounce-interval = <60>;
+               };
+
+               wps {
+                       label = "WPS button";
+                       linux,code = <KEY_WPS_BUTTON>;
+                       gpios = <&gpio 22 GPIO_ACTIVE_LOW>;
+                       debounce-interval = <60>;
+               };
+
+               extender_apmode {
+                       label = "EXTENDER/APMODE switch";
+                       gpios = <&gpio 23 GPIO_ACTIVE_LOW>;
+                       linux,code = <BTN_0>;
+                       linux,input-type = <EV_SW>;
+                       debounce-interval = <60>;
+               };
+       };
+};
+
+&pcie0 {
+       status = "okay";
+};
+
+&uart {
+       status = "okay";
+};
+
+&pll {
+       clocks = <&extosc>;
+};
+
+&spi {
+       status = "okay";
+       num-cs = <1>;
+
+       flash@0 {
+               compatible = "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <25000000>;
+
+               partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       uboot: partition@0 {
+                               label = "u-boot";
+                               reg = <0x000000 0x040000>;
+                               read-only;
+                       };
+
+                       partition@40000 {
+                               label = "u-boot-env";
+                               reg = <0x040000 0x010000>;
+                       };
+
+                       caldata: partition@50000 {
+                               label = "caldata";
+                               reg = <0x050000 0x010000>;
+                               read-only;
+                       };
+
+                       partition@60000 {
+                               label = "caldata-backup";
+                               reg = <0x060000 0x010000>;
+                               read-only;
+                       };
+
+                       partition@70000 {
+                               label = "config";
+                               reg = <0x070000 0x010000>;
+                       };
+
+                       partition@80000 {
+                               label = "pot";
+                               reg = <0x080000 0x010000>;
+                       };
+
+                       partition@90000 {
+                               label = "firmware";
+                               reg = <0x090000 0xf30000>;
+                               compatible = "denx,uimage";
+                       };
+
+                       partition@fc0000 {
+                               label = "language";
+                               reg = <0xfc0000 0x040000>;
+                       };
+               };
+       };
+};
+
+&wmac {
+       status = "okay";
+
+       mtd-cal-data = <&caldata 0x1000>;
+       mtd-mac-address = <&caldata 0x06>;
+};
+
+&mdio0 {
+       status = "okay";
+
+       phy4: ethernet-phy@4 {
+               reg = <4>;
+               phy-mode = "rgmii";
+       };
+};
+
+&eth0 {
+       status = "okay";
+
+       mtd-mac-address = <&caldata 0x00>;
+
+       phy-handle = <&phy4>;
+       phy-mode = "rgmii";
+
+       pll-data = <0x83000000 0x80000101 0x80001313>;
+};
index 956266ab2c4a34e8ed2052ecef96a6b6c7371651..9b799362953a020355f5cd94865e24ca293b7c78 100644 (file)
@@ -19,6 +19,16 @@ define Build/netgear-squashfs
        rm -rf $@.squashfs $@.fs
 endef
 
+define Build/netgear-rootfs
+       mkimage \
+               -A mips -O linux -T filesystem -C none \
+               -M $(NETGEAR_KERNEL_MAGIC) \
+               -n '$(VERSION_DIST) filesystem' \
+               -d $(IMAGE_ROOTFS) $@.fs
+       cat $@.fs >> $@
+       rm -rf $@.fs
+endef
+
 define Build/netgear-uImage
        $(call Build/uImage,$(1) -M $(NETGEAR_KERNEL_MAGIC))
 endef
index 42a1b7259893c35700038e644f7748621afb0060..241c1e25814d1f22fc7f143c54f128bee103b69c 100644 (file)
@@ -551,6 +551,29 @@ define Device/netgear_wndr3x00
   $(Device/netgear_ath79)
 endef
 
+define Device/netgear_ex7300_ex6400
+  ATH_SOC := qca9558
+  NETGEAR_KERNEL_MAGIC := 0x27051956
+  NETGEAR_BOARD_ID := EX7300series
+  NETGEAR_HW_ID := 29765104+16+0+128
+  IMAGE_SIZE := 15552k
+  IMAGE/default := append-kernel | pad-offset $$$$(BLOCKSIZE) 64 | netgear-rootfs | pad-rootfs
+  DEVICE_PACKAGES := kmod-ath10k-ct ath10k-firmware-qca99x0-ct
+  $(Device/netgear_ath79)
+endef
+
+define Device/netgear_ex6400
+  $(Device/netgear_ex7300_ex6400)
+  DEVICE_TITLE := NETGEAR EX6400
+endef
+TARGET_DEVICES += netgear_ex6400
+
+define Device/netgear_ex7300
+  $(Device/netgear_ex7300_ex6400)
+  DEVICE_TITLE := NETGEAR EX7300
+endef
+TARGET_DEVICES += netgear_ex7300
+
 define Device/netgear_wndr3700
   $(Device/netgear_wndr3x00)
   DEVICE_TITLE := NETGEAR WNDR3700