ipq40xx: Add support for Linksys EA8300 (Dallas)
authorJeff Kletsky <git-commits@allycomm.com>
Wed, 10 Apr 2019 15:34:28 +0000 (08:34 -0700)
committerChristian Lamparter <chunkeey@gmail.com>
Sat, 18 May 2019 11:43:54 +0000 (13:43 +0200)
The Linksys EA8300 is based on QCA4019 and QCA9888 and provides three,
independent radios. NAND provides two, alternate kernel/firmware
images with fail-over provided by the OEM U-Boot.

Installation:

  "Factory" images may be installed directly through the OEM GUI.

Hardware Highlights:

  * IPQ4019 at 717 MHz (4 CPUs)
  * 256 MB NAND (Winbond W29N02GV, 8-bit parallel)
  * 256 MB RAM
  * Three, fully-functional radios; `iw phy` reports (FCC/US, -CT):
      * 2.4 GHz radio at 30 dBm
      * 5 GHz radio on ch. 36-64 at 23 dBm
      * 5 GHz radio on ch. 100-144 at 23 dBm (DFS), 149-165 at 30 dBm
      #{ managed } <= 16, #{ AP, mesh point } <= 16, #{ IBSS } <= 1
      * All two-stream, MCS 0-9
  * 4x GigE LAN, 1x GigE Internet Ethernet jacks with port lights
  * USB3, single port on rear with LED
  * WPS and reset buttons
  * Four status lights on top
  * Serial pads internal (unpopulated)

  "Linksys Dallas WiFi AP router based on Qualcomm AP DK07.1-c1"

Implementation Notes:

  The OEM flash layout is preserved at this time with 3 MB kernel and
  ~69 MB UBIFS for each firmware version. The sysdiag (1 MB) and
  syscfg (56 MB) partitions are untouched, available as read-only.

Serial Connectivity:

  Serial connectivity is *not* required to flash.

  Serial may be accessed by opening the device and connecting
  a 3.3-V adapter using 115200, 8n1. U-Boot access is good,
  including the ability to load images over TFTP and
  either run or flash them.

  Looking at the top of the board, from the front of the unit,
  J3 can be found on the right edge of the board, near the rear

      |
   J3 |
  |-| |
  |O| | (3.3V seen, open-circuit)
  |O| | TXD
  |O| | RXD
  |O| |
  |O| | GND
  |-| |
      |

Unimplemented:

    * serial1 "ttyQHS0" (serial0 works as console)
    * Bluetooth; Qualcomm CSR8811 (potentially conected to serial1)

Other Notes:

    https://wikidevi.com/wiki/Linksys_EA8300 states

        FCC docs also cover the Linksys EA8250. According to the
RF Test Report BT BR+EDR, "All models are identical except
for the EA8300 supports 256QAM and the EA8250 disable 256QAM."

Signed-off-by: Jeff Kletsky <git-commits@allycomm.com>
15 files changed:
package/boot/uboot-envtools/files/ipq40xx
package/firmware/ipq-wifi/Makefile
package/firmware/ipq-wifi/board-linksys_ea8300.qca4019 [new file with mode: 0644]
package/firmware/ipq-wifi/board-linksys_ea8300.qca9888 [new file with mode: 0644]
target/linux/ipq40xx/base-files/etc/board.d/02_network
target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
target/linux/ipq40xx/base-files/etc/init.d/bootcount
target/linux/ipq40xx/base-files/lib/preinit/05_set_iface_mac_ipq40xx.sh
target/linux/ipq40xx/base-files/lib/preinit/06_set_preinit_iface_ipq40xx.sh
target/linux/ipq40xx/base-files/lib/upgrade/platform.sh
target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4019-linksys_ea8300.dts [new file with mode: 0644]
target/linux/ipq40xx/files-4.19/arch/arm/boot/dts/qcom-ipq4019-linksys_ea8300.dts [new file with mode: 0644]
target/linux/ipq40xx/image/Makefile
target/linux/ipq40xx/patches-4.14/901-arm-boot-add-dts-files.patch
target/linux/ipq40xx/patches-4.19/901-arm-boot-add-dts-files.patch

index c16e60b..7bcad00 100644 (file)
@@ -40,6 +40,9 @@ openmesh,a62)
 linksys,ea6350v3)
        ubootenv_add_uci_config "/dev/mtd7" "0x0" "0x20000" "0x20000"
        ;;
+linksys,ea8300)
+       ubootenv_add_uci_config "/dev/mtd7" "0x0" "0x40000" "0x20000"
+       ;;
 zyxel,nbg6617)
        ubootenv_add_uci_config "/dev/mtd6" "0x0" "0x10000" "0x10000"
        ;;
