summaryrefslogtreecommitdiffstats
path: root/target
diff options
context:
space:
mode:
authorMarkus Stockhausen <markus.stockhausen@gmx.de>2024-09-14 17:17:44 -0400
committerSander Vanheule <sander@svanheule.net>2024-10-02 20:15:21 +0200
commitd03f3dcf3b2801c0ee8d41506a1da64d3077f19b (patch)
tree7f38e84dd3e25c1a4a890140954f30dbb0ac645f /target
parentc1e43c36b466cab8a2097d78d387dbf27894c583 (diff)
downloadopenwrt-d03f3dcf3b2801c0ee8d41506a1da64d3077f19b.tar.gz
openwrt-d03f3dcf3b2801c0ee8d41506a1da64d3077f19b.tar.bz2
openwrt-d03f3dcf3b2801c0ee8d41506a1da64d3077f19b.zip
realtek: add support for Linksys LGS310C
Hardware specification ---------------------- * RTL8380M SoC, 1 MIPS 4KEc core @ 500MHz * 256MB DRAM * 32MB NOR Flash * 8 x 10/100/1000BASE-T ports * 2 x SFP ports * Power LED, Fault LED * Reset button on front panel * UART (115200 8N1) via populated standard pin header marked JP1 TODO: The SFP ports use a shared SCL GPIO that the driver cannot handle. The left SFP port (lan9) is defined and fully functional while the laser on the right SFP port (lan10) is off by default. UART pinout ----------- [o]ooo|JP1 | ||`------ GND | |`------- RX | `-------- TX `---------- Vcc (3V3) Installation using OEM webinterface ----------------------------------- 1. Make sure you are running OEM firmware in secondary slot 2. Install squashfs-factory.imag to primary slot by upload via http Installation using serial interface ----------------------------------- 1. Press "a" "c" "p" during message "Enter correct key to stop autoboot" 2. Load image with "upgrade runtime <TFTP IP>:squashfs-sysupgrade.bin" command 3. Switch to primary slot with "setsys bootpartition 0" 4. Store config with "savesys" 5. Boot the image with `boota` command Dual-boot with stock firmware using writable u-boot-env ------------------------------------------------------- From stock to OpenWrt / primary image 1 (CLI as admin): - > boot system image1 - > reboot From OpenWrt to stock / boot image 2: (shell as root) - # fw_setsys bootpartition 1 - # reboot Debrick using serial interface ------------------------------ 1. Press "a" "c" "p" during message "Enter correct key to stop autoboot" 2. Load vendor image with "upgrade runtime <TFTP IP>:LGS310xxxxx.imag" 3. switch to primary partition "setsys bootpartition 0" 4. safe config "savesys" Further documentation --------------------- See https://openwrt.org/toh/linksys/lgs352c It has been developed and tested on device with v1 revision. Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de> Link: https://github.com/openwrt/openwrt/pull/16068 [Add missing 'w' in name of firmware partition] Signed-off-by: Sander Vanheule <sander@svanheule.net>
Diffstat (limited to 'target')
-rw-r--r--target/linux/realtek/dts/rtl8380_linksys_lgs310c.dts212
-rw-r--r--target/linux/realtek/image/Makefile13
-rw-r--r--target/linux/realtek/image/rtl838x.mk21
3 files changed, 246 insertions, 0 deletions
diff --git a/target/linux/realtek/dts/rtl8380_linksys_lgs310c.dts b/target/linux/realtek/dts/rtl8380_linksys_lgs310c.dts
new file mode 100644
index 0000000000..08ef740399
--- /dev/null
+++ b/target/linux/realtek/dts/rtl8380_linksys_lgs310c.dts
@@ -0,0 +1,212 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/leds/common.h>
+#include <dt-bindings/gpio/gpio.h>
+
+#include "rtl838x.dtsi"
+
+/ {
+ compatible = "linksys,lgs310c", "realtek,rtl838x-soc";
+ model = "Linksys LGS310C";
+
+ aliases {
+ led-boot = &led_power;
+ led-failsafe = &led_fault;
+ led-running = &led_power;
+ led-upgrade = &led_power;
+ };
+
+ memory@0 {
+ device_type = "memory";
+ reg = <0x0 0x10000000>;
+ };
+
+ leds: leds {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinmux_disable_sys_led>;
+ compatible = "gpio-leds";
+
+ led_power: led-0 {
+ function = LED_FUNCTION_POWER;
+ color = <LED_COLOR_ID_GREEN>;
+ gpios = <&gpio1 3 GPIO_ACTIVE_LOW>;
+ };
+
+ led_fault: led-1 {
+ function = LED_FUNCTION_FAULT;
+ color = <LED_COLOR_ID_AMBER>;
+ gpios = <&gpio1 2 GPIO_ACTIVE_LOW>;
+ };
+
+ };
+
+ /* i2c of the left SFP cage: port 9 */
+ i2c0: i2c-gpio-0 {
+ compatible = "i2c-gpio";
+ sda-gpios = <&gpio1 6 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+ scl-gpios = <&gpio1 31 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+ i2c-gpio,delay-us = <2>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ };
+
+ sfp0: sfp-p9 {
+ compatible = "sff,sfp";
+ i2c-bus = <&i2c0>;
+ los-gpio = <&gpio1 11 GPIO_ACTIVE_HIGH>;
+ mod-def0-gpio = <&gpio1 12 GPIO_ACTIVE_LOW>;
+ tx-disable-gpio = <&gpio1 10 GPIO_ACTIVE_HIGH>;
+ };
+
+ /* i2c of the right SFP cage: port 10 */
+ i2c1: i2c-gpio-1 {
+ compatible = "i2c-gpio";
+ sda-gpios = <&gpio1 7 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+/*
+ * ports 9 & 10 use a shared SCL, and are currently not usable in parallel
+ * So for now disable the SCL on the second port.
+ *
+ * scl-gpios = <&gpio1 31 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+ */
+ i2c-gpio,scl-open-drain;
+ i2c-gpio,delay-us = <2>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ };
+
+ sfp1: sfp-p10 {
+ compatible = "sff,sfp";
+ i2c-bus = <&i2c1>;
+ los-gpio = <&gpio1 14 GPIO_ACTIVE_HIGH>;
+ mod-def0-gpio = <&gpio1 21 GPIO_ACTIVE_LOW>;
+ tx-disable-gpio = <&gpio1 13 GPIO_ACTIVE_HIGH>;
+ };
+
+ keys {
+ compatible = "gpio-keys";
+
+ reset {
+ label = "reset";
+ gpios = <&gpio0 11 GPIO_ACTIVE_LOW>;
+ linux,code = <KEY_RESTART>;
+ };
+ };
+
+ gpio1: rtl8231-gpio {
+ compatible = "realtek,rtl8231-gpio";
+ #gpio-cells = <2>;
+ gpio-controller;
+ indirect-access-bus-id = <0>;
+ };
+};
+
+&spi0 {
+ status = "okay";
+ flash@0 {
+ compatible = "jedec,spi-nor";
+ reg = <0>;
+ spi-max-frequency = <10000000>;
+
+ partitions {
+ compatible = "fixed-partitions";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ partition@0 {
+ label = "u-boot";
+ reg = <0x00000000 0x80000>;
+ read-only;
+ };
+ partition@80000 {
+ label = "u-boot-env";
+ reg = <0x00080000 0x10000>;
+ };
+ partition@90000 {
+ label = "u-boot-env2";
+ reg = <0x00090000 0x10000>;
+ };
+ partition@a0000 {
+ label = "jffs2";
+ reg = <0x000a0000 0x500000>;
+ };
+ partition@5a0000 {
+ label = "firmware";
+ compatible = "openwrt,uimage";
+ reg = <0x005a0000 0xd30000>;
+ };
+ partition@2d0000 {
+ label = "kernel2";
+ reg = <0x012d0000 0xd30000>;
+ };
+ };
+ };
+};
+
+&uart1 {
+ status = "okay";
+};
+
+&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)
+ INTERNAL_PHY(24)
+ INTERNAL_PHY(26)
+ };
+};
+
+&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@24 {
+ reg = <24>;
+ label = "lan9";
+ phy-handle = <&phy24>;
+ phy-mode = "1000base-x";
+ managed = "in-band-status";
+ sfp = <&sfp0>;
+ };
+
+ port@26 {
+ reg = <26>;
+ label = "lan10";
+ phy-handle = <&phy26>;
+ phy-mode = "1000base-x";
+ managed = "in-band-status";
+ sfp = <&sfp1>;
+ };
+
+ port@28 {
+ ethernet = <&ethernet0>;
+ reg = <28>;
+ phy-mode = "internal";
+ fixed-link {
+ speed = <1000>;
+ full-duplex;
+ };
+ };
+ };
+};
diff --git a/target/linux/realtek/image/Makefile b/target/linux/realtek/image/Makefile
index 9eed710480..19fab03dba 100644
--- a/target/linux/realtek/image/Makefile
+++ b/target/linux/realtek/image/Makefile
@@ -6,6 +6,8 @@ include $(INCLUDE_DIR)/image.mk
KERNEL_LOADADDR = 0x80100000
DEVICE_VARS += \
+ BELKIN_HEADER \
+ BELKIN_MODEL \
CAMEO_BOARD_MODEL \
CAMEO_BOARD_VERSION \
CAMEO_CUSTOMER_SIGNATURE \
@@ -14,6 +16,7 @@ DEVICE_VARS += \
CAMEO_ROOTFS_PART \
H3C_DEVICE_ID \
H3C_PRODUCT_ID \
+ LINKSYS_HEADER \
ZYXEL_VERS
define Build/zyxel-vers
@@ -71,6 +74,16 @@ define Build/h3c-vfs
mv $@.new $@
endef
+define Build/belkin-header
+ $(SCRIPT_DIR)/belkin-header.py $(@) $(@).new $(BELKIN_HEADER) ${BELKIN_MODEL}
+ mv $@.new $@
+endef
+
+define Build/linksys-image
+ $(SCRIPT_DIR)/linksys-image.sh $(@) $(@).new $(LINKSYS_MODEL)
+ mv $@.new $@
+endef
+
define Device/Default
PROFILES = Default
KERNEL := \
diff --git a/target/linux/realtek/image/rtl838x.mk b/target/linux/realtek/image/rtl838x.mk
index c8e1c481ec..01397af931 100644
--- a/target/linux/realtek/image/rtl838x.mk
+++ b/target/linux/realtek/image/rtl838x.mk
@@ -162,6 +162,27 @@ define Device/iodata_bsh-g24mb
endef
TARGET_DEVICES += iodata_bsh-g24mb
+define Device/linksys_lgs310c
+ SOC := rtl8380
+ IMAGE_SIZE := 13504k
+ DEVICE_VENDOR := Linksys
+ DEVICE_MODEL := LGS310C
+ BELKIN_MODEL := BKS-RTL83xx
+ BELKIN_HEADER := 0x07800001
+ LINKSYS_MODEL := 60402060
+ IMAGES += factory.imag
+ IMAGE/factory.imag := \
+ append-kernel | \
+ pad-to 64k | \
+ append-rootfs | \
+ pad-rootfs | \
+ check-size | \
+ append-metadata | \
+ linksys-image | \
+ belkin-header
+endef
+TARGET_DEVICES += linksys_lgs310c
+
# "NGE" refers to the uImage magic
define Device/netgear_nge
KERNEL := \