diff mbox series

[OpenWrt-Devel] ath79: add suport for EnGenius EPG5000

Message ID 20190304141853.7307-1-tomek_n@o2.pl
State Accepted, archived
Headers show
Series [OpenWrt-Devel] ath79: add suport for EnGenius EPG5000 | expand

Commit Message

Tomasz Maciej Nowak March 4, 2019, 2:18 p.m. UTC
EnGenius EPG5000 (v1.0.0, marketed as IoT Gateway) is a dual band
wireless router.

Specification
SoC:		Qualcomm Atheros QCA9558
RAM:		256 MB DDR2
Flash:		16 MB SPI NOR
WIFI:		2.4 GHz 3T3R integrated
		5 GHz 3T3R QCA9880 Mini PCIe card
Ethernet:	5x 10/100/1000 Mbps QCA8337N
USB:		1x 2.0
LEDS:		4x GPIO controlled
Buttons:	2x GPIO controlled
UART:		4 pin header, starting count from white triangle on PCB
		1. VCC 3.3V, 2. GND, 3. TX, 4. RX
		baud: 115200, parity: none, flow control: none

Installation
1. Connect to one of LAN (yellow) ethernet ports,
2. Open router configuration interface,
3. Go to Tools > Firmware,
4. Select OpenWrt factory image with dlf extension and hit Apply,
5. Wait few minutes, after the Power LED will stop blinking, the router
   is ready for configuration.

Alternative installation
1. Prepare TFTP server with OpenWrt sysupgrade image,
2. Connect to one of LAN (yellow) ethernet ports,
3. Connect to UART port (leaving out VCC pin!),
4. Power on router,
5. When asked to enter a number 1 or 3 hit 2, this will select flashing
   image from TFTP server option,
6. You'll be prompted to enter TFTP server ip (default is 192.168.99.8),
   then router ip (default is 192.168.99.9) and for last, image name
   downloaded from TFTP server (default is uImageESR1200_1750),
7. After providing all information U-Boot will start flashing the image,
   You can observe progress on console, it'll take few minutes and when
   the Power LED will stop blinking, router is ready for configuration.

Additional information
If connected to UART, when prompted for number on boot, one can enter
number 4 to open bootloader (U-Boot) command line.
OEM firmware shell password is: aigo3d0a0tdagr
useful for creating backup of original firmware.
When doing upgrade from OpenWrt ar71xx image, it is recomended to not keep
the old configuration.

Signed-off-by: Tomasz Maciej Nowak <tomek_n@o2.pl>
---
 .../ath79/base-files/etc/board.d/02_network   |  16 +-
 .../etc/hotplug.d/firmware/10-ath9k-eeprom    |   1 +
 .../etc/hotplug.d/firmware/11-ath10k-caldata  |  11 +-
 .../ath79/dts/qca9558_engenius_epg5000.dts    | 180 ++++++++++++++++++
 target/linux/ath79/image/generic.mk           |  13 ++
 5 files changed, 209 insertions(+), 12 deletions(-)
 create mode 100644 target/linux/ath79/dts/qca9558_engenius_epg5000.dts

Comments

Petr Štetiar March 4, 2019, 8:54 p.m. UTC | #1
Tomasz Maciej Nowak <tomek_n@o2.pl> [2019-03-04 15:18:53]:

Hi,

> When doing upgrade from OpenWrt ar71xx image, it is recomended to not keep the
> old configuration.

why is that?

> +		wan {
> +			label = "epg5000:blue:wan";
> +			gpios = <&gpio 22 GPIO_ACTIVE_LOW>;
> +		};

this LED is marked in ar71xx as `epg5000:amber:wps` any reason for this change?

> +		wlan2g {
> +			label = "epg5000:blue:wlan2g";
> +			gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
> +			linux,default-trigger = "phy1tpt";
> +		};

In ar71xx it's named as `epg5000:blue:wlan-2g`, so to keep the upgrade process
to ath79 seamless it would be good idea to use the same name.

> +
> +		wlan5g {
> +			label = "epg5000:blue:wlan5g";
> +			gpios = <&gpio 23 GPIO_ACTIVE_LOW>;
> +			linux,default-trigger = "phy0tpt";
> +		};

In ar71xx it's named as `epg5000:blue:wlan-5g`.

-- ynezz
Tomasz Maciej Nowak March 6, 2019, 8:03 p.m. UTC | #2
Hi,

W dniu 04.03.2019 o 21:54, Petr Štetiar pisze:
> Tomasz Maciej Nowak <tomek_n@o2.pl> [2019-03-04 15:18:53]:
> 
> Hi,
> 
>> When doing upgrade from OpenWrt ar71xx image, it is recomended to not keep the
>> old configuration.
> 
> why is that?

