Commit c87350ce authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'rtl8365mb-vc-support'

Alvin Šipraga says:

====================
net: dsa: add support for RTL8365MB-VC

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.

v3 -> v4:
  - get irq before setting virq parents (fixes kernel test robot
    warning)
  - remove pad-to-72-bytes logic in tagger xmit (fixes DENG Qingfang's
    suggestion); no longer needed as we set CPU minimum RX size to 64
    bytes
  - use mutex to protect MIB counter access instead of a spinlock (fixes
    Jakub's feedback on v3 statistics refactoring)

v2 -> v3:
  - 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/


====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 4abd7cff 2ca2969a
Loading
Loading
Loading
Loading
+87 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ SMI-based Realtek devices.
Required properties:

- compatible: must be exactly one of:
      "realtek,rtl8365mb" (4+1 ports)
      "realtek,rtl8366"
      "realtek,rtl8366rb" (4+1 ports)
      "realtek,rtl8366s"  (4+1 ports)
@@ -62,6 +63,8 @@ and subnodes of DSA switches.

Examples:

An example for the RTL8366RB:

switch {
	compatible = "realtek,rtl8366rb";
	/* 22 = MDIO (has input reads), 21 = MDC (clock, output only) */
@@ -151,3 +154,87 @@ switch {
		};
	};
};

An example for the RTL8365MB-VC:

switch {
	compatible = "realtek,rtl8365mb";
	mdc-gpios = <&gpio1 16 GPIO_ACTIVE_HIGH>;
	mdio-gpios = <&gpio1 17 GPIO_ACTIVE_HIGH>;
	reset-gpios = <&gpio5 0 GPIO_ACTIVE_LOW>;

	switch_intc: interrupt-controller {
		interrupt-parent = <&gpio5>;
		interrupts = <1 IRQ_TYPE_LEVEL_LOW>;
		interrupt-controller;
		#address-cells = <0>;
		#interrupt-cells = <1>;
	};

	ports {
		#address-cells = <1>;
		#size-cells = <0>;
		reg = <0>;
		port@0 {
			reg = <0>;
			label = "swp0";
			phy-handle = <&ethphy0>;
		};
		port@1 {
			reg = <1>;
			label = "swp1";
			phy-handle = <&ethphy1>;
		};
		port@2 {
			reg = <2>;
			label = "swp2";
			phy-handle = <&ethphy2>;
		};
		port@3 {
			reg = <3>;
			label = "swp3";
			phy-handle = <&ethphy3>;
		};
		port@6 {
			reg = <6>;
			label = "cpu";
			ethernet = <&fec1>;
			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>;
			interrupt-parent = <&switch_intc>;
			interrupts = <0>;
		};
		ethphy1: phy@1 {
			reg = <1>;
			interrupt-parent = <&switch_intc>;
			interrupts = <1>;
		};
		ethphy2: phy@2 {
			reg = <2>;
			interrupt-parent = <&switch_intc>;
			interrupts = <2>;
		};
		ethphy3: phy@3 {
			reg = <3>;
			interrupt-parent = <&switch_intc>;
			interrupts = <3>;
		};
	};
};
+1 −0
Original line number Diff line number Diff line
@@ -70,6 +70,7 @@ config NET_DSA_QCA8K
config NET_DSA_REALTEK_SMI
	tristate "Realtek SMI Ethernet switch family support"
	select NET_DSA_TAG_RTL4_A
	select NET_DSA_TAG_RTL8_4
	select FIXED_PHY
	select IRQ_DOMAIN
	select REALTEK_PHY
+1 −1
Original line number Diff line number Diff line
@@ -10,7 +10,7 @@ obj-$(CONFIG_NET_DSA_MT7530) += mt7530.o
obj-$(CONFIG_NET_DSA_MV88E6060) += mv88e6060.o
obj-$(CONFIG_NET_DSA_QCA8K)	+= qca8k.o
obj-$(CONFIG_NET_DSA_REALTEK_SMI) += realtek-smi.o
realtek-smi-objs		:= realtek-smi-core.o rtl8366.o rtl8366rb.o
realtek-smi-objs		:= realtek-smi-core.o rtl8366.o rtl8366rb.o rtl8365mb.o
obj-$(CONFIG_NET_DSA_SMSC_LAN9303) += lan9303-core.o
obj-$(CONFIG_NET_DSA_SMSC_LAN9303_I2C) += lan9303_i2c.o
obj-$(CONFIG_NET_DSA_SMSC_LAN9303_MDIO) += lan9303_mdio.o
+4 −0
Original line number Diff line number Diff line
@@ -501,6 +501,10 @@ static const struct of_device_id realtek_smi_of_match[] = {
		.compatible = "realtek,rtl8366s",
		.data = NULL,
	},
	{
		.compatible = "realtek,rtl8365mb",
		.data = &rtl8365mb_variant,
	},
	{ /* sentinel */ },
};
MODULE_DEVICE_TABLE(of, realtek_smi_of_match);
+1 −0
Original line number Diff line number Diff line
@@ -140,5 +140,6 @@ int rtl8366_get_sset_count(struct dsa_switch *ds, int port, int sset);
void rtl8366_get_ethtool_stats(struct dsa_switch *ds, int port, uint64_t *data);

extern const struct realtek_smi_variant rtl8366rb_variant;
extern const struct realtek_smi_variant rtl8365mb_variant;

#endif /*  _REALTEK_SMI_H */
Loading