Commit bba140a5 authored by Luiz Angelo Daros de Luca's avatar Luiz Angelo Daros de Luca Committed by David S. Miller
Browse files

net: dsa: realtek: use the same mii bus driver for both interfaces

The realtek-mdio will now use this driver instead of the generic DSA
driver ("dsa user smi"), which should not be used with OF[1].

With a single ds_ops for both interfaces, the ds_ops in realtek_priv is
no longer necessary. Now, the realtek_variant.ds_ops can be used
directly.

The realtek_priv.setup_interface() has been removed as we can directly
call the new common function.

[1] https://lkml.kernel.org/netdev/20220630200423.tieprdu5fpabflj7@bang-olufsen.dk/T/



Signed-off-by: default avatarLuiz Angelo Daros de Luca <luizluca@gmail.com>
Reviewed-by: default avatarVladimir Oltean <olteanv@gmail.com>
Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent b4bd7797
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -131,7 +131,6 @@ int realtek_mdio_probe(struct mdio_device *mdiodev)
	priv->bus = mdiodev->bus;
	priv->mdio_addr = mdiodev->addr;
	priv->write_reg_noack = realtek_mdio_write;
	priv->ds_ops = priv->variant->ds_ops_mdio;

	ret = rtl83xx_register_switch(priv);
	if (ret) {
+0 −2
Original line number Diff line number Diff line
@@ -352,8 +352,6 @@ int realtek_smi_probe(struct platform_device *pdev)
	}

	priv->write_reg_noack = realtek_smi_write_reg_noack;
	priv->setup_interface = rtl83xx_setup_user_mdio;
	priv->ds_ops = priv->variant->ds_ops_smi;

	ret = rtl83xx_register_switch(priv);
	if (ret) {
+1 −4
Original line number Diff line number Diff line
@@ -62,7 +62,6 @@ struct realtek_priv {

	spinlock_t		lock; /* Locks around command writes */
	struct dsa_switch	*ds;
	const struct dsa_switch_ops *ds_ops;
	struct irq_domain	*irqdomain;
	bool			leds_disabled;

@@ -73,7 +72,6 @@ struct realtek_priv {
	struct rtl8366_mib_counter *mib_counters;

	const struct realtek_ops *ops;
	int			(*setup_interface)(struct dsa_switch *ds);
	int			(*write_reg_noack)(void *ctx, u32 addr, u32 data);

	int			vlan_enabled;
@@ -115,8 +113,7 @@ struct realtek_ops {
};

struct realtek_variant {
	const struct dsa_switch_ops *ds_ops_smi;
	const struct dsa_switch_ops *ds_ops_mdio;
	const struct dsa_switch_ops *ds_ops;
	const struct realtek_ops *ops;
	unsigned int clk_delay;
	u8 cmd_read;
+6 −43
Original line number Diff line number Diff line
@@ -828,17 +828,6 @@ static int rtl8365mb_phy_write(struct realtek_priv *priv, int phy, int regnum,
	return 0;
}

static int rtl8365mb_dsa_phy_read(struct dsa_switch *ds, int phy, int regnum)
{
	return rtl8365mb_phy_read(ds->priv, phy, regnum);
}

static int rtl8365mb_dsa_phy_write(struct dsa_switch *ds, int phy, int regnum,
				   u16 val)
{
	return rtl8365mb_phy_write(ds->priv, phy, regnum, val);
}

static const struct rtl8365mb_extint *
rtl8365mb_get_port_extint(struct realtek_priv *priv, int port)
{
@@ -2017,13 +2006,11 @@ static int rtl8365mb_setup(struct dsa_switch *ds)
	if (ret)
		goto out_teardown_irq;

	if (priv->setup_interface) {
		ret = priv->setup_interface(ds);
	ret = rtl83xx_setup_user_mdio(ds);
	if (ret) {
		dev_err(priv->dev, "could not set up MDIO bus\n");
		goto out_teardown_irq;
	}
	}

	/* Start statistics counter polling */
	rtl8365mb_stats_setup(priv);
@@ -2116,28 +2103,7 @@ static int rtl8365mb_detect(struct realtek_priv *priv)
	return 0;
}

static const struct dsa_switch_ops rtl8365mb_switch_ops_smi = {
	.get_tag_protocol = rtl8365mb_get_tag_protocol,
	.change_tag_protocol = rtl8365mb_change_tag_protocol,
	.setup = rtl8365mb_setup,
	.teardown = rtl8365mb_teardown,
	.phylink_get_caps = rtl8365mb_phylink_get_caps,
	.phylink_mac_config = rtl8365mb_phylink_mac_config,
	.phylink_mac_link_down = rtl8365mb_phylink_mac_link_down,
	.phylink_mac_link_up = rtl8365mb_phylink_mac_link_up,
	.port_stp_state_set = rtl8365mb_port_stp_state_set,
	.get_strings = rtl8365mb_get_strings,
	.get_ethtool_stats = rtl8365mb_get_ethtool_stats,
	.get_sset_count = rtl8365mb_get_sset_count,
	.get_eth_phy_stats = rtl8365mb_get_phy_stats,
	.get_eth_mac_stats = rtl8365mb_get_mac_stats,
	.get_eth_ctrl_stats = rtl8365mb_get_ctrl_stats,
	.get_stats64 = rtl8365mb_get_stats64,
	.port_change_mtu = rtl8365mb_port_change_mtu,
	.port_max_mtu = rtl8365mb_port_max_mtu,
};

static const struct dsa_switch_ops rtl8365mb_switch_ops_mdio = {
static const struct dsa_switch_ops rtl8365mb_switch_ops = {
	.get_tag_protocol = rtl8365mb_get_tag_protocol,
	.change_tag_protocol = rtl8365mb_change_tag_protocol,
	.setup = rtl8365mb_setup,
@@ -2146,8 +2112,6 @@ static const struct dsa_switch_ops rtl8365mb_switch_ops_mdio = {
	.phylink_mac_config = rtl8365mb_phylink_mac_config,
	.phylink_mac_link_down = rtl8365mb_phylink_mac_link_down,
	.phylink_mac_link_up = rtl8365mb_phylink_mac_link_up,
	.phy_read = rtl8365mb_dsa_phy_read,
	.phy_write = rtl8365mb_dsa_phy_write,
	.port_stp_state_set = rtl8365mb_port_stp_state_set,
	.get_strings = rtl8365mb_get_strings,
	.get_ethtool_stats = rtl8365mb_get_ethtool_stats,
@@ -2167,8 +2131,7 @@ static const struct realtek_ops rtl8365mb_ops = {
};

const struct realtek_variant rtl8365mb_variant = {
	.ds_ops_smi = &rtl8365mb_switch_ops_smi,
	.ds_ops_mdio = &rtl8365mb_switch_ops_mdio,
	.ds_ops = &rtl8365mb_switch_ops,
	.ops = &rtl8365mb_ops,
	.clk_delay = 10,
	.cmd_read = 0xb9,
+6 −46
Original line number Diff line number Diff line
@@ -1033,13 +1033,11 @@ static int rtl8366rb_setup(struct dsa_switch *ds)
	if (ret)
		dev_info(priv->dev, "no interrupt support\n");

	if (priv->setup_interface) {
		ret = priv->setup_interface(ds);
	ret = rtl83xx_setup_user_mdio(ds);
	if (ret) {
		dev_err(priv->dev, "could not set up MDIO bus\n");
		return -ENODEV;
	}
	}

	return 0;
}
@@ -1785,17 +1783,6 @@ static int rtl8366rb_phy_write(struct realtek_priv *priv, int phy, int regnum,
	return ret;
}

static int rtl8366rb_dsa_phy_read(struct dsa_switch *ds, int phy, int regnum)
{
	return rtl8366rb_phy_read(ds->priv, phy, regnum);
}

static int rtl8366rb_dsa_phy_write(struct dsa_switch *ds, int phy, int regnum,
				   u16 val)
{
	return rtl8366rb_phy_write(ds->priv, phy, regnum, val);
}

static int rtl8366rb_reset_chip(struct realtek_priv *priv)
{
	int timeout = 10;
@@ -1861,35 +1848,9 @@ static int rtl8366rb_detect(struct realtek_priv *priv)
	return 0;
}

static const struct dsa_switch_ops rtl8366rb_switch_ops_smi = {
	.get_tag_protocol = rtl8366_get_tag_protocol,
	.setup = rtl8366rb_setup,
	.phylink_get_caps = rtl8366rb_phylink_get_caps,
	.phylink_mac_link_up = rtl8366rb_mac_link_up,
	.phylink_mac_link_down = rtl8366rb_mac_link_down,
	.get_strings = rtl8366_get_strings,
	.get_ethtool_stats = rtl8366_get_ethtool_stats,
	.get_sset_count = rtl8366_get_sset_count,
	.port_bridge_join = rtl8366rb_port_bridge_join,
	.port_bridge_leave = rtl8366rb_port_bridge_leave,
	.port_vlan_filtering = rtl8366rb_vlan_filtering,
	.port_vlan_add = rtl8366_vlan_add,
	.port_vlan_del = rtl8366_vlan_del,
	.port_enable = rtl8366rb_port_enable,
	.port_disable = rtl8366rb_port_disable,
	.port_pre_bridge_flags = rtl8366rb_port_pre_bridge_flags,
	.port_bridge_flags = rtl8366rb_port_bridge_flags,
	.port_stp_state_set = rtl8366rb_port_stp_state_set,
	.port_fast_age = rtl8366rb_port_fast_age,
	.port_change_mtu = rtl8366rb_change_mtu,
	.port_max_mtu = rtl8366rb_max_mtu,
};

static const struct dsa_switch_ops rtl8366rb_switch_ops_mdio = {
static const struct dsa_switch_ops rtl8366rb_switch_ops = {
	.get_tag_protocol = rtl8366_get_tag_protocol,
	.setup = rtl8366rb_setup,
	.phy_read = rtl8366rb_dsa_phy_read,
	.phy_write = rtl8366rb_dsa_phy_write,
	.phylink_get_caps = rtl8366rb_phylink_get_caps,
	.phylink_mac_link_up = rtl8366rb_mac_link_up,
	.phylink_mac_link_down = rtl8366rb_mac_link_down,
@@ -1928,8 +1889,7 @@ static const struct realtek_ops rtl8366rb_ops = {
};

const struct realtek_variant rtl8366rb_variant = {
	.ds_ops_smi = &rtl8366rb_switch_ops_smi,
	.ds_ops_mdio = &rtl8366rb_switch_ops_mdio,
	.ds_ops = &rtl8366rb_switch_ops,
	.ops = &rtl8366rb_ops,
	.clk_delay = 10,
	.cmd_read = 0xa9,
Loading