index 5c4ebb2..922064b 100644 (file)
@@ -31,6 +31,7 @@ ALLWIFIBOARDS:= \
        engenius_eap1300 \
        engenius_ens620ext \
        linksys_ea6350v3 \
+       linksys_ea8300 \
        qxwlan_e2600ac
 
 ALLWIFIPACKAGES:=$(foreach BOARD,$(ALLWIFIBOARDS),ipq-wifi-$(BOARD))
@@ -101,6 +102,7 @@ $(eval $(call generate-ipq-wifi-package,avm_fritzrepeater-3000,AVM FRITZ!Repeate
 $(eval $(call generate-ipq-wifi-package,engenius_eap1300,EnGenius EAP1300))
 $(eval $(call generate-ipq-wifi-package,engenius_ens620ext,EnGenius ENS620EXT))
 $(eval $(call generate-ipq-wifi-package,linksys_ea6350v3,Linksys EA6350v3))
+$(eval $(call generate-ipq-wifi-package,linksys_ea8300,Linksys EA8300))
 $(eval $(call generate-ipq-wifi-package,qxwlan_e2600ac,Qxwlan E2600AC))
 
 $(foreach PACKAGE,$(ALLWIFIPACKAGES),$(eval $(call BuildPackage,$(PACKAGE))))
diff --git a/package/firmware/ipq-wifi/board-linksys_ea8300.qca4019 b/package/firmware/ipq-wifi/board-linksys_ea8300.qca4019
new file mode 100644 (file)
index 0000000..0a1f6eb
Binary files /dev/null and b/package/firmware/ipq-wifi/board-linksys_ea8300.qca4019 differ
diff --git a/package/firmware/ipq-wifi/board-linksys_ea8300.qca9888 b/package/firmware/ipq-wifi/board-linksys_ea8300.qca9888
new file mode 100644 (file)
index 0000000..e3c2039
Binary files /dev/null and b/package/firmware/ipq-wifi/board-linksys_ea8300.qca9888 differ
index d8a5697..6a7b09c 100755 (executable)
@@ -29,7 +29,8 @@ ipq40xx_setup_interfaces()
                        "0u@eth0" "1:lan:4" "2:lan:3" "3:lan:2" "4:lan:1"
                ;;
        avm,fritzbox-4040|\
-       linksys,ea6350v3)
+       linksys,ea6350v3|\
+       linksys,ea8300)
                ucidef_set_interfaces_lan_wan "eth0" "eth1"
                ucidef_add_switch "switch0" \
                        "0u@eth0" "1:lan" "2:lan" "3:lan" "4:lan"
index af84e4e..1e64b93 100644 (file)
@@ -93,7 +93,6 @@ ath10kcal_is_caldata_valid() {
 
 board=$(board_name)
 
-
 case "$FIRMWARE" in
 "ath10k/cal-pci-0000:01:00.0.bin")
        case "$board" in
@@ -115,6 +114,11 @@ case "$FIRMWARE" in
                /usr/bin/fritz_cal_extract -i 1 -s 0x3D000 -e 0x212 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader0") || \
                /usr/bin/fritz_cal_extract -i 1 -s 0x3D000 -e 0x212 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader1")
                ;;
+       linksys,ea8300)
+               ath10kcal_extract "ART" 36864 12064
+               # OEM assigns 4 sequential MACs
+               ath10kcal_patch_mac_crc $(macaddr_setbit_la $(macaddr_add "$(cat /sys/class/net/eth0/address)" 4))
+               ;;
        openmesh,a62)
                ath10kcal_extract "0:ART" 36864 12064
                ;;
@@ -156,6 +160,10 @@ case "$FIRMWARE" in
                ath10kcal_extract "ART" 4096 12064
                ath10kcal_patch_mac_crc $(macaddr_add $(mtd_get_mac_ascii u-boot-env ethaddr) +2)
                ;;
+       linksys,ea8300)
+               ath10kcal_extract "ART" 4096 12064
+               ath10kcal_patch_mac_crc $(macaddr_add "$(cat /sys/class/net/eth0/address)" 2)
+               ;;
        meraki,mr33)
                ath10kcal_ubi_extract "ART" 4096 12064
                ath10kcal_is_caldata_valid "202f" || ath10kcal_extract "ART" 4096 12064
@@ -209,6 +217,10 @@ case "$FIRMWARE" in
                ath10kcal_extract "ART" 20480 12064
                ath10kcal_patch_mac_crc $(macaddr_add $(mtd_get_mac_ascii u-boot-env ethaddr) +3)
                ;;