The sysfs path to 2.4 wifi has changed, so after the upgrade it won't be enabled. Better tell the users that they need to create new configuration, than explaining that the upgrade didn't break wifi.

> 
>> +		wan {
>> +			label = "epg5000:blue:wan";
>> +			gpios = <&gpio 22 GPIO_ACTIVE_LOW>;
>> +		};
> 
> this LED is marked in ar71xx as `epg5000:amber:wps` any reason for this change?

There is no second WPS LED on the device, check the manual https://www.engeniustech.com/resources/EPG5000-user_manual.pdf on page 9. Also the color of it is blue instead of amber. The whole mach file in ar71xx seems to be copy pasta from similar ESR1750 with only name of the device changed throughout the file, and errors replicated. The ESR1750 also doesn't have two WPS LEDs, but I don't know which color it is since I don't own such device.

> 
>> +		wlan2g {
>> +			label = "epg5000:blue:wlan2g";
>> +			gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
>> +			linux,default-trigger = "phy1tpt";
>> +		};
> 
> In ar71xx it's named as `epg5000:blue:wlan-2g`, so to keep the upgrade process
> to ath79 seamless it would be good idea to use the same name.
> 

Wanted to change it to the same name as most devices in this targe, but don't have strong feeling about it so if any of Committers would request the change, I will adapt.

>> +
>> +		wlan5g {
>> +			label = "epg5000:blue:wlan5g";
>> +			gpios = <&gpio 23 GPIO_ACTIVE_LOW>;
>> +			linux,default-trigger = "phy0tpt";
>> +		};
> 
> In ar71xx it's named as `epg5000:blue:wlan-5g`.
> 
> -- ynezz
> 

Regards
Petr Štetiar March 6, 2019, 8:26 p.m. UTC | #3
Tomasz Maciej Nowak <tomek_n@o2.pl> [2019-03-06 21:03:53]:

> > Tomasz Maciej Nowak <tomek_n@o2.pl> [2019-03-04 15:18:53]:
> > 
> >> When doing upgrade from OpenWrt ar71xx image, it is recomended to not keep the
> >> old configuration.
> > 
> > why is that?
> 
> The sysfs path to 2.4 wifi has changed, so after the upgrade it won't be
> enabled. Better tell the users that they need to create new configuration,
> than explaining that the upgrade didn't break wifi.

There are already more advanced migration scripts for your inspiration:

 target/linux/brcm47xx/base-files/etc/uci-defaults/03_network_migration
 target/linux/lantiq/base-files/etc/uci-defaults/02_migrate_xdsl_iface
 target/linux/ar71xx/base-files/etc/uci-defaults/03_network-switchX-migration  
 target/linux/ar71xx/base-files/etc/uci-defaults/03_network-vlan-migration
 target/linux/mvebu/base-files/etc/uci-defaults/03_wireless

-- ynezz
Tomasz Maciej Nowak March 13, 2019, 4:55 p.m. UTC | #4
W dniu 06.03.2019 o 21:03, Tomasz Maciej Nowak pisze:
> Hi,
> 
> W dniu 04.03.2019 o 21:54, Petr Štetiar pisze:
>> Tomasz Maciej Nowak <tomek_n@o2.pl> [2019-03-04 15:18:53]:
>>
>>> +		wan {
>>> +			label = "epg5000:blue:wan";
>>> +			gpios = <&gpio 22 GPIO_ACTIVE_LOW>;
>>> +		};
>>
>> this LED is marked in ar71xx as `epg5000:amber:wps` any reason for this change?
> 
> There is no second WPS LED on the device, check the manual https://www.engeniustech.com/resources/EPG5000-user_manual.pdf on page 9. Also the color of it is blue instead of amber. The whole mach file in ar71xx seems to be copy pasta from similar ESR1750 with only name of the device changed throughout the file, and errors replicated. The ESR1750 also doesn't have two WPS LEDs, but I don't know which color it is since I don't own such device.

I was wrong, there is another WPS LED on the PCB, the mach file from ar71xx has the correct description. I skimmed to fast with the testing and assumed only visible LEDs on the case are valid, therefore assigned them to labels present on the case, which was wrong. Sorry for the confusion. Fix sent.

Regards
diff mbox series

Patch

diff --git a/target/linux/ath79/base-files/etc/board.d/02_network b/target/linux/ath79/base-files/etc/board.d/02_network
index f1171695bd..e184f718e4 100755
--- a/target/linux/ath79/base-files/etc/board.d/02_network
+++ b/target/linux/ath79/base-files/etc/board.d/02_network
@@ -74,6 +74,7 @@  ath79_setup_interfaces()
 	dlink,dir-825-c1|\
 	dlink,dir-835-a1|\
 	dlink,dir-859-a1|\
