Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

Merge branch 'dsa-LAN9303'



Juergen Borleis says:

====================
net: dsa: add SMSC/Microchip LAN9303 three port ethernet switch driver

The LAN9303 is a three port 10/100 ethernet switch with integrated phys
for the two external ethernet ports. The third port is an RMII/MII
interface to a host master network interface (e.g. fixed link).

While the LAN9303 device itself supports offload packet processing, this
driver does not make use of it yet. This driver just configures the device
to provide two separate network interfaces (which is the default state of
a DSA device).

Please note: the "MDIO managed mode" driver part isn't tested yet. I have
used and tested the "I2C managed mode" only.

Changes in v6:

- fix support to use the driver as a module (core, i2c and mdio)
- license info added in all parts of the driver (for module support)

Changes in v5:

- add missing include file to 'net/dsa/tag_lan9303.c'

Changes in v4:

- rebased on net-next, 'net/dsa/tag_lan9303.c' adapted to changed API

Changes in v3:

- 'ds_to_lan9303()' removed
- special PHY reg MII_LAN911X_SPECIAL_CONTROL_STATUS mapping removed
- compatible strings for I2C and MDIO are now different
- MDIO-managed-mode devicetree binding added (still compile time tested only)

Changes in v2:

- code moved to 'drivers/net/dsa'
- timeouts in completion wait loops
- macros instead of various magic numbers
- development code removed
- devicetree property names changed
- devicetree example adapted
- tried to avoid to mix 'switching' and 'forwarding'...

Comments are welcome.
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 8dc7d11f dc700583
Loading
Loading
Loading
Loading
+105 −0
Original line number Diff line number Diff line
SMSC/MicroChip LAN9303 three port ethernet switch
-------------------------------------------------

Required properties:

- compatible: should be
  - "smsc,lan9303-i2c" for I2C managed mode
    or
  - "smsc,lan9303-mdio" for mdio managed mode

Optional properties:

- reset-gpios: GPIO to be used to reset the whole device
- reset-duration: reset duration in milliseconds, defaults to 200 ms

Subnodes:

The integrated switch subnode should be specified according to the binding
described in dsa/dsa.txt. The CPU port of this switch is always port 0.

Note: always use 'reg = <0/1/2>;' for the three DSA ports, even if the device is
configured to use 1/2/3 instead. This hardware configuration will be
auto-detected and mapped accordingly.

Example:

I2C managed mode:

	master: masterdevice@X {
		status = "okay";

		fixed-link { /* RMII fixed link to LAN9303 */
			speed = <100>;
			full-duplex;
		};
	};

	switch: switch@a {
		compatible = "smsc,lan9303-i2c";
		reg = <0xa>;
		status = "okay";
		reset-gpios = <&gpio7 6 GPIO_ACTIVE_LOW>;
		reset-duration = <200>;

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

			port@0 { /* RMII fixed link to master */
				reg = <0>;
				label = "cpu";
				ethernet = <&master>;
			};

			port@1 { /* external port 1 */
				reg = <1>;
				label = "lan1;
			};

			port@2 { /* external port 2 */
				reg = <2>;
				label = "lan2";
			};
		};
	};

MDIO managed mode:

	master: masterdevice@X {
		status = "okay";
		phy-handle = <&switch>;

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

			switch: switch-phy@0 {
				compatible = "smsc,lan9303-mdio";
				reg = <0>;
				reset-gpios = <&gpio7 6 GPIO_ACTIVE_LOW>;
				reset-duration = <100>;

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

					port@0 {
						reg = <0>;
						label = "cpu";
						ethernet = <&master>;
					};

					port@1 { /* external port 1 */
						reg = <1>;
						label = "lan1;
					};

					port@2 { /* external port 2 */
						reg = <2>;
						label = "lan2";
					};
				};
			};
		};
	};
+24 −0
Original line number Diff line number Diff line
@@ -50,4 +50,28 @@ config NET_DSA_MT7530
	  This enables support for the Mediatek MT7530 Ethernet switch
	  chip.

config NET_DSA_SMSC_LAN9303
	tristate
	select NET_DSA_TAG_LAN9303
	---help---
	  This enables support for the SMSC/Microchip LAN9303 3 port ethernet
	  switch chips.

config NET_DSA_SMSC_LAN9303_I2C
	tristate "SMSC/Microchip LAN9303 3-ports 10/100 ethernet switch in I2C managed mode"
	depends on NET_DSA
	select NET_DSA_SMSC_LAN9303
	select REGMAP_I2C
	---help---
	  Enable access functions if the SMSC/Microchip LAN9303 is configured
	  for I2C managed mode.

config NET_DSA_SMSC_LAN9303_MDIO
	tristate "SMSC/Microchip LAN9303 3-ports 10/100 ethernet switch in MDIO managed mode"
	depends on NET_DSA
	select NET_DSA_SMSC_LAN9303
	---help---
	  Enable access functions if the SMSC/Microchip LAN9303 is configured
	  for MDIO managed mode.

endmenu
+3 −0
Original line number Diff line number Diff line
@@ -3,6 +3,9 @@ obj-$(CONFIG_NET_DSA_BCM_SF2) += bcm-sf2.o
bcm-sf2-objs			:= bcm_sf2.o bcm_sf2_cfp.o
obj-$(CONFIG_NET_DSA_QCA8K)	+= qca8k.o
obj-$(CONFIG_NET_DSA_MT7530)	+= mt7530.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
obj-y				+= b53/
obj-y				+= mv88e6xxx/
obj-$(CONFIG_NET_DSA_LOOP)	+= dsa_loop.o dsa_loop_bdinfo.o
+879 −0

File added.

Preview size limit exceeded, changes collapsed.

+19 −0
Original line number Diff line number Diff line
#include <linux/regmap.h>
#include <linux/device.h>
#include <net/dsa.h>

struct lan9303 {
	struct device *dev;
	struct regmap *regmap;
	struct regmap_irq_chip_data *irq_data;
	struct gpio_desc *reset_gpio;
	u32 reset_duration; /* in [ms] */
	bool phy_addr_sel_strap;
	struct dsa_switch *ds;
	struct mutex indirect_mutex; /* protect indexed register access */
};

extern const struct regmap_access_table lan9303_register_set;

int lan9303_probe(struct lan9303 *chip, struct device_node *np);
int lan9303_remove(struct lan9303 *chip);
Loading