+       linksys,ea8300)
+               ath10kcal_extract "ART" 20480 12064
+               ath10kcal_patch_mac_crc $(macaddr_add "$(cat /sys/class/net/eth0/address)" 3)
+               ;;
        meraki,mr33)
                ath10kcal_ubi_extract "ART" 20480 12064
                ath10kcal_is_caldata_valid "202f" || ath10kcal_extract "ART" 20480 12064
index abde124..f2d76f1 100755 (executable)
@@ -10,7 +10,8 @@ start() {
                [ -n "$(fw_printenv bootcount changed 2>/dev/null)" ] &&\
                        echo -e "bootcount\nchanged\n" | /usr/sbin/fw_setenv -s -
                ;;
-       linksys,ea6350v3)
+       linksys,ea6350v3|\
+       linksys,ea8300)
                mtd resetbc s_env || true
                ;;
        esac
index ce5c1fc..fc64441 100644 (file)
@@ -9,6 +9,11 @@ preinit_set_mac_address() {
                ip link set dev eth0 address $(macaddr_add "$base_mac" +1)
                ip link set dev eth1 address $(macaddr_add "$base_mac" +3)
                ;;
+       linksys,ea8300)
+               base_mac=$(mtd_get_mac_ascii devinfo hw_mac_addr)
+               ip link set dev eth0 address "${base_mac}"
+               ip link set dev eth1 address $(macaddr_add "${base_mac}" 1)
+               ;;
        meraki,mr33)
                mac_lan=$(get_mac_binary "/sys/bus/i2c/devices/0-0050/eeprom" 102)
                [ -n "$mac_lan" ] && ip link set dev eth0 address "$mac_lan"
index 578ddbe..be4b632 100644 (file)
@@ -7,6 +7,7 @@ set_preinit_iface() {
        asus,rt-ac58u| \
        avm,fritzbox-4040| \
        glinet,gl-b1300| \
+       linksys,ea8300| \
        meraki,mr33| \
        zyxel,nbg6617)
                ifname=eth0
index 84b1233..e62d16c 100644 (file)
@@ -49,7 +49,7 @@ platform_do_upgrade() {
        8dev,jalapeno |\
        alfa-network,ap120c-ac |\
        avm,fritzbox-7530 |\
-       avm,fritzrepeater-3000|\
+       avm,fritzrepeater-3000 |\
        qxwlan,e2600ac-c2)
                nand_do_upgrade "$ARGV"
                ;;
@@ -62,18 +62,19 @@ platform_do_upgrade() {
                CI_KERNPART="linux"
                nand_do_upgrade "$1"
                ;;
-       linksys,ea6350v3)
+       linksys,ea6350v3 |\
+       linksys,ea8300)
                platform_do_upgrade_linksys "$ARGV"
                ;;
+       meraki,mr33)
+               CI_KERNPART="part.safe"
+               nand_do_upgrade "$1"
+               ;;
        openmesh,a42 |\
        openmesh,a62)
                PART_NAME="inactive"
                platform_do_upgrade_openmesh "$ARGV"
                ;;
-       meraki,mr33)
-               CI_KERNPART="part.safe"
-               nand_do_upgrade "$1"
-               ;;
        zyxel,nbg6617)
                zyxel_do_upgrade "$1"
                ;;
