From: Carlo Szelinsky Date: Sat, 18 Jul 2026 20:08:34 +0000 (+0200) Subject: realtek: gs1900-10hp: move A1 PoE to in-kernel PSE driver X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=101fcccac559b5fa503d363e1c139ac7733194ee;p=thirdparty%2Fopenwrt.git realtek: gs1900-10hp: move A1 PoE to in-kernel PSE driver 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 Link: https://github.com/openwrt/openwrt/pull/24283 Signed-off-by: Jonas Jelonek --- diff --git a/target/linux/realtek/base-files/etc/board.d/02_network b/target/linux/realtek/base-files/etc/board.d/02_network index 899f3f117d6..98389c522b5 100644 --- a/target/linux/realtek/base-files/etc/board.d/02_network +++ b/target/linux/realtek/base-files/etc/board.d/02_network @@ -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" diff --git a/target/linux/realtek/dts/rtl8380_zyxel_gs1900-10hp-a1.dts b/target/linux/realtek/dts/rtl8380_zyxel_gs1900-10hp-a1.dts index 89112c3cc9b..e83f2c088eb 100644 --- a/target/linux/realtek/dts/rtl8380_zyxel_gs1900-10hp-a1.dts +++ b/target/linux/realtek/dts/rtl8380_zyxel_gs1900-10hp-a1.dts @@ -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 index 00000000000..3cef27aa4f2 --- /dev/null +++ b/target/linux/realtek/dts/rtl8380_zyxel_gs1900-10hp.dtsi @@ -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>; }; diff --git a/target/linux/realtek/image/rtl838x.mk b/target/linux/realtek/image/rtl838x.mk index 73e282b6edd..a8b11c2c230 100644 --- a/target/linux/realtek/image/rtl838x.mk +++ b/target/linux/realtek/image/rtl838x.mk @@ -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