[openwrt/openwrt] realtek: add support for EnGenius EWS2910P

LEDE Commits lede-commits at lists.infradead.org
Sat Jun 25 06:47:48 PDT 2022


svanheule pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/2cfaab4549f55f6981b6391b50f89aae4858886d

commit 2cfaab4549f55f6981b6391b50f89aae4858886d
Author: Alexandru Gagniuc <mr.nuke.me at gmail.com>
AuthorDate: Sat May 14 01:34:04 2022 -0500

    realtek: add support for EnGenius EWS2910P
    
    Add support for the Engenius EWS2910P PoE switch. This is an RTL8380
    based switch with two SFP slots, and PoE 802.3af one every RJ-45 port.
    
    The specs say 802.3af, but the vendor firmware configures the PSE for
    a budget of 31W, indicating 802.3at support.
    
    Specifications:
    ---------------
    * SoC:       Realtek RTL8380M
    * Flash:     32 MiB SPI flash Macronix MX25L25635E
    * RAM:       256 MiB (As reported by bootloader)
    * Ethernet:  16x 10/100/1000 Mbps with PoE
                  2x SFP slots
    * Buttons:   1 "Reset" button on front panel
                 1 "LED mode: button on front panel
                 1 "On/Off" Toggle switch on the back
    * Power:     48V-54V DC barrel jack
    * UART:      1 serial header (JP1) with populated 2.54mm pitch header
                 Labeled GRTV for ground, rx, tx, and 3.3V respectively
    * PoE:       1 STM ST32F100 microcontroller
                 2 BCM59111 PSE chips
    Works:
    ------
      - (8) RJ-45 ethernet ports
      - Switch functions
      - LEDs and buttons
    
    Not yet enabled:
    ----------------
      - SFP ports (will be enabled in a subsequent change)
      - Power-over-Ethernet (requires realtek-poe package)
    
    Install via web interface:
    -------------------------
    
    The factory firmware will accept and flash the initramfs image. It is
    recommended to flash to "Partition 0". Flashing to "Partition 1" is
    not supported at this point.
    
    The factory web GUI will show the following warning:
    
     " Warning: The firmware version is v0.00.00-c0.0.00
         The firmware image you are uploading is older than the current
         firmware of the switch. The device will reset back to default
         settings. Are you sure you want to proceed?"
    
    This is expected when flashing OpenWrt. After the initramfs image
    boots, flash the -sysupgrade using either the commandline or LuCI.
    
    Install via serial console/tftp:
    --------------------------------
    
    The u-boot firmware will not stop the boot, regardless of which key is
    pressed. To access the u-boot console, ground out the CLK (pin 16) of
    the ROM (U22) when u-boot is reading the linux image. If timed
    correctly, the image CRC will fail, and u-boot will drop to a shell:
        > rtk network on
        > setenv ipaddr <address of tftp server>
        > tftp $(freemem) <name-of-initramfs-image.bin>
        > bootm
    
    Then flash the -sysupgrade using either the commandline or luci.
    
    Signed-off-by: Alexandru Gagniuc <mr.nuke.me at gmail.com>
    [gpio-led node names, OpenWrt and LuCI capitalization in commit message]
    Signed-off-by: Sander Vanheule <sander at svanheule.net>
---
 .../realtek/dts-5.10/rtl8380_engenius_ews2910p.dts | 173 +++++++++++++++++++++
 target/linux/realtek/image/rtl838x.mk              |  13 ++
 2 files changed, 186 insertions(+)