diff --git a/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4019-linksys_ea8300.dts b/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4019-linksys_ea8300.dts
new file mode 100644 (file)
index 0000000..cfc3037
--- /dev/null
@@ -0,0 +1,399 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+/*
+ * Device Tree Source for Linksys EA8300 (Dallas)
+ *
+ * Copyright (C) 2019 Jeff Kletsky
+ *
+ */
+
+/dts-v1/;
+
+#include "qcom-ipq4019.dtsi"
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/soc/qcom,tcsr.h>
+
+/ {
+       model = "Linksys EA8300 (Dallas)";
+       compatible = "linksys,ea8300", "qcom,ipq4019";
+
+
+       aliases {
+               led-boot = &led_wps_amber;
+               led-failsafe = &led_wps;
+               led-running = &led_linksys;
+               led-upgrade = &led_world;
+               serial0 = &blsp1_uart1;
+       };
+
+
+       leds {
+               compatible = "gpio-leds";
+
+               // Retain node names from running OEM on EA8300
+
+               // Front panel LEDs, top to bottom
+
+               led_plug: diag {
+                       label = "ea8300:amber:plug";
+                       gpios = <&tlmm 47 GPIO_ACTIVE_HIGH>;
+               };
+
+               led_world: internet {
+                       label = "ea8300:amber:world";
+                       gpios = <&tlmm 49 GPIO_ACTIVE_HIGH>;
+               };
+
+               led_wps: wps {
+                       label = "ea8300:white:wps";
+                       gpios = <&tlmm 46 GPIO_ACTIVE_HIGH>;
+               };
+
+               led_wps_amber: wps_amber {
+                       label = "ea8300:amber:wps";
+                       gpios = <&tlmm 22 GPIO_ACTIVE_HIGH>;
+                       panic-indicator;
+               };
+
+               led_linksys: pwr {
+                       label = "ea8300:white:linksys";
+                       gpios = <&tlmm 45 GPIO_ACTIVE_HIGH>;
+               };
+
+               // On back panel, above USB socket
+
+               led_usb: usb {
+                       label = "ea8300:green:usb";
+                       gpios = <&tlmm 61 GPIO_ACTIVE_LOW>;
+                       trigger-sources = <&usb3_port1>, <&usb3_port2>,
+                                         <&usb2_port1>;
+                       linux,default-trigger = "usbport";
+               };
+       };
+
+
+       keys {
+               compatible = "gpio-keys";
+
+               button@0 {
+                       label = "reset";
+                       linux,code = <KEY_RESTART>;
+                       gpios = <&tlmm 50 GPIO_ACTIVE_LOW>;
+               };
+
+               button@1 {
+                       label = "wps";
+                       linux,code = <KEY_WPS_BUTTON>;
+                       gpios = <&tlmm 18 GPIO_ACTIVE_LOW>;
+               };
+       };
+
+
+       //
+       // OEM U-Boot provides either
+       // init=/sbin/init rootfstype=ubifs ubi.mtd=11,2048 \
+       //                 root=ubi0:ubifs rootwait rw
+       // or the same with ubi.mtd=13,2048
+       //
+
+       chosen {
+               bootargs-append = " root=/dev/ubiblock0_0 rootfstype=squashfs ro";
+       };
+
+
+       memory {
+               device_type = "memory";
+               reg = <0x80000000 0x10000000>;
+       };
+
+
+       soc {
+               rng@22000 {
+                       status = "okay";
+               };
+
+               mdio@90000 {
+                       status = "okay";
+               };
+
+               ess-psgmii@98000 {
+                       status = "okay";
+               };
+
+               tcsr@1949000 {
+                       compatible = "qcom,tcsr";
+                       reg = <0x1949000 0x100>;
+                       qcom,wifi_glb_cfg = <TCSR_WIFI_GLB_CFG>;
+               };
+
+               tcsr@194b000 {
+                       compatible = "qcom,tcsr";
+                       reg = <0x194b000 0x100>;
+                       qcom,usb-hsphy-mode-select = <TCSR_USB_HSPHY_HOST_MODE>;
+               };
+
+               ess_tcsr@1953000 {
+                       compatible = "qcom,tcsr";
+                       reg = <0x1953000 0x1000>;
+                       qcom,ess-interface-select = <TCSR_ESS_PSGMII>;
+               };
+
+               tcsr@1957000 {
+                       compatible = "qcom,tcsr";
+                       reg = <0x1957000 0x100>;
+                       qcom,wifi_noc_memtype_m0_m2 = <TCSR_WIFI_NOC_MEMTYPE_M0_M2>;
+               };
+
+               usb2@60f8800 {
+                       status = "okay";
+
+                       dwc3@6000000 {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               usb2_port1: port@1 {
+                                       reg = <1>;
+                                       #trigger-source-cells = <0>;
+                               };
+                       };
+               };
+
+               usb3@8af8800 {
+                       status = "okay";
+
+                       dwc3@8a00000 {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               usb3_port1: port@1 {
+                                       reg = <1>;
+                                       #trigger-source-cells = <0>;
+                               };
+
+                               usb3_port2: port@2 {
+                                       reg = <2>;
+                                       #trigger-source-cells = <0>;
+                               };
+                       };
+               };
+
+               crypto@8e3a000 {
+                       status = "okay";
+               };
+
+               watchdog@b017000 {
+                       status = "okay";
+               };
+
+               ess-switch@c000000 {
+                       status = "okay";
+               };
+
+               edma@c080000 {
+                       status = "okay";
+               };
+       };
+};
+
+
+&blsp_dma {
+       status = "okay";
+};
+
+&blsp1_uart1 {
+       status = "okay";
+       pinctrl-0 = <&serial_0_pins>;
+       pinctrl-names = "default";
+
+};
+
+&cryptobam {
+       status = "okay";
+};
+
+&nand {
+       status = "okay";
+
+       pinctrl-0 = <&nand_pins>;
+       pinctrl-names = "default";
+
+       nand@0 {
+               partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       partition@0 {
+                               label = "sbl1";
+                               reg = <0x0 0x100000>;
+                               read-only;
+                       };
+
+                       partition@100000 {
+                               label = "mibib";
+                               reg = <0x100000 0x100000>;
+                               read-only;
+                       };
+
+                       partition@200000 {
+                               label = "qsee";
+                               reg = <0x200000 0x100000>;
+                               read-only;
+                       };
+
+                       partition@300000 {
+                               label = "cdt";
+                               reg = <0x300000 0x80000>;
+                               read-only;
+                       };
+
+                       partition@380000 {
+                               label = "appsblenv";
+                               reg = <0x380000 0x80000>;
+                               read-only;
+                       };
+
+                       partition@400000 {
+                               label = "ART";
+                               reg = <0x400000 0x80000>;
+                               read-only;
+                       };
+
+                       partition@480000 {
+                               label = "appsbl";
+                               reg = <0x480000 0x200000>;
+                               read-only;
+                       };
+
+                       partition@680000 {
+                               label = "u_env";
+                               reg = <0x680000 0x80000>;
+                               // writable -- U-Boot environment
+                       };
+
+                       partition@700000 {
+                               label = "s_env";
+                               reg = <0x700000 0x40000>;
+                               // writable -- Boot counter records
+                       };
+
+                       partition@740000 {
+                               label = "devinfo";
+                               reg = <0x740000 0x40000>;
+                               read-only;
+                       };
+
+                       partition@780000 {
+                               label = "kernel";
+                               reg = <0x780000 0x5800000>;
+                       };
+
+                       partition@a80000 {
+                               label = "rootfs";
+                               reg = <0xa80000 0x5500000>;
+                       };
+
+                       partition@5f80000 {
+                               label = "alt_kernel";
+                               reg = <0x5f80000 0x5800000>;
+                       };
+
+                       partition@6280000 {
+                               label = "alt_rootfs";
+                               reg = <0x6280000 0x5500000>;
+                       };
+
+                       partition@b780000 {
+                               label = "sysdiag";
+                               reg = <0xb780000 0x100000>;
+                               read-only;
+                       };
+
+                       partition@b880000 {
+                               label = "syscfg";
+                               reg = <0xb880000 0x4680000>;
+                               read-only;
+                       };
+               };
+       };
+};
+
+&pcie0 {
+       status = "okay";
+
+       perst-gpio = <&tlmm 38 GPIO_ACTIVE_LOW>;
+       wake-gpio = <&tlmm 50 GPIO_ACTIVE_LOW>;
+
+       bridge@0,0 {
+               reg = <0x00000000 0 0 0 0>;
+               #address-cells = <3>;
+               #size-cells = <2>;
+               ranges;
+
+               wifi2: wifi@1,0 {
+                       compatible = "qcom,ath10k";
+                       reg = <0x00010000 0 0 0 0>;
+               };
+       };
+};
+
+&qpic_bam {
+       status = "okay";
+};
+
+&tlmm {
+       serial_0_pins: serial0-pinmux {
+               pins = "gpio16", "gpio17";
+               function = "blsp_uart0";
+               bias-disable;
+       };
+
+       nand_pins: nand_pins {
+               pullups {
+                       pins = "gpio53", "gpio58", "gpio59";
+                       function = "qpic";
+                       bias-pull-up;
+               };
+
+               // gpio61 controls led_usb
+
+               pulldowns {
+                       pins =  "gpio55", "gpio56", "gpio57",
+                               "gpio60", "gpio62", "gpio63",
+                               "gpio64", "gpio65", "gpio66",
+                               "gpio67", "gpio68", "gpio69";
+                       function = "qpic";
+                       bias-pull-down;
+               };
+       };
+};
+
+&usb2_hs_phy {
+       status = "okay";
+};
+
+&usb3_hs_phy {
+       status = "okay";
+};
+
+&usb3_ss_phy {
+       status = "okay";
+};
+
+&wifi0 {
+       status = "okay";
+       qcom,ath10k-calibration-variant = "linksys-ea8300-fcc";
+};
+
+&wifi1 {
+       status = "okay";
+       ieee80211-freq-limit = <5170000 5330000>;
+       qcom,ath10k-calibration-variant = "linksys-ea8300-fcc";
+};
+
+&wifi2 {
+       status = "okay";
+       ieee80211-freq-limit = <5490000 5835000>;
+       qcom,ath10k-calibration-variant = "linksys-ea8300-fcc";
+};
diff --git a/target/linux/ipq40xx/files-4.19/arch/arm/boot/dts/qcom-ipq4019-linksys_ea8300.dts b/target/linux/ipq40xx/files-4.19/arch/arm/boot/dts/qcom-ipq4019-linksys_ea8300.dts
new file mode 100644 (file)
index 0000000..cfc3037
--- /dev/null
@@ -0,0 +1,399 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+/*
+ * Device Tree Source for Linksys EA8300 (Dallas)
+ *
+ * Copyright (C) 2019 Jeff Kletsky
+ *
+ */
+
+/dts-v1/;
+
+#include "qcom-ipq4019.dtsi"
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/soc/qcom,tcsr.h>
+
+/ {
+       model = "Linksys EA8300 (Dallas)";
+       compatible = "linksys,ea8300", "qcom,ipq4019";
+
+
+       aliases {
+               led-boot = &led_wps_amber;
+               led-failsafe = &led_wps;
+               led-running = &led_linksys;
+               led-upgrade = &led_world;
+               serial0 = &blsp1_uart1;
+       };
+
+
+       leds {
+               compatible = "gpio-leds";
+
+               // Retain node names from running OEM on EA8300
+
+               // Front panel LEDs, top to bottom
+
+               led_plug: diag {
+                       label = "ea8300:amber:plug";
+                       gpios = <&tlmm 47 GPIO_ACTIVE_HIGH>;
+               };
+
+               led_world: internet {
+                       label = "ea8300:amber:world";
+                       gpios = <&tlmm 49 GPIO_ACTIVE_HIGH>;
+               };
+
+               led_wps: wps {
+                       label = "ea8300:white:wps";
+                       gpios = <&tlmm 46 GPIO_ACTIVE_HIGH>;
+               };
+
+               led_wps_amber: wps_amber {
+                       label = "ea8300:amber:wps";
+                       gpios = <&tlmm 22 GPIO_ACTIVE_HIGH>;
+                       panic-indicator;
+               };
+
+               led_linksys: pwr {
+                       label = "ea8300:white:linksys";
+                       gpios = <&tlmm 45 GPIO_ACTIVE_HIGH>;
+               };
+
+               // On back panel, above USB socket
+
+               led_usb: usb {
+                       label = "ea8300:green:usb";
+                       gpios = <&tlmm 61 GPIO_ACTIVE_LOW>;
+                       trigger-sources = <&usb3_port1>, <&usb3_port2>,
+                                         <&usb2_port1>;
+                       linux,default-trigger = "usbport";
+               };
+       };
+
+
+       keys {
+               compatible = "gpio-keys";
+
+               button@0 {
+                       label = "reset";
+                       linux,code = <KEY_RESTART>;
+                       gpios = <&tlmm 50 GPIO_ACTIVE_LOW>;
+               };
+
+               button@1 {
+                       label = "wps";
+                       linux,code = <KEY_WPS_BUTTON>;
+                       gpios = <&tlmm 18 GPIO_ACTIVE_LOW>;
+               };
+       };
+
+
+       //
+       // OEM U-Boot provides either
+       // init=/sbin/init rootfstype=ubifs ubi.mtd=11,2048 \
+       //                 root=ubi0:ubifs rootwait rw
+       // or the same with ubi.mtd=13,2048
+       //
+
+       chosen {
+               bootargs-append = " root=/dev/ubiblock0_0 rootfstype=squashfs ro";
+       };
+
+
+       memory {
+               device_type = "memory";
+               reg = <0x80000000 0x10000000>;
+       };
+
+
+       soc {
+               rng@22000 {
+                       status = "okay";
+               };
+
+               mdio@90000 {
+                       status = "okay";
+               };
+
+               ess-psgmii@98000 {
+                       status = "okay";
+               };
+
+               tcsr@1949000 {
+                       compatible = "qcom,tcsr";
+                       reg = <0x1949000 0x100>;
+                       qcom,wifi_glb_cfg = <TCSR_WIFI_GLB_CFG>;
+               };
+
+               tcsr@194b000 {
+                       compatible = "qcom,tcsr";
+                       reg = <0x194b000 0x100>;
+                       qcom,usb-hsphy-mode-select = <TCSR_USB_HSPHY_HOST_MODE>;
+               };
+
+               ess_tcsr@1953000 {
+                       compatible = "qcom,tcsr";
+                       reg = <0x1953000 0x1000>;
+                       qcom,ess-interface-select = <TCSR_ESS_PSGMII>;
+               };
+
+               tcsr@1957000 {
+                       compatible = "qcom,tcsr";
+                       reg = <0x1957000 0x100>;
+                       qcom,wifi_noc_memtype_m0_m2 = <TCSR_WIFI_NOC_MEMTYPE_M0_M2>;
+               };
+
+               usb2@60f8800 {
+                       status = "okay";
+
+                       dwc3@6000000 {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               usb2_port1: port@1 {
+                                       reg = <1>;
+                                       #trigger-source-cells = <0>;
+                               };
+                       };
+               };
+
+               usb3@8af8800 {
+                       status = "okay";
+
+                       dwc3@8a00000 {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+
+                               usb3_port1: port@1 {
+                                       reg = <1>;
+                                       #trigger-source-cells = <0>;
+                               };
+
+                               usb3_port2: port@2 {
+                                       reg = <2>;
+                                       #trigger-source-cells = <0>;
+                               };
+                       };
+               };
+
+               crypto@8e3a000 {
+                       status = "okay";
+               };
+
+               watchdog@b017000 {
+                       status = "okay";
+               };
+
+               ess-switch@c000000 {
+                       status = "okay";
+               };
+
+               edma@c080000 {
+                       status = "okay";
+               };
+       };
+};
+
+
+&blsp_dma {
+       status = "okay";
+};
+
+&blsp1_uart1 {
+       status = "okay";
+       pinctrl-0 = <&serial_0_pins>;
+       pinctrl-names = "default";
+
+};
+
+&cryptobam {
+       status = "okay";
+};
+
+&nand {
+       status = "okay";
+
+       pinctrl-0 = <&nand_pins>;
+       pinctrl-names = "default";
+
+       nand@0 {
+               partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       partition@0 {
+                               label = "sbl1";
+                               reg = <0x0 0x100000>;
+                               read-only;
+                       };
+
+                       partition@100000 {
+                               label = "mibib";
+                               reg = <0x100000 0x100000>;
+                               read-only;
+                       };
+
+                       partition@200000 {
+                               label = "qsee";
+                               reg = <0x200000 0x100000>;
+                               read-only;
+                       };
+
+                       partition@300000 {
+                               label = "cdt";
+                               reg = <0x300000 0x80000>;
+                               read-only;
+                       };
+
+                       partition@380000 {
+                               label = "appsblenv";
+                               reg = <0x380000 0x80000>;
+                               read-only;
+                       };
+
+                       partition@400000 {
+                               label = "ART";
+                               reg = <0x400000 0x80000>;
+                               read-only;
+                       };
+
+                       partition@480000 {
+                               label = "appsbl";
+                               reg = <0x480000 0x200000>;
+                               read-only;
+                       };
+
+                       partition@680000 {
+                               label = "u_env";
+                               reg = <0x680000 0x80000>;
+                               // writable -- U-Boot environment
+                       };
+
+                       partition@700000 {
+                               label = "s_env";
+                               reg = <0x700000 0x40000>;
+                               // writable -- Boot counter records
+                       };
+
+                       partition@740000 {
+                               label = "devinfo";
+                               reg = <0x740000 0x40000>;
+                               read-only;
+                       };
+
+                       partition@780000 {
+                               label = "kernel";
+                               reg = <0x780000 0x5800000>;
+                       };
+
+                       partition@a80000 {
+                               label = "rootfs";
+                               reg = <0xa80000 0x5500000>;
+                       };
+
+                       partition@5f80000 {
+                               label = "alt_kernel";
+                               reg = <0x5f80000 0x5800000>;
+                       };
+
+                       partition@6280000 {
+                               label = "alt_rootfs";
+                               reg = <0x6280000 0x5500000>;
+                       };
+
+                       partition@b780000 {
+                               label = "sysdiag";
+                               reg = <0xb780000 0x100000>;
+                               read-only;
+                       };
+
+                       partition@b880000 {
+                               label = "syscfg";
+                               reg = <0xb880000 0x4680000>;
+                               read-only;
+                       };
+               };
+       };
+};
+
+&pcie0 {
+       status = "okay";
+
+       perst-gpio = <&tlmm 38 GPIO_ACTIVE_LOW>;
+       wake-gpio = <&tlmm 50 GPIO_ACTIVE_LOW>;
+
+       bridge@0,0 {
+               reg = <0x00000000 0 0 0 0>;
+               #address-cells = <3>;
+               #size-cells = <2>;
+               ranges;
+
+               wifi2: wifi@1,0 {
+                       compatible = "qcom,ath10k";
+                       reg = <0x00010000 0 0 0 0>;
+               };
+       };
+};
+
+&qpic_bam {
+       status = "okay";
+};
+
+&tlmm {
+       serial_0_pins: serial0-pinmux {
+               pins = "gpio16", "gpio17";
+               function = "blsp_uart0";
+               bias-disable;
+       };
+
+       nand_pins: nand_pins {
+               pullups {
+                       pins = "gpio53", "gpio58", "gpio59";
+                       function = "qpic";
+                       bias-pull-up;
+               };
+
+               // gpio61 controls led_usb
+
+               pulldowns {
+                       pins =  "gpio55", "gpio56", "gpio57",
+                               "gpio60", "gpio62", "gpio63",
+                               "gpio64", "gpio65", "gpio66",
+                               "gpio67", "gpio68", "gpio69";
+                       function = "qpic";
+                       bias-pull-down;
+               };
+       };
+};
+
+&usb2_hs_phy {
+       status = "okay";
+};
+
+&usb3_hs_phy {
+       status = "okay";
+};
+
+&usb3_ss_phy {
+       status = "okay";
+};
+
+&wifi0 {
+       status = "okay";
+       qcom,ath10k-calibration-variant = "linksys-ea8300-fcc";
+};
+
+&wifi1 {
+       status = "okay";
+       ieee80211-freq-limit = <5170000 5330000>;
+       qcom,ath10k-calibration-variant = "linksys-ea8300-fcc";
+};
+
+&wifi2 {
+       status = "okay";
+       ieee80211-freq-limit = <5490000 5835000>;
+       qcom,ath10k-calibration-variant = "linksys-ea8300-fcc";
+};
index ae146cd..3a9b58d 100644 (file)
@@ -248,6 +248,21 @@ define Device/linksys_ea6350v3
 endef
 TARGET_DEVICES += linksys_ea6350v3
 
