ramips: add support for Senao Engenius EPG600

FCC ID: A8J-EPG600

Engenius EPG600 is an indoor wireless router with
1 Gb ethernet switch, dual-band wireless,
internal antenna plates, USB, and phone lines (not supported)

this board is a Senao device:
the hardware is equivalent to EnGenius ESR600 (except for phone lines)
the software is Senao SDK which is based on openwrt and uboot
which uses the legacy Senao header with Vendor / Product IDs
to verify the firmware upgrade image.

**Specification:**

  - MT7620 SOC		MIPS 24kec, 2.4 GHz WMAC, 2x2
  - RT5592N WLAN	PCI chip, 5 GHz, 2x2
  - QCA8337N Gb SW	RGMII GbE, SW P0 -- SOC P5, 5 LEDs
  - 40 MHz clock
  - 16 MB FLASH		MX25L12845EMI-10G
  - 64 MB RAM		NT5TU32M16
  - UART console	J2, populated
  - USB 2.0 port	direct to SOC
  - 6 GPIO LEDs		power, 2G, 5G, wps2g, wps5g, line
  - 3 buttons		reset, wps, "reg" (registeration)
  - 4 antennas		internal omni-directional plates

NOT YET SUPPORTED: VoIP

  - Si3050-FT + Si3019-FT	Voice DAA, SPI control, PCM data
  - Phone Ports "TEL", "LINE"	RJ11, 4P2C (2 pins)

**MAC addresses:**

  MAC address labeled as MAC ADDRESS
  MACs present in both wifi cal data and uboot environment

  eth0.1/phy1	----	*:82	rf 0x4
  phy0		----	*:83	factory 0x4
  eth0.2	MAC	*:b8	"wanaddr"

**Installation:**

  Method 1: Firmware upgrade page:

    (if you cannot access the APs webpage)
    factory reset with the reset button
    connect ethernet to a computer
    OEM webpage at 192.168.0.1
    username and password 'admin'

    Navigate to gear icon, "Device Management", "Tools"
    select the factory.dlf image
    Upload and verify checksum

  Method 2: Serial to upload initramfs:

    Follow directions for TFTP recovery
    upload and boot initramfs and do a sysupgrade

**TFTP recovery:**

  Requires UART serial console, reset button does nothing

  rename initramfs-kernel.bin to 'uImageEPG600'
  make available on TFTP server at 192.168.99.8
  power board, interrupt boot with "4"
  execute `tftpboot` and `bootm` (with the load address)

**Return to OEM:**

  Images from OEM are provided, but not compatible
  with openwrt sysupgrade. So it must be modified.

  Alternatively, back up all mtd partitions before flashing

**Note on switch registers:**

  The necessary registers needed for the QCA8337 switch
  can be read from interrupted boot (tftpboot, bootm)
  by using the following lines in the switch driver ar8327.c
  in the function 'ar8327_hw_config_of'
  where 'qca,ar8327-initvals' is parsed from DTS
  before the new register values are written:

    pr_info("0x04 %08x\n", ar8xxx_read(priv, AR8327_REG_PAD0_MODE));
    pr_info("0x08 %08x\n", ar8xxx_read(priv, AR8327_REG_PAD5_MODE));
    pr_info("0x0c %08x\n", ar8xxx_read(priv, AR8327_REG_PAD6_MODE));
    pr_info("0x10 %08x\n", ar8xxx_read(priv, AR8327_REG_POWER_ON_STRAP));

Signed-off-by: Michael Pratt <mcpratt@pm.me>
This commit is contained in:
Michael Pratt 2021-04-19 15:45:32 -04:00 committed by Hauke Mehrtens
parent 6b07d0c077
commit 4ef86c620f
4 changed files with 246 additions and 0 deletions

View File

@ -17,6 +17,7 @@ alfa-network,awusfree1|\
alfa-network,quad-e4g|\ alfa-network,quad-e4g|\
alfa-network,r36m-e4g|\ alfa-network,r36m-e4g|\
alfa-network,tube-e4g|\ alfa-network,tube-e4g|\
engenius,epg600|\
engenius,esr600h|\ engenius,esr600h|\
sitecom,wlr-4100-v1-002) sitecom,wlr-4100-v1-002)
ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x1000" "0x1000" ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x1000" "0x1000"

View File

