]> git.ipfire.org Git - thirdparty/openwrt.git/commitdiff
realtek: gs1900-10hp: move A1 PoE to in-kernel PSE driver
authorCarlo Szelinsky <github@szelinsky.de>
Sat, 18 Jul 2026 20:08:34 +0000 (22:08 +0200)
committerJonas Jelonek <jelonek.jonas@gmail.com>
Sun, 19 Jul 2026 09:21:11 +0000 (11:21 +0200)
The GS1900-10HP A1 (Broadcom BCM59121 behind a Gen1 MCU on UART) was
driven by the userspace realtek-poe daemon. Move it to the in-kernel
realtek-pse-mcu (Gen1) driver so PoE is managed through the standard
PSE-PD / ethtool interface, and factor the board description shared with
the upcoming B1 variant into rtl8380_zyxel_gs1900-10hp.dtsi.

Signed-off-by: Carlo Szelinsky <github@szelinsky.de>
Link: https://github.com/openwrt/openwrt/pull/24283
Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
target/linux/realtek/base-files/etc/board.d/02_network
target/linux/realtek/dts/rtl8380_zyxel_gs1900-10hp-a1.dts
target/linux/realtek/dts/rtl8380_zyxel_gs1900-10hp.dtsi [new file with mode: 0644]
target/linux/realtek/image/rtl838x.mk

index 899f3f117d6e15b77ec00aedc48531db4a111ae5..98389c522b5820dfe81adccb9e8a52b841ff4b9e 100644 (file)
@@ -229,9 +229,6 @@ realtek_setup_poe()
        netgear,gs310tp-v1)
                ucidef_set_poe 55 "$(filter_port_list "$lan_list" "lan9 lan10")"
                ;;
-       zyxel,gs1900-10hp-a1)
-               ucidef_set_poe 77 "$(filter_port_list "$lan_list" "lan9 lan10")"
-               ;;
        zyxel,gs1900-8hp-a1|\
        zyxel,gs1900-8hp-b1)
                ucidef_set_poe 70 "$lan_list"
index 89112c3cc9b67993c1ad51ac3a969751278e3509..e83f2c088eb0f734f0234d17d675e0161c8a84b3 100644 (file)
@@ -1,90 +1,13 @@
 // SPDX-License-Identifier: GPL-2.0-or-later
 
