mbox series

[v3,net-next,0/7] net: dsa: add support for RTL8365MB-VC

Message ID 20211015171030.2713493-1-alvin@pqrs.dk (mailing list archive)
Headers show
Series net: dsa: add support for RTL8365MB-VC | expand

Message

Alvin Šipraga Oct. 15, 2021, 5:10 p.m. UTC
From: Alvin Šipraga <alsi@bang-olufsen.dk>

This series adds support for Realtek's RTL8365MB-VC, a 4+1 port
10/100/1000M Ethernet switch. The driver - rtl8365mb - was developed by
Michael Ramussen and myself.

This version of the driver is relatively slim, implementing only the
standalone port functionality and no offload capabilities. It is based
on a previous RFC series [1] from August, and the main difference is the
removal of some spurious VLAN operations. Otherwise I have simply
addressed most of the feedback. Please see the respective patches for
more detail.

In parallel I am working on offloading the bridge layer capabilities,
but I would like to get the basic stuff upstreamed as soon as possible.

v2 -> v2:
  - move IRQ setup earlier in probe per Florian's suggestion
  - fix compilation error on some archs due to FIELD_PREP use in v1
  - follow Jakub's suggestion and use the standard ethtool stats API;
    NOTE: new patch in the series for relevant DSA plumbing
  - following the stats change, it became apparent that the rtl8366
    helper library is no longer that helpful; scrap it and implement
    the ethtool ops specifically for this chip

v1 -> v2:
  - drop DSA port type checks during MAC configuration
  - use OF properties to configure RGMII TX/RX delay
  - don't set default fwd_offload_mark if packet is trapped to CPU
  - remove port mapping macros
  - update device tree bindings documentation with an example
  - cosmetic changes to the tagging driver using FIELD_* macros

[1] https://lore.kernel.org/netdev/20210822193145.1312668-1-alvin@pqrs.dk/

Alvin Šipraga (7):
  ether: add EtherType for proprietary Realtek protocols
  net: dsa: allow reporting of standard ethtool stats for slave devices
  net: dsa: move NET_DSA_TAG_RTL4_A to right place in Kconfig/Makefile
  dt-bindings: net: dsa: realtek-smi: document new compatible rtl8365mb
  net: dsa: tag_rtl8_4: add realtek 8 byte protocol 4 tag
  net: dsa: realtek-smi: add rtl8365mb subdriver for RTL8365MB-VC
  net: phy: realtek: add support for RTL8365MB-VC internal PHYs

 .../bindings/net/dsa/realtek-smi.txt          |   87 +
 drivers/net/dsa/Kconfig                       |    1 +
 drivers/net/dsa/Makefile                      |    2 +-
 drivers/net/dsa/realtek-smi-core.c            |    4 +
 drivers/net/dsa/realtek-smi-core.h            |    1 +
 drivers/net/dsa/rtl8365mb.c                   | 1981 +++++++++++++++++
 drivers/net/phy/realtek.c                     |    8 +
 include/net/dsa.h                             |    8 +
 include/uapi/linux/if_ether.h                 |    1 +
 net/dsa/Kconfig                               |   20 +-
 net/dsa/Makefile                              |    3 +-
 net/dsa/slave.c                               |   34 +
 net/dsa/tag_rtl8_4.c                          |  185 ++
 13 files changed, 2326 insertions(+), 9 deletions(-)
 create mode 100644 drivers/net/dsa/rtl8365mb.c
 create mode 100644 net/dsa/tag_rtl8_4.c

Comments

Arınç ÜNAL Oct. 16, 2021, 9:13 a.m. UTC | #1
Tested on net-next master branch kernel on Asus RT-AC88U router using 
OpenWrt.

DT specification:

	ethernet-switch {
		compatible = "realtek,rtl8365mb";
		mdc-gpios = <&chipcommon 6 GPIO_ACTIVE_HIGH>;
		mdio-gpios = <&chipcommon 7 GPIO_ACTIVE_HIGH>;
		reset-gpios = <&chipcommon 10 GPIO_ACTIVE_LOW>;
		realtek,disable-leds;
		dsa,member = <1 0>;

		ports {
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0>;

			port@0 {
				reg = <0>;
				label = "lan5";
				phy-handle = <&ethphy0>;
			};

			port@1 {
				reg = <1>;
				label = "lan6";
				phy-handle = <&ethphy1>;
			};

			port@2 {
				reg = <2>;
				label = "lan7";
				phy-handle = <&ethphy2>;
			};

			port@3 {
				reg = <3>;
				label = "lan8";
				phy-handle = <&ethphy3>;
			};

			port@6 {
				reg = <6>;
				label = "cpu";
				ethernet = <&sw0_p5>;
				phy-mode = "rgmii";
				tx-internal-delay-ps = <2000>;
				rx-internal-delay-ps = <2000>;

				fixed-link {
					speed = <1000>;
					full-duplex;
					pause;
				};
			};
		};

		mdio {
			compatible = "realtek,smi-mdio";
			#address-cells = <1>;
			#size-cells = <0>;

			ethphy0: phy@0 {
				reg = <0>;
			};

			ethphy1: phy@1 {
				reg = <1>;
			};

			ethphy2: phy@2 {
				reg = <2>;
			};

			ethphy3: phy@3 {
				reg = <3>;
			};
		};
	};

Tested-by: Arınç ÜNAL <arinc.unal@arinc9.com>