@ -0,0 +1,228 @@
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
#include "mt7620a.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
/ {
compatible = "engenius,epg600", "ralink,mt7620a-soc";
model = "EnGenius EPG600";
aliases {
led-boot = &led_power;
led-failsafe = &led_power;
led-running = &led_power;
led-upgrade = &led_power;
};
chosen {
bootargs = "console=ttyS0,115200";
};
keys {
compatible = "gpio-keys";
reset {
linux,code = <KEY_RESTART>;
gpios = <&gpio0 1 GPIO_ACTIVE_LOW>;
debounce-interval = <60>;
};
wps {
linux,code = <KEY_WPS_BUTTON>;
gpios = <&gpio0 2 GPIO_ACTIVE_LOW>;
debounce-interval = <60>;
};
reg {
linux,code = <BTN_0>;
gpios = <&gpio2 7 GPIO_ACTIVE_LOW>;
debounce-interval = <60>;
};
};
leds {
compatible = "gpio-leds";
led_power: power {
label = "amber:power";
gpios = <&gpio0 9 GPIO_ACTIVE_LOW>;
default-state = "on";
};
wlan2g {
label = "blue:wlan2g";
gpios = <&gpio3 0 GPIO_ACTIVE_LOW>;
linux,default-trigger = "phy1tpt";
};
wlan5g {
label = "blue:wlan5g";
gpios = <&gpio0 7 GPIO_ACTIVE_LOW>;
};
wps2g {
label = "blue:wps2g";
gpios = <&gpio1 15 GPIO_ACTIVE_LOW>;
};
wps5g {
label = "amber:wps5g";
gpios = <&gpio2 6 GPIO_ACTIVE_LOW>;
};
line {
label = "blue:line";
gpios = <&gpio2 14 GPIO_ACTIVE_LOW>;
};
};
};
&gpio1 {
status = "okay";
};
&gpio2 {
status = "okay";
};
&gpio3 {
status = "okay";
};
&spi0 {
status = "okay";
flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <30000000>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "u-boot";
reg = <0x0 0x30000>;
read-only;
};
partition@30000 {
label = "u-boot-env";
reg = <0x30000 0x10000>;
};
factory: partition@40000 {
label = "factory";
reg = <0x40000 0x10000>;
read-only;
};
rf: partition@50000 {
label = "rf";
reg = <0x50000 0x10000>;
read-only;
};
partition@60000 {
label = "firmware";
reg = <0x60000 0xf40000>;
compatible = "denx,uimage";
};
partition@fa0000 {
label = "backup";
reg = <0xfa0000 0x10000>;
read-only;
};
partition@fb0000 {
label = "storage";
reg = <0xfb0000 0x50000>;
read-only;
};
};
};
};
&ethernet {
pinctrl-names = "default";
pinctrl-0 = <&mdio_pins &rgmii1_pins &rgmii2_pins>;
nvmem-cells = <&macaddr_rf_4>;
nvmem-cell-names = "mac-address";
port@5 {
status = "okay";
phy-mode = "rgmii-txid";
mediatek,fixed-link = <1000 1 1 1>;
};
mdio-bus {
status = "okay";
ethernet-phy@0 {
reg = <0>;
phy-mode = "rgmii";
qca,ar8327-initvals = <
0x04 0x07600000 /* PORT0 PAD MODE CTRL */
0x08 0x01000000 /* PORT5 PAD MODE CTRL */
0x0c 0x07600000 /* PORT6 PAD MODE CTRL */
0x10 0x40000000 /* POWER-ON STRAPPING */
0x7c 0x0000007e /* PORT0_STATUS */
0x94 0x0000007e /* PORT6_STATUS */
>;
};
};
};
&gsw {
mediatek,ephy-disable;
};
&pcie {
status = "okay";
};
&pcie0 {
wifi@0,1,0 {
compatible = "pci1814,3091";
reg = <0x0 1 0 0 0>;
ralink,mtd-eeprom = <&factory 0x0>;
};
};
&wmac {
ralink,mtd-eeprom = <&rf 0x0>;
};
&ehci {
status = "okay";
};
&ohci {
status = "okay";
};
&state_default {
default {
groups = "ephy", "wled", "spi refclk", "i2c", "uartf", "nd_sd";
function = "gpio";
};
};
&rf {
compatible = "nvmem-cells";
#address-cells = <1>;
#size-cells = <1>;
macaddr_rf_4: macaddr@4 {
reg = <0x4 0x6>;
};
};

View File

@ -446,6 +446,21 @@ define Device/elecom_wrh-300cr
endef endef
TARGET_DEVICES += elecom_wrh-300cr TARGET_DEVICES += elecom_wrh-300cr
define Device/engenius_epg600
$(Device/uimage-lzma-loader)
SOC := mt7620a
BLOCKSIZE := 4k
IMAGE_SIZE := 15616k
IMAGES += factory.dlf
IMAGE/factory.dlf := $$(sysupgrade_bin) | check-size | \
senao-header -r 0x101 -p 0x6a -t 2
DEVICE_VENDOR := EnGenius
DEVICE_MODEL := EPG600
DEVICE_PACKAGES += kmod-rt2800-pci kmod-usb-storage \
kmod-usb-ohci kmod-usb2 uboot-envtools
endef
TARGET_DEVICES += engenius_epg600
define Device/engenius_esr600 define Device/engenius_esr600
SOC := mt7620a SOC := mt7620a
BLOCKSIZE := 64k BLOCKSIZE := 64k

View File

@ -149,6 +149,7 @@ ramips_setup_interfaces()
ucidef_add_switch "switch1" \ ucidef_add_switch "switch1" \
"1:lan" "2:lan" "3:lan" "4:lan" "0:wan" "6@eth0" "1:lan" "2:lan" "3:lan" "4:lan" "0:wan" "6@eth0"
;; ;;
engenius,epg600|\
engenius,esr600|\ engenius,esr600|\
lava,lr-25g001|\ lava,lr-25g001|\
sitecom,wlr-4100-v1-002) sitecom,wlr-4100-v1-002)
@ -332,6 +333,7 @@ ramips_setup_macs()
edimax,br-6478ac-v2) edimax,br-6478ac-v2)
wan_mac=$(macaddr_add "$(mtd_get_mac_binary factory 0x4)" 2) wan_mac=$(macaddr_add "$(mtd_get_mac_binary factory 0x4)" 2)
;; ;;
engenius,epg600|\
engenius,esr600) engenius,esr600)
lan_mac=$(mtd_get_mac_ascii u-boot-env ethaddr) lan_mac=$(mtd_get_mac_ascii u-boot-env ethaddr)
wan_mac=$(mtd_get_mac_ascii u-boot-env wanaddr) wan_mac=$(mtd_get_mac_ascii u-boot-env wanaddr)