+	engenius,epg5000|\
 	tplink,archer-c2-v3|\
 	tplink,tl-wr1043nd-v4)
 		ucidef_add_switch "switch0" \
@@ -258,6 +259,14 @@  ath79_setup_macs()
 	elecom,wrc-300ghbk2-i)
 		wan_mac=$(macaddr_add "$(mtd_get_mac_binary ART 4098)" -2)
 		;;
+	engenius,epg5000|\
+	iodata,wn-ac1167dgr|\
+	iodata,wn-ac1600dgr|\
+	iodata,wn-ac1600dgr2|\
+	iodata,wn-ag300dgr)
+		lan_mac=$(mtd_get_mac_ascii u-boot-env ethaddr)
+		wan_mac=$(mtd_get_mac_ascii u-boot-env wanaddr)
+		;;
 	engenius,ews511ap)
 		lan_mac=$(mtd_get_mac_text "u-boot-env" 233)
 		eth1_mac=$(macaddr_add "$lan_mac" 1)
@@ -268,13 +277,6 @@  ath79_setup_macs()
 		lan_mac=$(mtd_get_mac_ascii u-boot-env ethaddr)
 		wan_mac=$(macaddr_add "$lan_mac" -1)
 		;;
-	iodata,wn-ac1167dgr|\
-	iodata,wn-ac1600dgr|\
-	iodata,wn-ac1600dgr2|\
-	iodata,wn-ag300dgr)
-		lan_mac=$(mtd_get_mac_ascii u-boot-env ethaddr)
-		wan_mac=$(mtd_get_mac_ascii u-boot-env wanaddr)
-		;;
 	nec,wg800hp)
 		lan_mac=$(mtd_get_mac_text board_data 640)
 		wan_mac=$(mtd_get_mac_text board_data 1152)
diff --git a/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom b/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
index 84e4d07b35..4061aa67eb 100644
--- a/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
+++ b/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
@@ -109,6 +109,7 @@  case "$FIRMWARE" in
 		ath9k_eeprom_extract "art" 4096 1088
 		ath9k_patch_fw_mac $(mtd_get_mac_ascii devdata "wlan24mac") 2
 		;;
+	engenius,epg5000|\
 	iodata,wn-ac1167dgr|\
 	iodata,wn-ac1600dgr|\
 	iodata,wn-ac1600dgr2|\
diff --git a/target/linux/ath79/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ath79/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
index 096064b7ce..30467fa034 100644
--- a/target/linux/ath79/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
+++ b/target/linux/ath79/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
@@ -102,6 +102,12 @@  case "$FIRMWARE" in
 	elecom,wrc-1750ghbk2-i)
 		ath10kcal_extract "ART" 20480 2116
 		;;
+	engenius,epg5000|\
+	iodata,wn-ac1167dgr|\
+	iodata,wn-ac1600dgr2)
+		ath10kcal_extract "art" 20480 2116
+		ath10kcal_patch_mac $(macaddr_add $(mtd_get_mac_ascii u-boot-env ethaddr) +1)
+		;;
 	engenius,ews511ap|\
 	glinet,gl-ar750s|\
 	glinet,gl-x750|\
@@ -109,11 +115,6 @@  case "$FIRMWARE" in
 		ath10kcal_extract "art" 20480 2116
 		ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +1)
 		;;
-	iodata,wn-ac1167dgr|\
-	iodata,wn-ac1600dgr2)
-		ath10kcal_extract "art" 20480 2116
-		ath10kcal_patch_mac $(macaddr_add $(mtd_get_mac_ascii u-boot-env ethaddr) +1)
-		;;
 	nec,wg800hp)
 		ath10kcal_extract "art" 20480 2116
 		ath10kcal_patch_mac_crc $(mtd_get_mac_text board_data 2176)
