net: dsa: felix: add configurable device quirks
authorColin Foster <colin.foster@in-advantage.com>
Fri, 27 Jan 2023 19:35:52 +0000 (11:35 -0800)
committerJakub Kicinski <kuba@kernel.org>
Tue, 31 Jan 2023 05:07:20 +0000 (21:07 -0800)
The define FELIX_MAC_QUIRKS was used directly in the felix.c shared driver.
Other devices (VSC7512 for example) don't require the same quirks, so they
need to be configured on a per-device basis.

Signed-off-by: Colin Foster <colin.foster@in-advantage.com>
Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Tested-by: Vladimir Oltean <vladimir.oltean@nxp.com> # regression
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/dsa/ocelot/felix.c
drivers/net/dsa/ocelot/felix.h
drivers/net/dsa/ocelot/felix_vsc9959.c
drivers/net/dsa/ocelot/seville_vsc9953.c

index f57b409..462a1a6 100644 (file)
@@ -1075,9 +1075,12 @@ static void felix_phylink_mac_link_down(struct dsa_switch *ds, int port,
                                        phy_interface_t interface)
 {
        struct ocelot *ocelot = ds->priv;
+       struct felix *felix;
+
+       felix = ocelot_to_felix(ocelot);
 
        ocelot_phylink_mac_link_down(ocelot, port, link_an_mode, interface,
-                                    FELIX_MAC_QUIRKS);
+                                    felix->info->quirks);
 }
 
 static void felix_phylink_mac_link_up(struct dsa_switch *ds, int port,
@@ -1092,7 +1095,7 @@ static void felix_phylink_mac_link_up(struct dsa_switch *ds, int port,
 
        ocelot_phylink_mac_link_up(ocelot, port, phydev, link_an_mode,
                                   interface, speed, duplex, tx_pause, rx_pause,
-                                  FELIX_MAC_QUIRKS);
+                                  felix->info->quirks);
 
        if (felix->info->port_sched_speed_set)
                felix->info->port_sched_speed_set(ocelot, port, speed);
index be22d6c..9e1ae1d 100644 (file)
@@ -36,6 +36,7 @@ struct felix_info {
        u16                             vcap_pol_base2;
        u16                             vcap_pol_max2;
        const struct ptp_clock_info     *ptp_caps;
+       unsigned long                   quirks;
 
        /* Some Ocelot switches are integrated into the SoC without the
         * extraction IRQ line connected to the ARM GIC. By enabling this
index 43dc8ed..354aa3d 100644 (file)
@@ -2593,6 +2593,7 @@ static const struct felix_info felix_info_vsc9959 = {
        .num_mact_rows          = 2048,
        .num_ports              = VSC9959_NUM_PORTS,
        .num_tx_queues          = OCELOT_NUM_TC,
+       .quirks                 = FELIX_MAC_QUIRKS,
        .quirk_no_xtr_irq       = true,
        .ptp_caps               = &vsc9959_ptp_caps,
        .mdio_bus_alloc         = vsc9959_mdio_bus_alloc,
index 88ed3a2..287b64b 100644 (file)
@@ -971,6 +971,7 @@ static const struct felix_info seville_info_vsc9953 = {
        .vcap_pol_max           = VSC9953_VCAP_POLICER_MAX,
        .vcap_pol_base2         = VSC9953_VCAP_POLICER_BASE2,
        .vcap_pol_max2          = VSC9953_VCAP_POLICER_MAX2,
+       .quirks                 = FELIX_MAC_QUIRKS,
        .num_mact_rows          = 2048,
        .num_ports              = VSC9953_NUM_PORTS,
        .num_tx_queues          = OCELOT_NUM_TC,