-#include "rtl8380_zyxel_gs1900.dtsi"
-#include "rtl8380_zyxel_gs1900_gpio.dtsi"
+#include "rtl8380_zyxel_gs1900-10hp.dtsi"
 
 / {
        compatible = "zyxel,gs1900-10hp-a1", "realtek,rtl838x-soc";
        model = "Zyxel GS1900-10HP A1 Switch";
-
-       /* i2c of the left SFP cage: port 9 */
-       i2c0: i2c-gpio-0 {
-               compatible = "i2c-gpio";
-               sda-gpios = <&gpio1 24 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
-               scl-gpios = <&gpio1 25 (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 27 GPIO_ACTIVE_HIGH>;
-               tx-fault-gpio = <&gpio1 22 GPIO_ACTIVE_HIGH>;
-               mod-def0-gpio = <&gpio1 26 GPIO_ACTIVE_LOW>;
-               tx-disable-gpio = <&gpio1 23 GPIO_ACTIVE_HIGH>;
-               #thermal-sensor-cells = <0>;
-       };
-
-       /* i2c of the right SFP cage: port 10 */
-       i2c1: i2c-gpio-1 {
-               compatible = "i2c-gpio";
-               sda-gpios = <&gpio1 30 (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>;
-       };
-
-       sfp1: sfp-p10 {
-               compatible = "sff,sfp";
-               i2c-bus = <&i2c1>;
-               los-gpio = <&gpio1 33 GPIO_ACTIVE_HIGH>;
-               tx-fault-gpio = <&gpio1 28 GPIO_ACTIVE_HIGH>;
-               mod-def0-gpio = <&gpio1 32 GPIO_ACTIVE_LOW>;
-               tx-disable-gpio = <&gpio1 29 GPIO_ACTIVE_HIGH>;
-               #thermal-sensor-cells = <0>;
-       };
-};
-
-&uart1 {
-       status = "okay";
-};
-
-&switch0 {
-       ethernet-ports {
-               port@24 {
-                       reg = <24>;
-                       label = "lan9";
-                       pcs-handle = <&serdes4 0>;
-                       phy-mode = "1000base-x";
-                       managed = "in-band-status";
-                       sfp = <&sfp0>;
-               };
-
-               port@26 {
-                       reg = <26>;
-                       label = "lan10";
-                       pcs-handle = <&serdes5 0>;
-                       phy-mode = "1000base-x";
-                       managed = "in-band-status";
-                       sfp = <&sfp1>;
-               };
-       };
 };
 
-&thermal_zones {
-       sfp-thermal {
-               polling-delay-passive = <10000>;
-               polling-delay = <10000>;
-               thermal-sensors = <&sfp0>, <&sfp1>;
-               trips {
-                       sfp-crit {
-                               temperature = <110000>;
-                               hysteresis = <1000>;
-                               type = "critical";
-                       };
-               };
-       };
+&pse {
+       compatible = "zyxel,gs1900-10hp-a1-pse", "realtek,pse-mcu-gen1";
+       current-speed = <19200>;
 };
diff --git a/target/linux/realtek/dts/rtl8380_zyxel_gs1900-10hp.dtsi b/target/linux/realtek/dts/rtl8380_zyxel_gs1900-10hp.dtsi
new file mode 100644 (file)
index 0000000..3cef27a
--- /dev/null
@@ -0,0 +1,114 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "rtl8380_zyxel_gs1900.dtsi"
+#include "rtl8380_zyxel_gs1900_gpio.dtsi"
+
+/ {
+       /* i2c of the left SFP cage: port 9 */
+       i2c0: i2c-gpio-0 {
+               compatible = "i2c-gpio";
+               sda-gpios = <&gpio1 24 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+               scl-gpios = <&gpio1 25 (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 27 GPIO_ACTIVE_HIGH>;
+               tx-fault-gpio = <&gpio1 22 GPIO_ACTIVE_HIGH>;
+               mod-def0-gpio = <&gpio1 26 GPIO_ACTIVE_LOW>;
+               tx-disable-gpio = <&gpio1 23 GPIO_ACTIVE_HIGH>;
+               #thermal-sensor-cells = <0>;
+       };
+
+       /* i2c of the right SFP cage: port 10 */
+       i2c1: i2c-gpio-1 {
+               compatible = "i2c-gpio";
+               sda-gpios = <&gpio1 30 (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>;
+       };
+
+       sfp1: sfp-p10 {
+               compatible = "sff,sfp";
+               i2c-bus = <&i2c1>;
+               los-gpio = <&gpio1 33 GPIO_ACTIVE_HIGH>;
+               tx-fault-gpio = <&gpio1 28 GPIO_ACTIVE_HIGH>;
+               mod-def0-gpio = <&gpio1 32 GPIO_ACTIVE_LOW>;
+               tx-disable-gpio = <&gpio1 29 GPIO_ACTIVE_HIGH>;
+               #thermal-sensor-cells = <0>;
+       };
+};
+
+&uart1 {
+       status = "okay";
+
+       /* PoE MCU; compatible and current-speed are set per variant */
+       pse: ethernet-pse {
+               pse-pis {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       PSE_PI(0)
+                       PSE_PI(1)
+                       PSE_PI(2)
+                       PSE_PI(3)
+                       PSE_PI(4)
+                       PSE_PI(5)
+                       PSE_PI(6)
+                       PSE_PI(7)
+               };
+       };
+};
+
+&switch0 {
+       ethernet-ports {
+               port@24 {
+                       reg = <24>;
+                       label = "lan9";
+                       pcs-handle = <&serdes4 0>;
+                       phy-mode = "1000base-x";
+                       managed = "in-band-status";
+                       sfp = <&sfp0>;
+               };
+
+               port@26 {
+                       reg = <26>;
+                       label = "lan10";
+                       pcs-handle = <&serdes5 0>;
+                       phy-mode = "1000base-x";
+                       managed = "in-band-status";
+                       sfp = <&sfp1>;
+               };
+       };
+};
+
+&thermal_zones {
+       sfp-thermal {
+               polling-delay-passive = <10000>;
+               polling-delay = <10000>;
+               thermal-sensors = <&sfp0>, <&sfp1>;
+               trips {
+                       sfp-crit {
+                               temperature = <110000>;
+                               hysteresis = <1000>;
+                               type = "critical";
+                       };
+               };
+       };
+};
+
+/* Copper ports lan1..lan8 (phy8..phy15) -> MCU PoE ports 0..7 */
+&phy8  { pses = <&pse_pi0>; };
+&phy9  { pses = <&pse_pi1>; };
+&phy10 { pses = <&pse_pi2>; };
+&phy11 { pses = <&pse_pi3>; };
+&phy12 { pses = <&pse_pi4>; };
+&phy13 { pses = <&pse_pi5>; };
+&phy14 { pses = <&pse_pi6>; };
+&phy15 { pses = <&pse_pi7>; };
index 73e282b6edd21ab1af45ba2b5d1503566caf8313..a8b11c2c230764d492d82c940b278c4e20b8b41f 100644 (file)
@@ -391,7 +391,7 @@ define Device/zyxel_gs1900-10hp-a1
   DEVICE_MODEL := GS1900-10HP
   DEVICE_VARIANT := A1
   ZYXEL_VERS := AAZI
-  DEVICE_PACKAGES += realtek-poe
+  DEVICE_PACKAGES += kmod-pse-realtek-mcu-uart
   SUPPORTED_DEVICES += zyxel,gs1900-10hp
 endef
 TARGET_DEVICES += zyxel_gs1900-10hp-a1