The Realtek target currently uses two phy macros to simplify the device dts. - EXTERNAL_PHY() to denote a phy attached to the SoC - INTERNAL_PHY() to denote an internal PHY (inside the SoC) There is no benefit doing this. The topology around a port/phy is well defined by the port macros. They link port, phy, pcs and even leds. The only consumer of the attribute "phy-is-integrated" is inside the dsa driver and that is being refactored. As a first step define a new more meaningful PHY_C22() macro that describes a c22 capable phy. This does not need to care about the external/internal relation. To make it even more useful for the RTL93xx targets with multiple mdio busses give it two parameters PHY_C22(port_number, bus_address) where - port_number is the absolute overall unique phy number - bus_address is the location of the phy on the bus For RTL83xx these two parameters will usually be the same. Instead of three steps (inventing the macro, converting the consumers and removeing the old macor) do a one-step conversion for the existing EXTERNAL_PHY() macro. Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de> Link: https://github.com/openwrt/openwrt/pull/22698 Signed-off-by: Robert Marko <robimarko@gmail.com>
183 lines
4.1 KiB
Devicetree
183 lines
4.1 KiB
Devicetree
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
|
|
|
#include "rtl838x.dtsi"
|
|
#include "rtl83xx_panasonic_mxxeg-pn28xx0k.dtsi"
|
|
|
|
#include <dt-bindings/interrupt-controller/irq.h>
|
|
|
|
/ {
|
|
compatible = "panasonic,m24eg-pn28240k", "realtek,rtl8382-soc";
|
|
model = "Panasonic Switch-M24eG PN28240K";
|
|
|
|
aliases {
|
|
led-boot = &led_status_eco_green;
|
|
led-failsafe = &led_status_eco_amber;
|
|
led-running = &led_status_eco_green;
|
|
led-upgrade = &led_status_eco_green;
|
|
};
|
|
|
|
/*
|
|
* sfp0/1 are "combo" port with each TP port (23/24), and they are
|
|
* connected to the RTL8218FB. Currently, there is no support for
|
|
* the chip and only TP ports work by the RTL8218D support.
|
|
*/
|
|
sfp0: sfp-p23 {
|
|
compatible = "sff,sfp";
|
|
i2c-bus = <&i2c0>;
|
|
tx-fault-gpio = <&gpio1 0 GPIO_ACTIVE_HIGH>;
|
|
tx-disable-gpio = <&gpio1 1 GPIO_ACTIVE_HIGH>;
|
|
mod-def0-gpio = <&gpio1 2 GPIO_ACTIVE_LOW>;
|
|
los-gpio = <&gpio1 3 GPIO_ACTIVE_HIGH>;
|
|
};
|
|
|
|
sfp1: sfp-p24 {
|
|
compatible = "sff,sfp";
|
|
i2c-bus = <&i2c1>;
|
|
tx-fault-gpio = <&gpio1 4 GPIO_ACTIVE_HIGH>;
|
|
tx-disable-gpio = <&gpio1 5 GPIO_ACTIVE_HIGH>;
|
|
mod-def0-gpio = <&gpio1 6 GPIO_ACTIVE_LOW>;
|
|
los-gpio = <&gpio1 7 GPIO_ACTIVE_HIGH>;
|
|
};
|
|
};
|
|
|
|
&leds {
|
|
led_status_eco_amber: led-5 {
|
|
gpios = <&gpio2 1 GPIO_ACTIVE_LOW>;
|
|
color = <LED_COLOR_ID_AMBER>;
|
|
function = LED_FUNCTION_STATUS;
|
|
function-enumerator = <1>;
|
|
};
|
|
|
|
led_status_eco_green: led-6 {
|
|
gpios = <&gpio2 2 GPIO_ACTIVE_LOW>;
|
|
color = <LED_COLOR_ID_GREEN>;
|
|
function = LED_FUNCTION_STATUS;
|
|
function-enumerator = <2>;
|
|
};
|
|
};
|
|
|
|
&i2c_gpio_0 {
|
|
scl-gpios = <&gpio0 0 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
|
|
sda-gpios = <&gpio0 1 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
|
|
};
|
|
|
|
&i2c_gpio_1 {
|
|
scl-gpios = <&gpio0 12 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
|
|
sda-gpios = <&gpio0 13 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
|
|
};
|
|
|
|
&gpio2 {
|
|
interrupt-controller;
|
|
#interrupt-cells = <2>;
|
|
interrupt-parent = <&gpio0>;
|
|
interrupts = <2 IRQ_TYPE_EDGE_FALLING>;
|
|
|
|
/*
|
|
* GPIO12 (IO1_4): RTL8218B + RTL8218FB
|
|
*
|
|
* This GPIO pin should be specified as "reset-gpio" in mdio node,
|
|
* but the current configuration of RTL8218B phy in the phy driver
|
|
* seems to be incomplete and RTL8218FB phy won't be configured on
|
|
* RTL8218D support. So, ethernet ports on these phys will be broken
|
|
* after hard-resetting.
|
|
* (RTL8218FB phy will be detected as RTL8218D by the phy driver)
|
|
* At the moment, configure this GPIO pin as gpio-hog to avoid breaking
|
|
* by resetting.
|
|
*/
|
|
ext_switch_reset {
|
|
gpio-hog;
|
|
gpios = <12 GPIO_ACTIVE_HIGH>;
|
|
output-high;
|
|
line-name = "ext-switch-reset";
|
|
};
|
|
};
|
|
|
|
&i2c_switch {
|
|
i2c0: i2c@0 {
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
reg = <0>;
|
|
};
|
|
|
|
i2c1: i2c@1 {
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
reg = <1>;
|
|
};
|
|
};
|
|
|
|
&mdio_bus0 {
|
|
PHY_C22(0, 0)
|
|
PHY_C22(1, 1)
|
|
PHY_C22(2, 2)
|
|
PHY_C22(3, 3)
|
|
PHY_C22(4, 4)
|
|
PHY_C22(5, 5)
|
|
PHY_C22(6, 6)
|
|
PHY_C22(7, 7)
|
|
|
|
INTERNAL_PHY(8)
|
|
INTERNAL_PHY(9)
|
|
INTERNAL_PHY(10)
|
|
INTERNAL_PHY(11)
|
|
INTERNAL_PHY(12)
|
|
INTERNAL_PHY(13)
|
|
INTERNAL_PHY(14)
|
|
INTERNAL_PHY(15)
|
|
|
|
/* RTL8218FB */
|
|
PHY_C22(16, 16)
|
|
PHY_C22(17, 17)
|
|
PHY_C22(18, 18)
|
|
PHY_C22(19, 19)
|
|
PHY_C22(20, 20)
|
|
PHY_C22(21, 21)
|
|
PHY_C22(22, 22)
|
|
PHY_C22(23, 23)
|
|
};
|
|
|
|
&switch0 {
|
|
ethernet-ports {
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
|
|
SWITCH_PORT_SDS(0, 1, 0, qsgmii)
|
|
SWITCH_PORT_SDS(1, 2, 0, qsgmii)
|
|
SWITCH_PORT_SDS(2, 3, 0, qsgmii)
|
|
SWITCH_PORT_SDS(3, 4, 0, qsgmii)
|
|
SWITCH_PORT_SDS(4, 5, 1, qsgmii)
|
|
SWITCH_PORT_SDS(5, 6, 1, qsgmii)
|
|
SWITCH_PORT_SDS(6, 7, 1, qsgmii)
|
|
SWITCH_PORT_SDS(7, 8, 1, qsgmii)
|
|
|
|
SWITCH_PORT(8, 9, internal)
|
|
SWITCH_PORT(9, 10, internal)
|
|
SWITCH_PORT(10, 11, internal)
|
|
SWITCH_PORT(11, 12, internal)
|
|
SWITCH_PORT(12, 13, internal)
|
|
SWITCH_PORT(13, 14, internal)
|
|
SWITCH_PORT(14, 15, internal)
|
|
SWITCH_PORT(15, 16, internal)
|
|
|
|
SWITCH_PORT_SDS(16, 17, 2, qsgmii)
|
|
SWITCH_PORT_SDS(17, 18, 2, qsgmii)
|
|
SWITCH_PORT_SDS(18, 19, 2, qsgmii)
|
|
SWITCH_PORT_SDS(19, 20, 2, qsgmii)
|
|
SWITCH_PORT_SDS(20, 21, 3, qsgmii)
|
|
SWITCH_PORT_SDS(21, 22, 3, qsgmii)
|
|
SWITCH_PORT_SDS(22, 23, 3, qsgmii)
|
|
SWITCH_PORT_SDS(23, 24, 3, qsgmii)
|
|
|
|
port@28 {
|
|
ethernet = <ðernet0>;
|
|
reg = <28>;
|
|
phy-mode = "internal";
|
|
|
|
fixed-link {
|
|
speed = <1000>;
|
|
full-duplex;
|
|
};
|
|
};
|
|
};
|
|
};
|