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 c16e60bac59f49f36f76d76a307a273ecde48f81..7bcad00b010bfef49790c2699995c00573ed53ad 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 5c4ebb23c405736be5f6eaadc9965cd4f095d318..922064b7f78b80670cdb1ec7e9f86ede224cb7fb 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 d8a5697361461941033221915b288343114b6139..6a7b09cc603a245e98c37305c1f25c2cc11694ae 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 af84e4e84ac7039408b1402ef9cd6853332c4b1c..1e64b93a46cb1fc82052d964b78a9d0d894881b5 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 abde12412a3cfa7fbe68b48e9f07b1443b8c4496..f2d76f125f33f5172c465ad2eb10b83db104654c 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 ce5c1fc4bf1777a21e674d6b02fa519e50a2f7fd..fc64441e1ac20b13baf720f8fa79c8fd53046e7a 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 578ddbe4c4f6e91d925ea3a0de9e060daac82e72..be4b6322cb6a91f489dfec237ac6b79ce079e0eb 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 84b123335c38839f003b7d5956a10cf9f4072928..e62d16c4493ed2bad42ef842354aedc582f798db 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 ae146cdc548681e37bfd22756925fe98ecb927a7..3a9b58de4f01f17ac9df368729035d630eb32b04 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 6743f44b256d2c707d31266cff649f2291633a29..bb539155e98b75df5dd88e39f6405af5a82e0320 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 57a5760806c14bef0cf9fe28fa6ce0de826b3cc5..a0386f6b660225bf4a1fc25e7fea9f8cc1da7b42 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 \