+define Device/linksys_ea8300
+       $(call Device/FitzImage)
+       DEVICE_TITLE := Linksys EA8300 (Dallas)
+       DEVICE_DTS := qcom-ipq4019-linksys_ea8300
+       KERNEL_SIZE := 3072k
+       IMAGE_SIZE := 87040k
+       BLOCKSIZE := 128k
+       PAGESIZE := 2048
+       UBINIZE_OPTS := -E 5    # EOD marks to "hide" factory sig at EOF
+       IMAGES := sysupgrade.bin factory.bin
+       IMAGE/factory.bin  := append-kernel | pad-to $$$${KERNEL_SIZE} | append-ubi | linksys-image type=EA8300
+       DEVICE_PACKAGES := uboot-envtools ath10k-firmware-qca9888-ct ipq-wifi-linksys_ea8300 kmod-usb-ledtrig-usbport
+endef
+TARGET_DEVICES += linksys_ea8300
+
 define Device/meraki_mr33
        $(call Device/FitImage)
        DEVICE_DTS := qcom-ipq4029-mr33
index 6743f44..bb53915 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
-@@ -697,7 +697,29 @@ dtb-$(CONFIG_ARCH_QCOM) += \
+@@ -697,7 +697,30 @@ dtb-$(CONFIG_ARCH_QCOM) += \
        qcom-apq8074-dragonboard.dtb \
        qcom-apq8084-ifc6540.dtb \
        qcom-apq8084-mtp.dtb \
@@ -31,6 +31,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
 +      qcom-ipq4019-ap.dk04.1-c1.dtb \
 +      qcom-ipq4019-fritzbox-7530.dtb \
 +      qcom-ipq4019-fritzrepeater-3000.dtb \
++      qcom-ipq4019-linksys_ea8300.dtb \
 +      qcom-ipq4019-map-ac2200.dtb \
 +      qcom-ipq4019-qxwlan-e2600ac-c1.dtb \
 +      qcom-ipq4019-qxwlan-e2600ac-c2.dtb \
index 57a5760..a0386f6 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
-@@ -785,11 +785,32 @@ dtb-$(CONFIG_ARCH_QCOM) += \
+@@ -785,11 +785,33 @@ dtb-$(CONFIG_ARCH_QCOM) += \
        qcom-apq8074-dragonboard.dtb \
        qcom-apq8084-ifc6540.dtb \
        qcom-apq8084-mtp.dtb \
@@ -34,6 +34,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
 +      qcom-ipq4019-a62.dtb \
 +      qcom-ipq4019-fritzbox-7530.dtb \
 +      qcom-ipq4019-fritzrepeater-3000.dtb \
++      qcom-ipq4019-linksys_ea8300.dtb \
 +      qcom-ipq4019-map-ac2200.dtb \
 +      qcom-ipq4019-qxwlan-e2600ac-c1.dtb \
 +      qcom-ipq4019-qxwlan-e2600ac-c2.dtb \