diff --git a/target/linux/realtek/dts-5.10/rtl8380_engenius_ews2910p.dts b/target/linux/realtek/dts-5.10/rtl8380_engenius_ews2910p.dts
new file mode 100644
index 0000000000..feb57fecff
--- /dev/null
+++ b/target/linux/realtek/dts-5.10/rtl8380_engenius_ews2910p.dts
@@ -0,0 +1,173 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "rtl838x.dtsi"
+
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+	compatible = "engenius,ews2910p", "realtek,rtl838x-soc";
+	model = "EnGenius EWS2910P";
+
+	aliases {
+		led-boot = &led_power;
+		led-failsafe = &led_fault;
+		led-running = &led_power;
+		led-upgrade = &led_power;
+	};
+
+	memory at 0 {
+		device_type = "memory";
+		reg = <0x0 0x10000000>;
+	};
+
+	keys {
+		compatible = "gpio-keys";
+
+		reset {
+			label = "reset";
+			gpios = <&gpio0 11 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_RESTART>;
+		};
+
+		led_mode {
+			label = "led-mode";
+			gpios = <&gpio0 13 GPIO_ACTIVE_LOW>;
+			linux,code = <BTN_0>;
+		};
+	};
+
+	gpio1: rtl8231-gpio {
+		compatible = "realtek,rtl8231-gpio";
+		#gpio-cells = <2>;
+		gpio-controller;
+		indirect-access-bus-id = <0>;
+	};
+
+	gpio-restart {
+		compatible = "gpio-restart";
+		gpios = <&gpio1 0 GPIO_ACTIVE_LOW>;
+	};
+
+	leds {
+		compatible = "gpio-leds";
+
+		led_power: led-0 {
+			label = "green:power";
+			gpios = <&gpio1 3 GPIO_ACTIVE_LOW>;
+		};
+
+		led_lan_mode: led-1 {
+			label = "green:lan-mode";
+			gpios = <&gpio1 4 GPIO_ACTIVE_LOW>;
+		};
+
+		led_fault: led-2 {
+			label = "amber:fault";
+			gpios = <&gpio1 2 GPIO_ACTIVE_LOW>;
+		};
+
+		led_poe_max: led-3 {
+			label = "amber:poe-max";
+			gpios = <&gpio0 12 GPIO_ACTIVE_LOW>;
+		};
+	};
+};
+
+&spi0 {
+	status = "okay";
+
+	flash at 0 {
+		compatible = "jedec,spi-nor";
+		reg = <0>;
+		spi-max-frequency = <10000000>;
+
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			partition at 0 {
+				label = "u-boot";
+				reg = <0x0 0x80000>;
+				read-only;
+			};
+			partition at 80000 {
+				label = "u-boot-env";
+				reg = <0x80000 0x10000>;
+				read-only;
+			};
+			partition at 90000 {
+				label = "u-boot-env2";
+				reg = <0x90000 0x10000>;
+			};
+			partition at a0000 {
+				label = "jffs2-cfg";
+				reg = <0xa0000 0xd60000>;
+			};
+			partition at e00000 {
+				label = "jffs2-log";
+				reg = <0xe00000 0x200000>;
+			};
+			partition at 1000000 {
+				compatible = "openwrt,uimage";
+				label = "firmware";
+				reg = <0x1000000 0x800000>;
+				openwrt,ih-magic = <0x03802910>;
+			};
+			partition at 1800000 {
+				label = "firmware2";
+				reg = <0x1800000 0x800000>;
+			};
+		};
+	};
+};
+
+&ethernet0 {
+	mdio: mdio-bus {
+		compatible = "realtek,rtl838x-mdio";
+		regmap = <&ethernet0>;
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		INTERNAL_PHY(8)
+		INTERNAL_PHY(9)
+		INTERNAL_PHY(10)
+		INTERNAL_PHY(11)
+		INTERNAL_PHY(12)
+		INTERNAL_PHY(13)
+		INTERNAL_PHY(14)
+		INTERNAL_PHY(15)
+	};
+};
+
+&switch0 {
+	ports {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		SWITCH_PORT(8, 1, internal)
+		SWITCH_PORT(9, 2, internal)
+		SWITCH_PORT(10, 3, internal)
+		SWITCH_PORT(11, 4, internal)
+		SWITCH_PORT(12, 5, internal)
+		SWITCH_PORT(13, 6, internal)
+		SWITCH_PORT(14, 7, internal)
+		SWITCH_PORT(15, 8, internal)
+
+		port at 28 {
+			ethernet = <&ethernet0>;
+			reg = <28>;
+			phy-mode = "internal";
+
+			fixed-link {
+				speed = <1000>;
+				full-duplex;
+			};
+		};
+	};
+};
+
+&uart1 {
+	status = "okay";
+};
diff --git a/target/linux/realtek/image/rtl838x.mk b/target/linux/realtek/image/rtl838x.mk
index df145cfb69..f38e4977d2 100644
--- a/target/linux/realtek/image/rtl838x.mk
+++ b/target/linux/realtek/image/rtl838x.mk
@@ -42,6 +42,19 @@ define Device/d-link_dgs-1210-28
 endef
 TARGET_DEVICES += d-link_dgs-1210-28
 
+# The "IMG-" uImage name allows flashing the iniramfs from the vendor Web UI.
+# Avoided for sysupgrade, as the vendor FW would do an incomplete flash.
+define Device/engenius_ews2910p
+  SOC := rtl8380
+  IMAGE_SIZE := 8192k
+  DEVICE_VENDOR := EnGenius
+  DEVICE_MODEL := EWP2910P
+  UIMAGE_MAGIC := 0x03802910
+  KERNEL_INITRAMFS := kernel-bin | append-dtb | gzip | \
+	uImage gzip -n 'IMG-0.00.00-c0.0.00'
+endef
+TARGET_DEVICES += engenius_ews2910p
+
 define Device/inaba_aml2-17gp
   SOC := rtl8382
   IMAGE_SIZE := 13504k




More information about the lede-commits mailing list