diff --git a/target/linux/ath79/dts/qca9558_engenius_epg5000.dts b/target/linux/ath79/dts/qca9558_engenius_epg5000.dts
new file mode 100644
index 0000000000..38cd81a8f8
--- /dev/null
+++ b/target/linux/ath79/dts/qca9558_engenius_epg5000.dts
@@ -0,0 +1,180 @@ 
+// 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"
+
+/ {
+	model = "EnGenius EPG5000";
+	compatible = "engenius,epg5000", "qca,qca9557";
+
+	chosen {
+		bootargs = "console=ttyS0,115200n8";
+	};
+
+	aliases {
+		led-boot = &power;
+		led-failsafe = &power;
+		led-running = &power;
+		led-upgrade = &power;
+	};
+
+	leds {
+		compatible = "gpio-leds";
+
+		power: power {
+			label = "epg5000:amber:power";
+			gpios = <&gpio 2 GPIO_ACTIVE_LOW>;
+			default-state = "on";
+		};
+
+		wan {
+			label = "epg5000:blue:wan";
+			gpios = <&gpio 22 GPIO_ACTIVE_LOW>;
+		};
+
+		wlan2g {
+			label = "epg5000:blue:wlan2g";
+			gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
+			linux,default-trigger = "phy1tpt";
+		};
+
+		wlan5g {
+			label = "epg5000:blue:wlan5g";
+			gpios = <&gpio 23 GPIO_ACTIVE_LOW>;
+			linux,default-trigger = "phy0tpt";
+		};
+
+		wps {
+			label = "epg5000:blue:wps";
+			gpios = <&gpio 19 GPIO_ACTIVE_LOW>;
+		};
+	};
+
+	keys {
+		compatible = "gpio-keys-polled";
+		poll-interval = <20>;
+
+		reset {
+			label = "reset";
+			linux,code = <KEY_RESTART>;
+			gpios = <&gpio 17 GPIO_ACTIVE_LOW>;
+			debounce-interval = <60>;
+		};
+
+		wps {
+			label = "wps";
+			linux,code = <KEY_WPS_BUTTON>;
+			gpios = <&gpio 16 GPIO_ACTIVE_LOW>;
+			debounce-interval = <60>;
+		};
+	};
+};
+
+&eth0 {
+	status = "okay";
+
+	phy-handle = <&phy0>;
+	pll-data = <0xa6000000 0x00000101 0x00001616>;
+};
+
+&mdio0 {
+	status = "okay";
+
+	phy0: ethernet-phy@0 {
+		reg = <0>;
+
+		qca,ar8327-initvals = <
+			0x04 0x87600000 /* PORT0 PAD MODE CTRL */
+			0x7c 0x0000007e /* PORT0_STATUS */
+			>;
+	};
+};
+
+&pcie0 {
+	status = "okay";
+
+	wifi@0,0 {
+		compatible = "pci168c,003c";
+		reg = <0x0000 0 0 0 0>;
+	};
+};
+
+&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>;
+
+			partition@0 {
+				label = "u-boot";
+				reg = <0x000000 0x030000>;
+				read-only;
+			};
+
+			partition@30000 {
+				label = "u-boot-env";
+				reg = <0x030000 0x010000>;
+			};
+
+			partition@40000 {
+				compatible = "denx,uimage";
+				label = "firmware";
+				reg = <0x040000 0xe50000>;
+			};
+
+			partition@790000 {
+				label = "manufacture";
+				reg = <0xe90000 0x100000>;
+				read-only;
+			};
+
+			partition@ed0000 {
+				label = "backup";
+				reg = <0xf90000 0x010000>;
+				read-only;
+			};
+
+			partition@fe0000 {
+				label = "storage";
+				reg = <0xfa0000 0x050000>;
+				read-only;
+			};
+
+			partition@ff0000 {
+				label = "art";
+				reg = <0xff0000 0x010000>;
+				read-only;
+			};
+		};
+	};
+};
+
+&uart {
+	status = "okay";
+};
+
+&usb_phy1 {
+	status = "okay";
+};
+
+&usb1 {
+	status = "okay";
+};
+
+&wmac {
+	status = "okay";
+
+	qca,no-eeprom;
+};
diff --git a/target/linux/ath79/image/generic.mk b/target/linux/ath79/image/generic.mk
index fa504ee0fc..886607778b 100644
--- a/target/linux/ath79/image/generic.mk
+++ b/target/linux/ath79/image/generic.mk
@@ -287,6 +287,19 @@  define Device/embeddedwireless_dorin
 endef
 TARGET_DEVICES += embeddedwireless_dorin
 
+define Device/engenius_epg5000
+  ATH_SOC := qca9558
+  DEVICE_TITLE := EnGenius EPG5000
+  DEVICE_PACKAGES := ath10k-firmware-qca988x-ct kmod-ath10k-ct kmod-usb2
+  IMAGE_SIZE := 14656k
+  IMAGES += factory.dlf
+  IMAGE/factory.dlf := append-kernel | pad-to $$$$(BLOCKSIZE) | \
+	append-rootfs | pad-rootfs | check-size $$$$(IMAGE_SIZE) | \
+	senao-header -r 0x101 -p 0x71 -t 2
+  SUPPORTED_DEVICES += epg5000
+endef
+TARGET_DEVICES += engenius_epg5000
+
 define Device/engenius_ews511ap
   ATH_SOC := qca9531
   DEVICE_TITLE := EnGenius EWS511AP