]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: dsa: realtek: use the same mii bus driver for both interfaces
authorLuiz Angelo Daros de Luca <luizluca@gmail.com>
Fri, 9 Feb 2024 05:03:46 +0000 (02:03 -0300)
committerDavid S. Miller <davem@davemloft.net>
Mon, 12 Feb 2024 10:42:17 +0000 (10:42 +0000)
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>
drivers/net/dsa/realtek/realtek-mdio.c
drivers/net/dsa/realtek/realtek-smi.c
drivers/net/dsa/realtek/realtek.h
drivers/net/dsa/realtek/rtl8365mb.c
drivers/net/dsa/realtek/rtl8366rb.c
drivers/net/dsa/realtek/rtl83xx.c

index 04c65452da0d127bfb2e800b192b1afa3602ccbb..04b758e5a680ac1f8bd3416e1d765aae6cfd3893 100644 (file)
@@ -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) {
index bf02276b74d00259bd17aa7ae7914c58e35d5723..88590ae95a75c5bdfb7530f7fc233bcb27686cde 100644 (file)
@@ -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) {
index e9e28b18950991aa5fc3a693ab3918581ca02e1d..864bb9a88f14622be32db481c7ece33ff754db42 100644 (file)
@@ -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;
index 60f826a5a00a19402d95b79fe200249a2344e27a..778a962727abb2c542098cd2e0fba529a9618780 100644 (file)
@@ -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,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,
index a0c365325b4a7b7bd4a730927106ad9b3e67cc6c..54eff9cd0c031397c97db6ed192ec345c2ee14d7 100644 (file)
@@ -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,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,
index ceb8418dfab72e98ae797fe190fa60275e6c5d09..80f2c38ae55a1cc0076b88708ecb105c63737209 100644 (file)
@@ -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;