]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: dsa: microchip: fix KSZ87xx family structure wrt the datasheet
authorPieter Van Trappen <pieter.van.trappen@cern.ch>
Tue, 13 Aug 2024 14:27:39 +0000 (16:27 +0200)
committerJakub Kicinski <kuba@kernel.org>
Fri, 16 Aug 2024 17:25:02 +0000 (10:25 -0700)
The KSZ87xx switches have 32 static MAC address table entries and not
8. This fixes -ENOSPC non-critical errors from ksz8_add_sta_mac when
configured as a bridge.

Add a new ksz87xx_dev_ops structure to be able to use the
ksz_r_mib_stat64 pointer for this family; this corrects a wrong
mib->counters cast to ksz88xx_stats_raw. This fixes iproute2
statistics. Rename ksz8_dev_ops structure to ksz88x3_dev_ops, in line
with ksz_is_* naming conventions from ksz_common.h.

Signed-off-by: Pieter Van Trappen <pieter.van.trappen@cern.ch>
Acked-by: Arun Ramadoss <arun.ramadoss@microchip.com>
Link: https://patch.msgid.link/20240813142750.772781-6-vtpieter@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/dsa/microchip/ksz_common.c

index 3f3230d181d87ec542d4847b5db1e72d3b5624e3..cd3991792b69f7d6b958b27c9fda523e142c8fe6 100644 (file)
@@ -277,7 +277,7 @@ static const struct phylink_mac_ops ksz8_phylink_mac_ops = {
        .mac_link_up    = ksz8_phylink_mac_link_up,
 };
 
-static const struct ksz_dev_ops ksz8_dev_ops = {
+static const struct ksz_dev_ops ksz88x3_dev_ops = {
        .setup = ksz8_setup,
        .get_port_addr = ksz8_get_port_addr,
        .cfg_port_member = ksz8_cfg_port_member,
@@ -312,6 +312,41 @@ static const struct ksz_dev_ops ksz8_dev_ops = {
        .pme_pwrite8 = ksz8_pme_pwrite8,
 };
 
+static const struct ksz_dev_ops ksz87xx_dev_ops = {
+       .setup = ksz8_setup,
+       .get_port_addr = ksz8_get_port_addr,
+       .cfg_port_member = ksz8_cfg_port_member,
+       .flush_dyn_mac_table = ksz8_flush_dyn_mac_table,
+       .port_setup = ksz8_port_setup,
+       .r_phy = ksz8_r_phy,
+       .w_phy = ksz8_w_phy,
+       .r_mib_cnt = ksz8_r_mib_cnt,
+       .r_mib_pkt = ksz8_r_mib_pkt,
+       .r_mib_stat64 = ksz_r_mib_stats64,
+       .freeze_mib = ksz8_freeze_mib,
+       .port_init_cnt = ksz8_port_init_cnt,
+       .fdb_dump = ksz8_fdb_dump,
+       .fdb_add = ksz8_fdb_add,
+       .fdb_del = ksz8_fdb_del,
+       .mdb_add = ksz8_mdb_add,
+       .mdb_del = ksz8_mdb_del,
+       .vlan_filtering = ksz8_port_vlan_filtering,
+       .vlan_add = ksz8_port_vlan_add,
+       .vlan_del = ksz8_port_vlan_del,
+       .mirror_add = ksz8_port_mirror_add,
+       .mirror_del = ksz8_port_mirror_del,
+       .get_caps = ksz8_get_caps,
+       .config_cpu_port = ksz8_config_cpu_port,
+       .enable_stp_addr = ksz8_enable_stp_addr,
+       .reset = ksz8_reset_switch,
+       .init = ksz8_switch_init,
+       .exit = ksz8_switch_exit,
+       .change_mtu = ksz8_change_mtu,
+       .pme_write8 = ksz8_pme_write8,
+       .pme_pread8 = ksz8_pme_pread8,
+       .pme_pwrite8 = ksz8_pme_pwrite8,
+};
+
 static void ksz9477_phylink_mac_link_up(struct phylink_config *config,
                                        struct phy_device *phydev,
                                        unsigned int mode,
@@ -1262,12 +1297,12 @@ const struct ksz_chip_data ksz_switch_chips[] = {
                .dev_name = "KSZ8795",
                .num_vlans = 4096,
                .num_alus = 0,
-               .num_statics = 8,
+               .num_statics = 32,
                .cpu_ports = 0x10,      /* can be configured as cpu port */
                .port_cnt = 5,          /* total cpu and user ports */
                .num_tx_queues = 4,
                .num_ipms = 4,
-               .ops = &ksz8_dev_ops,
+               .ops = &ksz87xx_dev_ops,
                .phylink_mac_ops = &ksz8_phylink_mac_ops,
                .ksz87xx_eee_link_erratum = true,
                .mib_names = ksz9477_mib_names,
@@ -1303,12 +1338,12 @@ const struct ksz_chip_data ksz_switch_chips[] = {
                .dev_name = "KSZ8794",
                .num_vlans = 4096,
                .num_alus = 0,
-               .num_statics = 8,
+               .num_statics = 32,
                .cpu_ports = 0x10,      /* can be configured as cpu port */
                .port_cnt = 5,          /* total cpu and user ports */
                .num_tx_queues = 4,
                .num_ipms = 4,
-               .ops = &ksz8_dev_ops,
+               .ops = &ksz87xx_dev_ops,
                .phylink_mac_ops = &ksz8_phylink_mac_ops,
                .ksz87xx_eee_link_erratum = true,
                .mib_names = ksz9477_mib_names,
@@ -1330,12 +1365,12 @@ const struct ksz_chip_data ksz_switch_chips[] = {
                .dev_name = "KSZ8765",
                .num_vlans = 4096,
                .num_alus = 0,
-               .num_statics = 8,
+               .num_statics = 32,
                .cpu_ports = 0x10,      /* can be configured as cpu port */
                .port_cnt = 5,          /* total cpu and user ports */
                .num_tx_queues = 4,
                .num_ipms = 4,
-               .ops = &ksz8_dev_ops,
+               .ops = &ksz87xx_dev_ops,
                .phylink_mac_ops = &ksz8_phylink_mac_ops,
                .ksz87xx_eee_link_erratum = true,
                .mib_names = ksz9477_mib_names,
@@ -1362,7 +1397,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
                .port_cnt = 3,
                .num_tx_queues = 4,
                .num_ipms = 4,
-               .ops = &ksz8_dev_ops,
+               .ops = &ksz88x3_dev_ops,
                .phylink_mac_ops = &ksz8830_phylink_mac_ops,
                .mib_names = ksz88xx_mib_names,
                .mib_cnt = ARRAY_SIZE(ksz88xx_mib_names),