mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
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: Luiz Angelo Daros de Luca <luizluca@gmail.com> Reviewed-by: Vladimir Oltean <olteanv@gmail.com> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b4bd77971f
commit
bba140a566
6 changed files with 14 additions and 97 deletions
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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,12 +2006,10 @@ static int rtl8365mb_setup(struct dsa_switch *ds)
|
|||
if (ret)
|
||||
goto out_teardown_irq;
|
||||
|
||||
if (priv->setup_interface) {
|
||||
ret = priv->setup_interface(ds);
|
||||
if (ret) {
|
||||
dev_err(priv->dev, "could not set up MDIO bus\n");
|
||||
goto out_teardown_irq;
|
||||
}
|
||||
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 */
|
||||
|
@ -2116,7 +2103,7 @@ static int rtl8365mb_detect(struct realtek_priv *priv)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static const struct dsa_switch_ops rtl8365mb_switch_ops_smi = {
|
||||
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,
|
||||
|
@ -2137,29 +2124,6 @@ static const struct dsa_switch_ops rtl8365mb_switch_ops_smi = {
|
|||
.port_max_mtu = rtl8365mb_port_max_mtu,
|
||||
};
|
||||
|
||||
static const struct dsa_switch_ops rtl8365mb_switch_ops_mdio = {
|
||||
.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,
|
||||
.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,
|
||||
.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 realtek_ops rtl8365mb_ops = {
|
||||
.detect = rtl8365mb_detect,
|
||||
.phy_read = rtl8365mb_phy_read,
|
||||
|
@ -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,
|
||||
|
|
|
@ -1033,12 +1033,10 @@ 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);
|
||||
if (ret) {
|
||||
dev_err(priv->dev, "could not set up MDIO bus\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
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 @@ out:
|
|||
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,7 +1848,7 @@ static int rtl8366rb_detect(struct realtek_priv *priv)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static const struct dsa_switch_ops rtl8366rb_switch_ops_smi = {
|
||||
static const struct dsa_switch_ops rtl8366rb_switch_ops = {
|
||||
.get_tag_protocol = rtl8366_get_tag_protocol,
|
||||
.setup = rtl8366rb_setup,
|
||||
.phylink_get_caps = rtl8366rb_phylink_get_caps,
|
||||
|
@ -1885,32 +1872,6 @@ static const struct dsa_switch_ops rtl8366rb_switch_ops_smi = {
|
|||
.port_max_mtu = rtl8366rb_max_mtu,
|
||||
};
|
||||
|
||||
static const struct dsa_switch_ops rtl8366rb_switch_ops_mdio = {
|
||||
.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,
|
||||
.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 realtek_ops rtl8366rb_ops = {
|
||||
.detect = rtl8366rb_detect,
|
||||
.get_vlan_mc = rtl8366rb_get_vlan_mc,
|
||||
|
@ -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,
|
||||
|
|
|
@ -232,7 +232,7 @@ int rtl83xx_register_switch(struct realtek_priv *priv)
|
|||
|
||||
ds->priv = priv;
|
||||
ds->dev = priv->dev;
|
||||
ds->ops = priv->ds_ops;
|
||||
ds->ops = priv->variant->ds_ops;
|
||||
ds->num_ports = priv->num_ports;
|
||||
priv->ds = ds;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue